alphana-sdk 0.5.10 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,7 +2,9 @@
2
2
 
3
3
  [![npm](https://img.shields.io/npm/v/alphana-sdk.svg)](https://www.npmjs.com/package/alphana-sdk)
4
4
 
5
- Client-side analytics SDK for React, Next.js, Vite, and vanilla JS/TS. Tracks SPA navigation, time-on-page, heatmaps (with optional path allowlists), console and runtime errors, session heartbeats, **feature flags** (with user targeting), and behavioral signals such as **rage clicks** and quick **U-turns** — without third-party scripts.
5
+ Client-side analytics SDK for React, Next.js, Vite, and vanilla JS/TS. Tracks SPA navigation, time-on-page, heatmaps (with optional path allowlists), console and runtime errors, session heartbeats, **feature flags** (with user targeting), behavioral signals such as **rage clicks** and quick **U-turns**, and a one-time **`client_context`** snapshot per session (device category, OS, browser, language, viewport, time zone, SDK version) for catalog parity with the dashboard — without third-party scripts.
6
+
7
+ **Note:** `client_context` does not record DOM for full visual replay; that still requires a dedicated capture pipeline (e.g. rrweb) if you add it later.
6
8
 
7
9
  - **Package:** [alphana-sdk on npm](https://www.npmjs.com/package/alphana-sdk)
8
10
  - **Exports:** `alphana-sdk` (core) and `alphana-sdk/react` (provider + hooks)
@@ -78,7 +80,11 @@ export function Providers({ children }: { children: ReactNode }) {
78
80
  import { Providers } from "./providers";
79
81
  import { NavigationTracker } from "./navigation-tracker";
80
82
 
81
- export default function RootLayout({ children }: { children: React.ReactNode }) {
83
+ export default function RootLayout({
84
+ children,
85
+ }: {
86
+ children: React.ReactNode;
87
+ }) {
82
88
  return (
83
89
  <html lang="en">
84
90
  <body>
@@ -129,22 +135,22 @@ tracker.destroy(); // teardown, timers, best-effort final send
129
135
 
130
136
  ## Configuration reference
131
137
 
132
- | Option | Type | Default | Description |
133
- | ------------------ | ------------------------------- | ----------------------------------- | ----------- |
134
- | `appId` | `string` | — | **Required for Alphana Cloud.** App ID from the dashboard; included in batch payloads. |
135
- | `secretKey` | `string` | — | **Required for Alphana Cloud** (and for feature flags). Sent as `Authorization: Bearer …` on API calls. |
136
- | `endpoint` | `string` | `https://api.alphana.ir/api/events` | Events base URL for Alphana Cloud. Batching uses `{endpoint}/batch`, heartbeats `{endpoint}/heartbeat`, logs derived under the same API prefix. |
137
- | `sessionId` | `string` | auto UUID | Optional fixed session id. |
138
- | `trackNavigation` | `boolean` | `true` | Intercept `pushState` / `replaceState` / `popstate` for SPA routes; also emits U-turn detection. |
139
- | `trackTime` | `boolean` | `true` | Cumulative time per path. |
140
- | `trackHeatmap` | `boolean` | `true` | Mouse move, click, scroll sampling; rage-click bursts. |
141
- | `heatmapPages` | `string[]` | — | If set, heatmap events are only collected on these paths (e.g. from dashboard “Heatmap Pages”). If omitted, all pages are eligible (backend may enforce limits). |
142
- | `trackLogs` | `boolean` | `true` | Patches `console.info/warn/error`, `window.onerror`, `unhandledrejection`; sends to `/logs/ingest`. |
143
- | `mouseSampleRate` | `number` (0–1) | `0.3` | Fraction of move/scroll events kept. |
144
- | `maxHeatmapPoints` | `number` | `2000` | Max in-memory heatmap points per path in the session snapshot. |
145
- | `batchSize` | `number` | `20` | Queue size before an automatic flush. |
146
- | `flushInterval` | `number` (ms) | `5000` | Timer-based flush when the queue is non-empty. |
147
- | `onEvent` | `(event: TrackerEvent) => void` | — | Synchronous callback for every emitted event. |
138
+ | Option | Type | Default | Description |
139
+ | ------------------ | ------------------------------- | ----------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
140
+ | `appId` | `string` | — | **Required for Alphana Cloud.** App ID from the dashboard; included in batch payloads. |
141
+ | `secretKey` | `string` | — | **Required for Alphana Cloud** (and for feature flags). Sent as `Authorization: Bearer …` on API calls. |
142
+ | `endpoint` | `string` | `https://api.alphana.ir/api/events` | Events base URL for Alphana Cloud. Batching uses `{endpoint}/batch`, heartbeats `{endpoint}/heartbeat`, logs derived under the same API prefix. |
143
+ | `sessionId` | `string` | auto UUID | Optional fixed session id. |
144
+ | `trackNavigation` | `boolean` | `true` | Intercept `pushState` / `replaceState` / `popstate` for SPA routes; also emits U-turn detection. |
145
+ | `trackTime` | `boolean` | `true` | Cumulative time per path. |
146
+ | `trackHeatmap` | `boolean` | `true` | Mouse move, click, scroll sampling; rage-click bursts. |
147
+ | `heatmapPages` | `string[]` | — | Optional client allowlist: heatmap capture is limited to these paths (values are normalized like dashboard rows). If omitted, the SDK may still record moves; the **backend only persists** heatmap points when the app has ≥1 registered heatmap page and the path matches. |
148
+ | `trackLogs` | `boolean` | `true` | Patches `console.info/warn/error`, `window.onerror`, `unhandledrejection`; sends to `/logs/ingest`. |
149
+ | `mouseSampleRate` | `number` (0–1) | `0.3` | Fraction of move/scroll events kept. |
150
+ | `maxHeatmapPoints` | `number` | `2000` | Max in-memory heatmap points per path in the session snapshot. |
151
+ | `batchSize` | `number` | `20` | Queue size before an automatic flush. |
152
+ | `flushInterval` | `number` (ms) | `5000` | Timer-based flush when the queue is non-empty. |
153
+ | `onEvent` | `(event: TrackerEvent) => void` | — | Synchronous callback for every emitted event. |
148
154
 
149
155
  TypeScript marks `appId` / `secretKey` as optional on `TrackerConfig`, but you should always pass them when using the hosted Alphana API.
150
156
 
@@ -180,6 +186,13 @@ tracker.getFlags();
180
186
  tracker.isFeatureEnabled("my-flag");
181
187
  tracker.onFlagsChange((flags) => { /* ... */ }); // unsubscribe fn
182
188
  void tracker.fetchFlags();
189
+
190
+ // A/B tests (requires `secretKey` + valid `endpoint`)
191
+ tracker.getAbVariants();
192
+ tracker.getAbVariant("checkout-cta-test");
193
+ tracker.isAbVariant("checkout-cta-test", "variant-b");
194
+ tracker.onAbTestsChange((variants) => { /* ... */ });
195
+ void tracker.fetchAbTests(["checkout-cta-test"]); // optional keys filter
183
196
  ```
184
197
 
185
198
  **Heartbeat:** Every 30s while the tab is visible, a POST is sent to `{endpoint}/heartbeat` with session and visitor ids.
@@ -240,22 +253,21 @@ All hooks are exported from **`alphana-sdk/react`**.
240
253
 
241
254
  `useTracker()` returns `UserTracker | null` (null outside a provider).
242
255
 
243
- | Hook | Returns | Description |
244
- | ---- | ------- | ----------- |
245
- | `useTracker()` | `UserTracker \| null` | Tracker from context. |
246
- | `usePageView(path?)` | `void` | When `path` is defined, calls `trackPageView(path)` on change. No-op if `path` is omitted. |
247
- | `useHeatmapData(path?, refreshMs?)` | `HeatmapPoint[]` | Live points for a path; optional debounced refresh (default 500 ms). |
248
- | `usePageViews()` | `PageView[]` | Page views in the current session. |
249
- | `useTimeSpent()` | `Record<string, number>` | Cumulative **milliseconds** per path. |
250
- | `useFeatureFlags()` | `Record<string, boolean>` | Evaluated flags; updates after `identify()`. |
251
- | `useFeatureFlagEnabled(key)` | `boolean` | Whether `key` is enabled. |
256
+ | Hook | Returns | Description |
257
+ | ----------------------------------- | ------------------------- | ------------------------------------------------------------------------------------------ |
258
+ | `useTracker()` | `UserTracker \| null` | Tracker from context. |
259
+ | `usePageView(path?)` | `void` | When `path` is defined, calls `trackPageView(path)` on change. No-op if `path` is omitted. |
260
+ | `useHeatmapData(path?, refreshMs?)` | `HeatmapPoint[]` | Live points for a path; optional debounced refresh (default 500 ms). |
261
+ | `usePageViews()` | `PageView[]` | Page views in the current session. |
262
+ | `useTimeSpent()` | `Record<string, number>` | Cumulative **milliseconds** per path. |
263
+ | `useFeatureFlags()` | `Record<string, boolean>` | Evaluated flags; updates after `identify()`. |
264
+ | `useFeatureFlagEnabled(key)` | `boolean` | Whether `key` is enabled. |
265
+ | `useAbTests()` | `Record<string, string \| null>` | Assigned variant per experiment key. |
266
+ | `useAbVariant(experimentKey)` | `string \| null` | Variant key for one experiment. |
267
+ | `useIsAbVariant(experiment, variant)` | `boolean` | Whether visitor is in that variant. |
252
268
 
253
269
  ```tsx
254
- import {
255
- useTracker,
256
- useTimeSpent,
257
- useHeatmapData,
258
- } from "alphana-sdk/react";
270
+ import { useTracker, useTimeSpent, useHeatmapData } from "alphana-sdk/react";
259
271
 
260
272
  export function DebugPanel() {
261
273
  const tracker = useTracker();
@@ -268,7 +280,9 @@ export function DebugPanel() {
268
280
  <div>
269
281
  <p>Paths tracked: {Object.keys(timeByPath).length}</p>
270
282
  <p>Heatmap points (this page): {points.length}</p>
271
- <button type="button" onClick={() => tracker.flush()}>Flush now</button>
283
+ <button type="button" onClick={() => tracker.flush()}>
284
+ Flush now
285
+ </button>
272
286
  </div>
273
287
  );
274
288
  }
@@ -1 +1,23 @@
1
- "use strict";var AlphanaSDK=(()=>{var m=Object.defineProperty;var T=Object.getOwnPropertyDescriptor;var I=Object.getOwnPropertyNames;var R=Object.prototype.hasOwnProperty;var x=(r,t)=>{for(var e in t)m(r,e,{get:t[e],enumerable:!0})},L=(r,t,e,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of I(t))!R.call(r,n)&&n!==e&&m(r,n,{get:()=>t[n],enumerable:!(i=T(t,n))||i.enumerable});return r};var C=r=>L(m({},"__esModule",{value:!0}),r);var D={};x(D,{DEFAULT_ENDPOINT:()=>y,LogCapture:()=>d,UserTracker:()=>v});var w="__ut_vid__";function h(){return typeof crypto!="undefined"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,r=>{let t=Math.random()*16|0;return(r==="x"?t:t&3|8).toString(16)})}function E(){if(typeof localStorage=="undefined")return h();try{let r=localStorage.getItem(w);if(r)return r;let t=h();return localStorage.setItem(w,t),t}catch(r){return h()}}var k="__ut_last_pv_path__",P="__ut_last_pv_entry_ms__";function b(r){if(typeof sessionStorage=="undefined")return null;try{return sessionStorage.getItem(r)}catch(t){return null}}function S(r,t){if(typeof sessionStorage!="undefined")try{sessionStorage.setItem(r,t)}catch(e){}}function H(r,t){S(k,r),S(P,String(t))}function _(){if(typeof performance=="undefined")return;let t=performance.getEntriesByType("navigation")[0];if(t!=null&&t.type)return t.type;let e=performance.navigation;if((e==null?void 0:e.type)===2)return"back_forward"}var c=class c{constructor({emit:t,sessionId:e}){this.previousPath="";this.originalPushState=null;this.originalReplaceState=null;this.pageEntryTime=0;this.handlePopState=()=>{this.handleNavigation()};this.emit=t,this.sessionId=e}init(){let t=window.location.pathname+window.location.search;_()==="back_forward"&&this.tryEmitMpaHistoryTraversalUturn(t),this.recordPageView(t),window.addEventListener("popstate",this.handlePopState),this.originalPushState=history.pushState.bind(history);let e=this.originalPushState;history.pushState=(n,s,a)=>{e(n,s,a),this.handleNavigation()},this.originalReplaceState=history.replaceState.bind(history);let i=this.originalReplaceState;history.replaceState=(n,s,a)=>{i(n,s,a),this.handleNavigation()}}destroy(){window.removeEventListener("popstate",this.handlePopState),this.originalPushState&&(history.pushState=this.originalPushState),this.originalReplaceState&&(history.replaceState=this.originalReplaceState)}tryEmitMpaHistoryTraversalUturn(t){let e=b(k),i=b(P),n=i?Number(i):0;if(!e||!Number.isFinite(n)||n<=0||e===t)return;let s=Date.now()-n;s<0||s>c.UTURN_THRESHOLD_MS||this.emitUturn(e,t,s)}handleNavigation(){let t=window.location.pathname+window.location.search;if(t!==this.previousPath){if(this.previousPath&&this.pageEntryTime>0){let e=Date.now()-this.pageEntryTime;e<=c.UTURN_THRESHOLD_MS&&this.emitUturn(this.previousPath,t,e)}this.recordPageView(t)}}emitUturn(t,e,i){this.emit({type:"uturn",data:{fromPath:t,toPath:e,timeOnPageMs:i,timestamp:Date.now(),sessionId:this.sessionId}})}recordPageView(t){this.previousPath=t,this.pageEntryTime=Date.now(),H(t,this.pageEntryTime),this.emit({type:"pageview",data:{path:t,title:document.title,timestamp:Date.now(),sessionId:this.sessionId,referrer:document.referrer||void 0}}),window.dispatchEvent(new CustomEvent("tracker:navigate",{detail:{path:t,title:document.title}}))}};c.UTURN_THRESHOLD_MS=5e3;var p=c;var u=class{constructor({emit:t,sessionId:e}){this.currentPath="";this.startTime=0;this.tracking=!1;this.handleNavigate=t=>{this.stopTracking(),this.currentPath=t.detail.path,this.startTracking()};this.handleVisibilityChange=()=>{document.hidden?this.stopTracking():this.startTracking()};this.handleUnload=()=>{this.stopTracking()};this.emit=t,this.sessionId=e}init(){this.currentPath=window.location.pathname+window.location.search,this.startTracking(),window.addEventListener("tracker:navigate",this.handleNavigate),document.addEventListener("visibilitychange",this.handleVisibilityChange),window.addEventListener("beforeunload",this.handleUnload),window.addEventListener("pagehide",this.handleUnload)}destroy(){this.stopTracking(),window.removeEventListener("tracker:navigate",this.handleNavigate),document.removeEventListener("visibilitychange",this.handleVisibilityChange),window.removeEventListener("beforeunload",this.handleUnload),window.removeEventListener("pagehide",this.handleUnload)}startTracking(){this.startTime=Date.now(),this.tracking=!0}stopTracking(){if(!this.tracking||!this.currentPath)return;let t=Date.now()-this.startTime;if(t<100){this.tracking=!1;return}this.emit({type:"timespent",data:{path:this.currentPath,duration:t,sessionId:this.sessionId,timestamp:Date.now()}}),this.tracking=!1}};function f(r,t){let e=0;return(...i)=>{let n=Date.now();n-e>=t&&(e=n,r(...i))}}var o=class o{constructor({emit:t,sessionId:e,sampleRate:i=.3,maxPoints:n=2e3,allowedPaths:s}){this.currentPath="";this.pointCounts={};this.recentClicks=[];this.handleMouseMove=t=>{if(Math.random()>this.sampleRate)return;let e=document.documentElement.scrollWidth,i=document.documentElement.scrollHeight,n=t.clientY+window.scrollY;this.recordPoint({x:t.clientX,y:n,xPct:e>0?t.clientX/e*100:0,yPct:i>0?n/i*100:0,pw:e,ph:i,type:"move"})};this.handleClick=t=>{if(Date.now()-this.lastTouchTime<500)return;let e=document.documentElement.scrollWidth,i=document.documentElement.scrollHeight,n=t.clientY+window.scrollY,s=this.getClickTarget(t);this.recordPoint({x:t.clientX,y:n,xPct:e>0?t.clientX/e*100:0,yPct:i>0?n/i*100:0,pw:e,ph:i,type:"click",...s?{target:s}:{}}),this.checkRageClick(t.clientX,n,this.currentPath)};this.lastTouchTime=0;this.handleTouchEnd=t=>{let e=t.changedTouches[0];if(!e)return;let i=document.documentElement.scrollWidth,n=document.documentElement.scrollHeight,s=e.clientY+window.scrollY;this.lastTouchTime=Date.now(),this.recordPoint({x:e.clientX,y:s,xPct:i>0?e.clientX/i*100:0,yPct:n>0?s/n*100:0,pw:i,ph:n,type:"click"}),this.checkRageClick(e.clientX,s,this.currentPath)};this.handleScroll=()=>{if(Math.random()>this.sampleRate)return;let t=document.documentElement.scrollWidth,e=document.documentElement.scrollHeight,i=window.innerWidth,n=window.scrollX,s=window.scrollY,a=n+i/2;this.recordPoint({x:i/2,y:s,xPct:t>0?a/t*100:50,yPct:e>0?s/e*100:0,pw:t,ph:e,type:"scroll"})};this.handleNavigate=t=>{this.currentPath=t.detail.path};this.emit=t,this.sessionId=e,this.sampleRate=i,this.maxPoints=n,this.allowedPaths=s&&s.length>0?new Set(s):null,this.throttledMouseMove=f(this.handleMouseMove,50),this.throttledScroll=f(this.handleScroll,100)}init(){this.currentPath=window.location.pathname+window.location.search,document.addEventListener("mousemove",this.throttledMouseMove),document.addEventListener("click",this.handleClick),document.addEventListener("touchend",this.handleTouchEnd,{passive:!0}),window.addEventListener("scroll",this.throttledScroll,{passive:!0}),window.addEventListener("tracker:navigate",this.handleNavigate)}destroy(){document.removeEventListener("mousemove",this.throttledMouseMove),document.removeEventListener("click",this.handleClick),document.removeEventListener("touchend",this.handleTouchEnd),window.removeEventListener("scroll",this.throttledScroll),window.removeEventListener("tracker:navigate",this.handleNavigate)}canRecord(){var t;return this.allowedPaths!==null&&!this.allowedPaths.has(this.currentPath)?!1:((t=this.pointCounts[this.currentPath])!=null?t:0)<this.maxPoints}recordPoint(t){var e;this.canRecord()&&(this.pointCounts[this.currentPath]=((e=this.pointCounts[this.currentPath])!=null?e:0)+1,this.emit({type:"heatmap",data:{...t,path:this.currentPath,timestamp:Date.now()}}))}getClickTarget(t){var n,s,a,l;let e=t.target;return e&&(e.getAttribute("aria-label")||((n=e.closest("[aria-label]"))==null?void 0:n.getAttribute("aria-label"))||e.getAttribute("data-track-label")||e.getAttribute("id")||(e instanceof HTMLButtonElement||e instanceof HTMLAnchorElement?(s=e.innerText)==null?void 0:s.trim().slice(0,60):(l=(a=e.closest("button, a"))==null?void 0:a.textContent)==null?void 0:l.trim().slice(0,60)))||void 0}checkRageClick(t,e,i){let n=Date.now();this.recentClicks=this.recentClicks.filter(a=>n-a.t<o.RAGE_WINDOW_MS),this.recentClicks.push({x:t,y:e,t:n});let s=this.recentClicks.filter(a=>Math.hypot(a.x-t,a.y-e)<=o.RAGE_RADIUS_PX);s.length>=o.RAGE_THRESHOLD&&(this.emit({type:"rageclik",data:{path:i,x:t,y:e,count:s.length,timestamp:n,sessionId:this.sessionId}}),this.recentClicks=[])}};o.RAGE_THRESHOLD=3,o.RAGE_WINDOW_MS=1e3,o.RAGE_RADIUS_PX=50;var g=o;var d=class{constructor(t){this.prevOnError=null;this.prevOnUnhandledRejection=null;this.initialized=!1;try{let e=new URL(t.endpoint),i=e.pathname.replace(/\/$/,"").split("/");i.pop(),e.pathname=i.join("/")||"/",this.endpoint=e.toString().replace(/\/$/,"")}catch(e){this.endpoint=t.endpoint}this.sessionId=t.sessionId,this.appId=t.appId,this.authHeaders=t.secretKey?{Authorization:`Bearer ${t.secretKey}`}:{}}init(){typeof window=="undefined"||this.initialized||(this.origInfo=console.info.bind(console),this.origWarn=console.warn.bind(console),this.origError=console.error.bind(console),console.info=(...t)=>{this.origInfo(...t),this.send("info",this.format(t))},console.warn=(...t)=>{this.origWarn(...t),this.send("warn",this.format(t))},console.error=(...t)=>{this.origError(...t);let[e]=t,i=e instanceof Error?e.stack:void 0;this.send("error",this.format(t),{stack:i})},this.prevOnError=window.onerror,window.onerror=(t,e,i,n,s)=>(this.send("error",String(t),{stack:s==null?void 0:s.stack,meta:{src:e,line:i,col:n}}),typeof this.prevOnError=="function"?this.prevOnError(t,e,i,n,s):!1),this.prevOnUnhandledRejection=t=>{let e=t.reason,i=e instanceof Error?e.message:String(e!=null?e:"Unhandled promise rejection");this.send("error",i,{stack:e instanceof Error?e.stack:void 0})},window.addEventListener("unhandledrejection",this.prevOnUnhandledRejection),this.initialized=!0)}destroy(){this.initialized&&(console.info=this.origInfo,console.warn=this.origWarn,console.error=this.origError,window.onerror=this.prevOnError,this.prevOnUnhandledRejection&&window.removeEventListener("unhandledrejection",this.prevOnUnhandledRejection),this.initialized=!1)}capture(t,e,i){this.send(t,e,i)}format(t){return t.map(e=>{if(e instanceof Error)return e.message;if(typeof e=="object")try{return JSON.stringify(e)}catch(i){return String(e)}return String(e)}).join(" ")}send(t,e,i){let n={sessionId:this.sessionId,...this.appId?{appId:this.appId}:{},level:t,message:e,url:typeof window!="undefined"?window.location.href:void 0,stack:i==null?void 0:i.stack,meta:i==null?void 0:i.meta,timestamp:Date.now()},s=`${this.endpoint}/logs/ingest`,a=JSON.stringify(n);fetch(s,{method:"POST",headers:{"Content-Type":"application/json",...this.authHeaders},body:a,keepalive:!0}).catch(l=>{this.origError&&this.origError("[user-tracker] Failed to send log:",l)})}};var y="https://api.alphana.ir/api/events",O={endpoint:y,trackNavigation:!0,trackTime:!0,trackHeatmap:!0,trackLogs:!0,mouseSampleRate:.3,maxHeatmapPoints:2e3,batchSize:20,flushInterval:5e3},v=class{constructor(t={}){this.initialized=!1;this.subscribers=new Set;this.queue=[];this.flushTimer=null;this.heartbeatTimer=null;this.userProperties={};this.flags={};this.flagSubscribers=new Set;this.handleVisibilityChange=()=>{document.visibilityState==="hidden"&&(this.queue.length>0&&this.flushBeacon(),this.sendDeactivate())};this.handlePageHide=()=>{this.queue.length>0&&this.flushBeacon(),this.sendDeactivate()};this.handleNavigate=t=>{};var e;this.cfg={...O,...t};try{new URL(this.cfg.endpoint)}catch(i){throw new Error(`[alpha-tracker] Invalid endpoint URL: "${this.cfg.endpoint}"`)}this.session={id:(e=t.sessionId)!=null?e:h(),visitorId:E(),startedAt:Date.now(),pageViews:[],timeSpent:{},heatmap:{}}}init(){if(typeof window=="undefined"||this.initialized)return this;let t=this.emit.bind(this),{id:e}=this.session;return this.cfg.trackNavigation&&(this.navigation=new p({emit:t,sessionId:e}),this.navigation.init()),this.cfg.trackTime&&(this.time=new u({emit:t,sessionId:e}),this.time.init()),this.cfg.trackHeatmap&&(this.heatmap=new g({emit:t,sessionId:e,sampleRate:this.cfg.mouseSampleRate,maxPoints:this.cfg.maxHeatmapPoints,allowedPaths:this.cfg.heatmapPages}),this.heatmap.init()),this.cfg.endpoint&&(this.flushTimer=setInterval(()=>{this.queue.length>0&&this.flushQueue()},this.cfg.flushInterval),window.addEventListener("visibilitychange",this.handleVisibilityChange),window.addEventListener("pagehide",this.handlePageHide),this.heartbeatTimer=setInterval(()=>{document.visibilityState!=="hidden"&&this.sendHeartbeat()},3e4),this.cfg.trackLogs&&(this.logCapture=new d({endpoint:this.cfg.endpoint,sessionId:this.session.id,secretKey:this.cfg.secretKey,appId:this.cfg.appId}),this.logCapture.init())),this.initialized=!0,this.fetchFlags(),this}destroy(){var t,e,i,n;this.flushTimer!==null&&(clearInterval(this.flushTimer),this.flushTimer=null),this.heartbeatTimer!==null&&(clearInterval(this.heartbeatTimer),this.heartbeatTimer=null),typeof window!="undefined"&&(window.removeEventListener("visibilitychange",this.handleVisibilityChange),window.removeEventListener("pagehide",this.handlePageHide)),(t=this.navigation)==null||t.destroy(),(e=this.time)==null||e.destroy(),(i=this.heatmap)==null||i.destroy(),(n=this.logCapture)==null||n.destroy(),typeof window!="undefined"&&window.removeEventListener("tracker:navigate",this.handleNavigate),this.queue.length>0&&this.cfg.endpoint&&this.flushBeacon(),this.initialized=!1}async sendHeartbeat(){if(!this.cfg.endpoint)return;let t=`${this.cfg.endpoint}/heartbeat`,e=this.cfg.secretKey?{Authorization:`Bearer ${this.cfg.secretKey}`}:{},i=JSON.stringify({sessionId:this.session.id,visitorId:this.session.visitorId,path:typeof window!="undefined"?window.location.pathname:"/",active:!0,...this.cfg.appId?{appId:this.cfg.appId}:{}});try{await fetch(t,{method:"POST",headers:{"Content-Type":"application/json",...e},body:i,keepalive:!0})}catch(n){}}sendDeactivate(){if(!this.cfg.endpoint)return;let t=`${this.cfg.endpoint}/heartbeat`,e=this.cfg.secretKey?{Authorization:`Bearer ${this.cfg.secretKey}`}:{},i=JSON.stringify({sessionId:this.session.id,path:typeof window!="undefined"?window.location.pathname:"/",active:!1,...this.cfg.appId?{appId:this.cfg.appId}:{}});typeof navigator!="undefined"&&navigator.sendBeacon?navigator.sendBeacon(t,new Blob([i],{type:"application/json"})):fetch(t,{method:"POST",headers:{"Content-Type":"application/json",...e},body:i,keepalive:!0}).catch(()=>{})}emit(t){var e,i,n;switch(t.type){case"pageview":this.session.pageViews.push(t.data);break;case"timespent":{let s=(e=this.session.timeSpent[t.data.path])!=null?e:0;this.session.timeSpent[t.data.path]=s+t.data.duration;break}case"heatmap":{let s=t.data.path;this.session.heatmap[s]||(this.session.heatmap[s]=[]);let a=this.session.heatmap[s];a.length<this.cfg.maxHeatmapPoints&&a.push(t.data);break}case"rageclik":case"uturn":break}this.subscribers.forEach(s=>s(t)),(n=(i=this.cfg).onEvent)==null||n.call(i,t),this.cfg.endpoint&&(this.queue.push(t),this.queue.length>=this.cfg.batchSize&&this.flushQueue())}subscribe(t){return this.subscribers.add(t),()=>this.subscribers.delete(t)}trackPageView(t){let e=t!=null?t:typeof window!="undefined"?window.location.pathname+window.location.search:"/";this.emit({type:"pageview",data:{path:e,title:typeof document!="undefined"?document.title:"",timestamp:Date.now(),sessionId:this.session.id,referrer:typeof document!="undefined"&&document.referrer||void 0}}),typeof window!="undefined"&&window.dispatchEvent(new CustomEvent("tracker:navigate",{detail:{path:e,title:document.title}}))}identify(t){this.userProperties={...this.userProperties,...t},this.fetchFlags()}getFlags(){return{...this.flags}}isFeatureEnabled(t){return this.flags[t]===!0}onFlagsChange(t){return this.flagSubscribers.add(t),()=>this.flagSubscribers.delete(t)}async fetchFlags(){if(!this.cfg.endpoint||!this.cfg.secretKey)return;let t=this.cfg.endpoint.replace(/\/events$/,"")+"/feature-flags/evaluate";try{let e=await fetch(t,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.cfg.secretKey}`},body:JSON.stringify({userProperties:this.userProperties})});if(!e.ok)return;let i=await e.json();this.flags=i,this.flagSubscribers.forEach(n=>n({...this.flags}))}catch(e){}}getSession(){return this.session}getPageViews(){return[...this.session.pageViews]}getTimeSpent(){return{...this.session.timeSpent}}getHeatmapData(t){var e;return t!==void 0?[...(e=this.session.heatmap[t])!=null?e:[]]:Object.entries(this.session.heatmap).reduce((i,[n,s])=>(i[n]=[...s],i),{})}flush(){this.flushQueue()}async flushQueue(){if(this.queue.length===0)return;let t=this.queue.splice(0);await this.sendBatch(t)}flushBeacon(){if(this.queue.length===0)return;let t=this.queue.splice(0),e=`${this.cfg.endpoint}/batch`,i=new Blob([this.buildBatchBody(t)],{type:"application/json"});typeof navigator!="undefined"&&navigator.sendBeacon?navigator.sendBeacon(e,i):this.sendBatch(t)}buildBatchBody(t){return JSON.stringify({...this.cfg.appId?{appId:this.cfg.appId}:{},visitorId:this.session.visitorId,events:t.map(e=>({sessionId:this.session.id,type:e.type,data:e.data}))})}async sendBatch(t){let e=`${this.cfg.endpoint}/batch`,i=this.cfg.secretKey?{Authorization:`Bearer ${this.cfg.secretKey}`}:{};try{await fetch(e,{method:"POST",headers:{"Content-Type":"application/json",...i},body:this.buildBatchBody(t),keepalive:!0})}catch(n){}}};return C(D);})();
1
+ "use strict";var AlphanaSDK=(()=>{var it=Object.defineProperty;var fr=Object.getOwnPropertyDescriptor;var gr=Object.getOwnPropertyNames;var mr=Object.prototype.hasOwnProperty;var nt=(t=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(t,{get:(e,r)=>(typeof require!="undefined"?require:e)[r]}):t)(function(t){if(typeof require!="undefined")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var vr=(t,e)=>{for(var r in e)it(t,r,{get:e[r],enumerable:!0})},Ir=(t,e,r,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of gr(e))!mr.call(t,n)&&n!==r&&it(t,n,{get:()=>e[n],enumerable:!(i=fr(e,n))||i.enumerable});return t};var yr=t=>Ir(it({},"__esModule",{value:!0}),t);var mi={};vr(mi,{ALPHANA_SDK_VERSION:()=>et,DEFAULT_ENDPOINT:()=>At,LogCapture:()=>ve,UserTracker:()=>tt,normalizeTrackerPath:()=>R});function ot(t){return t.replace(/\/events\/?$/,"")}var kt="__ut_vid__";function Ae(){return typeof crypto!="undefined"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,t=>{let e=Math.random()*16|0;return(t==="x"?e:e&3|8).toString(16)})}function Tt(){if(typeof localStorage=="undefined")return Ae();try{let t=localStorage.getItem(kt);if(t)return t;let e=Ae();return localStorage.setItem(kt,e),e}catch(t){return Ae()}}function R(t){if(!t)return t;let e=t.indexOf("?"),r=e>=0?t.slice(0,e):t,i=e>=0?t.slice(e):"",n=r;for(let a=0;a<5;a++)try{let s=decodeURIComponent(n);if(s===n)break;n=s}catch(s){break}let o=i;for(let a=0;a<5;a++)try{let s=decodeURIComponent(o);if(s===o)break;o=s}catch(s){break}return n+o}var Mt="__ut_last_pv_path__",xt="__ut_last_pv_entry_ms__";function Rt(t){if(typeof sessionStorage=="undefined")return null;try{return sessionStorage.getItem(t)}catch(e){return null}}function Et(t,e){if(typeof sessionStorage!="undefined")try{sessionStorage.setItem(t,e)}catch(r){}}function Cr(t,e){Et(Mt,t),Et(xt,String(e))}function Sr(){if(typeof performance=="undefined")return;let e=performance.getEntriesByType("navigation")[0];if(e!=null&&e.type)return e.type;let r=performance.navigation;if((r==null?void 0:r.type)===2)return"back_forward"}var ke=class ke{constructor({emit:e,sessionId:r}){this.previousPath="";this.originalPushState=null;this.originalReplaceState=null;this.pageEntryTime=0;this.handlePopState=()=>{this.handleNavigation()};this.emit=e,this.sessionId=r}init(){let e=R(window.location.pathname+window.location.search);Sr()==="back_forward"&&this.tryEmitMpaHistoryTraversalUturn(e),this.recordPageView(e),window.addEventListener("popstate",this.handlePopState),this.originalPushState=history.pushState.bind(history);let r=this.originalPushState;history.pushState=(n,o,a)=>{r(n,o,a),this.handleNavigation()},this.originalReplaceState=history.replaceState.bind(history);let i=this.originalReplaceState;history.replaceState=(n,o,a)=>{i(n,o,a),this.handleNavigation()}}destroy(){window.removeEventListener("popstate",this.handlePopState),this.originalPushState&&(history.pushState=this.originalPushState),this.originalReplaceState&&(history.replaceState=this.originalReplaceState)}tryEmitMpaHistoryTraversalUturn(e){let r=Rt(Mt),i=Rt(xt),n=i?Number(i):0;if(!r||!Number.isFinite(n)||n<=0||R(r)===e)return;let o=Date.now()-n;o<0||o>ke.UTURN_THRESHOLD_MS||this.emitUturn(R(r),e,o)}handleNavigation(){let e=R(window.location.pathname+window.location.search);if(e!==this.previousPath){if(this.previousPath&&this.pageEntryTime>0){let r=Date.now()-this.pageEntryTime;r<=ke.UTURN_THRESHOLD_MS&&this.emitUturn(this.previousPath,e,r)}this.recordPageView(e)}}emitUturn(e,r,i){this.emit({type:"uturn",data:{fromPath:e,toPath:r,timeOnPageMs:i,timestamp:Date.now(),sessionId:this.sessionId}})}recordPageView(e){let r=R(e);this.previousPath=r,this.pageEntryTime=Date.now(),Cr(r,this.pageEntryTime),this.emit({type:"pageview",data:{path:r,title:document.title,timestamp:Date.now(),sessionId:this.sessionId,referrer:document.referrer||void 0}}),window.dispatchEvent(new CustomEvent("tracker:navigate",{detail:{path:r,title:document.title}}))}};ke.UTURN_THRESHOLD_MS=5e3;var Ne=ke;var Oe=class{constructor({emit:e,sessionId:r}){this.currentPath="";this.startTime=0;this.tracking=!1;this.handleNavigate=e=>{this.stopTracking(),this.currentPath=R(e.detail.path),this.startTracking()};this.handleVisibilityChange=()=>{document.hidden?this.stopTracking():this.startTracking()};this.handleUnload=()=>{this.stopTracking()};this.emit=e,this.sessionId=r}init(){this.currentPath=R(window.location.pathname+window.location.search),this.startTracking(),window.addEventListener("tracker:navigate",this.handleNavigate),document.addEventListener("visibilitychange",this.handleVisibilityChange),window.addEventListener("beforeunload",this.handleUnload),window.addEventListener("pagehide",this.handleUnload)}destroy(){this.stopTracking(),window.removeEventListener("tracker:navigate",this.handleNavigate),document.removeEventListener("visibilitychange",this.handleVisibilityChange),window.removeEventListener("beforeunload",this.handleUnload),window.removeEventListener("pagehide",this.handleUnload)}startTracking(){this.startTime=Date.now(),this.tracking=!0}stopTracking(){if(!this.tracking||!this.currentPath)return;let e=Date.now()-this.startTime;if(e<100){this.tracking=!1;return}this.emit({type:"timespent",data:{path:this.currentPath,duration:e,sessionId:this.sessionId,timestamp:Date.now()}}),this.tracking=!1}};function st(t,e){let r=0;return(...i)=>{let n=Date.now();n-r>=e&&(r=n,t(...i))}}var ae=class ae{constructor({emit:e,sessionId:r,sampleRate:i=.3,maxPoints:n=2e3,allowedPaths:o}){this.currentPath="";this.pointCounts={};this.recentClicks=[];this.handleMouseMove=e=>{if(Math.random()>this.sampleRate)return;let r=document.documentElement.scrollWidth,i=document.documentElement.scrollHeight,n=e.clientY+window.scrollY;this.recordPoint({x:e.clientX,y:n,xPct:r>0?e.clientX/r*100:0,yPct:i>0?n/i*100:0,pw:r,ph:i,type:"move"})};this.handleClick=e=>{if(Date.now()-this.lastTouchTime<500)return;let r=document.documentElement.scrollWidth,i=document.documentElement.scrollHeight,n=e.clientY+window.scrollY,o=this.getClickTarget(e);this.recordPoint({x:e.clientX,y:n,xPct:r>0?e.clientX/r*100:0,yPct:i>0?n/i*100:0,pw:r,ph:i,type:"click",...o?{target:o}:{}}),this.checkRageClick(e.clientX,n,this.currentPath)};this.lastTouchTime=0;this.handleTouchEnd=e=>{let r=e.changedTouches[0];if(!r)return;let i=document.documentElement.scrollWidth,n=document.documentElement.scrollHeight,o=r.clientY+window.scrollY;this.lastTouchTime=Date.now(),this.recordPoint({x:r.clientX,y:o,xPct:i>0?r.clientX/i*100:0,yPct:n>0?o/n*100:0,pw:i,ph:n,type:"click"}),this.checkRageClick(r.clientX,o,this.currentPath)};this.handleScroll=()=>{if(Math.random()>this.sampleRate)return;let e=document.documentElement.scrollWidth,r=document.documentElement.scrollHeight,i=window.innerWidth,n=window.scrollX,o=window.scrollY,a=n+i/2;this.recordPoint({x:i/2,y:o,xPct:e>0?a/e*100:50,yPct:r>0?o/r*100:0,pw:e,ph:r,type:"scroll"})};this.handleNavigate=e=>{this.currentPath=R(e.detail.path)};this.emit=e,this.sessionId=r,this.sampleRate=i,this.maxPoints=n,this.allowedPaths=o&&o.length>0?new Set(o.map(a=>R(a))):null,this.throttledMouseMove=st(this.handleMouseMove,50),this.throttledScroll=st(this.handleScroll,100)}init(){this.currentPath=R(window.location.pathname+window.location.search),document.addEventListener("mousemove",this.throttledMouseMove),document.addEventListener("click",this.handleClick),document.addEventListener("touchend",this.handleTouchEnd,{passive:!0}),window.addEventListener("scroll",this.throttledScroll,{passive:!0}),window.addEventListener("tracker:navigate",this.handleNavigate)}destroy(){document.removeEventListener("mousemove",this.throttledMouseMove),document.removeEventListener("click",this.handleClick),document.removeEventListener("touchend",this.handleTouchEnd),window.removeEventListener("scroll",this.throttledScroll),window.removeEventListener("tracker:navigate",this.handleNavigate)}canRecord(){var e;return this.allowedPaths!==null&&!this.allowedPaths.has(this.currentPath)?!1:((e=this.pointCounts[this.currentPath])!=null?e:0)<this.maxPoints}recordPoint(e){var r;this.canRecord()&&(this.pointCounts[this.currentPath]=((r=this.pointCounts[this.currentPath])!=null?r:0)+1,this.emit({type:"heatmap",data:{...e,path:this.currentPath,timestamp:Date.now()}}))}getClickTarget(e){var n,o,a,s;let r=e.target;return r&&(r.getAttribute("aria-label")||((n=r.closest("[aria-label]"))==null?void 0:n.getAttribute("aria-label"))||r.getAttribute("data-track-label")||r.getAttribute("id")||(r instanceof HTMLButtonElement||r instanceof HTMLAnchorElement?(o=r.innerText)==null?void 0:o.trim().slice(0,60):(s=(a=r.closest("button, a"))==null?void 0:a.textContent)==null?void 0:s.trim().slice(0,60)))||void 0}checkRageClick(e,r,i){let n=Date.now();this.recentClicks=this.recentClicks.filter(a=>n-a.t<ae.RAGE_WINDOW_MS),this.recentClicks.push({x:e,y:r,t:n});let o=this.recentClicks.filter(a=>Math.hypot(a.x-e,a.y-r)<=ae.RAGE_RADIUS_PX);o.length>=ae.RAGE_THRESHOLD&&(this.emit({type:"rageclik",data:{path:i,x:e,y:r,count:o.length,timestamp:n,sessionId:this.sessionId}}),this.recentClicks=[])}};ae.RAGE_THRESHOLD=3,ae.RAGE_WINDOW_MS=1e3,ae.RAGE_RADIUS_PX=50;var Le=ae;var ve=class{constructor(e){this.prevOnError=null;this.prevOnUnhandledRejection=null;this.initialized=!1;try{let r=new URL(e.endpoint),i=r.pathname.replace(/\/$/,"").split("/");i.pop(),r.pathname=i.join("/")||"/",this.endpoint=r.toString().replace(/\/$/,"")}catch(r){this.endpoint=e.endpoint}this.sessionId=e.sessionId,this.appId=e.appId,this.authHeaders=e.secretKey?{Authorization:`Bearer ${e.secretKey}`}:{}}init(){typeof window=="undefined"||this.initialized||(this.origInfo=console.info.bind(console),this.origWarn=console.warn.bind(console),this.origError=console.error.bind(console),console.info=(...e)=>{this.origInfo(...e),this.send("info",this.format(e))},console.warn=(...e)=>{this.origWarn(...e),this.send("warn",this.format(e))},console.error=(...e)=>{this.origError(...e);let[r]=e,i=r instanceof Error?r.stack:void 0;this.send("error",this.format(e),{stack:i})},this.prevOnError=window.onerror,window.onerror=(e,r,i,n,o)=>(this.send("error",String(e),{stack:o==null?void 0:o.stack,meta:{src:r,line:i,col:n}}),typeof this.prevOnError=="function"?this.prevOnError(e,r,i,n,o):!1),this.prevOnUnhandledRejection=e=>{let r=e.reason,i=r instanceof Error?r.message:String(r!=null?r:"Unhandled promise rejection");this.send("error",i,{stack:r instanceof Error?r.stack:void 0})},window.addEventListener("unhandledrejection",this.prevOnUnhandledRejection),this.initialized=!0)}destroy(){this.initialized&&(console.info=this.origInfo,console.warn=this.origWarn,console.error=this.origError,window.onerror=this.prevOnError,this.prevOnUnhandledRejection&&window.removeEventListener("unhandledrejection",this.prevOnUnhandledRejection),this.initialized=!1)}capture(e,r,i){this.send(e,r,i)}format(e){return e.map(r=>{if(r instanceof Error)return r.message;if(typeof r=="object")try{return JSON.stringify(r)}catch(i){return String(r)}return String(r)}).join(" ")}send(e,r,i){let n={sessionId:this.sessionId,...this.appId?{appId:this.appId}:{},level:e,message:r,url:typeof window!="undefined"?window.location.href:void 0,stack:i==null?void 0:i.stack,meta:i==null?void 0:i.meta,timestamp:Date.now()},o=`${this.endpoint}/logs/ingest`,a=JSON.stringify(n);fetch(o,{method:"POST",headers:{"Content-Type":"application/json",...this.authHeaders},body:a,keepalive:!0}).catch(s=>{this.origError&&this.origError("[user-tracker] Failed to send log:",s)})}};var F;(function(t){t[t.Document=0]="Document",t[t.DocumentType=1]="DocumentType",t[t.Element=2]="Element",t[t.Text=3]="Text",t[t.CDATA=4]="CDATA",t[t.Comment=5]="Comment"})(F||(F={}));function br(t){return t.nodeType===t.ELEMENT_NODE}function pe(t){var e=t==null?void 0:t.host;return(e==null?void 0:e.shadowRoot)===t}function ue(t){return Object.prototype.toString.call(t)==="[object ShadowRoot]"}function wr(t){return t.includes(" background-clip: text;")&&!t.includes(" -webkit-background-clip: text;")&&(t=t.replace(" background-clip: text;"," -webkit-background-clip: text; background-clip: text;")),t}function at(t){try{var e=t.rules||t.cssRules;return e?wr(Array.from(e).map(ct).join("")):null}catch(r){return null}}function ct(t){var e=t.cssText;if(Ar(t))try{e=at(t.styleSheet)||e}catch(r){}return e}function Ar(t){return"styleSheet"in t}var Lt=(function(){function t(){this.idNodeMap=new Map,this.nodeMetaMap=new WeakMap}return t.prototype.getId=function(e){var r;if(!e)return-1;var i=(r=this.getMeta(e))===null||r===void 0?void 0:r.id;return i!=null?i:-1},t.prototype.getNode=function(e){return this.idNodeMap.get(e)||null},t.prototype.getIds=function(){return Array.from(this.idNodeMap.keys())},t.prototype.getMeta=function(e){return this.nodeMetaMap.get(e)||null},t.prototype.removeNodeFromMap=function(e){var r=this,i=this.getId(e);this.idNodeMap.delete(i),e.childNodes&&e.childNodes.forEach(function(n){return r.removeNodeFromMap(n)})},t.prototype.has=function(e){return this.idNodeMap.has(e)},t.prototype.hasNode=function(e){return this.nodeMetaMap.has(e)},t.prototype.add=function(e,r){var i=r.id;this.idNodeMap.set(i,e),this.nodeMetaMap.set(e,r)},t.prototype.replace=function(e,r){var i=this.getNode(e);if(i){var n=this.nodeMetaMap.get(i);n&&this.nodeMetaMap.set(r,n)}this.idNodeMap.set(e,r)},t.prototype.reset=function(){this.idNodeMap=new Map,this.nodeMetaMap=new WeakMap},t})();function Ft(){return new Lt}function Re(t){var e=t.maskInputOptions,r=t.tagName,i=t.type,n=t.value,o=t.maskInputFn,a=n||"";return(e[r.toLowerCase()]||e[i])&&(o?a=o(a):a="*".repeat(a.length)),a}var Nt="__rrweb_original__";function kr(t){var e=t.getContext("2d");if(!e)return!0;for(var r=50,i=0;i<t.width;i+=r)for(var n=0;n<t.height;n+=r){var o=e.getImageData,a=Nt in o?o[Nt]:o,s=new Uint32Array(a.call(e,i,n,Math.min(r,t.width-i),Math.min(r,t.height-n)).data.buffer);if(s.some(function(c){return c!==0}))return!1}return!0}var Tr=1,Rr=new RegExp("[^a-z0-9-_:]"),he=-2;function lt(){return Tr++}function Er(t){if(t instanceof HTMLFormElement)return"form";var e=t.tagName.toLowerCase().trim();return Rr.test(e)?"div":e}function Mr(t){return t.cssRules?Array.from(t.cssRules).map(function(e){return e.cssText||""}).join(""):""}function xr(t){var e="";return t.indexOf("//")>-1?e=t.split("/").slice(0,3).join("/"):e=t.split("/")[0],e=e.split("?")[0],e}var Ie,Ot,Nr=/url\((?:(')([^']*)'|(")(.*?)"|([^)]*))\)/gm,Or=/^(?!www\.|(?:http|ftp)s?:\/\/|[A-Za-z]:\\|\/\/|#).*/,Lr=/^(data:)([^,]*),(.*)/i;function Fe(t,e){return(t||"").replace(Nr,function(r,i,n,o,a,s){var c=n||a||s,l=i||o||"";if(!c)return r;if(!Or.test(c)||Lr.test(c))return"url(".concat(l).concat(c).concat(l,")");if(c[0]==="/")return"url(".concat(l).concat(xr(e)+c).concat(l,")");var d=e.split("/"),u=c.split("/");d.pop();for(var p=0,f=u;p<f.length;p++){var h=f[p];h!=="."&&(h===".."?d.pop():d.push(h))}return"url(".concat(l).concat(d.join("/")).concat(l,")")})}var Fr=/^[^ \t\n\r\u000c]+/,Dr=/^[, \t\n\r\u000c]+/;function Wr(t,e){if(e.trim()==="")return e;var r=0;function i(l){var d,u=l.exec(e.substring(r));return u?(d=u[0],r+=d.length,d):""}for(var n=[];i(Dr),!(r>=e.length);){var o=i(Fr);if(o.slice(-1)===",")o=ye(t,o.substring(0,o.length-1)),n.push(o);else{var a="";o=ye(t,o);for(var s=!1;;){var c=e.charAt(r);if(c===""){n.push((o+a).trim());break}else if(s)c===")"&&(s=!1);else if(c===","){r+=1,n.push((o+a).trim());break}else c==="("&&(s=!0);a+=c,r+=1}}}return n.join(", ")}function ye(t,e){if(!e||e.trim()==="")return e;var r=t.createElement("a");return r.href=e,r.href}function Pr(t){return!!(t.tagName==="svg"||t.ownerSVGElement)}function dt(){var t=document.createElement("a");return t.href="",t.href}function ut(t,e,r,i){return r==="src"||r==="href"&&i&&!(e==="use"&&i[0]==="#")||r==="xlink:href"&&i&&i[0]!=="#"||r==="background"&&i&&(e==="table"||e==="td"||e==="th")?ye(t,i):r==="srcset"&&i?Wr(t,i):r==="style"&&i?Fe(i,dt()):e==="object"&&r==="data"&&i?ye(t,i):i}function Br(t,e,r){if(typeof e=="string"){if(t.classList.contains(e))return!0}else for(var i=t.classList.length;i--;){var n=t.classList[i];if(e.test(n))return!0}return r?t.matches(r):!1}function Te(t,e,r){if(!t)return!1;if(t.nodeType!==t.ELEMENT_NODE)return r?Te(t.parentNode,e,r):!1;for(var i=t.classList.length;i--;){var n=t.classList[i];if(e.test(n))return!0}return r?Te(t.parentNode,e,r):!1}function ht(t,e,r){var i=t.nodeType===t.ELEMENT_NODE?t:t.parentElement;if(i===null)return!1;if(typeof e=="string"){if(i.classList.contains(e)||i.closest(".".concat(e)))return!0}else if(Te(i,e,!0))return!0;return!!(r&&(i.matches(r)||i.closest(r)))}function Vr(t,e,r){var i=t.contentWindow;if(i){var n=!1,o;try{o=i.document.readyState}catch(c){return}if(o!=="complete"){var a=setTimeout(function(){n||(e(),n=!0)},r);t.addEventListener("load",function(){clearTimeout(a),n=!0,e()});return}var s="about:blank";if(i.location.href!==s||t.src===s||t.src==="")return setTimeout(e,0),t.addEventListener("load",e);t.addEventListener("load",e)}}function _r(t,e,r){var i=!1,n;try{n=t.sheet}catch(a){return}if(!n){var o=setTimeout(function(){i||(e(),i=!0)},r);t.addEventListener("load",function(){clearTimeout(o),i=!0,e()})}}function Gr(t,e){var r=e.doc,i=e.mirror,n=e.blockClass,o=e.blockSelector,a=e.maskTextClass,s=e.maskTextSelector,c=e.inlineStylesheet,l=e.maskInputOptions,d=l===void 0?{}:l,u=e.maskTextFn,p=e.maskInputFn,f=e.dataURLOptions,h=f===void 0?{}:f,v=e.inlineImages,C=e.recordCanvas,I=e.keepIframeSrcFn,g=e.newlyAddedElement,m=g===void 0?!1:g,A=Ur(r,i);switch(t.nodeType){case t.DOCUMENT_NODE:return t.compatMode!=="CSS1Compat"?{type:F.Document,childNodes:[],compatMode:t.compatMode}:{type:F.Document,childNodes:[]};case t.DOCUMENT_TYPE_NODE:return{type:F.DocumentType,name:t.name,publicId:t.publicId,systemId:t.systemId,rootId:A};case t.ELEMENT_NODE:return Zr(t,{doc:r,blockClass:n,blockSelector:o,inlineStylesheet:c,maskInputOptions:d,maskInputFn:p,dataURLOptions:h,inlineImages:v,recordCanvas:C,keepIframeSrcFn:I,newlyAddedElement:m,rootId:A});case t.TEXT_NODE:return Hr(t,{maskTextClass:a,maskTextSelector:s,maskTextFn:u,rootId:A});case t.CDATA_SECTION_NODE:return{type:F.CDATA,textContent:"",rootId:A};case t.COMMENT_NODE:return{type:F.Comment,textContent:t.textContent||"",rootId:A};default:return!1}}function Ur(t,e){if(e.hasNode(t)){var r=e.getId(t);return r===1?void 0:r}}function Hr(t,e){var r,i=e.maskTextClass,n=e.maskTextSelector,o=e.maskTextFn,a=e.rootId,s=t.parentNode&&t.parentNode.tagName,c=t.textContent,l=s==="STYLE"?!0:void 0,d=s==="SCRIPT"?!0:void 0;if(l&&c){try{t.nextSibling||t.previousSibling||!((r=t.parentNode.sheet)===null||r===void 0)&&r.cssRules&&(c=Mr(t.parentNode.sheet))}catch(u){console.warn("Cannot get CSS styles from text's parentNode. Error: ".concat(u),t)}c=Fe(c,dt())}return d&&(c="SCRIPT_PLACEHOLDER"),!l&&!d&&c&&ht(t,i,n)&&(c=o?o(c):c.replace(/[\S]/g,"*")),{type:F.Text,textContent:c||"",isStyle:l,rootId:a}}function Zr(t,e){for(var r=e.doc,i=e.blockClass,n=e.blockSelector,o=e.inlineStylesheet,a=e.maskInputOptions,s=a===void 0?{}:a,c=e.maskInputFn,l=e.dataURLOptions,d=l===void 0?{}:l,u=e.inlineImages,p=e.recordCanvas,f=e.keepIframeSrcFn,h=e.newlyAddedElement,v=h===void 0?!1:h,C=e.rootId,I=Br(t,i,n),g=Er(t),m={},A=t.attributes.length,B=0;B<A;B++){var D=t.attributes[B];m[D.name]=ut(r,g,D.name,D.value)}if(g==="link"&&o){var W=Array.from(r.styleSheets).find(function(Y){return Y.href===t.href}),k=null;W&&(k=at(W)),k&&(delete m.rel,delete m.href,m._cssText=Fe(k,W.href))}if(g==="style"&&t.sheet&&!(t.innerText||t.textContent||"").trim().length){var k=at(t.sheet);k&&(m._cssText=Fe(k,dt()))}if(g==="input"||g==="textarea"||g==="select"){var Z=t.value,K=t.checked;m.type!=="radio"&&m.type!=="checkbox"&&m.type!=="submit"&&m.type!=="button"&&Z?m.value=Re({type:m.type,tagName:g,value:Z,maskInputOptions:s,maskInputFn:c}):K&&(m.checked=K)}if(g==="option"&&(t.selected&&!s.select?m.selected=!0:delete m.selected),g==="canvas"&&p){if(t.__context==="2d")kr(t)||(m.rr_dataURL=t.toDataURL(d.type,d.quality));else if(!("__context"in t)){var Q=t.toDataURL(d.type,d.quality),j=document.createElement("canvas");j.width=t.width,j.height=t.height;var X=j.toDataURL(d.type,d.quality);Q!==X&&(m.rr_dataURL=Q)}}if(g==="img"&&u){Ie||(Ie=r.createElement("canvas"),Ot=Ie.getContext("2d"));var O=t,z=O.crossOrigin;O.crossOrigin="anonymous";var q=function(){try{Ie.width=O.naturalWidth,Ie.height=O.naturalHeight,Ot.drawImage(O,0,0),m.rr_dataURL=Ie.toDataURL(d.type,d.quality)}catch(Y){console.warn("Cannot inline img src=".concat(O.currentSrc,"! Error: ").concat(Y))}z?m.crossOrigin=z:O.removeAttribute("crossorigin")};O.complete&&O.naturalWidth!==0?q():O.onload=q}if((g==="audio"||g==="video")&&(m.rr_mediaState=t.paused?"paused":"played",m.rr_mediaCurrentTime=t.currentTime),v||(t.scrollLeft&&(m.rr_scrollLeft=t.scrollLeft),t.scrollTop&&(m.rr_scrollTop=t.scrollTop)),I){var re=t.getBoundingClientRect(),ne=re.width,G=re.height;m={class:m.class,rr_width:"".concat(ne,"px"),rr_height:"".concat(G,"px")}}return g==="iframe"&&!f(m.src)&&(t.contentDocument||(m.rr_src=m.src),delete m.src),{type:F.Element,tagName:g,attributes:m,childNodes:[],isSVG:Pr(t)||void 0,needBlock:I,rootId:C}}function T(t){return t===void 0?"":t.toLowerCase()}function Kr(t,e){if(e.comment&&t.type===F.Comment)return!0;if(t.type===F.Element){if(e.script&&(t.tagName==="script"||t.tagName==="link"&&t.attributes.rel==="preload"&&t.attributes.as==="script"||t.tagName==="link"&&t.attributes.rel==="prefetch"&&typeof t.attributes.href=="string"&&t.attributes.href.endsWith(".js")))return!0;if(e.headFavicon&&(t.tagName==="link"&&t.attributes.rel==="shortcut icon"||t.tagName==="meta"&&(T(t.attributes.name).match(/^msapplication-tile(image|color)$/)||T(t.attributes.name)==="application-name"||T(t.attributes.rel)==="icon"||T(t.attributes.rel)==="apple-touch-icon"||T(t.attributes.rel)==="shortcut icon")))return!0;if(t.tagName==="meta"){if(e.headMetaDescKeywords&&T(t.attributes.name).match(/^description|keywords$/))return!0;if(e.headMetaSocial&&(T(t.attributes.property).match(/^(og|twitter|fb):/)||T(t.attributes.name).match(/^(og|twitter):/)||T(t.attributes.name)==="pinterest"))return!0;if(e.headMetaRobots&&(T(t.attributes.name)==="robots"||T(t.attributes.name)==="googlebot"||T(t.attributes.name)==="bingbot"))return!0;if(e.headMetaHttpEquiv&&t.attributes["http-equiv"]!==void 0)return!0;if(e.headMetaAuthorship&&(T(t.attributes.name)==="author"||T(t.attributes.name)==="generator"||T(t.attributes.name)==="framework"||T(t.attributes.name)==="publisher"||T(t.attributes.name)==="progid"||T(t.attributes.property).match(/^article:/)||T(t.attributes.property).match(/^product:/)))return!0;if(e.headMetaVerification&&(T(t.attributes.name)==="google-site-verification"||T(t.attributes.name)==="yandex-verification"||T(t.attributes.name)==="csrf-token"||T(t.attributes.name)==="p:domain_verify"||T(t.attributes.name)==="verify-v1"||T(t.attributes.name)==="verification"||T(t.attributes.name)==="shopify-checkout-api-token"))return!0}}return!1}function de(t,e){var r=e.doc,i=e.mirror,n=e.blockClass,o=e.blockSelector,a=e.maskTextClass,s=e.maskTextSelector,c=e.skipChild,l=c===void 0?!1:c,d=e.inlineStylesheet,u=d===void 0?!0:d,p=e.maskInputOptions,f=p===void 0?{}:p,h=e.maskTextFn,v=e.maskInputFn,C=e.slimDOMOptions,I=e.dataURLOptions,g=I===void 0?{}:I,m=e.inlineImages,A=m===void 0?!1:m,B=e.recordCanvas,D=B===void 0?!1:B,W=e.onSerialize,k=e.onIframeLoad,Z=e.iframeLoadTimeout,K=Z===void 0?5e3:Z,Q=e.onStylesheetLoad,j=e.stylesheetLoadTimeout,X=j===void 0?5e3:j,O=e.keepIframeSrcFn,z=O===void 0?function(){return!1}:O,q=e.newlyAddedElement,re=q===void 0?!1:q,ne=e.preserveWhiteSpace,G=ne===void 0?!0:ne,Y=Gr(t,{doc:r,mirror:i,blockClass:n,blockSelector:o,maskTextClass:a,maskTextSelector:s,inlineStylesheet:u,maskInputOptions:f,maskTextFn:h,maskInputFn:v,dataURLOptions:g,inlineImages:A,recordCanvas:D,keepIframeSrcFn:z,newlyAddedElement:re});if(!Y)return console.warn(t,"not serialized"),null;var se;i.hasNode(t)?se=i.getId(t):Kr(Y,C)||!G&&Y.type===F.Text&&!Y.isStyle&&!Y.textContent.replace(/^\s+|\s+$/gm,"").length?se=he:se=lt();var N=Object.assign(Y,{id:se});if(i.add(t,N),se===he)return null;W&&W(t);var $=!l;if(N.type===F.Element){$=$&&!N.needBlock,delete N.needBlock;var ie=t.shadowRoot;ie&&ue(ie)&&(N.isShadowHost=!0)}if((N.type===F.Document||N.type===F.Element)&&$){C.headWhitespace&&N.type===F.Element&&N.tagName==="head"&&(G=!1);for(var me={doc:r,mirror:i,blockClass:n,blockSelector:o,maskTextClass:a,maskTextSelector:s,skipChild:l,inlineStylesheet:u,maskInputOptions:f,maskTextFn:h,maskInputFn:v,slimDOMOptions:C,dataURLOptions:g,inlineImages:A,recordCanvas:D,preserveWhiteSpace:G,onSerialize:W,onIframeLoad:k,iframeLoadTimeout:K,onStylesheetLoad:Q,stylesheetLoadTimeout:X,keepIframeSrcFn:z},y=0,V=Array.from(t.childNodes);y<V.length;y++){var U=V[y],E=de(U,me);E&&N.childNodes.push(E)}if(br(t)&&t.shadowRoot)for(var J=0,w=Array.from(t.shadowRoot.childNodes);J<w.length;J++){var U=w[J],E=de(U,me);E&&(ue(t.shadowRoot)&&(E.isShadow=!0),N.childNodes.push(E))}}return t.parentNode&&pe(t.parentNode)&&ue(t.parentNode)&&(N.isShadow=!0),N.type===F.Element&&N.tagName==="iframe"&&Vr(t,function(){var H=t.contentDocument;if(H&&k){var we=de(H,{doc:H,mirror:i,blockClass:n,blockSelector:o,maskTextClass:a,maskTextSelector:s,skipChild:!1,inlineStylesheet:u,maskInputOptions:f,maskTextFn:h,maskInputFn:v,slimDOMOptions:C,dataURLOptions:g,inlineImages:A,recordCanvas:D,preserveWhiteSpace:G,onSerialize:W,onIframeLoad:k,iframeLoadTimeout:K,onStylesheetLoad:Q,stylesheetLoadTimeout:X,keepIframeSrcFn:z});we&&k(t,we)}},K),N.type===F.Element&&N.tagName==="link"&&N.attributes.rel==="stylesheet"&&_r(t,function(){if(Q){var H=de(t,{doc:r,mirror:i,blockClass:n,blockSelector:o,maskTextClass:a,maskTextSelector:s,skipChild:!1,inlineStylesheet:u,maskInputOptions:f,maskTextFn:h,maskInputFn:v,slimDOMOptions:C,dataURLOptions:g,inlineImages:A,recordCanvas:D,preserveWhiteSpace:G,onSerialize:W,onIframeLoad:k,iframeLoadTimeout:K,onStylesheetLoad:Q,stylesheetLoadTimeout:X,keepIframeSrcFn:z});H&&Q(t,H)}},X),N}function Dt(t,e){var r=e||{},i=r.mirror,n=i===void 0?new Lt:i,o=r.blockClass,a=o===void 0?"rr-block":o,s=r.blockSelector,c=s===void 0?null:s,l=r.maskTextClass,d=l===void 0?"rr-mask":l,u=r.maskTextSelector,p=u===void 0?null:u,f=r.inlineStylesheet,h=f===void 0?!0:f,v=r.inlineImages,C=v===void 0?!1:v,I=r.recordCanvas,g=I===void 0?!1:I,m=r.maskAllInputs,A=m===void 0?!1:m,B=r.maskTextFn,D=r.maskInputFn,W=r.slimDOM,k=W===void 0?!1:W,Z=r.dataURLOptions,K=r.preserveWhiteSpace,Q=r.onSerialize,j=r.onIframeLoad,X=r.iframeLoadTimeout,O=r.onStylesheetLoad,z=r.stylesheetLoadTimeout,q=r.keepIframeSrcFn,re=q===void 0?function(){return!1}:q,ne=A===!0?{color:!0,date:!0,"datetime-local":!0,email:!0,month:!0,number:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0,textarea:!0,select:!0,password:!0}:A===!1?{password:!0}:A,G=k===!0||k==="all"?{script:!0,comment:!0,headFavicon:!0,headWhitespace:!0,headMetaDescKeywords:k==="all",headMetaSocial:!0,headMetaRobots:!0,headMetaHttpEquiv:!0,headMetaAuthorship:!0,headMetaVerification:!0}:k===!1?{}:k;return de(t,{doc:t,mirror:n,blockClass:a,blockSelector:c,maskTextClass:d,maskTextSelector:p,skipChild:!1,inlineStylesheet:h,maskInputOptions:ne,maskTextFn:B,maskInputFn:D,slimDOMOptions:G,dataURLOptions:Z,inlineImages:C,recordCanvas:g,preserveWhiteSpace:K,onSerialize:Q,onIframeLoad:j,iframeLoadTimeout:X,onStylesheetLoad:O,stylesheetLoadTimeout:z,keepIframeSrcFn:re,newlyAddedElement:!1})}var zr=/([^\\]):hover/,xi=new RegExp(zr.source,"g");function P(t,e,r=document){let i={capture:!0,passive:!0};return r.addEventListener(t,e,i),()=>r.removeEventListener(t,e,i)}var Ce=`Please stop import mirror directly. Instead of that,\r
2
+ now you can use replayer.getMirror() to access the mirror instance of a replayer,\r
3
+ or you can use record.mirror to access the mirror instance during recording.`,Wt={map:{},getId(){return console.error(Ce),-1},getNode(){return console.error(Ce),null},removeNodeFromMap(){console.error(Ce)},has(){return console.error(Ce),!1},reset(){console.error(Ce)}};typeof window!="undefined"&&window.Proxy&&window.Reflect&&(Wt=new Proxy(Wt,{get(t,e,r){return e==="map"&&console.error(Ce),Reflect.get(t,e,r)}}));function Se(t,e,r={}){let i=null,n=0;return function(...o){let a=Date.now();!n&&r.leading===!1&&(n=a);let s=e-(a-n),c=this;s<=0||s>e?(i&&(clearTimeout(i),i=null),n=a,t.apply(c,o)):!i&&r.trailing!==!1&&(i=setTimeout(()=>{n=r.leading===!1?0:Date.now(),i=null,t.apply(c,o)},s))}}function fe(t,e,r,i,n=window){let o=n.Object.getOwnPropertyDescriptor(t,e);return n.Object.defineProperty(t,e,i?r:{set(a){setTimeout(()=>{r.set.call(this,a)},0),o&&o.set&&o.set.call(this,a)}}),()=>fe(t,e,o||{},!0)}function ee(t,e,r){try{if(!(e in t))return()=>{};let i=t[e],n=r(i);return typeof n=="function"&&(n.prototype=n.prototype||{},Object.defineProperties(n,{__rrweb_original__:{enumerable:!1,value:i}})),t[e]=n,()=>{t[e]=i}}catch(i){return()=>{}}}function We(){return window.innerHeight||document.documentElement&&document.documentElement.clientHeight||document.body&&document.body.clientHeight}function Pe(){return window.innerWidth||document.documentElement&&document.documentElement.clientWidth||document.body&&document.body.clientWidth}function M(t,e,r,i){if(!t)return!1;let n=t.nodeType===t.ELEMENT_NODE?t:t.parentElement;if(!n)return!1;if(typeof e=="string"){if(n.classList.contains(e)||i&&n.closest("."+e)!==null)return!0}else if(Te(n,e,i))return!0;return!!(r&&(t.matches(r)||i&&n.closest(r)!==null))}function Pt(t,e){return e.getId(t)!==-1}function Be(t,e){return e.getId(t)===he}function pt(t,e){if(pe(t))return!1;let r=e.getId(t);return e.has(r)?t.parentNode&&t.parentNode.nodeType===t.DOCUMENT_NODE?!1:t.parentNode?pt(t.parentNode,e):!0:!0}function ft(t){return!!t.changedTouches}function Bt(t=window){"NodeList"in t&&!t.NodeList.prototype.forEach&&(t.NodeList.prototype.forEach=Array.prototype.forEach),"DOMTokenList"in t&&!t.DOMTokenList.prototype.forEach&&(t.DOMTokenList.prototype.forEach=Array.prototype.forEach),Node.prototype.contains||(Node.prototype.contains=(...e)=>{let r=e[0];if(!(0 in e))throw new TypeError("1 argument is required");do if(this===r)return!0;while(r=r&&r.parentNode);return!1})}function Ve(t,e){return!!(t.nodeName==="IFRAME"&&e.getMeta(t))}function _e(t,e){return!!(t.nodeName==="LINK"&&t.nodeType===t.ELEMENT_NODE&&t.getAttribute&&t.getAttribute("rel")==="stylesheet"&&e.getMeta(t))}function Ge(t){return!!(t!=null&&t.shadowRoot)}var De=class{constructor(){this.id=1,this.styleIDMap=new WeakMap,this.idStyleMap=new Map}getId(e){var r;return(r=this.styleIDMap.get(e))!==null&&r!==void 0?r:-1}has(e){return this.styleIDMap.has(e)}add(e,r){if(this.has(e))return this.getId(e);let i;return r===void 0?i=this.id++:i=r,this.styleIDMap.set(e,i),this.idStyleMap.set(i,e),i}getStyle(e){return this.idStyleMap.get(e)||null}reset(){this.styleIDMap=new WeakMap,this.idStyleMap=new Map,this.id=1}generateId(){return this.id++}};var b=(t=>(t[t.DomContentLoaded=0]="DomContentLoaded",t[t.Load=1]="Load",t[t.FullSnapshot=2]="FullSnapshot",t[t.IncrementalSnapshot=3]="IncrementalSnapshot",t[t.Meta=4]="Meta",t[t.Custom=5]="Custom",t[t.Plugin=6]="Plugin",t))(b||{}),S=(t=>(t[t.Mutation=0]="Mutation",t[t.MouseMove=1]="MouseMove",t[t.MouseInteraction=2]="MouseInteraction",t[t.Scroll=3]="Scroll",t[t.ViewportResize=4]="ViewportResize",t[t.Input=5]="Input",t[t.TouchMove=6]="TouchMove",t[t.MediaInteraction=7]="MediaInteraction",t[t.StyleSheetRule=8]="StyleSheetRule",t[t.CanvasMutation=9]="CanvasMutation",t[t.Font=10]="Font",t[t.Log=11]="Log",t[t.Drag=12]="Drag",t[t.StyleDeclaration=13]="StyleDeclaration",t[t.Selection=14]="Selection",t[t.AdoptedStyleSheet=15]="AdoptedStyleSheet",t))(S||{}),Ue=(t=>(t[t.MouseUp=0]="MouseUp",t[t.MouseDown=1]="MouseDown",t[t.Click=2]="Click",t[t.ContextMenu=3]="ContextMenu",t[t.DblClick=4]="DblClick",t[t.Focus=5]="Focus",t[t.Blur=6]="Blur",t[t.TouchStart=7]="TouchStart",t[t.TouchMove_Departed=8]="TouchMove_Departed",t[t.TouchEnd=9]="TouchEnd",t[t.TouchCancel=10]="TouchCancel",t))(Ue||{}),oe=(t=>(t[t["2D"]=0]="2D",t[t.WebGL=1]="WebGL",t[t.WebGL2=2]="WebGL2",t))(oe||{});function Vt(t){return"__ln"in t}var gt=class{constructor(){this.length=0,this.head=null}get(e){if(e>=this.length)throw new Error("Position outside of list range");let r=this.head;for(let i=0;i<e;i++)r=(r==null?void 0:r.next)||null;return r}addNode(e){let r={value:e,previous:null,next:null};if(e.__ln=r,e.previousSibling&&Vt(e.previousSibling)){let i=e.previousSibling.__ln.next;r.next=i,r.previous=e.previousSibling.__ln,e.previousSibling.__ln.next=r,i&&(i.previous=r)}else if(e.nextSibling&&Vt(e.nextSibling)&&e.nextSibling.__ln.previous){let i=e.nextSibling.__ln.previous;r.previous=i,r.next=e.nextSibling.__ln,e.nextSibling.__ln.previous=r,i&&(i.next=r)}else this.head&&(this.head.previous=r),r.next=this.head,this.head=r;this.length++}removeNode(e){let r=e.__ln;this.head&&(r.previous?(r.previous.next=r.next,r.next&&(r.next.previous=r.previous)):(this.head=r.next,this.head&&(this.head.previous=null)),e.__ln&&delete e.__ln,this.length--)}},_t=(t,e)=>`${t}@${e}`,He=class{constructor(){this.frozen=!1,this.locked=!1,this.texts=[],this.attributes=[],this.removes=[],this.mapRemoves=[],this.movedMap={},this.addedSet=new Set,this.movedSet=new Set,this.droppedSet=new Set,this.processMutations=e=>{e.forEach(this.processMutation),this.emit()},this.emit=()=>{if(this.frozen||this.locked)return;let e=[],r=new gt,i=s=>{let c=s,l=he;for(;l===he;)c=c&&c.nextSibling,l=c&&this.mirror.getId(c);return l},n=s=>{var c,l,d,u;let p=null;((l=(c=s.getRootNode)===null||c===void 0?void 0:c.call(s))===null||l===void 0?void 0:l.nodeType)===Node.DOCUMENT_FRAGMENT_NODE&&s.getRootNode().host&&(p=s.getRootNode().host);let f=p;for(;((u=(d=f==null?void 0:f.getRootNode)===null||d===void 0?void 0:d.call(f))===null||u===void 0?void 0:u.nodeType)===Node.DOCUMENT_FRAGMENT_NODE&&f.getRootNode().host;)f=f.getRootNode().host;let h=!this.doc.contains(s)&&(!f||!this.doc.contains(f));if(!s.parentNode||h)return;let v=pe(s.parentNode)?this.mirror.getId(p):this.mirror.getId(s.parentNode),C=i(s);if(v===-1||C===-1)return r.addNode(s);let I=de(s,{doc:this.doc,mirror:this.mirror,blockClass:this.blockClass,blockSelector:this.blockSelector,maskTextClass:this.maskTextClass,maskTextSelector:this.maskTextSelector,skipChild:!0,newlyAddedElement:!0,inlineStylesheet:this.inlineStylesheet,maskInputOptions:this.maskInputOptions,maskTextFn:this.maskTextFn,maskInputFn:this.maskInputFn,slimDOMOptions:this.slimDOMOptions,dataURLOptions:this.dataURLOptions,recordCanvas:this.recordCanvas,inlineImages:this.inlineImages,onSerialize:g=>{Ve(g,this.mirror)&&this.iframeManager.addIframe(g),_e(g,this.mirror)&&this.stylesheetManager.trackLinkElement(g),Ge(s)&&this.shadowDomManager.addShadowRoot(s.shadowRoot,this.doc)},onIframeLoad:(g,m)=>{this.iframeManager.attachIframe(g,m),this.shadowDomManager.observeAttachShadow(g)},onStylesheetLoad:(g,m)=>{this.stylesheetManager.attachLinkElement(g,m)}});I&&e.push({parentId:v,nextId:C,node:I})};for(;this.mapRemoves.length;)this.mirror.removeNodeFromMap(this.mapRemoves.shift());for(let s of Array.from(this.movedSet.values()))Gt(this.removes,s,this.mirror)&&!this.movedSet.has(s.parentNode)||n(s);for(let s of Array.from(this.addedSet.values()))!Ut(this.droppedSet,s)&&!Gt(this.removes,s,this.mirror)||Ut(this.movedSet,s)?n(s):this.droppedSet.add(s);let o=null;for(;r.length;){let s=null;if(o){let c=this.mirror.getId(o.value.parentNode),l=i(o.value);c!==-1&&l!==-1&&(s=o)}if(!s)for(let c=r.length-1;c>=0;c--){let l=r.get(c);if(l){let d=this.mirror.getId(l.value.parentNode);if(i(l.value)===-1)continue;if(d!==-1){s=l;break}else{let p=l.value;if(p.parentNode&&p.parentNode.nodeType===Node.DOCUMENT_FRAGMENT_NODE){let f=p.parentNode.host;if(this.mirror.getId(f)!==-1){s=l;break}}}}}if(!s){for(;r.head;)r.removeNode(r.head.value);break}o=s.previous,r.removeNode(s.value),n(s.value)}let a={texts:this.texts.map(s=>({id:this.mirror.getId(s.node),value:s.value})).filter(s=>this.mirror.has(s.id)),attributes:this.attributes.map(s=>({id:this.mirror.getId(s.node),attributes:s.attributes})).filter(s=>this.mirror.has(s.id)),removes:this.removes,adds:e};!a.texts.length&&!a.attributes.length&&!a.removes.length&&!a.adds.length||(this.texts=[],this.attributes=[],this.removes=[],this.addedSet=new Set,this.movedSet=new Set,this.droppedSet=new Set,this.movedMap={},this.mutationCb(a))},this.processMutation=e=>{if(!Be(e.target,this.mirror))switch(e.type){case"characterData":{let r=e.target.textContent;!M(e.target,this.blockClass,this.blockSelector,!1)&&r!==e.oldValue&&this.texts.push({value:ht(e.target,this.maskTextClass,this.maskTextSelector)&&r?this.maskTextFn?this.maskTextFn(r):r.replace(/[\S]/g,"*"):r,node:e.target});break}case"attributes":{let r=e.target,i=e.target.getAttribute(e.attributeName);if(e.attributeName==="value"&&(i=Re({maskInputOptions:this.maskInputOptions,tagName:e.target.tagName,type:e.target.getAttribute("type"),value:i,maskInputFn:this.maskInputFn})),M(e.target,this.blockClass,this.blockSelector,!1)||i===e.oldValue)return;let n=this.attributes.find(o=>o.node===e.target);if(r.tagName==="IFRAME"&&e.attributeName==="src"&&!this.keepIframeSrcFn(i))if(!r.contentDocument)e.attributeName="rr_src";else return;if(n||(n={node:e.target,attributes:{}},this.attributes.push(n)),e.attributeName==="style"){let o=this.doc.createElement("span");e.oldValue&&o.setAttribute("style",e.oldValue),(n.attributes.style===void 0||n.attributes.style===null)&&(n.attributes.style={});let a=n.attributes.style;for(let s of Array.from(r.style)){let c=r.style.getPropertyValue(s),l=r.style.getPropertyPriority(s);(c!==o.style.getPropertyValue(s)||l!==o.style.getPropertyPriority(s))&&(l===""?a[s]=c:a[s]=[c,l])}for(let s of Array.from(o.style))r.style.getPropertyValue(s)===""&&(a[s]=!1)}else n.attributes[e.attributeName]=ut(this.doc,r.tagName,e.attributeName,i);break}case"childList":{if(M(e.target,this.blockClass,this.blockSelector,!0))return;e.addedNodes.forEach(r=>this.genAdds(r,e.target)),e.removedNodes.forEach(r=>{let i=this.mirror.getId(r),n=pe(e.target)?this.mirror.getId(e.target.host):this.mirror.getId(e.target);M(e.target,this.blockClass,this.blockSelector,!1)||Be(r,this.mirror)||!Pt(r,this.mirror)||(this.addedSet.has(r)?(mt(this.addedSet,r),this.droppedSet.add(r)):this.addedSet.has(e.target)&&i===-1||pt(e.target,this.mirror)||(this.movedSet.has(r)&&this.movedMap[_t(i,n)]?mt(this.movedSet,r):this.removes.push({parentId:n,id:i,isShadow:pe(e.target)&&ue(e.target)?!0:void 0})),this.mapRemoves.push(r))});break}}},this.genAdds=(e,r)=>{if(this.mirror.hasNode(e)){if(Be(e,this.mirror))return;this.movedSet.add(e);let i=null;r&&this.mirror.hasNode(r)&&(i=this.mirror.getId(r)),i&&i!==-1&&(this.movedMap[_t(this.mirror.getId(e),i)]=!0)}else this.addedSet.add(e),this.droppedSet.delete(e);M(e,this.blockClass,this.blockSelector,!1)||e.childNodes.forEach(i=>this.genAdds(i))}}init(e){["mutationCb","blockClass","blockSelector","maskTextClass","maskTextSelector","inlineStylesheet","maskInputOptions","maskTextFn","maskInputFn","keepIframeSrcFn","recordCanvas","inlineImages","slimDOMOptions","dataURLOptions","doc","mirror","iframeManager","stylesheetManager","shadowDomManager","canvasManager"].forEach(r=>{this[r]=e[r]})}freeze(){this.frozen=!0,this.canvasManager.freeze()}unfreeze(){this.frozen=!1,this.canvasManager.unfreeze(),this.emit()}isFrozen(){return this.frozen}lock(){this.locked=!0,this.canvasManager.lock()}unlock(){this.locked=!1,this.canvasManager.unlock(),this.emit()}reset(){this.shadowDomManager.reset(),this.canvasManager.reset()}};function mt(t,e){t.delete(e),e.childNodes.forEach(r=>mt(t,r))}function Gt(t,e,r){return t.length===0?!1:Ht(t,e,r)}function Ht(t,e,r){let{parentNode:i}=e;if(!i)return!1;let n=r.getId(i);return t.some(o=>o.id===n)?!0:Ht(t,i,r)}function Ut(t,e){return t.size===0?!1:Zt(t,e)}function Zt(t,e){let{parentNode:r}=e;return r?t.has(r)?!0:Zt(t,r):!1}var le=[],Yt=typeof CSSGroupingRule!="undefined",Jt=typeof CSSMediaRule!="undefined",Qt=typeof CSSSupportsRule!="undefined",jt=typeof CSSConditionRule!="undefined";function Ee(t){try{if("composedPath"in t){let e=t.composedPath();if(e.length)return e[0]}else if("path"in t&&t.path.length)return t.path[0];return t.target}catch(e){return t.target}}function vt(t,e){var r,i;let n=new He;le.push(n),n.init(t);let o=window.MutationObserver||window.__rrMutationObserver,a=(i=(r=window==null?void 0:window.Zone)===null||r===void 0?void 0:r.__symbol__)===null||i===void 0?void 0:i.call(r,"MutationObserver");a&&window[a]&&(o=window[a]);let s=new o(n.processMutations.bind(n));return s.observe(e,{attributes:!0,attributeOldValue:!0,characterData:!0,characterDataOldValue:!0,childList:!0,subtree:!0}),s}function Yr({mousemoveCb:t,sampling:e,doc:r,mirror:i}){if(e.mousemove===!1)return()=>{};let n=typeof e.mousemove=="number"?e.mousemove:50,o=typeof e.mousemoveCallback=="number"?e.mousemoveCallback:500,a=[],s,c=Se(u=>{let p=Date.now()-s;t(a.map(f=>(f.timeOffset-=p,f)),u),a=[],s=null},o),l=Se(u=>{let p=Ee(u),{clientX:f,clientY:h}=ft(u)?u.changedTouches[0]:u;s||(s=Date.now()),a.push({x:f,y:h,id:i.getId(p),timeOffset:Date.now()-s}),c(typeof DragEvent!="undefined"&&u instanceof DragEvent?S.Drag:u instanceof MouseEvent?S.MouseMove:S.TouchMove)},n,{trailing:!1}),d=[P("mousemove",l,r),P("touchmove",l,r),P("drag",l,r)];return()=>{d.forEach(u=>u())}}function Jr({mouseInteractionCb:t,doc:e,mirror:r,blockClass:i,blockSelector:n,sampling:o}){if(o.mouseInteraction===!1)return()=>{};let a=o.mouseInteraction===!0||o.mouseInteraction===void 0?{}:o.mouseInteraction,s=[],c=l=>d=>{let u=Ee(d);if(M(u,i,n,!0))return;let p=ft(d)?d.changedTouches[0]:d;if(!p)return;let f=r.getId(u),{clientX:h,clientY:v}=p;t({type:Ue[l],id:f,x:h,y:v})};return Object.keys(Ue).filter(l=>Number.isNaN(Number(l))&&!l.endsWith("_Departed")&&a[l]!==!1).forEach(l=>{let d=l.toLowerCase(),u=c(l);s.push(P(d,u,e))}),()=>{s.forEach(l=>l())}}function It({scrollCb:t,doc:e,mirror:r,blockClass:i,blockSelector:n,sampling:o}){let a=Se(s=>{let c=Ee(s);if(!c||M(c,i,n,!0))return;let l=r.getId(c);if(c===e){let d=e.scrollingElement||e.documentElement;t({id:l,x:d.scrollLeft,y:d.scrollTop})}else t({id:l,x:c.scrollLeft,y:c.scrollTop})},o.scroll||100);return P("scroll",a,e)}function Qr({viewportResizeCb:t}){let e=-1,r=-1,i=Se(()=>{let n=We(),o=Pe();(e!==n||r!==o)&&(t({width:Number(o),height:Number(n)}),e=n,r=o)},200);return P("resize",i,window)}function Kt(t,e){let r=Object.assign({},t);return e||delete r.userTriggered,r}var jr=["INPUT","TEXTAREA","SELECT"],zt=new WeakMap;function Xr({inputCb:t,doc:e,mirror:r,blockClass:i,blockSelector:n,ignoreClass:o,maskInputOptions:a,maskInputFn:s,sampling:c,userTriggeredOnInput:l}){function d(I){let g=Ee(I),m=I.isTrusted;if(g&&g.tagName==="OPTION"&&(g=g.parentElement),!g||!g.tagName||jr.indexOf(g.tagName)<0||M(g,i,n,!0))return;let A=g.type;if(g.classList.contains(o))return;let B=g.value,D=!1;A==="radio"||A==="checkbox"?D=g.checked:(a[g.tagName.toLowerCase()]||a[A])&&(B=Re({maskInputOptions:a,tagName:g.tagName,type:A,value:B,maskInputFn:s})),u(g,Kt({text:B,isChecked:D,userTriggered:m},l));let W=g.name;A==="radio"&&W&&D&&e.querySelectorAll(`input[type="radio"][name="${W}"]`).forEach(k=>{k!==g&&u(k,Kt({text:k.value,isChecked:!D,userTriggered:!1},l))})}function u(I,g){let m=zt.get(I);if(!m||m.text!==g.text||m.isChecked!==g.isChecked){zt.set(I,g);let A=r.getId(I);t(Object.assign(Object.assign({},g),{id:A}))}}let f=(c.input==="last"?["change"]:["input","change"]).map(I=>P(I,d,e)),h=e.defaultView;if(!h)return()=>{f.forEach(I=>I())};let v=h.Object.getOwnPropertyDescriptor(h.HTMLInputElement.prototype,"value"),C=[[h.HTMLInputElement.prototype,"value"],[h.HTMLInputElement.prototype,"checked"],[h.HTMLSelectElement.prototype,"value"],[h.HTMLTextAreaElement.prototype,"value"],[h.HTMLSelectElement.prototype,"selectedIndex"],[h.HTMLOptionElement.prototype,"selected"]];return v&&v.set&&f.push(...C.map(I=>fe(I[0],I[1],{set(){d({target:this})}},!1,h))),()=>{f.forEach(I=>I())}}function Ze(t){let e=[];function r(i,n){if(Yt&&i.parentRule instanceof CSSGroupingRule||Jt&&i.parentRule instanceof CSSMediaRule||Qt&&i.parentRule instanceof CSSSupportsRule||jt&&i.parentRule instanceof CSSConditionRule){let a=Array.from(i.parentRule.cssRules).indexOf(i);n.unshift(a)}else if(i.parentStyleSheet){let a=Array.from(i.parentStyleSheet.cssRules).indexOf(i);n.unshift(a)}return n}return r(t,e)}function ce(t,e,r){let i,n;return t?(t.ownerNode?i=e.getId(t.ownerNode):n=r.getId(t),{styleId:n,id:i}):{}}function qr({styleSheetRuleCb:t,mirror:e,stylesheetManager:r},{win:i}){let n=i.CSSStyleSheet.prototype.insertRule;i.CSSStyleSheet.prototype.insertRule=function(d,u){let{id:p,styleId:f}=ce(this,e,r.styleMirror);return(p&&p!==-1||f&&f!==-1)&&t({id:p,styleId:f,adds:[{rule:d,index:u}]}),n.apply(this,[d,u])};let o=i.CSSStyleSheet.prototype.deleteRule;i.CSSStyleSheet.prototype.deleteRule=function(d){let{id:u,styleId:p}=ce(this,e,r.styleMirror);return(u&&u!==-1||p&&p!==-1)&&t({id:u,styleId:p,removes:[{index:d}]}),o.apply(this,[d])};let a;i.CSSStyleSheet.prototype.replace&&(a=i.CSSStyleSheet.prototype.replace,i.CSSStyleSheet.prototype.replace=function(d){let{id:u,styleId:p}=ce(this,e,r.styleMirror);return(u&&u!==-1||p&&p!==-1)&&t({id:u,styleId:p,replace:d}),a.apply(this,[d])});let s;i.CSSStyleSheet.prototype.replaceSync&&(s=i.CSSStyleSheet.prototype.replaceSync,i.CSSStyleSheet.prototype.replaceSync=function(d){let{id:u,styleId:p}=ce(this,e,r.styleMirror);return(u&&u!==-1||p&&p!==-1)&&t({id:u,styleId:p,replaceSync:d}),s.apply(this,[d])});let c={};Yt?c.CSSGroupingRule=i.CSSGroupingRule:(Jt&&(c.CSSMediaRule=i.CSSMediaRule),jt&&(c.CSSConditionRule=i.CSSConditionRule),Qt&&(c.CSSSupportsRule=i.CSSSupportsRule));let l={};return Object.entries(c).forEach(([d,u])=>{l[d]={insertRule:u.prototype.insertRule,deleteRule:u.prototype.deleteRule},u.prototype.insertRule=function(p,f){let{id:h,styleId:v}=ce(this.parentStyleSheet,e,r.styleMirror);return(h&&h!==-1||v&&v!==-1)&&t({id:h,styleId:v,adds:[{rule:p,index:[...Ze(this),f||0]}]}),l[d].insertRule.apply(this,[p,f])},u.prototype.deleteRule=function(p){let{id:f,styleId:h}=ce(this.parentStyleSheet,e,r.styleMirror);return(f&&f!==-1||h&&h!==-1)&&t({id:f,styleId:h,removes:[{index:[...Ze(this),p]}]}),l[d].deleteRule.apply(this,[p])}}),()=>{i.CSSStyleSheet.prototype.insertRule=n,i.CSSStyleSheet.prototype.deleteRule=o,a&&(i.CSSStyleSheet.prototype.replace=a),s&&(i.CSSStyleSheet.prototype.replaceSync=s),Object.entries(c).forEach(([d,u])=>{u.prototype.insertRule=l[d].insertRule,u.prototype.deleteRule=l[d].deleteRule})}}function yt({mirror:t,stylesheetManager:e},r){var i,n,o;let a=null;r.nodeName==="#document"?a=t.getId(r):a=t.getId(r.host);let s=r.nodeName==="#document"?(i=r.defaultView)===null||i===void 0?void 0:i.Document:(o=(n=r.ownerDocument)===null||n===void 0?void 0:n.defaultView)===null||o===void 0?void 0:o.ShadowRoot,c=Object.getOwnPropertyDescriptor(s==null?void 0:s.prototype,"adoptedStyleSheets");return a===null||a===-1||!s||!c?()=>{}:(Object.defineProperty(r,"adoptedStyleSheets",{configurable:c.configurable,enumerable:c.enumerable,get(){var l;return(l=c.get)===null||l===void 0?void 0:l.call(this)},set(l){var d;let u=(d=c.set)===null||d===void 0?void 0:d.call(this,l);if(a!==null&&a!==-1)try{e.adoptStyleSheets(l,a)}catch(p){}return u}}),()=>{Object.defineProperty(r,"adoptedStyleSheets",{configurable:c.configurable,enumerable:c.enumerable,get:c.get,set:c.set})})}function $r({styleDeclarationCb:t,mirror:e,ignoreCSSAttributes:r,stylesheetManager:i},{win:n}){let o=n.CSSStyleDeclaration.prototype.setProperty;n.CSSStyleDeclaration.prototype.setProperty=function(s,c,l){var d;if(r.has(s))return o.apply(this,[s,c,l]);let{id:u,styleId:p}=ce((d=this.parentRule)===null||d===void 0?void 0:d.parentStyleSheet,e,i.styleMirror);return(u&&u!==-1||p&&p!==-1)&&t({id:u,styleId:p,set:{property:s,value:c,priority:l},index:Ze(this.parentRule)}),o.apply(this,[s,c,l])};let a=n.CSSStyleDeclaration.prototype.removeProperty;return n.CSSStyleDeclaration.prototype.removeProperty=function(s){var c;if(r.has(s))return a.apply(this,[s]);let{id:l,styleId:d}=ce((c=this.parentRule)===null||c===void 0?void 0:c.parentStyleSheet,e,i.styleMirror);return(l&&l!==-1||d&&d!==-1)&&t({id:l,styleId:d,remove:{property:s},index:Ze(this.parentRule)}),a.apply(this,[s])},()=>{n.CSSStyleDeclaration.prototype.setProperty=o,n.CSSStyleDeclaration.prototype.removeProperty=a}}function ei({mediaInteractionCb:t,blockClass:e,blockSelector:r,mirror:i,sampling:n}){let o=s=>Se(c=>{let l=Ee(c);if(!l||M(l,e,r,!0))return;let{currentTime:d,volume:u,muted:p,playbackRate:f}=l;t({type:s,id:i.getId(l),currentTime:d,volume:u,muted:p,playbackRate:f})},n.media||500),a=[P("play",o(0)),P("pause",o(1)),P("seeked",o(2)),P("volumechange",o(3)),P("ratechange",o(4))];return()=>{a.forEach(s=>s())}}function ti({fontCb:t,doc:e}){let r=e.defaultView;if(!r)return()=>{};let i=[],n=new WeakMap,o=r.FontFace;r.FontFace=function(c,l,d){let u=new o(c,l,d);return n.set(u,{family:c,buffer:typeof l!="string",descriptors:d,fontSource:typeof l=="string"?l:JSON.stringify(Array.from(new Uint8Array(l)))}),u};let a=ee(e.fonts,"add",function(s){return function(c){return setTimeout(()=>{let l=n.get(c);l&&(t(l),n.delete(c))},0),s.apply(this,[c])}});return i.push(()=>{r.FontFace=o}),i.push(a),()=>{i.forEach(s=>s())}}function ri(t){let{doc:e,mirror:r,blockClass:i,blockSelector:n,selectionCb:o}=t,a=!0,s=()=>{let c=e.getSelection();if(!c||a&&(c!=null&&c.isCollapsed))return;a=c.isCollapsed||!1;let l=[],d=c.rangeCount||0;for(let u=0;u<d;u++){let p=c.getRangeAt(u),{startContainer:f,startOffset:h,endContainer:v,endOffset:C}=p;M(f,i,n,!0)||M(v,i,n,!0)||l.push({start:r.getId(f),startOffset:h,end:r.getId(v),endOffset:C})}o({ranges:l})};return s(),P("selectionchange",s)}function ii(t,e){let{mutationCb:r,mousemoveCb:i,mouseInteractionCb:n,scrollCb:o,viewportResizeCb:a,inputCb:s,mediaInteractionCb:c,styleSheetRuleCb:l,styleDeclarationCb:d,canvasMutationCb:u,fontCb:p,selectionCb:f}=t;t.mutationCb=(...h)=>{e.mutation&&e.mutation(...h),r(...h)},t.mousemoveCb=(...h)=>{e.mousemove&&e.mousemove(...h),i(...h)},t.mouseInteractionCb=(...h)=>{e.mouseInteraction&&e.mouseInteraction(...h),n(...h)},t.scrollCb=(...h)=>{e.scroll&&e.scroll(...h),o(...h)},t.viewportResizeCb=(...h)=>{e.viewportResize&&e.viewportResize(...h),a(...h)},t.inputCb=(...h)=>{e.input&&e.input(...h),s(...h)},t.mediaInteractionCb=(...h)=>{e.mediaInteaction&&e.mediaInteaction(...h),c(...h)},t.styleSheetRuleCb=(...h)=>{e.styleSheetRule&&e.styleSheetRule(...h),l(...h)},t.styleDeclarationCb=(...h)=>{e.styleDeclaration&&e.styleDeclaration(...h),d(...h)},t.canvasMutationCb=(...h)=>{e.canvasMutation&&e.canvasMutation(...h),u(...h)},t.fontCb=(...h)=>{e.font&&e.font(...h),p(...h)},t.selectionCb=(...h)=>{e.selection&&e.selection(...h),f(...h)}}function Xt(t,e={}){let r=t.doc.defaultView;if(!r)return()=>{};ii(t,e);let i=vt(t,t.doc),n=Yr(t),o=Jr(t),a=It(t),s=Qr(t),c=Xr(t),l=ei(t),d=qr(t,{win:r}),u=yt(t,t.doc),p=$r(t,{win:r}),f=t.collectFonts?ti(t):()=>{},h=ri(t),v=[];for(let C of t.plugins)v.push(C.observer(C.callback,r,C.options));return()=>{le.forEach(C=>C.reset()),i.disconnect(),n(),o(),a(),s(),c(),l(),d(),u(),p(),f(),h(),v.forEach(C=>C())}}var Me=class{constructor(e){this.generateIdFn=e,this.iframeIdToRemoteIdMap=new WeakMap,this.iframeRemoteIdToIdMap=new WeakMap}getId(e,r,i,n){let o=i||this.getIdToRemoteIdMap(e),a=n||this.getRemoteIdToIdMap(e),s=o.get(r);return s||(s=this.generateIdFn(),o.set(r,s),a.set(s,r)),s}getIds(e,r){let i=this.getIdToRemoteIdMap(e),n=this.getRemoteIdToIdMap(e);return r.map(o=>this.getId(e,o,i,n))}getRemoteId(e,r,i){let n=i||this.getRemoteIdToIdMap(e);if(typeof r!="number")return r;let o=n.get(r);return o||-1}getRemoteIds(e,r){let i=this.getRemoteIdToIdMap(e);return r.map(n=>this.getRemoteId(e,n,i))}reset(e){if(!e){this.iframeIdToRemoteIdMap=new WeakMap,this.iframeRemoteIdToIdMap=new WeakMap;return}this.iframeIdToRemoteIdMap.delete(e),this.iframeRemoteIdToIdMap.delete(e)}getIdToRemoteIdMap(e){let r=this.iframeIdToRemoteIdMap.get(e);return r||(r=new Map,this.iframeIdToRemoteIdMap.set(e,r)),r}getRemoteIdToIdMap(e){let r=this.iframeRemoteIdToIdMap.get(e);return r||(r=new Map,this.iframeRemoteIdToIdMap.set(e,r)),r}};var Ke=class{constructor(e){this.iframes=new WeakMap,this.crossOriginIframeMap=new WeakMap,this.crossOriginIframeMirror=new Me(lt),this.mutationCb=e.mutationCb,this.wrappedEmit=e.wrappedEmit,this.stylesheetManager=e.stylesheetManager,this.recordCrossOriginIframes=e.recordCrossOriginIframes,this.crossOriginIframeStyleMirror=new Me(this.stylesheetManager.styleMirror.generateId.bind(this.stylesheetManager.styleMirror)),this.mirror=e.mirror,this.recordCrossOriginIframes&&window.addEventListener("message",this.handleMessage.bind(this))}addIframe(e){this.iframes.set(e,!0),e.contentWindow&&this.crossOriginIframeMap.set(e.contentWindow,e)}addLoadListener(e){this.loadListener=e}attachIframe(e,r){var i;this.mutationCb({adds:[{parentId:this.mirror.getId(e),nextId:null,node:r}],removes:[],texts:[],attributes:[],isAttachIframe:!0}),(i=this.loadListener)===null||i===void 0||i.call(this,e),e.contentDocument&&e.contentDocument.adoptedStyleSheets&&e.contentDocument.adoptedStyleSheets.length>0&&this.stylesheetManager.adoptStyleSheets(e.contentDocument.adoptedStyleSheets,this.mirror.getId(e.contentDocument))}handleMessage(e){if(e.data.type==="rrweb"){if(!e.source)return;let i=this.crossOriginIframeMap.get(e.source);if(!i)return;let n=this.transformCrossOriginEvent(i,e.data.event);n&&this.wrappedEmit(n,e.data.isCheckout)}}transformCrossOriginEvent(e,r){var i;switch(r.type){case b.FullSnapshot:return this.crossOriginIframeMirror.reset(e),this.crossOriginIframeStyleMirror.reset(e),this.replaceIdOnNode(r.data.node,e),{timestamp:r.timestamp,type:b.IncrementalSnapshot,data:{source:S.Mutation,adds:[{parentId:this.mirror.getId(e),nextId:null,node:r.data.node}],removes:[],texts:[],attributes:[],isAttachIframe:!0}};case b.Meta:case b.Load:case b.DomContentLoaded:return!1;case b.Plugin:return r;case b.Custom:return this.replaceIds(r.data.payload,e,["id","parentId","previousId","nextId"]),r;case b.IncrementalSnapshot:switch(r.data.source){case S.Mutation:return r.data.adds.forEach(n=>{this.replaceIds(n,e,["parentId","nextId","previousId"]),this.replaceIdOnNode(n.node,e)}),r.data.removes.forEach(n=>{this.replaceIds(n,e,["parentId","id"])}),r.data.attributes.forEach(n=>{this.replaceIds(n,e,["id"])}),r.data.texts.forEach(n=>{this.replaceIds(n,e,["id"])}),r;case S.Drag:case S.TouchMove:case S.MouseMove:return r.data.positions.forEach(n=>{this.replaceIds(n,e,["id"])}),r;case S.ViewportResize:return!1;case S.MediaInteraction:case S.MouseInteraction:case S.Scroll:case S.CanvasMutation:case S.Input:return this.replaceIds(r.data,e,["id"]),r;case S.StyleSheetRule:case S.StyleDeclaration:return this.replaceIds(r.data,e,["id"]),this.replaceStyleIds(r.data,e,["styleId"]),r;case S.Font:return r;case S.Selection:return r.data.ranges.forEach(n=>{this.replaceIds(n,e,["start","end"])}),r;case S.AdoptedStyleSheet:return this.replaceIds(r.data,e,["id"]),this.replaceStyleIds(r.data,e,["styleIds"]),(i=r.data.styles)===null||i===void 0||i.forEach(n=>{this.replaceStyleIds(n,e,["styleId"])}),r}}}replace(e,r,i,n){for(let o of n)!Array.isArray(r[o])&&typeof r[o]!="number"||(Array.isArray(r[o])?r[o]=e.getIds(i,r[o]):r[o]=e.getId(i,r[o]));return r}replaceIds(e,r,i){return this.replace(this.crossOriginIframeMirror,e,r,i)}replaceStyleIds(e,r,i){return this.replace(this.crossOriginIframeStyleMirror,e,r,i)}replaceIdOnNode(e,r){this.replaceIds(e,r,["id"]),"childNodes"in e&&e.childNodes.forEach(i=>{this.replaceIdOnNode(i,r)})}};var ze=class{constructor(e){this.shadowDoms=new WeakSet,this.restorePatches=[],this.mutationCb=e.mutationCb,this.scrollCb=e.scrollCb,this.bypassOptions=e.bypassOptions,this.mirror=e.mirror;let r=this;this.restorePatches.push(ee(Element.prototype,"attachShadow",function(i){return function(n){let o=i.call(this,n);return this.shadowRoot&&r.addShadowRoot(this.shadowRoot,this.ownerDocument),o}}))}addShadowRoot(e,r){ue(e)&&(this.shadowDoms.has(e)||(this.shadowDoms.add(e),vt(Object.assign(Object.assign({},this.bypassOptions),{doc:r,mutationCb:this.mutationCb,mirror:this.mirror,shadowDomManager:this}),e),It(Object.assign(Object.assign({},this.bypassOptions),{scrollCb:this.scrollCb,doc:e,mirror:this.mirror})),setTimeout(()=>{e.adoptedStyleSheets&&e.adoptedStyleSheets.length>0&&this.bypassOptions.stylesheetManager.adoptStyleSheets(e.adoptedStyleSheets,this.mirror.getId(e.host)),yt({mirror:this.mirror,stylesheetManager:this.bypassOptions.stylesheetManager},e)},0)))}observeAttachShadow(e){if(e.contentWindow){let r=this;this.restorePatches.push(ee(e.contentWindow.HTMLElement.prototype,"attachShadow",function(i){return function(n){let o=i.call(this,n);return this.shadowRoot&&r.addShadowRoot(this.shadowRoot,e.contentDocument),o}}))}}reset(){this.restorePatches.forEach(e=>e()),this.shadowDoms=new WeakSet}};function qt(t,e){var r={};for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&e.indexOf(i)<0&&(r[i]=t[i]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var n=0,i=Object.getOwnPropertySymbols(t);n<i.length;n++)e.indexOf(i[n])<0&&Object.prototype.propertyIsEnumerable.call(t,i[n])&&(r[i[n]]=t[i[n]]);return r}function $t(t,e,r,i){function n(o){return o instanceof r?o:new r(function(a){a(o)})}return new(r||(r=Promise))(function(o,a){function s(d){try{l(i.next(d))}catch(u){a(u)}}function c(d){try{l(i.throw(d))}catch(u){a(u)}}function l(d){d.done?o(d.value):n(d.value).then(s,c)}l((i=i.apply(t,e||[])).next())})}var be="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",ni=typeof Uint8Array=="undefined"?[]:new Uint8Array(256);for(xe=0;xe<be.length;xe++)ni[be.charCodeAt(xe)]=xe;var xe,er=function(t){var e=new Uint8Array(t),r,i=e.length,n="";for(r=0;r<i;r+=3)n+=be[e[r]>>2],n+=be[(e[r]&3)<<4|e[r+1]>>4],n+=be[(e[r+1]&15)<<2|e[r+2]>>6],n+=be[e[r+2]&63];return i%3===2?n=n.substring(0,n.length-1)+"=":i%3===1&&(n=n.substring(0,n.length-2)+"=="),n};var tr=new Map;function oi(t,e){let r=tr.get(t);return r||(r=new Map,tr.set(t,r)),r.has(e)||r.set(e,[]),r.get(e)}var Ct=(t,e,r)=>{if(!t||!(rr(t,e)||typeof t=="object"))return;let i=t.constructor.name,n=oi(r,i),o=n.indexOf(t);return o===-1&&(o=n.length,n.push(t)),o};function Ye(t,e,r){if(t instanceof Array)return t.map(i=>Ye(i,e,r));if(t===null)return t;if(t instanceof Float32Array||t instanceof Float64Array||t instanceof Int32Array||t instanceof Uint32Array||t instanceof Uint8Array||t instanceof Uint16Array||t instanceof Int16Array||t instanceof Int8Array||t instanceof Uint8ClampedArray)return{rr_type:t.constructor.name,args:[Object.values(t)]};if(t instanceof ArrayBuffer){let i=t.constructor.name,n=er(t);return{rr_type:i,base64:n}}else{if(t instanceof DataView)return{rr_type:t.constructor.name,args:[Ye(t.buffer,e,r),t.byteOffset,t.byteLength]};if(t instanceof HTMLImageElement){let i=t.constructor.name,{src:n}=t;return{rr_type:i,src:n}}else if(t instanceof HTMLCanvasElement){let i="HTMLImageElement",n=t.toDataURL();return{rr_type:i,src:n}}else{if(t instanceof ImageData)return{rr_type:t.constructor.name,args:[Ye(t.data,e,r),t.width,t.height]};if(rr(t,e)||typeof t=="object"){let i=t.constructor.name,n=Ct(t,e,r);return{rr_type:i,index:n}}}}return t}var Je=(t,e,r)=>[...t].map(i=>Ye(i,e,r)),rr=(t,e)=>!!["WebGLActiveInfo","WebGLBuffer","WebGLFramebuffer","WebGLProgram","WebGLRenderbuffer","WebGLShader","WebGLShaderPrecisionFormat","WebGLTexture","WebGLUniformLocation","WebGLVertexArrayObject","WebGLVertexArrayObjectOES"].filter(n=>typeof e[n]=="function").find(n=>t instanceof e[n]);function ir(t,e,r,i){let n=[],o=Object.getOwnPropertyNames(e.CanvasRenderingContext2D.prototype);for(let a of o)try{if(typeof e.CanvasRenderingContext2D.prototype[a]!="function")continue;let s=ee(e.CanvasRenderingContext2D.prototype,a,function(c){return function(...l){return M(this.canvas,r,i,!0)||setTimeout(()=>{let d=Je([...l],e,this);t(this.canvas,{type:oe["2D"],property:a,args:d})},0),c.apply(this,l)}});n.push(s)}catch(s){let c=fe(e.CanvasRenderingContext2D.prototype,a,{set(l){t(this.canvas,{type:oe["2D"],property:a,args:[l],setter:!0})}});n.push(c)}return()=>{n.forEach(a=>a())}}function St(t,e,r){let i=[];try{let n=ee(t.HTMLCanvasElement.prototype,"getContext",function(o){return function(a,...s){return M(this,e,r,!0)||"__context"in this||(this.__context=a),o.apply(this,[a,...s])}});i.push(n)}catch(n){console.error("failed to patch HTMLCanvasElement.prototype.getContext")}return()=>{i.forEach(n=>n())}}function nr(t,e,r,i,n,o,a){let s=[],c=Object.getOwnPropertyNames(t);for(let l of c)if(!["isContextLost","canvas","drawingBufferWidth","drawingBufferHeight"].includes(l))try{if(typeof t[l]!="function")continue;let d=ee(t,l,function(u){return function(...p){let f=u.apply(this,p);if(Ct(f,a,this),!M(this.canvas,i,n,!0)){let h=Je([...p],a,this),v={type:e,property:l,args:h};r(this.canvas,v)}return f}});s.push(d)}catch(d){let u=fe(t,l,{set(p){r(this.canvas,{type:e,property:l,args:[p],setter:!0})}});s.push(u)}return s}function or(t,e,r,i,n){let o=[];return o.push(...nr(e.WebGLRenderingContext.prototype,oe.WebGL,t,r,i,n,e)),typeof e.WebGL2RenderingContext!="undefined"&&o.push(...nr(e.WebGL2RenderingContext.prototype,oe.WebGL2,t,r,i,n,e)),()=>{o.forEach(a=>a())}}var bt=null;try{sr=typeof module!="undefined"&&typeof module.require=="function"&&module.require("worker_threads")||typeof __non_webpack_require__=="function"&&__non_webpack_require__("worker_threads")||typeof nt=="function"&&nt("worker_threads"),bt=sr.Worker}catch(t){}var sr;function si(t,e){return Buffer.from(t,"base64").toString(e?"utf16":"utf8")}function ar(t,e,r){var i=e===void 0?null:e,n=r===void 0?!1:r,o=si(t,n),a=o.indexOf(`
4
+ `,10)+1,s=o.substring(a)+(i?"//# sourceMappingURL="+i:"");return function(l){return new bt(s,Object.assign({},l,{eval:!0}))}}function ai(t,e){var r=atob(t);if(e){for(var i=new Uint8Array(r.length),n=0,o=r.length;n<o;++n)i[n]=r.charCodeAt(n);return String.fromCharCode.apply(null,new Uint16Array(i.buffer))}return r}function ci(t,e,r){var i=e===void 0?null:e,n=r===void 0?!1:r,o=ai(t,n),a=o.indexOf(`
5
+ `,10)+1,s=o.substring(a)+(i?"//# sourceMappingURL="+i:""),c=new Blob([s],{type:"application/javascript"});return URL.createObjectURL(c)}function cr(t,e,r){var i;return function(o){return i=i||ci(t,e,r),new Worker(i,o)}}var li=Object.prototype.toString.call(typeof process!="undefined"?process:0)==="[object process]";function lr(){return li}function dr(t,e,r){return lr()?ar(t,e,r):cr(t,e,r)}var ur=dr("Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwooZnVuY3Rpb24gKCkgewogICAgJ3VzZSBzdHJpY3QnOwoKICAgIC8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLg0KDQogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55DQogICAgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLg0KDQogICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEgNCiAgICBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkNCiAgICBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsDQogICAgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NDQogICAgTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1INCiAgICBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SDQogICAgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4NCiAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KDQogICAgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikgew0KICAgICAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH0NCiAgICAgICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7DQogICAgICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9DQogICAgICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvclsidGhyb3ciXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9DQogICAgICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfQ0KICAgICAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpOw0KICAgICAgICB9KTsNCiAgICB9CgogICAgLyoKICAgICAqIGJhc2U2NC1hcnJheWJ1ZmZlciAxLjAuMSA8aHR0cHM6Ly9naXRodWIuY29tL25pa2xhc3ZoL2Jhc2U2NC1hcnJheWJ1ZmZlcj4KICAgICAqIENvcHlyaWdodCAoYykgMjAyMSBOaWtsYXMgdm9uIEhlcnR6ZW4gPGh0dHBzOi8vaGVydHplbi5jb20+CiAgICAgKiBSZWxlYXNlZCB1bmRlciBNSVQgTGljZW5zZQogICAgICovCiAgICB2YXIgY2hhcnMgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyc7CiAgICAvLyBVc2UgYSBsb29rdXAgdGFibGUgdG8gZmluZCB0aGUgaW5kZXguCiAgICB2YXIgbG9va3VwID0gdHlwZW9mIFVpbnQ4QXJyYXkgPT09ICd1bmRlZmluZWQnID8gW10gOiBuZXcgVWludDhBcnJheSgyNTYpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFycy5sZW5ndGg7IGkrKykgewogICAgICAgIGxvb2t1cFtjaGFycy5jaGFyQ29kZUF0KGkpXSA9IGk7CiAgICB9CiAgICB2YXIgZW5jb2RlID0gZnVuY3Rpb24gKGFycmF5YnVmZmVyKSB7CiAgICAgICAgdmFyIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlidWZmZXIpLCBpLCBsZW4gPSBieXRlcy5sZW5ndGgsIGJhc2U2NCA9ICcnOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gMykgewogICAgICAgICAgICBiYXNlNjQgKz0gY2hhcnNbYnl0ZXNbaV0gPj4gMl07CiAgICAgICAgICAgIGJhc2U2NCArPSBjaGFyc1soKGJ5dGVzW2ldICYgMykgPDwgNCkgfCAoYnl0ZXNbaSArIDFdID4+IDQpXTsKICAgICAgICAgICAgYmFzZTY0ICs9IGNoYXJzWygoYnl0ZXNbaSArIDFdICYgMTUpIDw8IDIpIHwgKGJ5dGVzW2kgKyAyXSA+PiA2KV07CiAgICAgICAgICAgIGJhc2U2NCArPSBjaGFyc1tieXRlc1tpICsgMl0gJiA2M107CiAgICAgICAgfQogICAgICAgIGlmIChsZW4gJSAzID09PSAyKSB7CiAgICAgICAgICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDEpICsgJz0nOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChsZW4gJSAzID09PSAxKSB7CiAgICAgICAgICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDIpICsgJz09JzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGJhc2U2NDsKICAgIH07CgogICAgY29uc3QgbGFzdEJsb2JNYXAgPSBuZXcgTWFwKCk7DQogICAgY29uc3QgdHJhbnNwYXJlbnRCbG9iTWFwID0gbmV3IE1hcCgpOw0KICAgIGZ1bmN0aW9uIGdldFRyYW5zcGFyZW50QmxvYkZvcih3aWR0aCwgaGVpZ2h0LCBkYXRhVVJMT3B0aW9ucykgew0KICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkgew0KICAgICAgICAgICAgY29uc3QgaWQgPSBgJHt3aWR0aH0tJHtoZWlnaHR9YDsNCiAgICAgICAgICAgIGlmICgnT2Zmc2NyZWVuQ2FudmFzJyBpbiBnbG9iYWxUaGlzKSB7DQogICAgICAgICAgICAgICAgaWYgKHRyYW5zcGFyZW50QmxvYk1hcC5oYXMoaWQpKQ0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJhbnNwYXJlbnRCbG9iTWFwLmdldChpZCk7DQogICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2NyZWVuID0gbmV3IE9mZnNjcmVlbkNhbnZhcyh3aWR0aCwgaGVpZ2h0KTsNCiAgICAgICAgICAgICAgICBvZmZzY3JlZW4uZ2V0Q29udGV4dCgnMmQnKTsNCiAgICAgICAgICAgICAgICBjb25zdCBibG9iID0geWllbGQgb2Zmc2NyZWVuLmNvbnZlcnRUb0Jsb2IoZGF0YVVSTE9wdGlvbnMpOw0KICAgICAgICAgICAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0geWllbGQgYmxvYi5hcnJheUJ1ZmZlcigpOw0KICAgICAgICAgICAgICAgIGNvbnN0IGJhc2U2NCA9IGVuY29kZShhcnJheUJ1ZmZlcik7DQogICAgICAgICAgICAgICAgdHJhbnNwYXJlbnRCbG9iTWFwLnNldChpZCwgYmFzZTY0KTsNCiAgICAgICAgICAgICAgICByZXR1cm4gYmFzZTY0Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgcmV0dXJuICcnOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICB9DQogICAgY29uc3Qgd29ya2VyID0gc2VsZjsNCiAgICB3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24gKGUpIHsNCiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHsNCiAgICAgICAgICAgIGlmICgnT2Zmc2NyZWVuQ2FudmFzJyBpbiBnbG9iYWxUaGlzKSB7DQogICAgICAgICAgICAgICAgY29uc3QgeyBpZCwgYml0bWFwLCB3aWR0aCwgaGVpZ2h0LCBkYXRhVVJMT3B0aW9ucyB9ID0gZS5kYXRhOw0KICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zcGFyZW50QmFzZTY0ID0gZ2V0VHJhbnNwYXJlbnRCbG9iRm9yKHdpZHRoLCBoZWlnaHQsIGRhdGFVUkxPcHRpb25zKTsNCiAgICAgICAgICAgICAgICBjb25zdCBvZmZzY3JlZW4gPSBuZXcgT2Zmc2NyZWVuQ2FudmFzKHdpZHRoLCBoZWlnaHQpOw0KICAgICAgICAgICAgICAgIGNvbnN0IGN0eCA9IG9mZnNjcmVlbi5nZXRDb250ZXh0KCcyZCcpOw0KICAgICAgICAgICAgICAgIGN0eC5kcmF3SW1hZ2UoYml0bWFwLCAwLCAwKTsNCiAgICAgICAgICAgICAgICBiaXRtYXAuY2xvc2UoKTsNCiAgICAgICAgICAgICAgICBjb25zdCBibG9iID0geWllbGQgb2Zmc2NyZWVuLmNvbnZlcnRUb0Jsb2IoZGF0YVVSTE9wdGlvbnMpOw0KICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBibG9iLnR5cGU7DQogICAgICAgICAgICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSB5aWVsZCBibG9iLmFycmF5QnVmZmVyKCk7DQogICAgICAgICAgICAgICAgY29uc3QgYmFzZTY0ID0gZW5jb2RlKGFycmF5QnVmZmVyKTsNCiAgICAgICAgICAgICAgICBpZiAoIWxhc3RCbG9iTWFwLmhhcyhpZCkgJiYgKHlpZWxkIHRyYW5zcGFyZW50QmFzZTY0KSA9PT0gYmFzZTY0KSB7DQogICAgICAgICAgICAgICAgICAgIGxhc3RCbG9iTWFwLnNldChpZCwgYmFzZTY0KTsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtlci5wb3N0TWVzc2FnZSh7IGlkIH0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAobGFzdEJsb2JNYXAuZ2V0KGlkKSA9PT0gYmFzZTY0KQ0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VyLnBvc3RNZXNzYWdlKHsgaWQgfSk7DQogICAgICAgICAgICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKHsNCiAgICAgICAgICAgICAgICAgICAgaWQsDQogICAgICAgICAgICAgICAgICAgIHR5cGUsDQogICAgICAgICAgICAgICAgICAgIGJhc2U2NCwNCiAgICAgICAgICAgICAgICAgICAgd2lkdGgsDQogICAgICAgICAgICAgICAgICAgIGhlaWdodCwNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICBsYXN0QmxvYk1hcC5zZXQoaWQsIGJhc2U2NCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VyLnBvc3RNZXNzYWdlKHsgaWQ6IGUuZGF0YS5pZCB9KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgfTsKCn0pKCk7Cgo=",null,!1);var Qe=class{constructor(e){this.pendingCanvasMutations=new Map,this.rafStamps={latestId:0,invokeId:null},this.frozen=!1,this.locked=!1,this.processMutation=(c,l)=>{(this.rafStamps.invokeId&&this.rafStamps.latestId!==this.rafStamps.invokeId||!this.rafStamps.invokeId)&&(this.rafStamps.invokeId=this.rafStamps.latestId),this.pendingCanvasMutations.has(c)||this.pendingCanvasMutations.set(c,[]),this.pendingCanvasMutations.get(c).push(l)};let{sampling:r="all",win:i,blockClass:n,blockSelector:o,recordCanvas:a,dataURLOptions:s}=e;this.mutationCb=e.mutationCb,this.mirror=e.mirror,a&&r==="all"&&this.initCanvasMutationObserver(i,n,o),a&&typeof r=="number"&&this.initCanvasFPSObserver(r,i,n,o,{dataURLOptions:s})}reset(){this.pendingCanvasMutations.clear(),this.resetObservers&&this.resetObservers()}freeze(){this.frozen=!0}unfreeze(){this.frozen=!1}lock(){this.locked=!0}unlock(){this.locked=!1}initCanvasFPSObserver(e,r,i,n,o){let a=St(r,i,n),s=new Map,c=new ur;c.onmessage=h=>{let{id:v}=h.data;if(s.set(v,!1),!("base64"in h.data))return;let{base64:C,type:I,width:g,height:m}=h.data;this.mutationCb({id:v,type:oe["2D"],commands:[{property:"clearRect",args:[0,0,g,m]},{property:"drawImage",args:[{rr_type:"ImageBitmap",args:[{rr_type:"Blob",data:[{rr_type:"ArrayBuffer",base64:C}],type:I}]},0,0]}]})};let l=1e3/e,d=0,u,p=()=>{let h=[];return r.document.querySelectorAll("canvas").forEach(v=>{M(v,i,n,!0)||h.push(v)}),h},f=h=>{if(d&&h-d<l){u=requestAnimationFrame(f);return}d=h,p().forEach(v=>$t(this,void 0,void 0,function*(){var C;let I=this.mirror.getId(v);if(s.get(I))return;if(s.set(I,!0),["webgl","webgl2"].includes(v.__context)){let m=v.getContext(v.__context);((C=m==null?void 0:m.getContextAttributes())===null||C===void 0?void 0:C.preserveDrawingBuffer)===!1&&(m==null||m.clear(m.COLOR_BUFFER_BIT))}let g=yield createImageBitmap(v);c.postMessage({id:I,bitmap:g,width:v.width,height:v.height,dataURLOptions:o.dataURLOptions},[g])})),u=requestAnimationFrame(f)};u=requestAnimationFrame(f),this.resetObservers=()=>{a(),cancelAnimationFrame(u)}}initCanvasMutationObserver(e,r,i){this.startRAFTimestamping(),this.startPendingCanvasMutationFlusher();let n=St(e,r,i),o=ir(this.processMutation.bind(this),e,r,i),a=or(this.processMutation.bind(this),e,r,i,this.mirror);this.resetObservers=()=>{n(),o(),a()}}startPendingCanvasMutationFlusher(){requestAnimationFrame(()=>this.flushPendingCanvasMutations())}startRAFTimestamping(){let e=r=>{this.rafStamps.latestId=r,requestAnimationFrame(e)};requestAnimationFrame(e)}flushPendingCanvasMutations(){this.pendingCanvasMutations.forEach((e,r)=>{let i=this.mirror.getId(r);this.flushPendingCanvasMutationFor(r,i)}),requestAnimationFrame(()=>this.flushPendingCanvasMutations())}flushPendingCanvasMutationFor(e,r){if(this.frozen||this.locked)return;let i=this.pendingCanvasMutations.get(e);if(!i||r===-1)return;let n=i.map(a=>qt(a,["type"])),{type:o}=i[0];this.mutationCb({id:r,type:o,commands:n}),this.pendingCanvasMutations.delete(e)}};var je=class{constructor(e){this.trackedLinkElements=new WeakSet,this.styleMirror=new De,this.mutationCb=e.mutationCb,this.adoptedStyleSheetCb=e.adoptedStyleSheetCb}attachLinkElement(e,r){"_cssText"in r.attributes&&this.mutationCb({adds:[],removes:[],texts:[],attributes:[{id:r.id,attributes:r.attributes}]}),this.trackLinkElement(e)}trackLinkElement(e){this.trackedLinkElements.has(e)||(this.trackedLinkElements.add(e),this.trackStylesheetInLinkElement(e))}adoptStyleSheets(e,r){if(e.length===0)return;let i={id:r,styleIds:[]},n=[];for(let o of e){let a;if(this.styleMirror.has(o))a=this.styleMirror.getId(o);else{a=this.styleMirror.add(o);let s=Array.from(o.rules||CSSRule);n.push({styleId:a,rules:s.map((c,l)=>({rule:ct(c),index:l}))})}i.styleIds.push(a)}n.length>0&&(i.styles=n),this.adoptedStyleSheetCb(i)}reset(){this.styleMirror.reset(),this.trackedLinkElements=new WeakSet}trackStylesheetInLinkElement(e){}};function L(t){return Object.assign(Object.assign({},t),{timestamp:Date.now()})}var x,Xe,wt,qe=!1,te=Ft();function ge(t={}){let{emit:e,checkoutEveryNms:r,checkoutEveryNth:i,blockClass:n="rr-block",blockSelector:o=null,ignoreClass:a="rr-ignore",maskTextClass:s="rr-mask",maskTextSelector:c=null,inlineStylesheet:l=!0,maskAllInputs:d,maskInputOptions:u,slimDOMOptions:p,maskInputFn:f,maskTextFn:h,hooks:v,packFn:C,sampling:I={},dataURLOptions:g={},mousemoveWait:m,recordCanvas:A=!1,recordCrossOriginIframes:B=!1,userTriggeredOnInput:D=!1,collectFonts:W=!1,inlineImages:k=!1,plugins:Z,keepIframeSrcFn:K=()=>!1,ignoreCSSAttributes:Q=new Set([])}=t,j=B?window.parent===window:!0,X=!1;if(!j)try{window.parent.document,X=!1}catch(y){X=!0}if(j&&!e)throw new Error("emit function is required");m!==void 0&&I.mousemove===void 0&&(I.mousemove=m),te.reset();let O=d===!0?{color:!0,date:!0,"datetime-local":!0,email:!0,month:!0,number:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0,textarea:!0,select:!0,password:!0}:u!==void 0?u:{password:!0},z=p===!0||p==="all"?{script:!0,comment:!0,headFavicon:!0,headWhitespace:!0,headMetaSocial:!0,headMetaRobots:!0,headMetaHttpEquiv:!0,headMetaVerification:!0,headMetaAuthorship:p==="all",headMetaDescKeywords:p==="all"}:p||{};Bt();let q,re=0,ne=y=>{for(let V of Z||[])V.eventProcessor&&(y=V.eventProcessor(y));return C&&(y=C(y)),y};x=(y,V)=>{var U;if(!((U=le[0])===null||U===void 0)&&U.isFrozen()&&y.type!==b.FullSnapshot&&!(y.type===b.IncrementalSnapshot&&y.data.source===S.Mutation)&&le.forEach(E=>E.unfreeze()),j)e==null||e(ne(y),V);else if(X){let E={type:"rrweb",event:ne(y),isCheckout:V};window.parent.postMessage(E,"*")}if(y.type===b.FullSnapshot)q=y,re=0;else if(y.type===b.IncrementalSnapshot){if(y.data.source===S.Mutation&&y.data.isAttachIframe)return;re++;let E=i&&re>=i,J=r&&y.timestamp-q.timestamp>r;(E||J)&&Xe(!0)}};let G=y=>{x(L({type:b.IncrementalSnapshot,data:Object.assign({source:S.Mutation},y)}))},Y=y=>x(L({type:b.IncrementalSnapshot,data:Object.assign({source:S.Scroll},y)})),se=y=>x(L({type:b.IncrementalSnapshot,data:Object.assign({source:S.CanvasMutation},y)})),N=y=>x(L({type:b.IncrementalSnapshot,data:Object.assign({source:S.AdoptedStyleSheet},y)})),$=new je({mutationCb:G,adoptedStyleSheetCb:N}),ie=new Ke({mirror:te,mutationCb:G,stylesheetManager:$,recordCrossOriginIframes:B,wrappedEmit:x});for(let y of Z||[])y.getMirror&&y.getMirror({nodeMirror:te,crossOriginIframeMirror:ie.crossOriginIframeMirror,crossOriginIframeStyleMirror:ie.crossOriginIframeStyleMirror});wt=new Qe({recordCanvas:A,mutationCb:se,win:window,blockClass:n,blockSelector:o,mirror:te,sampling:I.canvas,dataURLOptions:g});let me=new ze({mutationCb:G,scrollCb:Y,bypassOptions:{blockClass:n,blockSelector:o,maskTextClass:s,maskTextSelector:c,inlineStylesheet:l,maskInputOptions:O,dataURLOptions:g,maskTextFn:h,maskInputFn:f,recordCanvas:A,inlineImages:k,sampling:I,slimDOMOptions:z,iframeManager:ie,stylesheetManager:$,canvasManager:wt,keepIframeSrcFn:K},mirror:te});Xe=(y=!1)=>{var V,U,E,J,w,H;x(L({type:b.Meta,data:{href:window.location.href,width:Pe(),height:We()}}),y),$.reset(),le.forEach(_=>_.lock());let we=Dt(document,{mirror:te,blockClass:n,blockSelector:o,maskTextClass:s,maskTextSelector:c,inlineStylesheet:l,maskAllInputs:O,maskTextFn:h,slimDOM:z,dataURLOptions:g,recordCanvas:A,inlineImages:k,onSerialize:_=>{Ve(_,te)&&ie.addIframe(_),_e(_,te)&&$.trackLinkElement(_),Ge(_)&&me.addShadowRoot(_.shadowRoot,document)},onIframeLoad:(_,rt)=>{ie.attachIframe(_,rt),me.observeAttachShadow(_)},onStylesheetLoad:(_,rt)=>{$.attachLinkElement(_,rt)},keepIframeSrcFn:K});if(!we)return console.warn("Failed to snapshot the document");x(L({type:b.FullSnapshot,data:{node:we,initialOffset:{left:window.pageXOffset!==void 0?window.pageXOffset:(document==null?void 0:document.documentElement.scrollLeft)||((U=(V=document==null?void 0:document.body)===null||V===void 0?void 0:V.parentElement)===null||U===void 0?void 0:U.scrollLeft)||((E=document==null?void 0:document.body)===null||E===void 0?void 0:E.scrollLeft)||0,top:window.pageYOffset!==void 0?window.pageYOffset:(document==null?void 0:document.documentElement.scrollTop)||((w=(J=document==null?void 0:document.body)===null||J===void 0?void 0:J.parentElement)===null||w===void 0?void 0:w.scrollTop)||((H=document==null?void 0:document.body)===null||H===void 0?void 0:H.scrollTop)||0}}})),le.forEach(_=>_.unlock()),document.adoptedStyleSheets&&document.adoptedStyleSheets.length>0&&$.adoptStyleSheets(document.adoptedStyleSheets,te.getId(document))};try{let y=[];y.push(P("DOMContentLoaded",()=>{x(L({type:b.DomContentLoaded,data:{}}))}));let V=E=>{var J;return Xt({mutationCb:G,mousemoveCb:(w,H)=>x(L({type:b.IncrementalSnapshot,data:{source:H,positions:w}})),mouseInteractionCb:w=>x(L({type:b.IncrementalSnapshot,data:Object.assign({source:S.MouseInteraction},w)})),scrollCb:Y,viewportResizeCb:w=>x(L({type:b.IncrementalSnapshot,data:Object.assign({source:S.ViewportResize},w)})),inputCb:w=>x(L({type:b.IncrementalSnapshot,data:Object.assign({source:S.Input},w)})),mediaInteractionCb:w=>x(L({type:b.IncrementalSnapshot,data:Object.assign({source:S.MediaInteraction},w)})),styleSheetRuleCb:w=>x(L({type:b.IncrementalSnapshot,data:Object.assign({source:S.StyleSheetRule},w)})),styleDeclarationCb:w=>x(L({type:b.IncrementalSnapshot,data:Object.assign({source:S.StyleDeclaration},w)})),canvasMutationCb:se,fontCb:w=>x(L({type:b.IncrementalSnapshot,data:Object.assign({source:S.Font},w)})),selectionCb:w=>{x(L({type:b.IncrementalSnapshot,data:Object.assign({source:S.Selection},w)}))},blockClass:n,ignoreClass:a,maskTextClass:s,maskTextSelector:c,maskInputOptions:O,inlineStylesheet:l,sampling:I,recordCanvas:A,inlineImages:k,userTriggeredOnInput:D,collectFonts:W,doc:E,maskInputFn:f,maskTextFn:h,keepIframeSrcFn:K,blockSelector:o,slimDOMOptions:z,dataURLOptions:g,mirror:te,iframeManager:ie,stylesheetManager:$,shadowDomManager:me,canvasManager:wt,ignoreCSSAttributes:Q,plugins:((J=Z==null?void 0:Z.filter(w=>w.observer))===null||J===void 0?void 0:J.map(w=>({observer:w.observer,options:w.options,callback:H=>x(L({type:b.Plugin,data:{plugin:w.name,payload:H}}))})))||[]},v)};ie.addLoadListener(E=>{y.push(V(E.contentDocument))});let U=()=>{Xe(),y.push(V(document)),qe=!0};return document.readyState==="interactive"||document.readyState==="complete"?U():y.push(P("load",()=>{x(L({type:b.Load,data:{}})),U()},window)),()=>{y.forEach(E=>E()),qe=!1}}catch(y){console.warn(y)}}ge.addCustomEvent=(t,e)=>{if(!qe)throw new Error("please add custom event after start recording");x(L({type:b.Custom,data:{tag:t,payload:e}}))};ge.freezePage=()=>{le.forEach(t=>t.freeze())};ge.takeFullSnapshot=t=>{if(!qe)throw new Error("please take full snapshot after start recording");Xe(t)};ge.mirror=te;var $e=class{constructor(e){this.opts=e;this.seq=0;this.buffer=[];this.stopRecording=null;this.flushTimer=null}start(){var e,r;typeof document=="undefined"||this.stopRecording||(this.stopRecording=(r=ge({emit:i=>{this.buffer.push(i),this.buffer.length>=this.opts.maxEventsPerBatch&&this.flush()},checkoutEveryNms:(e=this.opts.checkoutEveryNms)!=null?e:6e5}))!=null?r:null,this.flushTimer=setInterval(()=>{this.buffer.length>0&&this.flush()},this.opts.flushIntervalMs))}flush(){if(this.buffer.length===0)return;let e=this.buffer.splice(0,this.buffer.length);this.opts.emit({type:"session_replay",data:{seq:this.seq++,events:e}})}destroy(){var e;this.flushTimer!==null&&(clearInterval(this.flushTimer),this.flushTimer=null),this.flush(),(e=this.stopRecording)==null||e.call(this),this.stopRecording=null}};var et="1.0.2";function hr(t){var r,i;let e=t.toLowerCase();return/ipad|tablet|(android(?!.*mobile))/i.test(e)?"tablet":/mobile|android|iphone|ipod|windows phone/i.test(e)?"mobile":typeof navigator!="undefined"&&navigator.maxTouchPoints>0&&typeof window!="undefined"&&((i=(r=window.matchMedia)==null?void 0:r.call(window,"(pointer: coarse)"))==null?void 0:i.matches)&&/macintosh|mac os x/i.test(e)?"tablet":"desktop"}function di(t){return/windows/i.test(t)?"Windows":/android/i.test(t)?"Android":/iphone|ipad|ipod/i.test(t)?"iOS":/mac os x|macintosh/i.test(t)?"macOS":/linux/i.test(t)?"Linux":"Other"}function ui(t){return/edg\//i.test(t)?"Edge":/opr\/|opera/i.test(t)?"Opera":/chrome\/[0-9]/i.test(t)&&!/chromium/i.test(t)?"Chrome":/firefox\/[0-9]/i.test(t)?"Firefox":/safari\/[0-9]/i.test(t)&&!/chrome/i.test(t)?"Safari":"Other"}function hi(){let e=navigator.userAgentData;return e?{mobile:e.mobile,platform:e.platform}:{}}function pi(t,e){var i;let r=((i=e.platform)!=null?i:"").toLowerCase();return r==="ios"||r==="ipados"||r==="android"?e.mobile?"mobile":"tablet":e.mobile===!0?"mobile":hr(t)}function pr(t){var s,c,l,d,u,p,f,h,v,C,I,g;if(typeof window=="undefined"||typeof navigator=="undefined")return{sessionId:t,timestamp:Date.now(),device:"desktop",os:"Other",browser:"Other",language:"",languages:[],colorScheme:"",screenWidth:0,screenHeight:0,viewportWidth:0,viewportHeight:0,devicePixelRatio:1,timeZone:"",sdkVersion:et};let e=navigator.userAgent||"",r=hi(),i=r.mobile!==void 0||r.platform?pi(e,r):hr(e),n="";(c=(s=window.matchMedia)==null?void 0:s.call(window,"(prefers-color-scheme: dark)"))!=null&&c.matches?n="dark":(d=(l=window.matchMedia)==null?void 0:l.call(window,"(prefers-color-scheme: light)"))!=null&&d.matches&&(n="light");let o="";try{o=(u=Intl.DateTimeFormat().resolvedOptions().timeZone)!=null?u:""}catch(m){o=""}let a=typeof navigator.languages!="undefined"&&navigator.languages.length?[...navigator.languages]:navigator.language?[navigator.language]:[];return{sessionId:t,timestamp:Date.now(),device:i,os:di(e),browser:ui(e),language:navigator.language||"",languages:a,colorScheme:n,screenWidth:(f=(p=window.screen)==null?void 0:p.width)!=null?f:0,screenHeight:(v=(h=window.screen)==null?void 0:h.height)!=null?v:0,viewportWidth:(C=window.innerWidth)!=null?C:0,viewportHeight:(I=window.innerHeight)!=null?I:0,devicePixelRatio:(g=window.devicePixelRatio)!=null?g:1,timeZone:o,sdkVersion:et}}var At="https://api.alphana.ir/api/events",fi={endpoint:At,trackNavigation:!0,trackTime:!0,trackHeatmap:!0,trackLogs:!0,mouseSampleRate:.3,maxHeatmapPoints:2e3,batchSize:20,flushInterval:5e3,sessionReplay:!1,sessionReplayCheckoutEveryNms:6e5,sessionReplayMaxEventsPerBatch:48,sessionReplayFlushIntervalMs:4e3};function gi(t){switch(t.type){case"pageview":return{type:"pageview",data:{...t.data,path:R(t.data.path)}};case"timespent":return{type:"timespent",data:{...t.data,path:R(t.data.path)}};case"heatmap":return{type:"heatmap",data:{...t.data,path:R(t.data.path)}};case"rageclik":return{type:"rageclik",data:{...t.data,path:R(t.data.path)}};case"uturn":return{type:"uturn",data:{...t.data,fromPath:R(t.data.fromPath),toPath:R(t.data.toPath)}};case"client_context":return t;case"session_replay":return t;default:return t}}var tt=class{constructor(e={}){this.initialized=!1;this.subscribers=new Set;this.queue=[];this.flushTimer=null;this.heartbeatTimer=null;this.userProperties={};this.flags={};this.flagSubscribers=new Set;this.abVariants={};this.abTestSubscribers=new Set;this.handleVisibilityChange=()=>{document.visibilityState==="hidden"&&(this.queue.length>0&&this.flushBeacon(),this.sendDeactivate())};this.handlePageHide=()=>{this.queue.length>0&&this.flushBeacon(),this.sendDeactivate()};this.handleNavigate=e=>{};var r;this.cfg={...fi,...e};try{new URL(this.cfg.endpoint)}catch(i){throw new Error(`[alpha-tracker] Invalid endpoint URL: "${this.cfg.endpoint}"`)}this.session={id:(r=e.sessionId)!=null?r:Ae(),visitorId:Tt(),startedAt:Date.now(),pageViews:[],timeSpent:{},heatmap:{}}}init(){if(typeof window=="undefined"||this.initialized)return this;let e=this.emit.bind(this),{id:r}=this.session;return e({type:"client_context",data:pr(r)}),this.cfg.trackNavigation&&(this.navigation=new Ne({emit:e,sessionId:r}),this.navigation.init()),this.cfg.trackTime&&(this.time=new Oe({emit:e,sessionId:r}),this.time.init()),this.cfg.trackHeatmap&&(this.heatmap=new Le({emit:e,sessionId:r,sampleRate:this.cfg.mouseSampleRate,maxPoints:this.cfg.maxHeatmapPoints,allowedPaths:this.cfg.heatmapPages}),this.heatmap.init()),this.cfg.sessionReplay&&(this.sessionReplay=new $e({emit:e,checkoutEveryNms:this.cfg.sessionReplayCheckoutEveryNms,maxEventsPerBatch:this.cfg.sessionReplayMaxEventsPerBatch,flushIntervalMs:this.cfg.sessionReplayFlushIntervalMs}),this.sessionReplay.start()),this.cfg.endpoint&&(this.flushTimer=setInterval(()=>{this.queue.length>0&&this.flushQueue()},this.cfg.flushInterval),window.addEventListener("visibilitychange",this.handleVisibilityChange),window.addEventListener("pagehide",this.handlePageHide),this.heartbeatTimer=setInterval(()=>{document.visibilityState!=="hidden"&&this.sendHeartbeat()},3e4),this.cfg.trackLogs&&(this.logCapture=new ve({endpoint:this.cfg.endpoint,sessionId:this.session.id,secretKey:this.cfg.secretKey,appId:this.cfg.appId}),this.logCapture.init())),this.initialized=!0,this.fetchFlags(),this.fetchAbTests(),this}destroy(){var e,r,i,n,o;this.flushTimer!==null&&(clearInterval(this.flushTimer),this.flushTimer=null),this.heartbeatTimer!==null&&(clearInterval(this.heartbeatTimer),this.heartbeatTimer=null),typeof window!="undefined"&&(window.removeEventListener("visibilitychange",this.handleVisibilityChange),window.removeEventListener("pagehide",this.handlePageHide)),(e=this.navigation)==null||e.destroy(),(r=this.time)==null||r.destroy(),(i=this.heatmap)==null||i.destroy(),(n=this.sessionReplay)==null||n.destroy(),this.sessionReplay=void 0,(o=this.logCapture)==null||o.destroy(),typeof window!="undefined"&&window.removeEventListener("tracker:navigate",this.handleNavigate),this.queue.length>0&&this.cfg.endpoint&&this.flushBeacon(),this.initialized=!1}async sendHeartbeat(){if(!this.cfg.endpoint)return;let e=`${this.cfg.endpoint}/heartbeat`,r=this.cfg.secretKey?{Authorization:`Bearer ${this.cfg.secretKey}`}:{},i=JSON.stringify({sessionId:this.session.id,visitorId:this.session.visitorId,path:R(typeof window!="undefined"?window.location.pathname+window.location.search:"/"),active:!0,...this.cfg.appId?{appId:this.cfg.appId}:{}});try{await fetch(e,{method:"POST",headers:{"Content-Type":"application/json",...r},body:i,keepalive:!0})}catch(n){}}sendDeactivate(){if(!this.cfg.endpoint)return;let e=`${this.cfg.endpoint}/heartbeat`,r=this.cfg.secretKey?{Authorization:`Bearer ${this.cfg.secretKey}`}:{},i=JSON.stringify({sessionId:this.session.id,visitorId:this.session.visitorId,path:R(typeof window!="undefined"?window.location.pathname+window.location.search:"/"),active:!1,...this.cfg.appId?{appId:this.cfg.appId}:{}});typeof navigator!="undefined"&&navigator.sendBeacon?navigator.sendBeacon(e,new Blob([i],{type:"application/json"})):fetch(e,{method:"POST",headers:{"Content-Type":"application/json",...r},body:i,keepalive:!0}).catch(()=>{})}emit(e){var r,i,n;switch(e=gi(e),e.type){case"pageview":this.session.pageViews.push(e.data);break;case"timespent":{let o=(r=this.session.timeSpent[e.data.path])!=null?r:0;this.session.timeSpent[e.data.path]=o+e.data.duration;break}case"heatmap":{let o=e.data.path;this.session.heatmap[o]||(this.session.heatmap[o]=[]);let a=this.session.heatmap[o];a.length<this.cfg.maxHeatmapPoints&&a.push(e.data);break}case"rageclik":case"uturn":case"client_context":case"session_replay":break}this.subscribers.forEach(o=>o(e)),(n=(i=this.cfg).onEvent)==null||n.call(i,e),this.cfg.endpoint&&(this.queue.push(e),this.queue.length>=this.cfg.batchSize&&this.flushQueue())}subscribe(e){return this.subscribers.add(e),()=>this.subscribers.delete(e)}trackPageView(e){let r=R(e!=null?e:typeof window!="undefined"?window.location.pathname+window.location.search:"/");this.emit({type:"pageview",data:{path:r,title:typeof document!="undefined"?document.title:"",timestamp:Date.now(),sessionId:this.session.id,referrer:typeof document!="undefined"&&document.referrer||void 0}}),typeof window!="undefined"&&window.dispatchEvent(new CustomEvent("tracker:navigate",{detail:{path:r,title:document.title}}))}identify(e){this.userProperties={...this.userProperties,...e},this.fetchFlags()}getFlags(){return{...this.flags}}isFeatureEnabled(e){return this.flags[e]===!0}onFlagsChange(e){return this.flagSubscribers.add(e),()=>this.flagSubscribers.delete(e)}async fetchFlags(){if(!this.cfg.endpoint||!this.cfg.secretKey)return;let e=ot(this.cfg.endpoint)+"/feature-flags/evaluate";try{let r=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.cfg.secretKey}`},body:JSON.stringify({userProperties:this.userProperties})});if(!r.ok)return;let i=await r.json();this.flags=i,this.flagSubscribers.forEach(n=>n({...this.flags}))}catch(r){}}getAbVariants(){return{...this.abVariants}}getAbVariant(e){let r=this.abVariants[e];return r!=null?r:null}isAbVariant(e,r){return this.abVariants[e]===r}onAbTestsChange(e){return this.abTestSubscribers.add(e),()=>this.abTestSubscribers.delete(e)}async fetchAbTests(e){if(!this.cfg.endpoint||!this.cfg.secretKey)return;let r=ot(this.cfg.endpoint)+"/ab-tests/evaluate";try{let i={visitorId:this.session.visitorId};e!=null&&e.length&&(i.keys=e);let n=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.cfg.secretKey}`},body:JSON.stringify(i)});if(!n.ok)return;let o=await n.json();this.abVariants=e!=null&&e.length?{...this.abVariants,...o}:{...o},this.abTestSubscribers.forEach(a=>a({...this.abVariants}))}catch(i){}}getSession(){return this.session}getPageViews(){return[...this.session.pageViews]}getTimeSpent(){return{...this.session.timeSpent}}getHeatmapData(e){var r;return e!==void 0?[...(r=this.session.heatmap[e])!=null?r:[]]:Object.entries(this.session.heatmap).reduce((i,[n,o])=>(i[n]=[...o],i),{})}flush(){this.flushQueue()}async flushQueue(){if(this.queue.length===0)return;let e=this.queue.splice(0);await this.sendBatch(e)}flushBeacon(){if(this.queue.length===0)return;let e=this.queue.splice(0),r=`${this.cfg.endpoint}/batch`,i=new Blob([this.buildBatchBody(e)],{type:"application/json"});typeof navigator!="undefined"&&navigator.sendBeacon?navigator.sendBeacon(r,i):this.sendBatch(e)}buildBatchBody(e){return JSON.stringify({...this.cfg.appId?{appId:this.cfg.appId}:{},visitorId:this.session.visitorId,events:e.map(r=>({sessionId:this.session.id,type:r.type,data:r.data}))})}async sendBatch(e){let r=`${this.cfg.endpoint}/batch`,i=this.cfg.secretKey?{Authorization:`Bearer ${this.cfg.secretKey}`}:{};try{await fetch(r,{method:"POST",headers:{"Content-Type":"application/json",...i},body:this.buildBatchBody(e),keepalive:!0})}catch(n){}}};return yr(mi);})();
6
+ /*! Bundled license information:
7
+
8
+ rrweb/es/rrweb/ext/tslib/tslib.es6.js:
9
+ (*! *****************************************************************************
10
+ Copyright (c) Microsoft Corporation.
11
+
12
+ Permission to use, copy, modify, and/or distribute this software for any
13
+ purpose with or without fee is hereby granted.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
16
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
17
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
18
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
19
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
20
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
21
+ PERFORMANCE OF THIS SOFTWARE.
22
+ ***************************************************************************** *)
23
+ */
package/dist/index.d.mts CHANGED
@@ -46,19 +46,34 @@ interface TrackerConfig {
46
46
  */
47
47
  trackLogs?: boolean;
48
48
  /**
49
- * List of page paths for which heatmap data should be captured.
50
- * Only paths registered here will be tracked. If empty or undefined, the SDK
51
- * will send data for all pages (the backend enforces limits at ingest time).
49
+ * List of page paths for which heatmap data should be captured client-side.
50
+ * Paths should match the dashboard "Heatmap pages" list (decoded Unicode is
51
+ * fine the SDK normalizes percent-encoding vs `window.location` mismatches).
52
52
  *
53
- * Obtain the list of registered paths from the alphana dashboard under
54
- * "Heatmap Pages" for your app, then pass them here.
53
+ * If empty or undefined, the SDK may still collect moves locally, but the
54
+ * backend only persists points when the app has at least one registered
55
+ * heatmap page and the path matches.
55
56
  *
56
57
  * Example: `heatmapPages: ["/", "/pricing", "/dashboard"]`
57
58
  */
58
59
  heatmapPages?: string[];
60
+ /**
61
+ * When true, records DOM mutations with rrweb and sends `session_replay` events
62
+ * for pixel-accurate session replay in the dashboard (requires plan + platform).
63
+ * @default false
64
+ */
65
+ sessionReplay?: boolean;
66
+ /** rrweb full snapshot interval in ms. @default 600000 (10 min) */
67
+ sessionReplayCheckoutEveryNms?: number;
68
+ /** Max rrweb events per batch before an immediate flush. @default 48 */
69
+ sessionReplayMaxEventsPerBatch?: number;
70
+ /** Periodic flush of buffered rrweb events (ms). @default 4000 */
71
+ sessionReplayFlushIntervalMs?: number;
59
72
  /** Called synchronously for every emitted event. */
60
73
  onEvent?: (event: TrackerEvent) => void;
61
74
  }
75
+ /** Assigned variant key per running A/B experiment (`null` = not in experiment). */
76
+ type AbVariantsMap = Record<string, string | null>;
62
77
  interface GeoLocation {
63
78
  /** ISO 3166-1 alpha-2 country code, e.g. "US" */
64
79
  country: string;
@@ -121,6 +136,36 @@ interface UTurn {
121
136
  timestamp: number;
122
137
  sessionId: string;
123
138
  }
139
+ /**
140
+ * One-time (or rare) snapshot of the client environment for a session.
141
+ * Lets the backend align device / OS / browser with what the browser reports
142
+ * (useful vs. reduced User-Agent strings) and store locale / viewport context
143
+ * for session replay catalog rows.
144
+ */
145
+ interface ClientContext {
146
+ sessionId: string;
147
+ timestamp: number;
148
+ device: "desktop" | "mobile" | "tablet";
149
+ os: string;
150
+ browser: string;
151
+ language: string;
152
+ languages: string[];
153
+ /** `prefers-color-scheme` when available */
154
+ colorScheme: "" | "light" | "dark";
155
+ screenWidth: number;
156
+ screenHeight: number;
157
+ viewportWidth: number;
158
+ viewportHeight: number;
159
+ devicePixelRatio: number;
160
+ /** IANA time zone from `Intl`, e.g. `Asia/Tehran` */
161
+ timeZone: string;
162
+ sdkVersion: string;
163
+ }
164
+ /** One batch of rrweb `eventWithTime` payloads for the backend. */
165
+ interface SessionReplayBatch {
166
+ seq: number;
167
+ events: unknown[];
168
+ }
124
169
  type TrackerEvent = {
125
170
  type: "pageview";
126
171
  data: PageView;
@@ -136,6 +181,12 @@ type TrackerEvent = {
136
181
  } | {
137
182
  type: "uturn";
138
183
  data: UTurn;
184
+ } | {
185
+ type: "client_context";
186
+ data: ClientContext;
187
+ } | {
188
+ type: "session_replay";
189
+ data: SessionReplayBatch;
139
190
  };
140
191
  interface SessionData {
141
192
  id: string;
@@ -215,12 +266,14 @@ declare class LogCapture {
215
266
  declare const DEFAULT_ENDPOINT = "https://api.alphana.ir/api/events";
216
267
  type SubscriberFn = (event: TrackerEvent) => void;
217
268
  type FlagSubscriberFn = (flags: Record<string, boolean>) => void;
269
+ type AbTestSubscriberFn = (variants: AbVariantsMap) => void;
218
270
  declare class UserTracker {
219
271
  private readonly cfg;
220
272
  private session;
221
273
  private navigation?;
222
274
  private time?;
223
275
  private heatmap?;
276
+ private sessionReplay?;
224
277
  /** Public so consumers can call logCapture.capture() for manual log entries. */
225
278
  logCapture?: LogCapture;
226
279
  private initialized;
@@ -232,6 +285,8 @@ declare class UserTracker {
232
285
  private userProperties;
233
286
  private flags;
234
287
  private readonly flagSubscribers;
288
+ private abVariants;
289
+ private readonly abTestSubscribers;
235
290
  constructor(config?: TrackerConfig);
236
291
  /**
237
292
  * Attach event listeners and start tracking.
@@ -309,6 +364,34 @@ declare class UserTracker {
309
364
  onFlagsChange(fn: FlagSubscriberFn): () => void;
310
365
  /** Fetch (or re-fetch) flags from the backend evaluate endpoint. */
311
366
  fetchFlags(): Promise<void>;
367
+ /**
368
+ * Returns variant keys assigned to this visitor for each running experiment.
369
+ * Fetched on `init()` and after `fetchAbTests()`.
370
+ *
371
+ * ```ts
372
+ * const variants = tracker.getAbVariants();
373
+ * // { 'checkout-cta-test': 'variant-b' }
374
+ * ```
375
+ */
376
+ getAbVariants(): AbVariantsMap;
377
+ /**
378
+ * Returns the assigned variant key for one experiment, or `null` if the
379
+ * experiment is not running or not found.
380
+ */
381
+ getAbVariant(experimentKey: string): string | null;
382
+ /**
383
+ * Returns `true` when the visitor is assigned to the given variant key.
384
+ */
385
+ isAbVariant(experimentKey: string, variantKey: string): boolean;
386
+ /**
387
+ * Subscribe to A/B assignment updates. Returns an unsubscribe function.
388
+ */
389
+ onAbTestsChange(fn: AbTestSubscriberFn): () => void;
390
+ /**
391
+ * Fetch (or re-fetch) variant assignments from `/ab-tests/evaluate`.
392
+ * @param keys When set, only these experiment keys are evaluated and merged.
393
+ */
394
+ fetchAbTests(keys?: string[]): Promise<void>;
312
395
  /** A read-only snapshot of the current session. */
313
396
  getSession(): Readonly<SessionData>;
314
397
  /** All page views recorded so far. */
@@ -336,4 +419,15 @@ declare class UserTracker {
336
419
  private sendBatch;
337
420
  }
338
421
 
339
- export { DEFAULT_ENDPOINT, type GeoLocation, type HeatmapPoint, type HeatmapRenderOptions, LogCapture, type LogEntry, type LogLevel, type PageView, type RageClick, type SessionData, type TimeSpent, type TrackerConfig, type TrackerEvent, type UTurn, UserTracker };
422
+ declare const ALPHANA_SDK_VERSION = "1.0.2";
423
+
424
+ /**
425
+ * Canonical URL path (+ optional query) for analytics / heatmap matching.
426
+ *
427
+ * Next.js `usePathname()` often returns percent-encoded segments while
428
+ * `window.location.pathname` is decoded — without normalization the backend
429
+ * cannot match registered heatmap pages or aggregate the same route.
430
+ */
431
+ declare function normalizeTrackerPath(path: string): string;
432
+
433
+ export { ALPHANA_SDK_VERSION, type AbVariantsMap, type ClientContext, DEFAULT_ENDPOINT, type GeoLocation, type HeatmapPoint, type HeatmapRenderOptions, LogCapture, type LogEntry, type LogLevel, type PageView, type RageClick, type SessionData, type TimeSpent, type TrackerConfig, type TrackerEvent, type UTurn, UserTracker, normalizeTrackerPath };