blocfeed 0.17.3 → 0.19.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "blocfeed",
3
- "version": "0.17.3",
3
+ "version": "0.19.0",
4
4
  "description": "Drop-in feedback widget for React — element picking, screenshots, video recording, and voice feedback.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -1,2 +0,0 @@
1
- 'use strict';var rrweb=require('rrweb');function S(){return typeof window<"u"&&typeof document<"u"}function He(e){let t=globalThis.CSS;return typeof t?.escape=="function"?t.escape(e):e.replace(/[^a-zA-Z0-9_-]/g,n=>{let o=n.codePointAt(0);return o===void 0?"":`\\${o.toString(16)} `})}function we(e){return {x:e.x,y:e.y,width:e.width,height:e.height}}function Ot(e){return {x:e.x+window.scrollX,y:e.y+window.scrollY,width:e.width,height:e.height}}function Ut(e){return e.replace(/\s+/g," ").trim()}function N(e,t=140){let n=e.textContent;if(!n)return;let o=Ut(n);if(o)return o.length<=t?o:`${o.slice(0,t-1)}\u2026`}function Ht(e){let t=1;for(let n=e.previousElementSibling;n;n=n.previousElementSibling)n.tagName===e.tagName&&(t+=1);return t}var ze=["data-testid","data-test-id","data-test","data-qa","data-cy"],qe="data-blocfeed-component";function q(e){let t=e.closest(`[${qe}]`);if(!t)return;let o=t.getAttribute(qe)?.trim();return o||void 0}function K(e,t=5){let n=[],o=e,r=0;for(;o&&r<t*4;){let i=q(o);if(i&&n[n.length-1]!==i&&(n.push(i),n.length>=t))break;o=o.parentElement,r++;}return n}function qt(e){for(let t of ze){let n=e.closest(`[${t}]`);if(!n)continue;let r=n.getAttribute(t)?.trim();if(r)return r}}function Ve(e){try{let t=e,n=Object.getOwnPropertyNames(t);for(let o of n)if(o.startsWith("__reactFiber$")||o.startsWith("__reactInternalInstance$")){let r=t[o];if(r&&typeof r=="object")return r}}catch{}return null}function $(e){if(e.length<=1||e.length===2&&e[0]===e[0].toLowerCase()||e.startsWith("__")&&e.endsWith("__"))return true;let t=e[0];return t>="a"&&t<="z"}function J(e){if(e){for(let t of e)if(typeof t.name=="string"&&t.name&&!$(t.name))return t.name}}function F(e){if(e&&typeof e!="string"){if(typeof e=="function"){let t=e;return typeof t.displayName=="string"&&t.displayName?t.displayName:typeof t.name=="string"&&t.name?t.name:void 0}if(typeof e=="object"){let t=e,n=t.displayName;if(typeof n=="string"&&n)return n;let o=t.render;if(typeof o=="function"){let i=o;if(typeof i.displayName=="string"&&i.displayName)return i.displayName;if(typeof i.name=="string"&&i.name)return i.name}let r=t.type;return F(r)}}}function ve(e){let t=Ve(e);if(!t)return;let n=J(t._debugInfo);if(n)return n;let o=t._debugOwner!==void 0;if(o){let a=t._debugOwner;for(let c=0;a&&c<50;c+=1){let u=J(a._debugInfo);if(u)return u;let d=F(a.type)??F(a.elementType);if(d&&!$(d))return d;a=a._debugOwner;}}if(t._owner!==void 0&&t._owner!==t._debugOwner){let a=t._owner;for(let c=0;a&&c<50;c+=1){let u=J(a._debugInfo);if(u)return u;let d=F(a.type)??F(a.elementType);if(d&&!$(d))return d;a=a._owner;}}let i=t,l=o?80:25;for(let a=0;i&&a<l;a+=1){let c=J(i._debugInfo);if(c)return c;let u=F(i.type)??F(i.elementType);if(u&&!$(u))return u;i=i.return;}let s=e.parentElement;for(let a=0;s&&a<15;a+=1){let c=Ve(s);if(c){let u=J(c._debugInfo);if(u)return u;let d=F(c.type)??F(c.elementType);if(d&&!$(d))return d;if(c._debugOwner){let p=F(c._debugOwner.type)??F(c._debugOwner.elementType);if(p&&!$(p))return p}if(c._owner&&c._owner!==c._debugOwner){let p=F(c._owner.type)??F(c._owner.elementType);if(p&&!$(p))return p}}s=s.parentElement;}}function Vt(e){let t=e.tagName.toLowerCase(),n=e.getAttribute("id");if(n)return `#${He(n)}`;for(let o of ze){let r=e.getAttribute(o);if(r)return `${t}[${o}="${He(r)}"]`}return `${t}:nth-of-type(${Ht(e)})`}function W(e,t=10){let n=[],o=e;for(;o&&n.length<t;){let r=Vt(o);if(n.unshift(r),r.startsWith("#"))break;o=o.parentElement;}return n.join(" > ")}var Xt=new Set(["button","link","tab","menuitem"]);function $e(e){if(e.tagName==="BUTTON")return e.disabled?null:"button";if(e.tagName==="A"||e.tagName==="a"){let n=e.getAttribute("href")?.trim();return !n||n==="#"||n.toLowerCase().startsWith("javascript:")?null:"link"}let t=e.getAttribute("role");if(t&&Xt.has(t))return "role";try{if(window.getComputedStyle(e).cursor==="pointer")return "cursor_pointer"}catch{}return null}function Xe(e,t){if(!t||t.length===0)return false;for(let n of t)if(e.closest(n))return true;return false}function Ee(e,t){if(!e||Xe(e,t.ignoreSelectors))return null;let n=e;for(;n;){if(Xe(n,t.ignoreSelectors))return null;if(t.isSelectable?t.isSelectable(n):zt(n))return n;n=n.parentElement;}return null}function re(e,t){if(t.length===0)return false;for(let n of t)try{if(e.matches(n)||e.closest(n))return !0}catch{}return false}function zt(e){let t=e.tagName;return !(t==="HTML"||t==="BODY")}function We(e){let t=e.getBoundingClientRect(),n={selector:W(e),tagName:e.tagName.toLowerCase(),rect:we(t),pageRect:Ot(t)},o=e.getAttribute("id");o&&(n.id=o);let r=e.className;typeof r=="string"&&r.trim()&&(n.className=r);let i=N(e);i&&(n.textSnippet=i);let l=q(e)??ve(e);l&&(n.componentName=l);let s=qt(e);return s&&(n.testId=s),n}var Se=null;async function je(){return Se||(Se=import('html-to-image')),Se}async function $t(e){return await new Promise((t,n)=>{let o=new Image;o.onload=()=>t({width:o.naturalWidth,height:o.naturalHeight}),o.onerror=()=>n(new Error("Failed to load generated screenshot")),o.src=e;})}async function Ke(e,t){let{width:n,height:o}=await $t(e);return {dataUrl:e,mime:t,width:n,height:o}}function Z(e){if(e?.aborted)throw new Error("Aborted")}function Ze(){return {async captureElement(e,t){if(!S())throw new Error("captureElement can only run in the browser");Z(t.signal);let n=await je();Z(t.signal);let o=t.mime==="image/jpeg"?await n.toJpeg(e,{quality:t.quality??.92,pixelRatio:t.pixelRatio}):await n.toPng(e,{pixelRatio:t.pixelRatio});return Z(t.signal),await Ke(o,t.mime)},async captureFullPage(e){if(!S())throw new Error("captureFullPage can only run in the browser");Z(e.signal);let t=document.documentElement,n=Math.max(t.scrollWidth,t.clientWidth),o=Math.max(t.scrollHeight,t.clientHeight),r=Math.min(1,e.maxDimension/Math.max(n,o)),i=Math.max(1,Math.round(n*r)),l=Math.max(1,Math.round(o*r)),s=await je();Z(e.signal);let a=e.mime==="image/jpeg"?await s.toJpeg(t,{width:i,height:l,quality:e.quality??.92,pixelRatio:e.pixelRatio}):await s.toPng(t,{width:i,height:l,pixelRatio:e.pixelRatio});return Z(e.signal),await Ke(a,e.mime)}}}function Wt(e){if(e instanceof Error)return e.message;if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return "Unknown error"}}function v(e,t,n){let o={kind:e,message:Wt(t)};return n&&(o.detail=n),o}var jt=12e3,Kt=2048,Zt=.92;function Ge(){return Date.now()}function Gt(e){return new Promise((t,n)=>{let o=()=>n(new Error("Aborted"));if(e.aborted){o();return}e.addEventListener("abort",o,{once:true});})}async function Ye(e,t,n){let o=new Promise((i,l)=>{let s=setTimeout(()=>l(new Error("Timeout")),t);typeof s.unref=="function"&&s.unref();}),r=[e,o];return n&&r.push(Gt(n)),await Promise.race(r)}function Yt(e){if(!S())return 1;let t=window.devicePixelRatio||1,n=e?.pixelRatio??Math.min(t,2);return Math.max(.1,n)}function Jt(e){return !!(e?.element||e?.fullPage)}function Je(e){let t={mime:e.mime,pixelRatio:e.pixelRatio,maxDimension:e.maxDimension};return e.includeQuality&&(t.quality=e.quality),e.signal&&(t.signal=e.signal),t}async function Qe(e){let{selectionElement:t,capture:n,signal:o}=e;if(!S()||!Jt(n))return;let r=Ge(),i=[],l=n?.timeoutMs??jt,s=n?.maxDimension??Kt,a=n?.mime??"image/png",c=n?.quality??Zt,u=n?.adapter??Ze(),d={},p=Yt(n);if(n?.element&&t)try{let m=t.getBoundingClientRect(),h=Math.min(1,s/Math.max(m.width,m.height)),E=Math.min(p,p*h),b=await Ye(Promise.resolve(u.captureElement(t,{...Je({mime:a,quality:c,pixelRatio:E,maxDimension:s,includeQuality:a==="image/jpeg",...o?{signal:o}:{}})})),l,o);d.element=b;}catch(m){if(o?.aborted)throw m;i.push(v("capture_failed",m,{target:"element"}));}if(n?.fullPage)try{let m=await Ye(Promise.resolve(u.captureFullPage(Je({mime:a,quality:c,pixelRatio:p,maxDimension:s,includeQuality:a==="image/jpeg",...o?{signal:o}:{}}))),l,o);d.fullPage=m;}catch(m){if(o?.aborted)throw m;i.push(v("capture_failed",m,{target:"fullPage"}));}let g=Ge(),f={startedAt:r,finishedAt:g,durationMs:Math.max(0,g-r)};return i.length>0&&(f.errors=i),{...d,diagnostics:f}}function Qt(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch{return}}function en(){return S()?{url:window.location.href,title:document.title,referrer:document.referrer||void 0,userAgent:navigator.userAgent,language:navigator.language,platform:navigator.platform,viewport:{width:window.innerWidth,height:window.innerHeight},screen:{width:window.screen.width,height:window.screen.height},scroll:{x:window.scrollX,y:window.scrollY},devicePixelRatio:window.devicePixelRatio||1,timezone:Qt()}:{}}function tn(e){if(!e)return {};let t={};return e.id&&(t.userId=e.id),e.email&&(t.userEmail=e.email),e.name&&(t.userName=e.name),t}async function et(e){let{config:t,context:n,user:o}=e;if(t?.enabled===false)return {};let r={...en(),...tn(o)},i=t?.enrich;if(!i)return r;try{let l=await i(n);return {...r,...l}}catch(l){let s=v("unknown",l);return {...r,blocfeedMetadataError:s.message}}}var Q="blocfeed-queue",nn=50;function _e(){if(!S())return [];try{let e=localStorage.getItem(Q);if(!e)return [];let t=JSON.parse(e);if(Array.isArray(t))return t;console.warn("[BlocFeed] offline queue was corrupt (non-array) \u2014 resetting");try{localStorage.removeItem(Q);}catch{}return []}catch(e){console.warn("[BlocFeed] offline queue could not be read \u2014 resetting",e);try{localStorage.removeItem(Q);}catch{}return []}}function ke(e){if(S())try{e.length===0?localStorage.removeItem(Q):localStorage.setItem(Q,JSON.stringify(e));}catch(t){let n=t instanceof DOMException?t.name:"";console.warn(`[BlocFeed] failed to persist offline queue${n?` (${n})`:""} \u2014 feedback may be lost if page is closed`);}}function on(e){let t={...e};if(t.screenshots){let n={...t.screenshots};n.element&&(n.element={...n.element,dataUrl:""}),n.fullPage&&(n.fullPage={...n.fullPage,dataUrl:""}),t.screenshots=n;}return delete t.video,t}function Ce(e){let t=_e(),n=on(e);for(n.metadata={...n.metadata,_queued:true},t.push({payload:n,timestamp:Date.now()});t.length>nn;)t.shift();ke(t);}function tt(){let e=_e();return e.length===0?[]:(ke([]),e.map(t=>t.payload))}function ho(){ke([]);}function bo(){return _e().length}var rn=200,ee=[],nt=0,ie=false;function ot(e){let t=e.target;if(!(t instanceof Element)||t.closest("[data-blocfeed-ui]"))return;let n={timestampMs:Date.now()-nt,path:window.location.pathname,tagName:t.tagName.toLowerCase()},o=N(t,100);o&&(n.textSnippet=o);let r=q(t)??ve(t);r&&(n.componentName=r),ee.length<rn&&ee.push(n);}var rt={capture:true,passive:true};function it(){ie||!S()||(ie=true,ee=[],nt=Date.now(),document.addEventListener("click",ot,rt));}function st(){ie&&(ie=false,document.removeEventListener("click",ot,rt));}function sn(){return [...ee]}function an(){ee=[];}var cn=3e4,ln=25e5,at="video/webm",un=250,dn=1e3,fn=["video/webm;codecs=vp9","video/webm;codecs=vp8","video/webm"];function ct(){if(typeof MediaRecorder>"u")return null;for(let e of fn)if(MediaRecorder.isTypeSupported(e))return e;return null}function pn(){return !S()||typeof navigator?.mediaDevices?.getDisplayMedia!="function"?false:ct()!==null}async function Te(e){let{config:t,signal:n}=e;if(!S()||typeof navigator?.mediaDevices?.getDisplayMedia!="function")throw v("recording_failed",new Error("Screen recording is not supported in this browser"));let o=ct();if(!o)throw v("recording_failed",new Error("No supported video codec found (WebM required)"));if(n?.aborted)throw v("aborted",new Error("Recording aborted before start"));let r;try{r=await navigator.mediaDevices.getDisplayMedia({video:{displaySurface:"browser"},audio:!1});}catch(h){let E=h instanceof DOMException&&h.name==="NotAllowedError"?"Screen share permission denied":"Failed to start screen share";throw v("recording_failed",new Error(E))}if(n?.aborted)throw r.getTracks().forEach(h=>h.stop()),v("aborted",new Error("Recording aborted after permission"));let i=t?.maxDurationMs??cn,l=t?.videoBitsPerSecond??ln,s=new MediaRecorder(r,{mimeType:o,videoBitsPerSecond:l}),a=[],c=[],u=0,d=null,p=null,g=false,f=()=>{st(),d!==null&&(clearInterval(d),d=null),p!==null&&(clearTimeout(p),p=null),r.getTracks().forEach(h=>h.stop());},m=new Promise((h,E)=>{s.ondataavailable=k=>{k.data.size>0&&a.push(k.data);},s.onstop=()=>{if(g)return;g=true,f();let k=Date.now()-u,C=new Blob(a,{type:at}),y=URL.createObjectURL(C);h({mime:at,blobUrl:y,blob:C,durationMs:k,sizeBytes:C.size});},s.onerror=()=>{g||(g=true,f(),E(v("recording_failed",new Error("MediaRecorder error"))));};let b=r.getVideoTracks()[0];if(b&&b.addEventListener("ended",()=>{s.state!=="inactive"&&s.stop();}),n){let k=()=>{g||(g=true,s.state!=="inactive"&&s.stop(),f(),E(v("aborted",new Error("Recording aborted"))));};n.addEventListener("abort",k,{once:true});}});return s.start(dn),it(),u=Date.now(),d=setInterval(()=>{let h=Date.now()-u;for(let E of c)E(h);},un),p=setTimeout(()=>{!g&&s.state!=="inactive"&&s.stop();},i),{result:m,stop(){!g&&s.state!=="inactive"&&s.stop();},onTick(h){c.push(h);},abort(){g||(g=true,s.state!=="inactive"&&s.stop(),f());}}}var mn=6e4,lt="audio/webm",gn=250,hn=["audio/webm;codecs=opus","audio/webm","audio/ogg;codecs=opus"];function ut(){if(typeof MediaRecorder>"u")return null;for(let e of hn)if(MediaRecorder.isTypeSupported(e))return e;return null}function bn(){return !S()||typeof navigator?.mediaDevices?.getUserMedia!="function"?false:ut()!==null}async function Re(e){let{config:t,signal:n}=e;if(!S()||typeof navigator?.mediaDevices?.getUserMedia!="function")throw v("recording_failed",new Error("Microphone recording is not supported in this browser"));let o=ut();if(!o)throw v("recording_failed",new Error("No supported audio codec found"));if(n?.aborted)throw v("aborted",new Error("Voice recording aborted before start"));let r;try{r=await navigator.mediaDevices.getUserMedia({audio:!0});}catch(m){let h=m instanceof DOMException&&m.name==="NotAllowedError"?"Microphone permission denied":"Failed to access microphone";throw v("recording_failed",new Error(h))}if(n?.aborted)throw r.getTracks().forEach(m=>m.stop()),v("aborted",new Error("Voice recording aborted after permission"));let i=t?.maxDurationMs??mn,l=new MediaRecorder(r,{mimeType:o}),s=[],a=[],c=0,u=null,d=null,p=false,g=()=>{u!==null&&(clearInterval(u),u=null),d!==null&&(clearTimeout(d),d=null),r.getTracks().forEach(m=>m.stop());},f=new Promise((m,h)=>{if(l.ondataavailable=E=>{E.data.size>0&&s.push(E.data);},l.onstop=()=>{if(p)return;p=true,g();let E=Date.now()-c,b=new Blob(s,{type:lt});m({blob:b,mime:lt,durationMs:E});},l.onerror=()=>{p||(p=true,g(),h(v("recording_failed",new Error("MediaRecorder error"))));},n){let E=()=>{p||(p=true,l.state!=="inactive"&&l.stop(),g(),h(v("aborted",new Error("Voice recording aborted"))));};n.addEventListener("abort",E,{once:true});}});return l.start(1e3),c=Date.now(),u=setInterval(()=>{let m=Date.now()-c;for(let h of a)h(m);},gn),d=setTimeout(()=>{d=null,!p&&l.state!=="inactive"&&l.stop();},i),{result:f,stop(){!p&&l.state!=="inactive"&&l.stop();},onTick(m){a.push(m);},abort(){p||(p=true,l.state!=="inactive"&&l.stop(),g());}}}var yn=12e3,wn=2,vn=500,En=2e3,xe="https://blocfeed.com/api/feedback",Sn="https://blocfeed.com/api/feedback/voice",dt=0,mt="blocfeed-viewer-token",gt="blocfeed-my-feedback-url";function _n(){try{return localStorage.getItem(mt)}catch{return null}}function Io(){try{return localStorage.getItem(gt)}catch{return null}}function kn(e,t){try{localStorage.setItem(mt,e),t&&localStorage.setItem(gt,t);}catch{}}function ft(e,t){return new Promise((n,o)=>{if(t?.aborted){o(new Error("Aborted"));return}let r=setTimeout(n,e),i=()=>{clearTimeout(r),o(new Error("Aborted"));};t?.addEventListener("abort",i,{once:true});})}function Cn(e){return e>=500&&e<=599}function Tn(e){let[t,n]=e.split(",",2);if(!t||!n)throw new Error("Invalid data URL");let r=/data:(.*?);base64/.exec(t)?.[1]||"application/octet-stream",i=atob(n),l=new Uint8Array(i.length);for(let s=0;s<i.length;s+=1)l[s]=i.charCodeAt(s);return new Blob([l],{type:r})}function Rn(e){let t={},n={},o={...e};if(o.screenshots){let r={},i={...o.screenshots};i.element&&(t.element=i.element.dataUrl,r.element={mime:i.element.mime,width:i.element.width,height:i.element.height},i.element={...i.element,dataUrl:""}),i.fullPage&&(t.fullPage=i.fullPage.dataUrl,r.fullPage={mime:i.fullPage.mime,width:i.fullPage.width,height:i.fullPage.height},i.fullPage={...i.fullPage,dataUrl:""}),o.screenshots=i,(r.element||r.fullPage)&&(o.screenshot_intent=r);}return o.video&&(n.blob=o.video.blob,o.video_intent={mime:o.video.mime,durationMs:o.video.durationMs,sizeBytes:o.video.sizeBytes},delete o.video),{lean:o,extracted:t,extractedVideo:n}}async function pt(e,t,n){let o=Tn(t);await fetch(e,{method:"PUT",body:o,headers:{"content-type":o.type},...n?{signal:n}:{}});}async function xn(e){let{feedbackId:t,extracted:n,screenshots:o,signal:r}=e,i={};n.element&&o?.element&&(i.element={dataUrl:n.element,mime:o.element.mime,width:o.element.width,height:o.element.height}),n.fullPage&&o?.fullPage&&(i.fullPage={dataUrl:n.fullPage,mime:o.fullPage.mime,width:o.fullPage.width,height:o.fullPage.height}),Object.keys(i).length!==0&&await fetch(`${xe}/${t}/screenshots`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(i),...r?{signal:r}:{}});}async function An(e){await fetch(`${xe}/${e.feedbackId}/video`,{method:"POST",body:e.blob,headers:{"content-type":e.blob.type},...e.signal?{signal:e.signal}:{}});}async function ht(e){let{signal:t,transport:n}=e;if(Date.now()-dt<En)return {ok:false,error:v("configuration",new Error("Please wait before submitting again"))};let r=n?.timeoutMs??yn,i=n?.maxAttempts??wn,l=n?.backoffMs??vn,s=!!(e.payload.screenshots?.element?.dataUrl||e.payload.screenshots?.fullPage?.dataUrl),a=!!e.payload.video?.blob,c=s||a,{lean:u,extracted:d,extractedVideo:p}=c?Rn(e.payload):{lean:e.payload,extracted:{},extractedVideo:{}},g=_n();g&&(u.viewer_token=g);let f={...d,...e.screenshotDataUrls};for(let m=1;m<=i;m+=1){let h=new AbortController,E=setTimeout(()=>h.abort(),r),b=()=>h.abort();t&&t.addEventListener("abort",b,{once:true});try{let k=await fetch(xe,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(u),signal:h.signal});if(k.ok){dt=Date.now();let y;try{y=await k.json();}catch{}if(y?.viewer_token&&kn(y.viewer_token,y.my_feedback_url),(f.element||f.fullPage)&&y){let L=y.upload_urls;if(L){let V=[];f.element&&L.element&&V.push(pt(L.element,f.element,t)),f.fullPage&&L.fullPage&&V.push(pt(L.fullPage,f.fullPage,t));try{await Promise.all(V);}catch{}}else if(y.feedback_id)try{await xn({feedbackId:y.feedback_id,extracted:f,screenshots:e.payload.screenshots,...t?{signal:t}:{}});}catch{}}if(p.blob&&y){let L=y.upload_urls;if(L?.video)try{await fetch(L.video,{method:"PUT",body:p.blob,headers:{"content-type":p.blob.type},...t?{signal:t}:{}});}catch{}else if(y.feedback_id)try{await An({feedbackId:y.feedback_id,blob:p.blob,...t?{signal:t}:{}});}catch{}}let B={ok:!0,status:k.status};return y&&(B.apiResponse=y),B}if(m<i&&Cn(k.status)){let y=.85+Math.random()*.3,O=Math.round(l*2**(m-1)*y);await ft(O,t);continue}let C=`HTTP ${k.status}`;try{let y=await k.json();y?.error&&(C=y.error);}catch{}return {ok:!1,status:k.status,error:v("api_failed",new Error(C))}}catch(k){if(h.signal.aborted||t?.aborted)return {ok:false,error:v("aborted",k)};if(m<i){let C=.85+Math.random()*.3,y=Math.round(l*2**(m-1)*C);await ft(y,t);continue}return {ok:false,error:v("api_failed",k)}}finally{clearTimeout(E),t&&t.removeEventListener("abort",b);}}return {ok:false,error:v("api_failed",new Error("Failed"))}}async function bt(e){let{blob:t,mime:n,blocfeedId:o,signal:r}=e,i=await fetch(Sn,{method:"POST",headers:{"Content-Type":n,"X-Blocfeed-Id":o},body:t,...r?{signal:r}:{}});if(!i.ok){let s=await i.json().catch(()=>({error:"Unknown error"}));throw v("api_failed",new Error(s?.error??`Voice API returned ${i.status}`))}let l=await i.json();return {text:l.text??"",warning:l.warning}}var Mn={enabled:true,sampling:1,ignoreSelectors:["[data-blocfeed-ui]","[data-blocfeed-ignore]"],rageClick:{enabled:true,threshold:3,windowMs:1e3},httpFail:{enabled:true,statusCodes:[400,401,403,422,500,502,503,504],ignoreUrls:["/api/behavioral-events","/api/feedback"]},redirectLoop:{enabled:true,threshold:3,windowMs:2e3},formDataLoss:{enabled:true},deadClick:{enabled:true,observationWindowMs:300,rateLimitPerSelector:5}};function yt(e){let t=Mn;return {enabled:e?.enabled??t.enabled,sampling:e?.sampling??t.sampling,ignoreSelectors:e?.ignoreSelectors??t.ignoreSelectors,rageClick:{...t.rageClick,...e?.rageClick??{}},httpFail:{...t.httpFail,...e?.httpFail??{}},redirectLoop:{...t.redirectLoop,...e?.redirectLoop??{}},formDataLoss:{...t.formDataLoss,...e?.formDataLoss??{}},deadClick:{...t.deadClick,...e?.deadClick??{}}}}function wt(e){let t=[];async function n(){if(t.length===0)return;let r=t.splice(0,50);try{await fetch(e.endpoint,{method:"POST",headers:{"Content-Type":"application/json","x-blocfeed-id":e.blocfeedId},body:JSON.stringify({events:r}),keepalive:!0});}catch{}}function o(){if(t.length===0)return;if(typeof navigator>"u"||typeof navigator.sendBeacon!="function"){n();return}let r=t.splice(0,50),i=new Blob([JSON.stringify({events:r})],{type:"application/json"}),l=`${e.endpoint}?_bfid=${encodeURIComponent(e.blocfeedId)}`;try{navigator.sendBeacon(l,i);}catch{}}return {enqueue(r){t.push(r);},flush:n,flushBeacon:o,size(){return t.length}}}var vt="bf_behavioral_session",se=null;function P(){try{let e=sessionStorage.getItem(vt);if(e)return e;let t=Et();return sessionStorage.setItem(vt,t),t}catch{return se||(se=Et(),se)}}function Et(){let e=Math.random().toString(36).slice(2,10).padEnd(8,"0");return `bf_${Date.now()}_${e}`}function St(e,t){if(!e.rageClick.enabled)return ()=>{};let{threshold:n,windowMs:o}=e.rageClick,r=new Map;function i(l){try{let s=l.target;if(!s||!(s instanceof Element)||re(s,e.ignoreSelectors))return;let a=W(s,4);if(!a)return;let c=Date.now(),d=(r.get(a)??[]).filter(p=>c-p<=o);if(d.push(c),r.set(a,d),d.length>=n){let p=Fn(s),g=N(s,200)??null,f=s.tagName.toLowerCase(),m=s.id||null,h=q(s)??null,E=K(s,5),b={session_id:P(),event_type:"rage_click",page_url:typeof window>"u"?"":window.location.href,selector:a,element_text:g,event_data:{click_count:d.length,window_ms:o,...p?{disabled:!0}:{},tag_name:f,...m?{element_id:m}:{},...h?{component_name:h}:{},...E.length>0?{parent_components:E}:{}},created_at:new Date().toISOString()};t(b),r.set(a,[]);}}catch{}}return document.addEventListener("click",i,{capture:true,passive:true}),()=>document.removeEventListener("click",i,{capture:true})}function Fn(e){if(e.hasAttribute("disabled")||e.getAttribute("aria-disabled")==="true")return true;try{if(window.getComputedStyle(e).pointerEvents==="none")return !0}catch{}return false}var kt=0,Ct=null,ae=null,ce=[],Ln=1500;function Pn(){function e(t){try{let n=t.target;if(!n)return;let o=n.closest('button[type="submit"], input[type="submit"], [data-blocfeed-submit]');if(!o)return;kt=Date.now();let r=o.closest("form");Ct=(r?W(r,3):"")||null,ae=N(o,100)??null,ce=K(o,5);}catch{}}return document.addEventListener("click",e,{capture:true,passive:true}),()=>document.removeEventListener("click",e,{capture:true})}function Tt(e,t){if(!e.httpFail.enabled)return ()=>{};let{statusCodes:n,ignoreUrls:o}=e.httpFail,r=new Set(n),i=Pn(),l=globalThis.fetch,s=async(d,p)=>{let g=typeof d=="string"?d:d instanceof URL?d.toString():d.url,f=(p?.method??d.method??"GET").toUpperCase(),m=await l.call(globalThis,d,p);try{!_t(g,o)&&r.has(m.status)&&t(u(m.status,g,f));}catch{}return m};globalThis.fetch=s;let a=XMLHttpRequest.prototype.open,c=XMLHttpRequest.prototype.send;return XMLHttpRequest.prototype.open=function(d,p,...g){return this.__bf_url=p,this.__bf_method=d.toUpperCase(),a.call(this,d,p,...g)},XMLHttpRequest.prototype.send=function(d){let p=()=>{try{let g=this.__bf_url??"",f=this.__bf_method??"GET";!_t(g,o)&&r.has(this.status)&&t(u(this.status,g,f));}catch{}};return this.__bf_handler=p,this.addEventListener("loadend",p),c.call(this,d??null)},()=>{globalThis.fetch=l,XMLHttpRequest.prototype.open=a,XMLHttpRequest.prototype.send=c,i(),ae=null,ce=[];};function u(d,p,g){let m=Date.now()-kt<Ln;return {session_id:P(),event_type:"error",page_url:typeof window>"u"?"":window.location.href,selector:null,element_text:null,event_data:{http_status:d,request_url:p,method:g,form_selector:m?Ct:null,...m&&ae?{button_text:ae}:{},...m&&ce.length>0?{parent_components:ce}:{}},created_at:new Date().toISOString()}}}function _t(e,t){if(t.length===0)return false;for(let n of t)if(e.includes(n))return true;return false}var In=3e4;function Rt(e,t){if(!e.redirectLoop.enabled)return ()=>{};if(typeof window>"u")return ()=>{};let{threshold:n,windowMs:o}=e.redirectLoop,r=new Map,i=new Map,l=history.pushState,s=history.replaceState;function a(u){try{let d=Date.now(),p=i.get(u)??0;if(d<p)return;let f=(r.get(u)??[]).filter(m=>d-m<=o);if(f.push(d),r.set(u,f),f.length>=n){let m={session_id:P(),event_type:"thrashing",page_url:window.location.href,selector:null,element_text:null,event_data:{count:f.length,url:u,window_ms:o},created_at:new Date().toISOString()};t(m),i.set(u,d+In),r.set(u,[]);}}catch{}}function c(){let u=window.location.pathname+window.location.search;a(u);}return history.pushState=function(...u){let d=l.apply(this,u);return c(),d},history.replaceState=function(...u){let d=s.apply(this,u);return c(),d},window.addEventListener("popstate",c),()=>{history.pushState=l,history.replaceState=s,window.removeEventListener("popstate",c);}}function xt(e,t){if(!e.formDataLoss.enabled)return ()=>{};if(typeof window>"u")return ()=>{};let n=new Set,o=0;function r(c){let u=c.closest("form");return u?u.id?`#${u.id}`:"form":null}function i(c){try{let u=c.target;if(!u||!(u instanceof HTMLInputElement||u instanceof HTMLTextAreaElement||u instanceof HTMLSelectElement))return;let d=r(u);if(!d)return;n.has(d)||n.add(d),o++;}catch{}}function l(c){if(n.size===0)return;let u=Array.from(n),d={session_id:P(),event_type:"form_abandonment",page_url:window.location.href,selector:u[0]??null,element_text:null,event_data:{cause:c,field_count:o,forms:u},created_at:new Date().toISOString()};t(d);}function s(c){c.persisted&&l("bfcache_restore");}function a(){l("beforeunload_after_edit");}return document.addEventListener("input",i,{capture:true,passive:true}),window.addEventListener("pageshow",s),window.addEventListener("beforeunload",a),()=>{document.removeEventListener("input",i,{capture:true}),window.removeEventListener("pageshow",s),window.removeEventListener("beforeunload",a);}}function Bn(){let e={domMutationCount:0,urlChangeCount:0,networkCount:0,filePickerCount:0,uninstall:()=>{}},t=new MutationObserver(()=>{e.domMutationCount+=1;});t.observe(document.body,{childList:true,attributes:true,characterData:true,subtree:true});let n=history.pushState,o=history.replaceState;history.pushState=function(...a){return e.urlChangeCount+=1,n.apply(this,a)},history.replaceState=function(...a){return e.urlChangeCount+=1,o.apply(this,a)};let r=()=>{e.urlChangeCount+=1;};window.addEventListener("popstate",r);let i=globalThis.fetch;if(i){let a=(c,u)=>(e.networkCount+=1,i.call(globalThis,c,u));globalThis.fetch=a;}let l=XMLHttpRequest.prototype.open;XMLHttpRequest.prototype.open=function(a,c,...u){return e.networkCount+=1,l.call(this,a,c,...u)};let s=HTMLInputElement.prototype.click;return HTMLInputElement.prototype.click=function(){return this.type==="file"&&(e.filePickerCount+=1),s.call(this)},e.uninstall=()=>{t.disconnect(),history.pushState=n,history.replaceState=o,window.removeEventListener("popstate",r),i&&(globalThis.fetch=i),XMLHttpRequest.prototype.open=l,HTMLInputElement.prototype.click=s;},e}function At(e,t){if(!e.deadClick.enabled)return ()=>{};if(typeof window>"u")return ()=>{};let{observationWindowMs:n,rateLimitPerSelector:o}=e.deadClick,r=new Map,i=Bn();function l(s){try{let a=s.target;if(!a||!(a instanceof Element)||s.button!==0||s.metaKey||s.ctrlKey||s.altKey||s.shiftKey||re(a,e.ignoreSelectors)||a.closest("label"))return;if(a instanceof HTMLInputElement){let y=a.type;if(y==="checkbox"||y==="radio"||y==="file")return}if(a instanceof HTMLSelectElement||a.closest("a[target='_blank'], a[download]")||a.closest('[contenteditable="true"]'))return;try{let y=window.getSelection();if(y&&y.toString().length>0)return}catch{}let c=$e(a);if(!c)return;let u=W(a,4);if(!u)return;let d=i.domMutationCount,p=i.urlChangeCount,g=i.networkCount,f=i.filePickerCount,m=new Date().toISOString(),h=N(a,200)??null,E=a.tagName.toLowerCase(),b=a.id||null,k=q(a)??null,C=K(a,5);setTimeout(()=>{if(i.domMutationCount!==d||i.urlChangeCount!==p||i.networkCount!==g||i.filePickerCount!==f)return;let y=r.get(u)??0;if(y>=o)return;r.set(u,y+1);let O={session_id:P(),event_type:"dead_click",page_url:typeof window>"u"?"":window.location.href,selector:u,element_text:h,event_data:{tag_name:E,...b?{element_id:b}:{},...k?{component_name:k}:{},...C.length>0?{parent_components:C}:{},clickable_reason:c},created_at:m};t(O);},n);}catch{}}return document.addEventListener("click",l,{capture:true,passive:true}),()=>{document.removeEventListener("click",l,{capture:true}),i.uninstall();}}var Nn="https://blocfeed.com/api/replay-events";function Mt(e){if(!e.config.enabled)return ()=>{};if(typeof window>"u")return ()=>{};if(typeof globalThis.matchMedia>"u")return ()=>{};let t=P();if(Un(t)%100/100>=e.config.sampling)return ()=>{};let o=Date.now(),r=e.config.endpoint??Nn,i=[],l=0,s=false,a=null,c=`bf_replay_chunkseq_${t}`,u=0;try{let C=sessionStorage.getItem(c);C&&(u=parseInt(C,10)||0);}catch{}let d=(C=false)=>{if(i.length===0)return;let y=C?Hn(i):i;i=[],l=0;let O=u++;try{sessionStorage.setItem(c,String(u));}catch{}qn({blocfeedId:e.blocfeedId,sessionId:t,sessionStartedAtMs:o,chunkSeq:O,events:y,endpoint:r,useBeacon:C});},p=setInterval(()=>{s||d();},e.config.flushIntervalMs),g=setTimeout(()=>{d(),k();},e.config.maxDurationMs),f=null,m=()=>{f&&clearTimeout(f),f=setTimeout(()=>{d(),k();},e.config.inactivityTimeoutMs);};m();let h=()=>{d(true);};window.addEventListener("pagehide",h);let E=e.config.masking,b={emit(C){s||(i.push(C),l+=On(C),m(),l>=e.config.flushSizeBytes&&d());},recordCanvas:false,sampling:{mousemove:50}};E.maskAllInputs!==void 0&&(b.maskAllInputs=E.maskAllInputs),E.maskTextSelector!==void 0&&(b.maskTextSelector=E.maskTextSelector),E.maskTextClass!==void 0&&(b.maskTextClass=E.maskTextClass),E.blockSelector!==void 0&&(b.blockSelector=E.blockSelector),a=rrweb.record(b)??null;function k(){if(!s&&(s=true,clearInterval(p),clearTimeout(g),f&&clearTimeout(f),window.removeEventListener("pagehide",h),a))try{a();}catch{}}return k}function On(e){try{return JSON.stringify(e).length}catch{return 1024}}function Un(e){let t=0;for(let n=0;n<e.length;n++)t=t*31+e.charCodeAt(n)|0;return Math.abs(t)}function Hn(e){let n=JSON.stringify(e);if(n.length<=6e4)return e;let o=[...e];for(;o.length>1;)if(o.shift(),n=JSON.stringify(o),n.length<=6e4)return o;return o}async function qn(e){let t=JSON.stringify({blocfeed_id:e.blocfeedId,session_id:e.sessionId,session_started_at_ms:e.sessionStartedAtMs,chunk_seq:e.chunkSeq,events:e.events,page_url:typeof window<"u"?window.location.href:"",user_agent:typeof navigator<"u"?navigator.userAgent:""});if(e.useBeacon&&typeof navigator<"u"&&typeof navigator.sendBeacon=="function")try{let o=new Blob([t],{type:"application/json"});navigator.sendBeacon(e.endpoint,o);return}catch{}let n=!!e.useBeacon;try{await fetch(e.endpoint,{method:"POST",headers:{"Content-Type":"application/json"},body:t,...n?{keepalive:!0}:{}});}catch{}}var Vn={enabled:true,endpoint:null,maxDurationMs:144e5,flushIntervalMs:3e4,flushSizeBytes:1048576,inactivityTimeoutMs:18e5,sampling:1,masking:{maskAllInputs:true,maskTextSelector:"[data-blocfeed-mask]",maskTextClass:"blocfeed-mask",blockSelector:"[data-blocfeed-block]"}};function Ft(e){let t=Vn;return {enabled:e?.enabled??t.enabled,endpoint:e?.endpoint??t.endpoint,maxDurationMs:e?.maxDurationMs??t.maxDurationMs,flushIntervalMs:e?.flushIntervalMs??t.flushIntervalMs,flushSizeBytes:e?.flushSizeBytes??t.flushSizeBytes,inactivityTimeoutMs:e?.inactivityTimeoutMs??t.inactivityTimeoutMs,sampling:e?.sampling??t.sampling,masking:{...t.masking,...e?.masking??{}}}}var Xn=5e3,le=class{constructor(t){this.submitter=null;this.detectorUninstallers=[];this.flushTimer=null;this.pageHideHandler=null;this.installed=false;this.opts=t,this.resolved=yt(t.config);}install(){if(this.installed||!this.resolved.enabled||!(this.opts.passiveSampler??(()=>Math.random()<this.resolved.sampling))())return;let n=this.opts.endpoint??"https://blocfeed.com/api/behavioral-events";this.submitter=this.opts.submitter??wt({endpoint:n,blocfeedId:this.opts.blocfeedId});let o=i=>{this.submitter?.enqueue(i);};this.detectorUninstallers.push(St(this.resolved,o)),this.detectorUninstallers.push(Tt(this.resolved,o)),this.detectorUninstallers.push(Rt(this.resolved,o)),this.detectorUninstallers.push(xt(this.resolved,o)),this.detectorUninstallers.push(At(this.resolved,o));let r=Ft(this.opts.config?.sessionReplay);this.detectorUninstallers.push(Mt({blocfeedId:this.opts.blocfeedId,config:r})),this.flushTimer=setInterval(()=>{this.submitter?.flush();},Xn),this.pageHideHandler=()=>{this.submitter?.flushBeacon();},typeof window<"u"&&window.addEventListener("pagehide",this.pageHideHandler),this.installed=true;}uninstall(){if(this.installed){for(let t of [...this.detectorUninstallers].reverse())try{t();}catch{}this.detectorUninstallers=[],this.flushTimer&&(clearInterval(this.flushTimer),this.flushTimer=null),this.pageHideHandler&&typeof window<"u"&&(window.removeEventListener("pagehide",this.pageHideHandler),this.pageHideHandler=null);try{this.submitter?.flush();}catch{}this.submitter=null,this.installed=false;}}};function Ae(e){let t=null,n=null,o=(...r)=>{n=r,t===null&&(t=requestAnimationFrame(()=>{if(t=null,!n)return;let i=n;n=null,e(...i);}));};return o.cancel=()=>{t!==null&&cancelAnimationFrame(t),t=null,n=null;},o}function ue(e){return e instanceof Element?!!e.closest("[data-blocfeed-ui]"):false}function de(e){e.stopPropagation(),e.stopImmediatePropagation?.();}function Lt(e,t){if(!S())throw new Error("BlocFeed picker can only run in a browser environment.");let n=e.ignoreSelectors,o=e.isSelectable,r={};n&&n.length>0&&(r.ignoreSelectors=n),o&&(r.isSelectable=o);let i=null,l=null,s=(f,m=false)=>{if(!f){i=null,l=null,t.onHover(null);return}let h=we(f.getBoundingClientRect()),E=`${Math.round(h.x)}:${Math.round(h.y)}:${Math.round(h.width)}:${Math.round(h.height)}`;!m&&f===i&&E===l||(i=f,l=E,t.onHover({element:f,rect:h}));},a=Ae(f=>{if(ue(f.target))return;let m=document.elementFromPoint(f.clientX,f.clientY),h=Ee(m,r);s(h);}),c=Ae(()=>{i&&s(i,true);}),u=f=>{ue(f.target)||(de(f),f.pointerType==="mouse"&&f.preventDefault());},d=f=>{ue(f.target)||(de(f),f.pointerType==="mouse"&&f.preventDefault());},p=f=>{if(ue(f.target))return;de(f),f.preventDefault();let m=document.elementFromPoint(f.clientX,f.clientY),h=Ee(m,r);h&&t.onSelect({element:h,descriptor:We(h)});},g=f=>{f.key==="Escape"&&(de(f),f.preventDefault(),t.onCancel());};return window.addEventListener("pointermove",a,{capture:true,passive:true}),window.addEventListener("pointerdown",u,{capture:true}),window.addEventListener("pointerup",d,{capture:true}),window.addEventListener("click",p,{capture:true}),window.addEventListener("keydown",g,{capture:true}),window.addEventListener("scroll",c,{capture:true,passive:true}),window.addEventListener("resize",c,{passive:true}),{stop(){window.removeEventListener("pointermove",a,{capture:true}),window.removeEventListener("pointerdown",u,{capture:true}),window.removeEventListener("pointerup",d,{capture:true}),window.removeEventListener("click",p,{capture:true}),window.removeEventListener("keydown",g,{capture:true}),window.removeEventListener("scroll",c,{capture:true}),window.removeEventListener("resize",c),a.cancel(),c.cancel(),t.onHover(null);}}}async function Me(e){let{signal:t,transport:n}=e,o={ok:false};try{let r={payload:e.payload,...t?{signal:t}:{},...n?{transport:n}:{}};o.api=await ht(r),o.ok=!!o.api?.ok;}catch(r){o.api={ok:false,error:v("api_failed",r)},o.ok=false;}return {payload:e.payload,result:o}}var zn=["[data-blocfeed-ui]","[data-blocfeed-ignore]"];function $n(e){let t=[...zn,...e?.ignoreSelectors??[]],n=Array.from(new Set(t));return {...e,ignoreSelectors:n}}function Pt(){return {phase:"idle"}}function Wn(e){if(e.ok)return false;let t=e.api;return t?t.status&&t.status>=400&&t.status<500||t.error?.kind==="aborted"||t.error?.kind==="configuration"?false:!t.ok:true}function Fr(e){let t=e,n=new le({blocfeedId:t.blocfeed_id??"",...t.behavioral!==void 0?{config:t.behavioral}:{}});n.install();let o=Pt(),r=new Set,i=new Set,l=null,s=null,a=null,c=null,u=0,d=null,p=null,g=null,f=null,m=false,h=()=>{for(let w of r)w(o);},E=w=>{for(let _ of i)_(w);},b=w=>{o=w,h();},k=()=>{u+=1,c?.abort(),c=null;},C=()=>{l?.stop(),l=null,E(null),a!==null&&S()&&(document.documentElement.style.cursor=a,a=null);},y=()=>{if(g){try{URL.revokeObjectURL(g.blobUrl);}catch{}g=null;}},O=()=>{p&&(p.abort(),p=null),y();},B=null,L=()=>{f&&(f.abort(),f=null),B&&(B.abort(),B=null);},V=()=>{k(),C(),O(),L(),s=null,b(Pt());},Ne=()=>{if(!S())return;C(),s=null;let w=$n(t.picker);a=document.documentElement.style.cursor,document.documentElement.style.cursor="crosshair",b({phase:"picking"}),l=Lt(w,{onHover:E,onSelect:({element:_,descriptor:M})=>{s=_,C(),b({phase:"review",selection:M});},onCancel:()=>{V();}});},Oe=()=>{let w=tt();if(w.length!==0)for(let _ of w)Me({payload:_,...t.transport?{transport:t.transport}:{}}).catch(()=>{Ce(_);});};if(S()){setTimeout(Oe,1e3);let w=()=>Oe();window.addEventListener("online",w),d=()=>window.removeEventListener("online",w);}return {getState:()=>o,getConfig:()=>t,subscribe(w){return r.add(w),()=>r.delete(w)},subscribeHover(w){return i.add(w),()=>i.delete(w)},start(){o.phase==="capturing"||o.phase==="submitting"||o.phase==="recording"||o.phase!=="picking"&&Ne();},stop(){V();},clearSelection(){o.phase==="capturing"||o.phase==="submitting"||o.phase==="recording"||Ne();},setConfig(w){t=w;},async submit(w,_){if(!S()){let R=v("configuration",new Error("BlocFeed submit can only run in the browser"));return b({phase:"error",lastError:R}),{ok:false}}let M=t.blocfeed_id?.trim?.()??"";if(!M){let I={phase:"error",lastError:v("configuration",new Error("Missing blocfeed_id. Create a project in BlocFeed and pass its blocfeed_id."))};return o.selection&&(I.selection=o.selection),b(I),{ok:false}}if(m)return {ok:false};if(o.phase==="capturing"||o.phase==="submitting"||o.phase==="recording")return {ok:false};m=true;let A=u+1;u=A,c?.abort(),c=new AbortController;let x=c.signal,T=o.selection,D=_?.capture?{...t.capture,..._.capture}:t.capture,X=!!(D?.element||D?.fullPage),G={phase:X?"capturing":"submitting"};T&&(G.selection=T),b(G);try{let R=X?await Qe({selectionElement:s,capture:D,signal:x}):void 0;if(x.aborted||u!==A)return {ok:!1};let I={phase:"submitting"};T&&(I.selection=T),R&&(I.capture=R),b(I);let U={};T&&(U.selection=T),R&&(U.capture=R);let Y=await et({config:t.metadata,context:U,...t.user?{user:t.user}:{}}),z={version:1,createdAt:new Date().toISOString(),blocfeed_id:M,message:w,metadata:Y};_?.category&&(z.category=_.category),t.user&&(z.user=t.user),T&&(z.selection=T),R&&(z.screenshots=R),g&&(z.video=g);let{result:H}=await Me({payload:z,signal:x,...t.transport?{transport:t.transport}:{}});if(x.aborted||u!==A)return H;if(H.ok){y(),s=null;let ye={phase:"success",lastSubmit:H};return T&&(ye.selection=T),R&&(ye.capture=R),b(ye),H}Wn(H)&&Ce(z);let Nt=H.api?.error??v("unknown",new Error("Submission failed")),be={phase:"error",lastSubmit:H,lastError:Nt};return T&&(be.selection=T),R&&(be.capture=R),b(be),H}catch(R){if(x.aborted||u!==A)return {ok:false};let U={phase:"error",lastError:x.aborted?v("aborted",R):v("unknown",R)};return T&&(U.selection=T),b(U),{ok:false}}finally{m=false,u===A&&(c=null);}},async startRecording(){if(o.phase!=="review"||!t.recording?.enabled||f||p)return;let w=o.selection,_={phase:"recording",recordingElapsedMs:0};w&&(_.selection=w),b(_);try{let M={config:t.recording};c&&(M.signal=c.signal);let A=await Te(M);p=A,A.onTick(D=>{if(o.phase==="recording"){let X={phase:"recording",recordingElapsedMs:D};w&&(X.selection=w),b(X);}});let x=await A.result;p=null,g=x;let T={phase:"review",video:x};w&&(T.selection=w),b(T);}catch(M){p=null;let x={phase:"review",lastError:M?.kind?M:v("recording_failed",M)};w&&(x.selection=w),b(x);}},stopRecording(){o.phase!=="recording"||!p||p.stop();},removeVideo(){y();let w=o.selection,_={phase:"review"};w&&(_.selection=w),b(_);},async startVoice(){if(o.phase!=="review"){console.warn("[BlocFeed] startVoice: ignored \u2014 phase is",o.phase,'(expected "review")');return}let w=t.voice;if(!w?.enabled){console.warn("[BlocFeed] startVoice: ignored \u2014 voice is not enabled in config");return}if(p){console.warn("[BlocFeed] startVoice: ignored \u2014 a screen recording is already in progress");return}L();let _=o.selection,M={phase:"review",voiceRecording:true,voiceElapsedMs:0};_&&(M.selection=_),g&&(M.video=g),b(M);try{let A={config:w};c&&(A.signal=c.signal);let x=await Re(A);f=x,x.onTick(U=>{let Y={phase:"review",voiceRecording:!0,voiceElapsedMs:U};_&&(Y.selection=_),g&&(Y.video=g),b(Y);});let T=await x.result;f=null;let D={phase:"review",voiceRecording:!1,voiceTranscribing:!0};_&&(D.selection=_),g&&(D.video=g),b(D),B=new AbortController;let X={blob:T.blob,mime:T.mime,blocfeedId:t.blocfeed_id,signal:B.signal},{text:Ue,warning:G}=await bt(X);B=null;let R={phase:"review",voiceRecording:!1,voiceTranscribing:!1};_&&(R.selection=_),g&&(R.video=g),b(R);let I={text:Ue};return G&&(I.warning=G),I}catch(A){L();let x=A?.kind?A:v("recording_failed",A);console.warn("[BlocFeed] Voice error:",x.message);let T={phase:"review",voiceRecording:false,voiceTranscribing:false,lastError:x};_&&(T.selection=_),g&&(T.video=g),b(T);return}},stopVoice(){f&&f.stop();},__unsafeGetSelectedElement(){return s},destroy(){n.uninstall(),V(),r.clear(),i.clear(),d?.(),d=null;}}}var te=[],ne=[],It=20,Bt=15,fe=[],Dt=typeof console<"u"?{log:console.log?.bind(console),warn:console.warn?.bind(console),error:console.error?.bind(console),info:console.info?.bind(console),debug:console.debug?.bind(console)}:{},pe=typeof globalThis<"u"&&typeof globalThis.fetch=="function"?globalThis.fetch:void 0,me=typeof XMLHttpRequest<"u"?XMLHttpRequest.prototype.open:void 0,ge=typeof XMLHttpRequest<"u"?XMLHttpRequest.prototype.send:void 0,Le=new Set,Pe=false,Ie=false,he=false,jn=["blocfeed.com","google-analytics.com","googletagmanager.com","analytics.google.com","googleads.g.doubleclick.net","googlesyndication.com","googleadservices.com","google.com/pagead","google.com/ads","facebook.net","facebook.com/tr","connect.facebook.net","graph.facebook.com","api.mixpanel.com","api-js.mixpanel.com","api.amplitude.com","api2.amplitude.com","api.segment.io","cdn.segment.com","vars.hotjar.com","in.hotjar.com","script.hotjar.com","heapanalytics.com","fullstory.com/s/fs.js","rs.fullstory.com","app.posthog.com","us.posthog.com","eu.posthog.com","api-iam.intercom.io","widget.intercom.io","sentry.io/api","browser.sentry-cdn.com","browser-intake-datadoghq.com","clarity.ms","js.hs-analytics.net","api.hubapi.com","forms.hubspot.com","plausible.io/api","client.crisp.chat","js.driftt.com","r.logrocket.com","app.pendo.io","events.launchdarkly.com","app.launchdarkly.com","grammarly.com","gnar.grammarly.com","capi.grammarly.com","api.languagetool.org","api.languagetoolplus.com","fonts.googleapis.com","fonts.gstatic.com","cdn.cookielaw.org","consent.cookiebot.com","js.stripe.com","api.stripe.com/v1/tokens","google.com/recaptcha","hcaptcha.com","bam.nr-data.net","rec.smartlook.com","o2.mouseflow.com","api.luckyorange.com","static.zdassets.com","ekr.zdassets.com"];function Kn(e){if(e instanceof Error)return e.name&&e.name!=="Error"?`${e.name}: ${e.message}`:e.message||String(e);if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return String(e)}}function Zn(e,t){let n=t.map(Kn).join(" "),o=t.find(i=>i instanceof Error),r={level:e,message:n.slice(0,2e3),timestamp:Date.now()};for(o?.stack&&(r.stack=o.stack.slice(0,2e3)),te.push(r);te.length>It;)te.shift();}function Fe(e){let t=e.url.toLowerCase();for(let n of fe)if(t.includes(n))return;for(ne.push(e);ne.length>Bt;)ne.shift();}function Ir(e={}){if(he||!S())return;he=true,It=e.consoleLimit??20,Bt=e.networkLimit??15;let t=e.ignoreUrls;if(t!==void 0?fe=t.map(n=>n.toLowerCase()):fe=[...jn],e.console!==false){let n=e.consoleLevels??["error","warn"];for(let o of n){let r=Dt[o];r&&(Le.add(o),console[o]=(...i)=>{Zn(o,i),r.apply(console,i);});}}if(e.network!==false&&pe){let n=pe;Pe=true,window.fetch=async function(r,i){let l=typeof r=="string"?r:r instanceof URL?r.toString():r.url,s=(i?.method??"GET").toUpperCase(),a=Date.now();try{let c=await n.call(window,r,i);return c.ok||Fe({url:l.slice(0,500),method:s,status:c.status,statusText:c.statusText,timestamp:a,durationMs:Date.now()-a}),c}catch(c){throw Fe({url:l.slice(0,500),method:s,status:0,statusText:c instanceof Error?c.message:"Network error",timestamp:a,durationMs:Date.now()-a}),c}};}if(e.network!==false&&me&&ge){let n=me,o=ge;Ie=true,XMLHttpRequest.prototype.open=function(r,i,...l){return this.__bf_method=r.toUpperCase(),this.__bf_url=String(i),n.apply(this,[r,i,...l])},XMLHttpRequest.prototype.send=function(...r){let i=this.__bf_method||"GET",l=this.__bf_url||"",s=Date.now();return this.addEventListener("loadend",function(){if(this.status>=400||this.status===0){let a={url:l.slice(0,500),method:i,status:this.status,timestamp:s,durationMs:Date.now()-s};this.statusText&&(a.statusText=this.statusText),Fe(a);}},{once:true}),o.apply(this,r)};}}function Br(){if(he){for(let e of Le){let t=Dt[e];t&&(console[e]=t);}Le.clear(),Pe&&pe&&(window.fetch=pe,Pe=false),Ie&&me&&ge&&(XMLHttpRequest.prototype.open=me,XMLHttpRequest.prototype.send=ge,Ie=false),fe=[],he=false;}}function Dr(){return {consoleLogs:[...te],networkErrors:[...ne]}}function Nr(){te=[],ne=[];}var Gn=[{name:"supabase_service_role_key",pattern:/SUPABASE_SERVICE_ROLE_KEY["'=:\s]{1,8}[A-Za-z0-9_.=-]{30,400}/},{name:"supabase_db_password",pattern:/SUPABASE_DB_PASSWORD["'=:\s]{1,8}[^\s"']{6,200}/},{name:"postgres_password",pattern:/POSTGRES_PASSWORD["'=:\s]{1,8}[^\s"']{6,200}/},{name:"database_url_with_creds",pattern:/(?:postgres|postgresql|mysql|mongodb|redis|amqp):\/\/[^:\s"']{1,100}:[^@\s"']{1,200}@/},{name:"aws_access_key",pattern:/AKIA[0-9A-Z]{16}/},{name:"aws_secret_key",pattern:/AWS_SECRET_ACCESS_KEY["'=:\s]{1,8}[A-Za-z0-9/+=]{30,200}/},{name:"aws_session_token",pattern:/AWS_SESSION_TOKEN["'=:\s]{1,8}[A-Za-z0-9/+=]{30,600}/},{name:"stripe_secret_key",pattern:/sk_live_[a-zA-Z0-9]{10,200}/},{name:"stripe_secret_key_test",pattern:/sk_test_[a-zA-Z0-9]{10,200}/},{name:"stripe_restricted_key",pattern:/rk_(?:live|test)_[a-zA-Z0-9]{10,200}/},{name:"github_pat",pattern:/ghp_[A-Za-z0-9_]{36,100}/},{name:"github_oauth",pattern:/gho_[A-Za-z0-9_]{36,100}/},{name:"github_user_token",pattern:/ghu_[A-Za-z0-9_]{36,100}/},{name:"github_server_token",pattern:/ghs_[A-Za-z0-9_]{36,100}/},{name:"github_fine_grained",pattern:/github_pat_[A-Za-z0-9_]{22,200}/},{name:"openai_api_key",pattern:/sk-[a-zA-Z0-9]{20,200}(?![a-zA-Z0-9_])/},{name:"anthropic_api_key",pattern:/sk-ant-[a-zA-Z0-9\-_]{20,200}/},{name:"private_key",pattern:/-----BEGIN (?:RSA |EC |DSA |OPENSSH |PGP )?PRIVATE KEY-----/},{name:"sendgrid_api_key",pattern:/SG\.[a-zA-Z0-9_-]{22,100}\.[a-zA-Z0-9_-]{22,100}/},{name:"twilio_auth_token",pattern:/TWILIO_AUTH_TOKEN["'=:\s]{1,8}[a-f0-9]{32}/},{name:"generic_secret_key",pattern:/[A-Z_]{2,60}_SECRET_KEY["'=:\s]{1,8}[^\s"']{8,200}/},{name:"generic_secret",pattern:/[A-Z_]{2,60}_SECRET["'=:\s]{1,8}[^\s"']{8,200}/},{name:"generic_password",pattern:/[A-Z_]{2,60}_PASSWORD["'=:\s]{1,8}[^\s"']{6,200}/},{name:"generic_private_key_var",pattern:/[A-Z_]{2,60}_PRIVATE_KEY["'=:\s]{1,8}[^\s"']{8,400}/}],j=[],De=0,Be=false;function Yn(e){let t=e.slice(0,80);return t.length<=6?"***":t.slice(0,6)+"***"}function Jn(e,t,n,o){if(j.some(l=>l.rule===e&&l.source===t))return;let i={rule:e,source:t,hint:Yn(n),timestamp:Date.now()};o&&(i.location=o),j.push(i);}function oe(e,t,n,o){for(let{name:r,pattern:i}of n){let l=i.exec(e);l&&Jn(r,t,l[0],o);}}function Qn(e){try{let t=window;if(t.__NEXT_DATA__){let n=JSON.stringify(t.__NEXT_DATA__);oe(n,"hydration",e,"__NEXT_DATA__");}if(t.__NUXT__){let n=JSON.stringify(t.__NUXT__);oe(n,"hydration",e,"__NUXT__");}}catch{}}function eo(e){try{document.querySelectorAll("script:not([src])").forEach((n,o)=>{let r=n.textContent;r&&r.length>0&&oe(r,"scripts",e,`inline-script[${o}]`);});}catch{}}function to(e){try{document.querySelectorAll("meta[content]").forEach(n=>{let o=n.getAttribute("content"),r=n.getAttribute("name")||n.getAttribute("property")||"";o&&o.length>10&&oe(o,"meta",e,r?`meta[${r}]`:void 0);});}catch{}}function no(e){try{document.querySelectorAll("[data-api-key], [data-secret], [data-token], [data-password]").forEach(n=>{let o=n.attributes;for(let r=0;r<o.length;r++){let i=o[r];i.name.startsWith("data-")&&i.value.length>10&&oe(i.value,"dom",e,`${n.tagName.toLowerCase()}[${i.name}]`);}});}catch{}}function Hr(e={}){if(Be||!S()||(Be=true,e.secretScan===false))return;let t=[...Gn,...e.customPatterns??[]],n=e.scanTargets??["hydration","scripts","meta","dom"];setTimeout(()=>{De=Date.now(),n.includes("hydration")&&Qn(t),n.includes("scripts")&&eo(t),n.includes("meta")&&to(t),n.includes("dom")&&no(t);let o=e.notify??"both";j.length>0&&(o==="console"||o==="both")&&console.warn(`[BlocFeed Security] Found ${j.length} potential secret(s) exposed in client code:`,j.map(r=>`${r.rule} (${r.source}${r.location?`: ${r.location}`:""})`));},100);}function qr(){return {findings:[...j],scannedAt:De}}function Vr(){j=[],De=0,Be=false;}
2
- exports.A=Vr;exports.a=S;exports.b=we;exports.c=Ze;exports.d=Qe;exports.e=et;exports.f=Ce;exports.g=tt;exports.h=ho;exports.i=bo;exports.j=sn;exports.k=an;exports.l=pn;exports.m=Te;exports.n=bn;exports.o=Re;exports.p=_n;exports.q=Io;exports.r=bt;exports.s=le;exports.t=Fr;exports.u=Ir;exports.v=Br;exports.w=Dr;exports.x=Nr;exports.y=Hr;exports.z=qr;
@@ -1,2 +0,0 @@
1
- import {record}from'rrweb';function S(){return typeof window<"u"&&typeof document<"u"}function He(e){let t=globalThis.CSS;return typeof t?.escape=="function"?t.escape(e):e.replace(/[^a-zA-Z0-9_-]/g,n=>{let o=n.codePointAt(0);return o===void 0?"":`\\${o.toString(16)} `})}function we(e){return {x:e.x,y:e.y,width:e.width,height:e.height}}function Ot(e){return {x:e.x+window.scrollX,y:e.y+window.scrollY,width:e.width,height:e.height}}function Ut(e){return e.replace(/\s+/g," ").trim()}function N(e,t=140){let n=e.textContent;if(!n)return;let o=Ut(n);if(o)return o.length<=t?o:`${o.slice(0,t-1)}\u2026`}function Ht(e){let t=1;for(let n=e.previousElementSibling;n;n=n.previousElementSibling)n.tagName===e.tagName&&(t+=1);return t}var ze=["data-testid","data-test-id","data-test","data-qa","data-cy"],qe="data-blocfeed-component";function q(e){let t=e.closest(`[${qe}]`);if(!t)return;let o=t.getAttribute(qe)?.trim();return o||void 0}function K(e,t=5){let n=[],o=e,r=0;for(;o&&r<t*4;){let i=q(o);if(i&&n[n.length-1]!==i&&(n.push(i),n.length>=t))break;o=o.parentElement,r++;}return n}function qt(e){for(let t of ze){let n=e.closest(`[${t}]`);if(!n)continue;let r=n.getAttribute(t)?.trim();if(r)return r}}function Ve(e){try{let t=e,n=Object.getOwnPropertyNames(t);for(let o of n)if(o.startsWith("__reactFiber$")||o.startsWith("__reactInternalInstance$")){let r=t[o];if(r&&typeof r=="object")return r}}catch{}return null}function $(e){if(e.length<=1||e.length===2&&e[0]===e[0].toLowerCase()||e.startsWith("__")&&e.endsWith("__"))return true;let t=e[0];return t>="a"&&t<="z"}function J(e){if(e){for(let t of e)if(typeof t.name=="string"&&t.name&&!$(t.name))return t.name}}function F(e){if(e&&typeof e!="string"){if(typeof e=="function"){let t=e;return typeof t.displayName=="string"&&t.displayName?t.displayName:typeof t.name=="string"&&t.name?t.name:void 0}if(typeof e=="object"){let t=e,n=t.displayName;if(typeof n=="string"&&n)return n;let o=t.render;if(typeof o=="function"){let i=o;if(typeof i.displayName=="string"&&i.displayName)return i.displayName;if(typeof i.name=="string"&&i.name)return i.name}let r=t.type;return F(r)}}}function ve(e){let t=Ve(e);if(!t)return;let n=J(t._debugInfo);if(n)return n;let o=t._debugOwner!==void 0;if(o){let a=t._debugOwner;for(let c=0;a&&c<50;c+=1){let u=J(a._debugInfo);if(u)return u;let d=F(a.type)??F(a.elementType);if(d&&!$(d))return d;a=a._debugOwner;}}if(t._owner!==void 0&&t._owner!==t._debugOwner){let a=t._owner;for(let c=0;a&&c<50;c+=1){let u=J(a._debugInfo);if(u)return u;let d=F(a.type)??F(a.elementType);if(d&&!$(d))return d;a=a._owner;}}let i=t,l=o?80:25;for(let a=0;i&&a<l;a+=1){let c=J(i._debugInfo);if(c)return c;let u=F(i.type)??F(i.elementType);if(u&&!$(u))return u;i=i.return;}let s=e.parentElement;for(let a=0;s&&a<15;a+=1){let c=Ve(s);if(c){let u=J(c._debugInfo);if(u)return u;let d=F(c.type)??F(c.elementType);if(d&&!$(d))return d;if(c._debugOwner){let p=F(c._debugOwner.type)??F(c._debugOwner.elementType);if(p&&!$(p))return p}if(c._owner&&c._owner!==c._debugOwner){let p=F(c._owner.type)??F(c._owner.elementType);if(p&&!$(p))return p}}s=s.parentElement;}}function Vt(e){let t=e.tagName.toLowerCase(),n=e.getAttribute("id");if(n)return `#${He(n)}`;for(let o of ze){let r=e.getAttribute(o);if(r)return `${t}[${o}="${He(r)}"]`}return `${t}:nth-of-type(${Ht(e)})`}function W(e,t=10){let n=[],o=e;for(;o&&n.length<t;){let r=Vt(o);if(n.unshift(r),r.startsWith("#"))break;o=o.parentElement;}return n.join(" > ")}var Xt=new Set(["button","link","tab","menuitem"]);function $e(e){if(e.tagName==="BUTTON")return e.disabled?null:"button";if(e.tagName==="A"||e.tagName==="a"){let n=e.getAttribute("href")?.trim();return !n||n==="#"||n.toLowerCase().startsWith("javascript:")?null:"link"}let t=e.getAttribute("role");if(t&&Xt.has(t))return "role";try{if(window.getComputedStyle(e).cursor==="pointer")return "cursor_pointer"}catch{}return null}function Xe(e,t){if(!t||t.length===0)return false;for(let n of t)if(e.closest(n))return true;return false}function Ee(e,t){if(!e||Xe(e,t.ignoreSelectors))return null;let n=e;for(;n;){if(Xe(n,t.ignoreSelectors))return null;if(t.isSelectable?t.isSelectable(n):zt(n))return n;n=n.parentElement;}return null}function re(e,t){if(t.length===0)return false;for(let n of t)try{if(e.matches(n)||e.closest(n))return !0}catch{}return false}function zt(e){let t=e.tagName;return !(t==="HTML"||t==="BODY")}function We(e){let t=e.getBoundingClientRect(),n={selector:W(e),tagName:e.tagName.toLowerCase(),rect:we(t),pageRect:Ot(t)},o=e.getAttribute("id");o&&(n.id=o);let r=e.className;typeof r=="string"&&r.trim()&&(n.className=r);let i=N(e);i&&(n.textSnippet=i);let l=q(e)??ve(e);l&&(n.componentName=l);let s=qt(e);return s&&(n.testId=s),n}var Se=null;async function je(){return Se||(Se=import('html-to-image')),Se}async function $t(e){return await new Promise((t,n)=>{let o=new Image;o.onload=()=>t({width:o.naturalWidth,height:o.naturalHeight}),o.onerror=()=>n(new Error("Failed to load generated screenshot")),o.src=e;})}async function Ke(e,t){let{width:n,height:o}=await $t(e);return {dataUrl:e,mime:t,width:n,height:o}}function Z(e){if(e?.aborted)throw new Error("Aborted")}function Ze(){return {async captureElement(e,t){if(!S())throw new Error("captureElement can only run in the browser");Z(t.signal);let n=await je();Z(t.signal);let o=t.mime==="image/jpeg"?await n.toJpeg(e,{quality:t.quality??.92,pixelRatio:t.pixelRatio}):await n.toPng(e,{pixelRatio:t.pixelRatio});return Z(t.signal),await Ke(o,t.mime)},async captureFullPage(e){if(!S())throw new Error("captureFullPage can only run in the browser");Z(e.signal);let t=document.documentElement,n=Math.max(t.scrollWidth,t.clientWidth),o=Math.max(t.scrollHeight,t.clientHeight),r=Math.min(1,e.maxDimension/Math.max(n,o)),i=Math.max(1,Math.round(n*r)),l=Math.max(1,Math.round(o*r)),s=await je();Z(e.signal);let a=e.mime==="image/jpeg"?await s.toJpeg(t,{width:i,height:l,quality:e.quality??.92,pixelRatio:e.pixelRatio}):await s.toPng(t,{width:i,height:l,pixelRatio:e.pixelRatio});return Z(e.signal),await Ke(a,e.mime)}}}function Wt(e){if(e instanceof Error)return e.message;if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return "Unknown error"}}function v(e,t,n){let o={kind:e,message:Wt(t)};return n&&(o.detail=n),o}var jt=12e3,Kt=2048,Zt=.92;function Ge(){return Date.now()}function Gt(e){return new Promise((t,n)=>{let o=()=>n(new Error("Aborted"));if(e.aborted){o();return}e.addEventListener("abort",o,{once:true});})}async function Ye(e,t,n){let o=new Promise((i,l)=>{let s=setTimeout(()=>l(new Error("Timeout")),t);typeof s.unref=="function"&&s.unref();}),r=[e,o];return n&&r.push(Gt(n)),await Promise.race(r)}function Yt(e){if(!S())return 1;let t=window.devicePixelRatio||1,n=e?.pixelRatio??Math.min(t,2);return Math.max(.1,n)}function Jt(e){return !!(e?.element||e?.fullPage)}function Je(e){let t={mime:e.mime,pixelRatio:e.pixelRatio,maxDimension:e.maxDimension};return e.includeQuality&&(t.quality=e.quality),e.signal&&(t.signal=e.signal),t}async function Qe(e){let{selectionElement:t,capture:n,signal:o}=e;if(!S()||!Jt(n))return;let r=Ge(),i=[],l=n?.timeoutMs??jt,s=n?.maxDimension??Kt,a=n?.mime??"image/png",c=n?.quality??Zt,u=n?.adapter??Ze(),d={},p=Yt(n);if(n?.element&&t)try{let m=t.getBoundingClientRect(),h=Math.min(1,s/Math.max(m.width,m.height)),E=Math.min(p,p*h),b=await Ye(Promise.resolve(u.captureElement(t,{...Je({mime:a,quality:c,pixelRatio:E,maxDimension:s,includeQuality:a==="image/jpeg",...o?{signal:o}:{}})})),l,o);d.element=b;}catch(m){if(o?.aborted)throw m;i.push(v("capture_failed",m,{target:"element"}));}if(n?.fullPage)try{let m=await Ye(Promise.resolve(u.captureFullPage(Je({mime:a,quality:c,pixelRatio:p,maxDimension:s,includeQuality:a==="image/jpeg",...o?{signal:o}:{}}))),l,o);d.fullPage=m;}catch(m){if(o?.aborted)throw m;i.push(v("capture_failed",m,{target:"fullPage"}));}let g=Ge(),f={startedAt:r,finishedAt:g,durationMs:Math.max(0,g-r)};return i.length>0&&(f.errors=i),{...d,diagnostics:f}}function Qt(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch{return}}function en(){return S()?{url:window.location.href,title:document.title,referrer:document.referrer||void 0,userAgent:navigator.userAgent,language:navigator.language,platform:navigator.platform,viewport:{width:window.innerWidth,height:window.innerHeight},screen:{width:window.screen.width,height:window.screen.height},scroll:{x:window.scrollX,y:window.scrollY},devicePixelRatio:window.devicePixelRatio||1,timezone:Qt()}:{}}function tn(e){if(!e)return {};let t={};return e.id&&(t.userId=e.id),e.email&&(t.userEmail=e.email),e.name&&(t.userName=e.name),t}async function et(e){let{config:t,context:n,user:o}=e;if(t?.enabled===false)return {};let r={...en(),...tn(o)},i=t?.enrich;if(!i)return r;try{let l=await i(n);return {...r,...l}}catch(l){let s=v("unknown",l);return {...r,blocfeedMetadataError:s.message}}}var Q="blocfeed-queue",nn=50;function _e(){if(!S())return [];try{let e=localStorage.getItem(Q);if(!e)return [];let t=JSON.parse(e);if(Array.isArray(t))return t;console.warn("[BlocFeed] offline queue was corrupt (non-array) \u2014 resetting");try{localStorage.removeItem(Q);}catch{}return []}catch(e){console.warn("[BlocFeed] offline queue could not be read \u2014 resetting",e);try{localStorage.removeItem(Q);}catch{}return []}}function ke(e){if(S())try{e.length===0?localStorage.removeItem(Q):localStorage.setItem(Q,JSON.stringify(e));}catch(t){let n=t instanceof DOMException?t.name:"";console.warn(`[BlocFeed] failed to persist offline queue${n?` (${n})`:""} \u2014 feedback may be lost if page is closed`);}}function on(e){let t={...e};if(t.screenshots){let n={...t.screenshots};n.element&&(n.element={...n.element,dataUrl:""}),n.fullPage&&(n.fullPage={...n.fullPage,dataUrl:""}),t.screenshots=n;}return delete t.video,t}function Ce(e){let t=_e(),n=on(e);for(n.metadata={...n.metadata,_queued:true},t.push({payload:n,timestamp:Date.now()});t.length>nn;)t.shift();ke(t);}function tt(){let e=_e();return e.length===0?[]:(ke([]),e.map(t=>t.payload))}function ho(){ke([]);}function bo(){return _e().length}var rn=200,ee=[],nt=0,ie=false;function ot(e){let t=e.target;if(!(t instanceof Element)||t.closest("[data-blocfeed-ui]"))return;let n={timestampMs:Date.now()-nt,path:window.location.pathname,tagName:t.tagName.toLowerCase()},o=N(t,100);o&&(n.textSnippet=o);let r=q(t)??ve(t);r&&(n.componentName=r),ee.length<rn&&ee.push(n);}var rt={capture:true,passive:true};function it(){ie||!S()||(ie=true,ee=[],nt=Date.now(),document.addEventListener("click",ot,rt));}function st(){ie&&(ie=false,document.removeEventListener("click",ot,rt));}function sn(){return [...ee]}function an(){ee=[];}var cn=3e4,ln=25e5,at="video/webm",un=250,dn=1e3,fn=["video/webm;codecs=vp9","video/webm;codecs=vp8","video/webm"];function ct(){if(typeof MediaRecorder>"u")return null;for(let e of fn)if(MediaRecorder.isTypeSupported(e))return e;return null}function pn(){return !S()||typeof navigator?.mediaDevices?.getDisplayMedia!="function"?false:ct()!==null}async function Te(e){let{config:t,signal:n}=e;if(!S()||typeof navigator?.mediaDevices?.getDisplayMedia!="function")throw v("recording_failed",new Error("Screen recording is not supported in this browser"));let o=ct();if(!o)throw v("recording_failed",new Error("No supported video codec found (WebM required)"));if(n?.aborted)throw v("aborted",new Error("Recording aborted before start"));let r;try{r=await navigator.mediaDevices.getDisplayMedia({video:{displaySurface:"browser"},audio:!1});}catch(h){let E=h instanceof DOMException&&h.name==="NotAllowedError"?"Screen share permission denied":"Failed to start screen share";throw v("recording_failed",new Error(E))}if(n?.aborted)throw r.getTracks().forEach(h=>h.stop()),v("aborted",new Error("Recording aborted after permission"));let i=t?.maxDurationMs??cn,l=t?.videoBitsPerSecond??ln,s=new MediaRecorder(r,{mimeType:o,videoBitsPerSecond:l}),a=[],c=[],u=0,d=null,p=null,g=false,f=()=>{st(),d!==null&&(clearInterval(d),d=null),p!==null&&(clearTimeout(p),p=null),r.getTracks().forEach(h=>h.stop());},m=new Promise((h,E)=>{s.ondataavailable=k=>{k.data.size>0&&a.push(k.data);},s.onstop=()=>{if(g)return;g=true,f();let k=Date.now()-u,C=new Blob(a,{type:at}),y=URL.createObjectURL(C);h({mime:at,blobUrl:y,blob:C,durationMs:k,sizeBytes:C.size});},s.onerror=()=>{g||(g=true,f(),E(v("recording_failed",new Error("MediaRecorder error"))));};let b=r.getVideoTracks()[0];if(b&&b.addEventListener("ended",()=>{s.state!=="inactive"&&s.stop();}),n){let k=()=>{g||(g=true,s.state!=="inactive"&&s.stop(),f(),E(v("aborted",new Error("Recording aborted"))));};n.addEventListener("abort",k,{once:true});}});return s.start(dn),it(),u=Date.now(),d=setInterval(()=>{let h=Date.now()-u;for(let E of c)E(h);},un),p=setTimeout(()=>{!g&&s.state!=="inactive"&&s.stop();},i),{result:m,stop(){!g&&s.state!=="inactive"&&s.stop();},onTick(h){c.push(h);},abort(){g||(g=true,s.state!=="inactive"&&s.stop(),f());}}}var mn=6e4,lt="audio/webm",gn=250,hn=["audio/webm;codecs=opus","audio/webm","audio/ogg;codecs=opus"];function ut(){if(typeof MediaRecorder>"u")return null;for(let e of hn)if(MediaRecorder.isTypeSupported(e))return e;return null}function bn(){return !S()||typeof navigator?.mediaDevices?.getUserMedia!="function"?false:ut()!==null}async function Re(e){let{config:t,signal:n}=e;if(!S()||typeof navigator?.mediaDevices?.getUserMedia!="function")throw v("recording_failed",new Error("Microphone recording is not supported in this browser"));let o=ut();if(!o)throw v("recording_failed",new Error("No supported audio codec found"));if(n?.aborted)throw v("aborted",new Error("Voice recording aborted before start"));let r;try{r=await navigator.mediaDevices.getUserMedia({audio:!0});}catch(m){let h=m instanceof DOMException&&m.name==="NotAllowedError"?"Microphone permission denied":"Failed to access microphone";throw v("recording_failed",new Error(h))}if(n?.aborted)throw r.getTracks().forEach(m=>m.stop()),v("aborted",new Error("Voice recording aborted after permission"));let i=t?.maxDurationMs??mn,l=new MediaRecorder(r,{mimeType:o}),s=[],a=[],c=0,u=null,d=null,p=false,g=()=>{u!==null&&(clearInterval(u),u=null),d!==null&&(clearTimeout(d),d=null),r.getTracks().forEach(m=>m.stop());},f=new Promise((m,h)=>{if(l.ondataavailable=E=>{E.data.size>0&&s.push(E.data);},l.onstop=()=>{if(p)return;p=true,g();let E=Date.now()-c,b=new Blob(s,{type:lt});m({blob:b,mime:lt,durationMs:E});},l.onerror=()=>{p||(p=true,g(),h(v("recording_failed",new Error("MediaRecorder error"))));},n){let E=()=>{p||(p=true,l.state!=="inactive"&&l.stop(),g(),h(v("aborted",new Error("Voice recording aborted"))));};n.addEventListener("abort",E,{once:true});}});return l.start(1e3),c=Date.now(),u=setInterval(()=>{let m=Date.now()-c;for(let h of a)h(m);},gn),d=setTimeout(()=>{d=null,!p&&l.state!=="inactive"&&l.stop();},i),{result:f,stop(){!p&&l.state!=="inactive"&&l.stop();},onTick(m){a.push(m);},abort(){p||(p=true,l.state!=="inactive"&&l.stop(),g());}}}var yn=12e3,wn=2,vn=500,En=2e3,xe="https://blocfeed.com/api/feedback",Sn="https://blocfeed.com/api/feedback/voice",dt=0,mt="blocfeed-viewer-token",gt="blocfeed-my-feedback-url";function _n(){try{return localStorage.getItem(mt)}catch{return null}}function Io(){try{return localStorage.getItem(gt)}catch{return null}}function kn(e,t){try{localStorage.setItem(mt,e),t&&localStorage.setItem(gt,t);}catch{}}function ft(e,t){return new Promise((n,o)=>{if(t?.aborted){o(new Error("Aborted"));return}let r=setTimeout(n,e),i=()=>{clearTimeout(r),o(new Error("Aborted"));};t?.addEventListener("abort",i,{once:true});})}function Cn(e){return e>=500&&e<=599}function Tn(e){let[t,n]=e.split(",",2);if(!t||!n)throw new Error("Invalid data URL");let r=/data:(.*?);base64/.exec(t)?.[1]||"application/octet-stream",i=atob(n),l=new Uint8Array(i.length);for(let s=0;s<i.length;s+=1)l[s]=i.charCodeAt(s);return new Blob([l],{type:r})}function Rn(e){let t={},n={},o={...e};if(o.screenshots){let r={},i={...o.screenshots};i.element&&(t.element=i.element.dataUrl,r.element={mime:i.element.mime,width:i.element.width,height:i.element.height},i.element={...i.element,dataUrl:""}),i.fullPage&&(t.fullPage=i.fullPage.dataUrl,r.fullPage={mime:i.fullPage.mime,width:i.fullPage.width,height:i.fullPage.height},i.fullPage={...i.fullPage,dataUrl:""}),o.screenshots=i,(r.element||r.fullPage)&&(o.screenshot_intent=r);}return o.video&&(n.blob=o.video.blob,o.video_intent={mime:o.video.mime,durationMs:o.video.durationMs,sizeBytes:o.video.sizeBytes},delete o.video),{lean:o,extracted:t,extractedVideo:n}}async function pt(e,t,n){let o=Tn(t);await fetch(e,{method:"PUT",body:o,headers:{"content-type":o.type},...n?{signal:n}:{}});}async function xn(e){let{feedbackId:t,extracted:n,screenshots:o,signal:r}=e,i={};n.element&&o?.element&&(i.element={dataUrl:n.element,mime:o.element.mime,width:o.element.width,height:o.element.height}),n.fullPage&&o?.fullPage&&(i.fullPage={dataUrl:n.fullPage,mime:o.fullPage.mime,width:o.fullPage.width,height:o.fullPage.height}),Object.keys(i).length!==0&&await fetch(`${xe}/${t}/screenshots`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(i),...r?{signal:r}:{}});}async function An(e){await fetch(`${xe}/${e.feedbackId}/video`,{method:"POST",body:e.blob,headers:{"content-type":e.blob.type},...e.signal?{signal:e.signal}:{}});}async function ht(e){let{signal:t,transport:n}=e;if(Date.now()-dt<En)return {ok:false,error:v("configuration",new Error("Please wait before submitting again"))};let r=n?.timeoutMs??yn,i=n?.maxAttempts??wn,l=n?.backoffMs??vn,s=!!(e.payload.screenshots?.element?.dataUrl||e.payload.screenshots?.fullPage?.dataUrl),a=!!e.payload.video?.blob,c=s||a,{lean:u,extracted:d,extractedVideo:p}=c?Rn(e.payload):{lean:e.payload,extracted:{},extractedVideo:{}},g=_n();g&&(u.viewer_token=g);let f={...d,...e.screenshotDataUrls};for(let m=1;m<=i;m+=1){let h=new AbortController,E=setTimeout(()=>h.abort(),r),b=()=>h.abort();t&&t.addEventListener("abort",b,{once:true});try{let k=await fetch(xe,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(u),signal:h.signal});if(k.ok){dt=Date.now();let y;try{y=await k.json();}catch{}if(y?.viewer_token&&kn(y.viewer_token,y.my_feedback_url),(f.element||f.fullPage)&&y){let L=y.upload_urls;if(L){let V=[];f.element&&L.element&&V.push(pt(L.element,f.element,t)),f.fullPage&&L.fullPage&&V.push(pt(L.fullPage,f.fullPage,t));try{await Promise.all(V);}catch{}}else if(y.feedback_id)try{await xn({feedbackId:y.feedback_id,extracted:f,screenshots:e.payload.screenshots,...t?{signal:t}:{}});}catch{}}if(p.blob&&y){let L=y.upload_urls;if(L?.video)try{await fetch(L.video,{method:"PUT",body:p.blob,headers:{"content-type":p.blob.type},...t?{signal:t}:{}});}catch{}else if(y.feedback_id)try{await An({feedbackId:y.feedback_id,blob:p.blob,...t?{signal:t}:{}});}catch{}}let B={ok:!0,status:k.status};return y&&(B.apiResponse=y),B}if(m<i&&Cn(k.status)){let y=.85+Math.random()*.3,O=Math.round(l*2**(m-1)*y);await ft(O,t);continue}let C=`HTTP ${k.status}`;try{let y=await k.json();y?.error&&(C=y.error);}catch{}return {ok:!1,status:k.status,error:v("api_failed",new Error(C))}}catch(k){if(h.signal.aborted||t?.aborted)return {ok:false,error:v("aborted",k)};if(m<i){let C=.85+Math.random()*.3,y=Math.round(l*2**(m-1)*C);await ft(y,t);continue}return {ok:false,error:v("api_failed",k)}}finally{clearTimeout(E),t&&t.removeEventListener("abort",b);}}return {ok:false,error:v("api_failed",new Error("Failed"))}}async function bt(e){let{blob:t,mime:n,blocfeedId:o,signal:r}=e,i=await fetch(Sn,{method:"POST",headers:{"Content-Type":n,"X-Blocfeed-Id":o},body:t,...r?{signal:r}:{}});if(!i.ok){let s=await i.json().catch(()=>({error:"Unknown error"}));throw v("api_failed",new Error(s?.error??`Voice API returned ${i.status}`))}let l=await i.json();return {text:l.text??"",warning:l.warning}}var Mn={enabled:true,sampling:1,ignoreSelectors:["[data-blocfeed-ui]","[data-blocfeed-ignore]"],rageClick:{enabled:true,threshold:3,windowMs:1e3},httpFail:{enabled:true,statusCodes:[400,401,403,422,500,502,503,504],ignoreUrls:["/api/behavioral-events","/api/feedback"]},redirectLoop:{enabled:true,threshold:3,windowMs:2e3},formDataLoss:{enabled:true},deadClick:{enabled:true,observationWindowMs:300,rateLimitPerSelector:5}};function yt(e){let t=Mn;return {enabled:e?.enabled??t.enabled,sampling:e?.sampling??t.sampling,ignoreSelectors:e?.ignoreSelectors??t.ignoreSelectors,rageClick:{...t.rageClick,...e?.rageClick??{}},httpFail:{...t.httpFail,...e?.httpFail??{}},redirectLoop:{...t.redirectLoop,...e?.redirectLoop??{}},formDataLoss:{...t.formDataLoss,...e?.formDataLoss??{}},deadClick:{...t.deadClick,...e?.deadClick??{}}}}function wt(e){let t=[];async function n(){if(t.length===0)return;let r=t.splice(0,50);try{await fetch(e.endpoint,{method:"POST",headers:{"Content-Type":"application/json","x-blocfeed-id":e.blocfeedId},body:JSON.stringify({events:r}),keepalive:!0});}catch{}}function o(){if(t.length===0)return;if(typeof navigator>"u"||typeof navigator.sendBeacon!="function"){n();return}let r=t.splice(0,50),i=new Blob([JSON.stringify({events:r})],{type:"application/json"}),l=`${e.endpoint}?_bfid=${encodeURIComponent(e.blocfeedId)}`;try{navigator.sendBeacon(l,i);}catch{}}return {enqueue(r){t.push(r);},flush:n,flushBeacon:o,size(){return t.length}}}var vt="bf_behavioral_session",se=null;function P(){try{let e=sessionStorage.getItem(vt);if(e)return e;let t=Et();return sessionStorage.setItem(vt,t),t}catch{return se||(se=Et(),se)}}function Et(){let e=Math.random().toString(36).slice(2,10).padEnd(8,"0");return `bf_${Date.now()}_${e}`}function St(e,t){if(!e.rageClick.enabled)return ()=>{};let{threshold:n,windowMs:o}=e.rageClick,r=new Map;function i(l){try{let s=l.target;if(!s||!(s instanceof Element)||re(s,e.ignoreSelectors))return;let a=W(s,4);if(!a)return;let c=Date.now(),d=(r.get(a)??[]).filter(p=>c-p<=o);if(d.push(c),r.set(a,d),d.length>=n){let p=Fn(s),g=N(s,200)??null,f=s.tagName.toLowerCase(),m=s.id||null,h=q(s)??null,E=K(s,5),b={session_id:P(),event_type:"rage_click",page_url:typeof window>"u"?"":window.location.href,selector:a,element_text:g,event_data:{click_count:d.length,window_ms:o,...p?{disabled:!0}:{},tag_name:f,...m?{element_id:m}:{},...h?{component_name:h}:{},...E.length>0?{parent_components:E}:{}},created_at:new Date().toISOString()};t(b),r.set(a,[]);}}catch{}}return document.addEventListener("click",i,{capture:true,passive:true}),()=>document.removeEventListener("click",i,{capture:true})}function Fn(e){if(e.hasAttribute("disabled")||e.getAttribute("aria-disabled")==="true")return true;try{if(window.getComputedStyle(e).pointerEvents==="none")return !0}catch{}return false}var kt=0,Ct=null,ae=null,ce=[],Ln=1500;function Pn(){function e(t){try{let n=t.target;if(!n)return;let o=n.closest('button[type="submit"], input[type="submit"], [data-blocfeed-submit]');if(!o)return;kt=Date.now();let r=o.closest("form");Ct=(r?W(r,3):"")||null,ae=N(o,100)??null,ce=K(o,5);}catch{}}return document.addEventListener("click",e,{capture:true,passive:true}),()=>document.removeEventListener("click",e,{capture:true})}function Tt(e,t){if(!e.httpFail.enabled)return ()=>{};let{statusCodes:n,ignoreUrls:o}=e.httpFail,r=new Set(n),i=Pn(),l=globalThis.fetch,s=async(d,p)=>{let g=typeof d=="string"?d:d instanceof URL?d.toString():d.url,f=(p?.method??d.method??"GET").toUpperCase(),m=await l.call(globalThis,d,p);try{!_t(g,o)&&r.has(m.status)&&t(u(m.status,g,f));}catch{}return m};globalThis.fetch=s;let a=XMLHttpRequest.prototype.open,c=XMLHttpRequest.prototype.send;return XMLHttpRequest.prototype.open=function(d,p,...g){return this.__bf_url=p,this.__bf_method=d.toUpperCase(),a.call(this,d,p,...g)},XMLHttpRequest.prototype.send=function(d){let p=()=>{try{let g=this.__bf_url??"",f=this.__bf_method??"GET";!_t(g,o)&&r.has(this.status)&&t(u(this.status,g,f));}catch{}};return this.__bf_handler=p,this.addEventListener("loadend",p),c.call(this,d??null)},()=>{globalThis.fetch=l,XMLHttpRequest.prototype.open=a,XMLHttpRequest.prototype.send=c,i(),ae=null,ce=[];};function u(d,p,g){let m=Date.now()-kt<Ln;return {session_id:P(),event_type:"error",page_url:typeof window>"u"?"":window.location.href,selector:null,element_text:null,event_data:{http_status:d,request_url:p,method:g,form_selector:m?Ct:null,...m&&ae?{button_text:ae}:{},...m&&ce.length>0?{parent_components:ce}:{}},created_at:new Date().toISOString()}}}function _t(e,t){if(t.length===0)return false;for(let n of t)if(e.includes(n))return true;return false}var In=3e4;function Rt(e,t){if(!e.redirectLoop.enabled)return ()=>{};if(typeof window>"u")return ()=>{};let{threshold:n,windowMs:o}=e.redirectLoop,r=new Map,i=new Map,l=history.pushState,s=history.replaceState;function a(u){try{let d=Date.now(),p=i.get(u)??0;if(d<p)return;let f=(r.get(u)??[]).filter(m=>d-m<=o);if(f.push(d),r.set(u,f),f.length>=n){let m={session_id:P(),event_type:"thrashing",page_url:window.location.href,selector:null,element_text:null,event_data:{count:f.length,url:u,window_ms:o},created_at:new Date().toISOString()};t(m),i.set(u,d+In),r.set(u,[]);}}catch{}}function c(){let u=window.location.pathname+window.location.search;a(u);}return history.pushState=function(...u){let d=l.apply(this,u);return c(),d},history.replaceState=function(...u){let d=s.apply(this,u);return c(),d},window.addEventListener("popstate",c),()=>{history.pushState=l,history.replaceState=s,window.removeEventListener("popstate",c);}}function xt(e,t){if(!e.formDataLoss.enabled)return ()=>{};if(typeof window>"u")return ()=>{};let n=new Set,o=0;function r(c){let u=c.closest("form");return u?u.id?`#${u.id}`:"form":null}function i(c){try{let u=c.target;if(!u||!(u instanceof HTMLInputElement||u instanceof HTMLTextAreaElement||u instanceof HTMLSelectElement))return;let d=r(u);if(!d)return;n.has(d)||n.add(d),o++;}catch{}}function l(c){if(n.size===0)return;let u=Array.from(n),d={session_id:P(),event_type:"form_abandonment",page_url:window.location.href,selector:u[0]??null,element_text:null,event_data:{cause:c,field_count:o,forms:u},created_at:new Date().toISOString()};t(d);}function s(c){c.persisted&&l("bfcache_restore");}function a(){l("beforeunload_after_edit");}return document.addEventListener("input",i,{capture:true,passive:true}),window.addEventListener("pageshow",s),window.addEventListener("beforeunload",a),()=>{document.removeEventListener("input",i,{capture:true}),window.removeEventListener("pageshow",s),window.removeEventListener("beforeunload",a);}}function Bn(){let e={domMutationCount:0,urlChangeCount:0,networkCount:0,filePickerCount:0,uninstall:()=>{}},t=new MutationObserver(()=>{e.domMutationCount+=1;});t.observe(document.body,{childList:true,attributes:true,characterData:true,subtree:true});let n=history.pushState,o=history.replaceState;history.pushState=function(...a){return e.urlChangeCount+=1,n.apply(this,a)},history.replaceState=function(...a){return e.urlChangeCount+=1,o.apply(this,a)};let r=()=>{e.urlChangeCount+=1;};window.addEventListener("popstate",r);let i=globalThis.fetch;if(i){let a=(c,u)=>(e.networkCount+=1,i.call(globalThis,c,u));globalThis.fetch=a;}let l=XMLHttpRequest.prototype.open;XMLHttpRequest.prototype.open=function(a,c,...u){return e.networkCount+=1,l.call(this,a,c,...u)};let s=HTMLInputElement.prototype.click;return HTMLInputElement.prototype.click=function(){return this.type==="file"&&(e.filePickerCount+=1),s.call(this)},e.uninstall=()=>{t.disconnect(),history.pushState=n,history.replaceState=o,window.removeEventListener("popstate",r),i&&(globalThis.fetch=i),XMLHttpRequest.prototype.open=l,HTMLInputElement.prototype.click=s;},e}function At(e,t){if(!e.deadClick.enabled)return ()=>{};if(typeof window>"u")return ()=>{};let{observationWindowMs:n,rateLimitPerSelector:o}=e.deadClick,r=new Map,i=Bn();function l(s){try{let a=s.target;if(!a||!(a instanceof Element)||s.button!==0||s.metaKey||s.ctrlKey||s.altKey||s.shiftKey||re(a,e.ignoreSelectors)||a.closest("label"))return;if(a instanceof HTMLInputElement){let y=a.type;if(y==="checkbox"||y==="radio"||y==="file")return}if(a instanceof HTMLSelectElement||a.closest("a[target='_blank'], a[download]")||a.closest('[contenteditable="true"]'))return;try{let y=window.getSelection();if(y&&y.toString().length>0)return}catch{}let c=$e(a);if(!c)return;let u=W(a,4);if(!u)return;let d=i.domMutationCount,p=i.urlChangeCount,g=i.networkCount,f=i.filePickerCount,m=new Date().toISOString(),h=N(a,200)??null,E=a.tagName.toLowerCase(),b=a.id||null,k=q(a)??null,C=K(a,5);setTimeout(()=>{if(i.domMutationCount!==d||i.urlChangeCount!==p||i.networkCount!==g||i.filePickerCount!==f)return;let y=r.get(u)??0;if(y>=o)return;r.set(u,y+1);let O={session_id:P(),event_type:"dead_click",page_url:typeof window>"u"?"":window.location.href,selector:u,element_text:h,event_data:{tag_name:E,...b?{element_id:b}:{},...k?{component_name:k}:{},...C.length>0?{parent_components:C}:{},clickable_reason:c},created_at:m};t(O);},n);}catch{}}return document.addEventListener("click",l,{capture:true,passive:true}),()=>{document.removeEventListener("click",l,{capture:true}),i.uninstall();}}var Nn="https://blocfeed.com/api/replay-events";function Mt(e){if(!e.config.enabled)return ()=>{};if(typeof window>"u")return ()=>{};if(typeof globalThis.matchMedia>"u")return ()=>{};let t=P();if(Un(t)%100/100>=e.config.sampling)return ()=>{};let o=Date.now(),r=e.config.endpoint??Nn,i=[],l=0,s=false,a=null,c=`bf_replay_chunkseq_${t}`,u=0;try{let C=sessionStorage.getItem(c);C&&(u=parseInt(C,10)||0);}catch{}let d=(C=false)=>{if(i.length===0)return;let y=C?Hn(i):i;i=[],l=0;let O=u++;try{sessionStorage.setItem(c,String(u));}catch{}qn({blocfeedId:e.blocfeedId,sessionId:t,sessionStartedAtMs:o,chunkSeq:O,events:y,endpoint:r,useBeacon:C});},p=setInterval(()=>{s||d();},e.config.flushIntervalMs),g=setTimeout(()=>{d(),k();},e.config.maxDurationMs),f=null,m=()=>{f&&clearTimeout(f),f=setTimeout(()=>{d(),k();},e.config.inactivityTimeoutMs);};m();let h=()=>{d(true);};window.addEventListener("pagehide",h);let E=e.config.masking,b={emit(C){s||(i.push(C),l+=On(C),m(),l>=e.config.flushSizeBytes&&d());},recordCanvas:false,sampling:{mousemove:50}};E.maskAllInputs!==void 0&&(b.maskAllInputs=E.maskAllInputs),E.maskTextSelector!==void 0&&(b.maskTextSelector=E.maskTextSelector),E.maskTextClass!==void 0&&(b.maskTextClass=E.maskTextClass),E.blockSelector!==void 0&&(b.blockSelector=E.blockSelector),a=record(b)??null;function k(){if(!s&&(s=true,clearInterval(p),clearTimeout(g),f&&clearTimeout(f),window.removeEventListener("pagehide",h),a))try{a();}catch{}}return k}function On(e){try{return JSON.stringify(e).length}catch{return 1024}}function Un(e){let t=0;for(let n=0;n<e.length;n++)t=t*31+e.charCodeAt(n)|0;return Math.abs(t)}function Hn(e){let n=JSON.stringify(e);if(n.length<=6e4)return e;let o=[...e];for(;o.length>1;)if(o.shift(),n=JSON.stringify(o),n.length<=6e4)return o;return o}async function qn(e){let t=JSON.stringify({blocfeed_id:e.blocfeedId,session_id:e.sessionId,session_started_at_ms:e.sessionStartedAtMs,chunk_seq:e.chunkSeq,events:e.events,page_url:typeof window<"u"?window.location.href:"",user_agent:typeof navigator<"u"?navigator.userAgent:""});if(e.useBeacon&&typeof navigator<"u"&&typeof navigator.sendBeacon=="function")try{let o=new Blob([t],{type:"application/json"});navigator.sendBeacon(e.endpoint,o);return}catch{}let n=!!e.useBeacon;try{await fetch(e.endpoint,{method:"POST",headers:{"Content-Type":"application/json"},body:t,...n?{keepalive:!0}:{}});}catch{}}var Vn={enabled:true,endpoint:null,maxDurationMs:144e5,flushIntervalMs:3e4,flushSizeBytes:1048576,inactivityTimeoutMs:18e5,sampling:1,masking:{maskAllInputs:true,maskTextSelector:"[data-blocfeed-mask]",maskTextClass:"blocfeed-mask",blockSelector:"[data-blocfeed-block]"}};function Ft(e){let t=Vn;return {enabled:e?.enabled??t.enabled,endpoint:e?.endpoint??t.endpoint,maxDurationMs:e?.maxDurationMs??t.maxDurationMs,flushIntervalMs:e?.flushIntervalMs??t.flushIntervalMs,flushSizeBytes:e?.flushSizeBytes??t.flushSizeBytes,inactivityTimeoutMs:e?.inactivityTimeoutMs??t.inactivityTimeoutMs,sampling:e?.sampling??t.sampling,masking:{...t.masking,...e?.masking??{}}}}var Xn=5e3,le=class{constructor(t){this.submitter=null;this.detectorUninstallers=[];this.flushTimer=null;this.pageHideHandler=null;this.installed=false;this.opts=t,this.resolved=yt(t.config);}install(){if(this.installed||!this.resolved.enabled||!(this.opts.passiveSampler??(()=>Math.random()<this.resolved.sampling))())return;let n=this.opts.endpoint??"https://blocfeed.com/api/behavioral-events";this.submitter=this.opts.submitter??wt({endpoint:n,blocfeedId:this.opts.blocfeedId});let o=i=>{this.submitter?.enqueue(i);};this.detectorUninstallers.push(St(this.resolved,o)),this.detectorUninstallers.push(Tt(this.resolved,o)),this.detectorUninstallers.push(Rt(this.resolved,o)),this.detectorUninstallers.push(xt(this.resolved,o)),this.detectorUninstallers.push(At(this.resolved,o));let r=Ft(this.opts.config?.sessionReplay);this.detectorUninstallers.push(Mt({blocfeedId:this.opts.blocfeedId,config:r})),this.flushTimer=setInterval(()=>{this.submitter?.flush();},Xn),this.pageHideHandler=()=>{this.submitter?.flushBeacon();},typeof window<"u"&&window.addEventListener("pagehide",this.pageHideHandler),this.installed=true;}uninstall(){if(this.installed){for(let t of [...this.detectorUninstallers].reverse())try{t();}catch{}this.detectorUninstallers=[],this.flushTimer&&(clearInterval(this.flushTimer),this.flushTimer=null),this.pageHideHandler&&typeof window<"u"&&(window.removeEventListener("pagehide",this.pageHideHandler),this.pageHideHandler=null);try{this.submitter?.flush();}catch{}this.submitter=null,this.installed=false;}}};function Ae(e){let t=null,n=null,o=(...r)=>{n=r,t===null&&(t=requestAnimationFrame(()=>{if(t=null,!n)return;let i=n;n=null,e(...i);}));};return o.cancel=()=>{t!==null&&cancelAnimationFrame(t),t=null,n=null;},o}function ue(e){return e instanceof Element?!!e.closest("[data-blocfeed-ui]"):false}function de(e){e.stopPropagation(),e.stopImmediatePropagation?.();}function Lt(e,t){if(!S())throw new Error("BlocFeed picker can only run in a browser environment.");let n=e.ignoreSelectors,o=e.isSelectable,r={};n&&n.length>0&&(r.ignoreSelectors=n),o&&(r.isSelectable=o);let i=null,l=null,s=(f,m=false)=>{if(!f){i=null,l=null,t.onHover(null);return}let h=we(f.getBoundingClientRect()),E=`${Math.round(h.x)}:${Math.round(h.y)}:${Math.round(h.width)}:${Math.round(h.height)}`;!m&&f===i&&E===l||(i=f,l=E,t.onHover({element:f,rect:h}));},a=Ae(f=>{if(ue(f.target))return;let m=document.elementFromPoint(f.clientX,f.clientY),h=Ee(m,r);s(h);}),c=Ae(()=>{i&&s(i,true);}),u=f=>{ue(f.target)||(de(f),f.pointerType==="mouse"&&f.preventDefault());},d=f=>{ue(f.target)||(de(f),f.pointerType==="mouse"&&f.preventDefault());},p=f=>{if(ue(f.target))return;de(f),f.preventDefault();let m=document.elementFromPoint(f.clientX,f.clientY),h=Ee(m,r);h&&t.onSelect({element:h,descriptor:We(h)});},g=f=>{f.key==="Escape"&&(de(f),f.preventDefault(),t.onCancel());};return window.addEventListener("pointermove",a,{capture:true,passive:true}),window.addEventListener("pointerdown",u,{capture:true}),window.addEventListener("pointerup",d,{capture:true}),window.addEventListener("click",p,{capture:true}),window.addEventListener("keydown",g,{capture:true}),window.addEventListener("scroll",c,{capture:true,passive:true}),window.addEventListener("resize",c,{passive:true}),{stop(){window.removeEventListener("pointermove",a,{capture:true}),window.removeEventListener("pointerdown",u,{capture:true}),window.removeEventListener("pointerup",d,{capture:true}),window.removeEventListener("click",p,{capture:true}),window.removeEventListener("keydown",g,{capture:true}),window.removeEventListener("scroll",c,{capture:true}),window.removeEventListener("resize",c),a.cancel(),c.cancel(),t.onHover(null);}}}async function Me(e){let{signal:t,transport:n}=e,o={ok:false};try{let r={payload:e.payload,...t?{signal:t}:{},...n?{transport:n}:{}};o.api=await ht(r),o.ok=!!o.api?.ok;}catch(r){o.api={ok:false,error:v("api_failed",r)},o.ok=false;}return {payload:e.payload,result:o}}var zn=["[data-blocfeed-ui]","[data-blocfeed-ignore]"];function $n(e){let t=[...zn,...e?.ignoreSelectors??[]],n=Array.from(new Set(t));return {...e,ignoreSelectors:n}}function Pt(){return {phase:"idle"}}function Wn(e){if(e.ok)return false;let t=e.api;return t?t.status&&t.status>=400&&t.status<500||t.error?.kind==="aborted"||t.error?.kind==="configuration"?false:!t.ok:true}function Fr(e){let t=e,n=new le({blocfeedId:t.blocfeed_id??"",...t.behavioral!==void 0?{config:t.behavioral}:{}});n.install();let o=Pt(),r=new Set,i=new Set,l=null,s=null,a=null,c=null,u=0,d=null,p=null,g=null,f=null,m=false,h=()=>{for(let w of r)w(o);},E=w=>{for(let _ of i)_(w);},b=w=>{o=w,h();},k=()=>{u+=1,c?.abort(),c=null;},C=()=>{l?.stop(),l=null,E(null),a!==null&&S()&&(document.documentElement.style.cursor=a,a=null);},y=()=>{if(g){try{URL.revokeObjectURL(g.blobUrl);}catch{}g=null;}},O=()=>{p&&(p.abort(),p=null),y();},B=null,L=()=>{f&&(f.abort(),f=null),B&&(B.abort(),B=null);},V=()=>{k(),C(),O(),L(),s=null,b(Pt());},Ne=()=>{if(!S())return;C(),s=null;let w=$n(t.picker);a=document.documentElement.style.cursor,document.documentElement.style.cursor="crosshair",b({phase:"picking"}),l=Lt(w,{onHover:E,onSelect:({element:_,descriptor:M})=>{s=_,C(),b({phase:"review",selection:M});},onCancel:()=>{V();}});},Oe=()=>{let w=tt();if(w.length!==0)for(let _ of w)Me({payload:_,...t.transport?{transport:t.transport}:{}}).catch(()=>{Ce(_);});};if(S()){setTimeout(Oe,1e3);let w=()=>Oe();window.addEventListener("online",w),d=()=>window.removeEventListener("online",w);}return {getState:()=>o,getConfig:()=>t,subscribe(w){return r.add(w),()=>r.delete(w)},subscribeHover(w){return i.add(w),()=>i.delete(w)},start(){o.phase==="capturing"||o.phase==="submitting"||o.phase==="recording"||o.phase!=="picking"&&Ne();},stop(){V();},clearSelection(){o.phase==="capturing"||o.phase==="submitting"||o.phase==="recording"||Ne();},setConfig(w){t=w;},async submit(w,_){if(!S()){let R=v("configuration",new Error("BlocFeed submit can only run in the browser"));return b({phase:"error",lastError:R}),{ok:false}}let M=t.blocfeed_id?.trim?.()??"";if(!M){let I={phase:"error",lastError:v("configuration",new Error("Missing blocfeed_id. Create a project in BlocFeed and pass its blocfeed_id."))};return o.selection&&(I.selection=o.selection),b(I),{ok:false}}if(m)return {ok:false};if(o.phase==="capturing"||o.phase==="submitting"||o.phase==="recording")return {ok:false};m=true;let A=u+1;u=A,c?.abort(),c=new AbortController;let x=c.signal,T=o.selection,D=_?.capture?{...t.capture,..._.capture}:t.capture,X=!!(D?.element||D?.fullPage),G={phase:X?"capturing":"submitting"};T&&(G.selection=T),b(G);try{let R=X?await Qe({selectionElement:s,capture:D,signal:x}):void 0;if(x.aborted||u!==A)return {ok:!1};let I={phase:"submitting"};T&&(I.selection=T),R&&(I.capture=R),b(I);let U={};T&&(U.selection=T),R&&(U.capture=R);let Y=await et({config:t.metadata,context:U,...t.user?{user:t.user}:{}}),z={version:1,createdAt:new Date().toISOString(),blocfeed_id:M,message:w,metadata:Y};_?.category&&(z.category=_.category),t.user&&(z.user=t.user),T&&(z.selection=T),R&&(z.screenshots=R),g&&(z.video=g);let{result:H}=await Me({payload:z,signal:x,...t.transport?{transport:t.transport}:{}});if(x.aborted||u!==A)return H;if(H.ok){y(),s=null;let ye={phase:"success",lastSubmit:H};return T&&(ye.selection=T),R&&(ye.capture=R),b(ye),H}Wn(H)&&Ce(z);let Nt=H.api?.error??v("unknown",new Error("Submission failed")),be={phase:"error",lastSubmit:H,lastError:Nt};return T&&(be.selection=T),R&&(be.capture=R),b(be),H}catch(R){if(x.aborted||u!==A)return {ok:false};let U={phase:"error",lastError:x.aborted?v("aborted",R):v("unknown",R)};return T&&(U.selection=T),b(U),{ok:false}}finally{m=false,u===A&&(c=null);}},async startRecording(){if(o.phase!=="review"||!t.recording?.enabled||f||p)return;let w=o.selection,_={phase:"recording",recordingElapsedMs:0};w&&(_.selection=w),b(_);try{let M={config:t.recording};c&&(M.signal=c.signal);let A=await Te(M);p=A,A.onTick(D=>{if(o.phase==="recording"){let X={phase:"recording",recordingElapsedMs:D};w&&(X.selection=w),b(X);}});let x=await A.result;p=null,g=x;let T={phase:"review",video:x};w&&(T.selection=w),b(T);}catch(M){p=null;let x={phase:"review",lastError:M?.kind?M:v("recording_failed",M)};w&&(x.selection=w),b(x);}},stopRecording(){o.phase!=="recording"||!p||p.stop();},removeVideo(){y();let w=o.selection,_={phase:"review"};w&&(_.selection=w),b(_);},async startVoice(){if(o.phase!=="review"){console.warn("[BlocFeed] startVoice: ignored \u2014 phase is",o.phase,'(expected "review")');return}let w=t.voice;if(!w?.enabled){console.warn("[BlocFeed] startVoice: ignored \u2014 voice is not enabled in config");return}if(p){console.warn("[BlocFeed] startVoice: ignored \u2014 a screen recording is already in progress");return}L();let _=o.selection,M={phase:"review",voiceRecording:true,voiceElapsedMs:0};_&&(M.selection=_),g&&(M.video=g),b(M);try{let A={config:w};c&&(A.signal=c.signal);let x=await Re(A);f=x,x.onTick(U=>{let Y={phase:"review",voiceRecording:!0,voiceElapsedMs:U};_&&(Y.selection=_),g&&(Y.video=g),b(Y);});let T=await x.result;f=null;let D={phase:"review",voiceRecording:!1,voiceTranscribing:!0};_&&(D.selection=_),g&&(D.video=g),b(D),B=new AbortController;let X={blob:T.blob,mime:T.mime,blocfeedId:t.blocfeed_id,signal:B.signal},{text:Ue,warning:G}=await bt(X);B=null;let R={phase:"review",voiceRecording:!1,voiceTranscribing:!1};_&&(R.selection=_),g&&(R.video=g),b(R);let I={text:Ue};return G&&(I.warning=G),I}catch(A){L();let x=A?.kind?A:v("recording_failed",A);console.warn("[BlocFeed] Voice error:",x.message);let T={phase:"review",voiceRecording:false,voiceTranscribing:false,lastError:x};_&&(T.selection=_),g&&(T.video=g),b(T);return}},stopVoice(){f&&f.stop();},__unsafeGetSelectedElement(){return s},destroy(){n.uninstall(),V(),r.clear(),i.clear(),d?.(),d=null;}}}var te=[],ne=[],It=20,Bt=15,fe=[],Dt=typeof console<"u"?{log:console.log?.bind(console),warn:console.warn?.bind(console),error:console.error?.bind(console),info:console.info?.bind(console),debug:console.debug?.bind(console)}:{},pe=typeof globalThis<"u"&&typeof globalThis.fetch=="function"?globalThis.fetch:void 0,me=typeof XMLHttpRequest<"u"?XMLHttpRequest.prototype.open:void 0,ge=typeof XMLHttpRequest<"u"?XMLHttpRequest.prototype.send:void 0,Le=new Set,Pe=false,Ie=false,he=false,jn=["blocfeed.com","google-analytics.com","googletagmanager.com","analytics.google.com","googleads.g.doubleclick.net","googlesyndication.com","googleadservices.com","google.com/pagead","google.com/ads","facebook.net","facebook.com/tr","connect.facebook.net","graph.facebook.com","api.mixpanel.com","api-js.mixpanel.com","api.amplitude.com","api2.amplitude.com","api.segment.io","cdn.segment.com","vars.hotjar.com","in.hotjar.com","script.hotjar.com","heapanalytics.com","fullstory.com/s/fs.js","rs.fullstory.com","app.posthog.com","us.posthog.com","eu.posthog.com","api-iam.intercom.io","widget.intercom.io","sentry.io/api","browser.sentry-cdn.com","browser-intake-datadoghq.com","clarity.ms","js.hs-analytics.net","api.hubapi.com","forms.hubspot.com","plausible.io/api","client.crisp.chat","js.driftt.com","r.logrocket.com","app.pendo.io","events.launchdarkly.com","app.launchdarkly.com","grammarly.com","gnar.grammarly.com","capi.grammarly.com","api.languagetool.org","api.languagetoolplus.com","fonts.googleapis.com","fonts.gstatic.com","cdn.cookielaw.org","consent.cookiebot.com","js.stripe.com","api.stripe.com/v1/tokens","google.com/recaptcha","hcaptcha.com","bam.nr-data.net","rec.smartlook.com","o2.mouseflow.com","api.luckyorange.com","static.zdassets.com","ekr.zdassets.com"];function Kn(e){if(e instanceof Error)return e.name&&e.name!=="Error"?`${e.name}: ${e.message}`:e.message||String(e);if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return String(e)}}function Zn(e,t){let n=t.map(Kn).join(" "),o=t.find(i=>i instanceof Error),r={level:e,message:n.slice(0,2e3),timestamp:Date.now()};for(o?.stack&&(r.stack=o.stack.slice(0,2e3)),te.push(r);te.length>It;)te.shift();}function Fe(e){let t=e.url.toLowerCase();for(let n of fe)if(t.includes(n))return;for(ne.push(e);ne.length>Bt;)ne.shift();}function Ir(e={}){if(he||!S())return;he=true,It=e.consoleLimit??20,Bt=e.networkLimit??15;let t=e.ignoreUrls;if(t!==void 0?fe=t.map(n=>n.toLowerCase()):fe=[...jn],e.console!==false){let n=e.consoleLevels??["error","warn"];for(let o of n){let r=Dt[o];r&&(Le.add(o),console[o]=(...i)=>{Zn(o,i),r.apply(console,i);});}}if(e.network!==false&&pe){let n=pe;Pe=true,window.fetch=async function(r,i){let l=typeof r=="string"?r:r instanceof URL?r.toString():r.url,s=(i?.method??"GET").toUpperCase(),a=Date.now();try{let c=await n.call(window,r,i);return c.ok||Fe({url:l.slice(0,500),method:s,status:c.status,statusText:c.statusText,timestamp:a,durationMs:Date.now()-a}),c}catch(c){throw Fe({url:l.slice(0,500),method:s,status:0,statusText:c instanceof Error?c.message:"Network error",timestamp:a,durationMs:Date.now()-a}),c}};}if(e.network!==false&&me&&ge){let n=me,o=ge;Ie=true,XMLHttpRequest.prototype.open=function(r,i,...l){return this.__bf_method=r.toUpperCase(),this.__bf_url=String(i),n.apply(this,[r,i,...l])},XMLHttpRequest.prototype.send=function(...r){let i=this.__bf_method||"GET",l=this.__bf_url||"",s=Date.now();return this.addEventListener("loadend",function(){if(this.status>=400||this.status===0){let a={url:l.slice(0,500),method:i,status:this.status,timestamp:s,durationMs:Date.now()-s};this.statusText&&(a.statusText=this.statusText),Fe(a);}},{once:true}),o.apply(this,r)};}}function Br(){if(he){for(let e of Le){let t=Dt[e];t&&(console[e]=t);}Le.clear(),Pe&&pe&&(window.fetch=pe,Pe=false),Ie&&me&&ge&&(XMLHttpRequest.prototype.open=me,XMLHttpRequest.prototype.send=ge,Ie=false),fe=[],he=false;}}function Dr(){return {consoleLogs:[...te],networkErrors:[...ne]}}function Nr(){te=[],ne=[];}var Gn=[{name:"supabase_service_role_key",pattern:/SUPABASE_SERVICE_ROLE_KEY["'=:\s]{1,8}[A-Za-z0-9_.=-]{30,400}/},{name:"supabase_db_password",pattern:/SUPABASE_DB_PASSWORD["'=:\s]{1,8}[^\s"']{6,200}/},{name:"postgres_password",pattern:/POSTGRES_PASSWORD["'=:\s]{1,8}[^\s"']{6,200}/},{name:"database_url_with_creds",pattern:/(?:postgres|postgresql|mysql|mongodb|redis|amqp):\/\/[^:\s"']{1,100}:[^@\s"']{1,200}@/},{name:"aws_access_key",pattern:/AKIA[0-9A-Z]{16}/},{name:"aws_secret_key",pattern:/AWS_SECRET_ACCESS_KEY["'=:\s]{1,8}[A-Za-z0-9/+=]{30,200}/},{name:"aws_session_token",pattern:/AWS_SESSION_TOKEN["'=:\s]{1,8}[A-Za-z0-9/+=]{30,600}/},{name:"stripe_secret_key",pattern:/sk_live_[a-zA-Z0-9]{10,200}/},{name:"stripe_secret_key_test",pattern:/sk_test_[a-zA-Z0-9]{10,200}/},{name:"stripe_restricted_key",pattern:/rk_(?:live|test)_[a-zA-Z0-9]{10,200}/},{name:"github_pat",pattern:/ghp_[A-Za-z0-9_]{36,100}/},{name:"github_oauth",pattern:/gho_[A-Za-z0-9_]{36,100}/},{name:"github_user_token",pattern:/ghu_[A-Za-z0-9_]{36,100}/},{name:"github_server_token",pattern:/ghs_[A-Za-z0-9_]{36,100}/},{name:"github_fine_grained",pattern:/github_pat_[A-Za-z0-9_]{22,200}/},{name:"openai_api_key",pattern:/sk-[a-zA-Z0-9]{20,200}(?![a-zA-Z0-9_])/},{name:"anthropic_api_key",pattern:/sk-ant-[a-zA-Z0-9\-_]{20,200}/},{name:"private_key",pattern:/-----BEGIN (?:RSA |EC |DSA |OPENSSH |PGP )?PRIVATE KEY-----/},{name:"sendgrid_api_key",pattern:/SG\.[a-zA-Z0-9_-]{22,100}\.[a-zA-Z0-9_-]{22,100}/},{name:"twilio_auth_token",pattern:/TWILIO_AUTH_TOKEN["'=:\s]{1,8}[a-f0-9]{32}/},{name:"generic_secret_key",pattern:/[A-Z_]{2,60}_SECRET_KEY["'=:\s]{1,8}[^\s"']{8,200}/},{name:"generic_secret",pattern:/[A-Z_]{2,60}_SECRET["'=:\s]{1,8}[^\s"']{8,200}/},{name:"generic_password",pattern:/[A-Z_]{2,60}_PASSWORD["'=:\s]{1,8}[^\s"']{6,200}/},{name:"generic_private_key_var",pattern:/[A-Z_]{2,60}_PRIVATE_KEY["'=:\s]{1,8}[^\s"']{8,400}/}],j=[],De=0,Be=false;function Yn(e){let t=e.slice(0,80);return t.length<=6?"***":t.slice(0,6)+"***"}function Jn(e,t,n,o){if(j.some(l=>l.rule===e&&l.source===t))return;let i={rule:e,source:t,hint:Yn(n),timestamp:Date.now()};o&&(i.location=o),j.push(i);}function oe(e,t,n,o){for(let{name:r,pattern:i}of n){let l=i.exec(e);l&&Jn(r,t,l[0],o);}}function Qn(e){try{let t=window;if(t.__NEXT_DATA__){let n=JSON.stringify(t.__NEXT_DATA__);oe(n,"hydration",e,"__NEXT_DATA__");}if(t.__NUXT__){let n=JSON.stringify(t.__NUXT__);oe(n,"hydration",e,"__NUXT__");}}catch{}}function eo(e){try{document.querySelectorAll("script:not([src])").forEach((n,o)=>{let r=n.textContent;r&&r.length>0&&oe(r,"scripts",e,`inline-script[${o}]`);});}catch{}}function to(e){try{document.querySelectorAll("meta[content]").forEach(n=>{let o=n.getAttribute("content"),r=n.getAttribute("name")||n.getAttribute("property")||"";o&&o.length>10&&oe(o,"meta",e,r?`meta[${r}]`:void 0);});}catch{}}function no(e){try{document.querySelectorAll("[data-api-key], [data-secret], [data-token], [data-password]").forEach(n=>{let o=n.attributes;for(let r=0;r<o.length;r++){let i=o[r];i.name.startsWith("data-")&&i.value.length>10&&oe(i.value,"dom",e,`${n.tagName.toLowerCase()}[${i.name}]`);}});}catch{}}function Hr(e={}){if(Be||!S()||(Be=true,e.secretScan===false))return;let t=[...Gn,...e.customPatterns??[]],n=e.scanTargets??["hydration","scripts","meta","dom"];setTimeout(()=>{De=Date.now(),n.includes("hydration")&&Qn(t),n.includes("scripts")&&eo(t),n.includes("meta")&&to(t),n.includes("dom")&&no(t);let o=e.notify??"both";j.length>0&&(o==="console"||o==="both")&&console.warn(`[BlocFeed Security] Found ${j.length} potential secret(s) exposed in client code:`,j.map(r=>`${r.rule} (${r.source}${r.location?`: ${r.location}`:""})`));},100);}function qr(){return {findings:[...j],scannedAt:De}}function Vr(){j=[],De=0,Be=false;}
2
- export{Vr as A,S as a,we as b,Ze as c,Qe as d,et as e,Ce as f,tt as g,ho as h,bo as i,sn as j,an as k,pn as l,Te as m,bn as n,Re as o,_n as p,Io as q,bt as r,le as s,Fr as t,Ir as u,Br as v,Dr as w,Nr as x,Hr as y,qr as z};