blocfeed 0.13.0 → 0.15.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/CHANGELOG.md +27 -0
- package/README.md +39 -0
- package/dist/chunk-ACMIGJ32.cjs +2 -0
- package/dist/chunk-C4BWWDCF.js +2 -0
- package/dist/{controller-JCtPYbzs.d.cts → controller-6fm9oK63.d.cts} +48 -1
- package/dist/{controller-JCtPYbzs.d.ts → controller-6fm9oK63.d.ts} +48 -1
- package/dist/engine.cjs +1 -1
- package/dist/engine.d.cts +2 -2
- package/dist/engine.d.ts +2 -2
- package/dist/engine.js +1 -1
- package/dist/main.cjs +3 -3
- package/dist/main.d.cts +30 -3
- package/dist/main.d.ts +30 -3
- package/dist/main.js +3 -3
- package/package.json +3 -7
- package/dist/chunk-EADEWOWW.js +0 -2
- package/dist/chunk-VK43CZAG.cjs +0 -2
package/dist/chunk-EADEWOWW.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
function E(){return typeof window<"u"&&typeof document<"u"}function Re(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 ae(e){return {x:e.x,y:e.y,width:e.width,height:e.height}}function at(e){return {x:e.x+window.scrollX,y:e.y+window.scrollY,width:e.width,height:e.height}}function ct(e){return e.replace(/\s+/g," ").trim()}function ce(e,t=140){let n=e.textContent;if(!n)return;let o=ct(n);if(o)return o.length<=t?o:`${o.slice(0,t-1)}\u2026`}function lt(e){let t=1;for(let n=e.previousElementSibling;n;n=n.previousElementSibling)n.tagName===e.tagName&&(t+=1);return t}var Ce=["data-testid","data-test-id","data-test","data-qa","data-cy"],Ae="data-blocfeed-component";function le(e){let t=e.closest(`[${Ae}]`);if(!t)return;let o=t.getAttribute(Ae)?.trim();return o||void 0}function ut(e){for(let t of Ce){let n=e.closest(`[${t}]`);if(!n)continue;let r=n.getAttribute(t)?.trim();if(r)return r}}function xe(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 O(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 $(e){if(e){for(let t of e)if(typeof t.name=="string"&&t.name&&!O(t.name))return t.name}}function C(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 C(r)}}}function ue(e){let t=xe(e);if(!t)return;let n=$(t._debugInfo);if(n)return n;let o=t._debugOwner!==void 0;if(o){let c=t._debugOwner;for(let d=0;c&&d<50;d+=1){let w=$(c._debugInfo);if(w)return w;let g=C(c.type)??C(c.elementType);if(g&&!O(g))return g;c=c._debugOwner;}}if(t._owner!==void 0&&t._owner!==t._debugOwner){let c=t._owner;for(let d=0;c&&d<50;d+=1){let w=$(c._debugInfo);if(w)return w;let g=C(c.type)??C(c.elementType);if(g&&!O(g))return g;c=c._owner;}}let i=t,s=o?80:25;for(let c=0;i&&c<s;c+=1){let d=$(i._debugInfo);if(d)return d;let w=C(i.type)??C(i.elementType);if(w&&!O(w))return w;i=i.return;}let a=e.parentElement;for(let c=0;a&&c<15;c+=1){let d=xe(a);if(d){let w=$(d._debugInfo);if(w)return w;let g=C(d.type)??C(d.elementType);if(g&&!O(g))return g;if(d._debugOwner){let u=C(d._debugOwner.type)??C(d._debugOwner.elementType);if(u&&!O(u))return u}if(d._owner&&d._owner!==d._debugOwner){let u=C(d._owner.type)??C(d._owner.elementType);if(u&&!O(u))return u}}a=a.parentElement;}}function dt(e){let t=e.tagName.toLowerCase(),n=e.getAttribute("id");if(n)return `#${Re(n)}`;for(let o of Ce){let r=e.getAttribute(o);if(r)return `${t}[${o}="${Re(r)}"]`}return `${t}:nth-of-type(${lt(e)})`}function ft(e,t=10){let n=[],o=e;for(;o&&n.length<t;){let r=dt(o);if(n.unshift(r),r.startsWith("#"))break;o=o.parentElement;}return n.join(" > ")}function Pe(e,t){if(!t||t.length===0)return false;for(let n of t)if(e.closest(n))return true;return false}function de(e,t){if(!e||Pe(e,t.ignoreSelectors))return null;let n=e;for(;n;){if(Pe(n,t.ignoreSelectors))return null;if(t.isSelectable?.(n)??mt(n))return n;n=n.parentElement;}return null}function mt(e){let t=e.tagName;return !(t==="HTML"||t==="BODY")}function Fe(e){let t=e.getBoundingClientRect(),n={selector:ft(e),tagName:e.tagName.toLowerCase(),rect:ae(t),pageRect:at(t)},o=e.getAttribute("id");o&&(n.id=o);let r=e.className;typeof r=="string"&&r.trim()&&(n.className=r);let i=ce(e);i&&(n.textSnippet=i);let s=le(e)??ue(e);s&&(n.componentName=s);let a=ut(e);return a&&(n.testId=a),n}var fe=null;async function Me(){return fe||(fe=import('html-to-image')),fe}async function pt(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 Ie(e,t){let{width:n,height:o}=await pt(e);return {dataUrl:e,mime:t,width:n,height:o}}function V(e){if(e?.aborted)throw new Error("Aborted")}function Be(){return {async captureElement(e,t){if(!E())throw new Error("captureElement can only run in the browser");V(t.signal);let n=await Me();V(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 V(t.signal),await Ie(o,t.mime)},async captureFullPage(e){if(!E())throw new Error("captureFullPage can only run in the browser");V(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)),s=Math.max(1,Math.round(o*r)),a=await Me();V(e.signal);let c=e.mime==="image/jpeg"?await a.toJpeg(t,{width:i,height:s,quality:e.quality??.92,pixelRatio:e.pixelRatio}):await a.toPng(t,{width:i,height:s,pixelRatio:e.pixelRatio});return V(e.signal),await Ie(c,e.mime)}}}function gt(e){if(e instanceof Error)return e.message;if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return "Unknown error"}}function h(e,t,n){let o={kind:e,message:gt(t)};return n&&(o.detail=n),o}var ht=12e3,wt=2048,bt=.92;function De(){return Date.now()}function yt(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 Le(e,t,n){let o=new Promise((i,s)=>{let a=setTimeout(()=>s(new Error("Timeout")),t);typeof a.unref=="function"&&a.unref();}),r=[e,o];return n&&r.push(yt(n)),await Promise.race(r)}function Et(e){if(!E())return 1;let t=window.devicePixelRatio||1,n=e?.pixelRatio??Math.min(t,2);return Math.max(.1,n)}function vt(e){return !!(e?.element||e?.fullPage)}function Ne(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 Oe(e){let{selectionElement:t,capture:n,signal:o}=e;if(!E()||!vt(n))return;let r=De(),i=[],s=n?.timeoutMs??ht,a=n?.maxDimension??wt,c=n?.mime??"image/png",d=n?.quality??bt,w=n?.adapter??Be(),g={},u=Et(n);if(n?.element&&t)try{let p=t.getBoundingClientRect(),l=Math.min(1,a/Math.max(p.width,p.height)),k=Math.min(u,u*l),P=await Le(Promise.resolve(w.captureElement(t,{...Ne({mime:c,quality:d,pixelRatio:k,maxDimension:a,includeQuality:c==="image/jpeg",...o?{signal:o}:{}})})),s,o);g.element=P;}catch(p){if(o?.aborted)throw p;i.push(h("capture_failed",p,{target:"element"}));}if(n?.fullPage)try{let p=await Le(Promise.resolve(w.captureFullPage(Ne({mime:c,quality:d,pixelRatio:u,maxDimension:a,includeQuality:c==="image/jpeg",...o?{signal:o}:{}}))),s,o);g.fullPage=p;}catch(p){if(o?.aborted)throw p;i.push(h("capture_failed",p,{target:"fullPage"}));}let b=De(),f={startedAt:r,finishedAt:b,durationMs:Math.max(0,b-r)};return i.length>0&&(f.errors=i),{...g,diagnostics:f}}function St(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch{return}}function kt(){return E()?{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:St()}:{}}function _t(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 Ue(e){let{config:t,context:n,user:o}=e;if(t?.enabled===false)return {};let r={...kt(),..._t(o)},i=t?.enrich;if(!i)return r;try{let s=await i(n);return {...r,...s}}catch(s){let a=h("unknown",s);return {...r,blocfeedMetadataError:a.message}}}var me="blocfeed-queue",Tt=50;function pe(){if(!E())return [];try{let e=localStorage.getItem(me);if(!e)return [];let t=JSON.parse(e);return Array.isArray(t)?t:[]}catch{return []}}function ge(e){if(E())try{e.length===0?localStorage.removeItem(me):localStorage.setItem(me,JSON.stringify(e));}catch{}}function Rt(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 he(e){let t=pe(),n=Rt(e);for(n.metadata={...n.metadata,_queued:true},t.push({payload:n,timestamp:Date.now()});t.length>Tt;)t.shift();ge(t);}function Ve(){let e=pe();return e.length===0?[]:(ge([]),e.map(t=>t.payload))}function _n(){ge([]);}function Tn(){return pe().length}var At=200,X=[],He=0,ee=false;function qe(e){let t=e.target;if(!(t instanceof Element)||t.closest("[data-blocfeed-ui]"))return;let n={timestampMs:Date.now()-He,path:window.location.pathname,tagName:t.tagName.toLowerCase()},o=ce(t,100);o&&(n.textSnippet=o);let r=le(t)??ue(t);r&&(n.componentName=r),X.length<At&&X.push(n);}function ze(){ee||!E()||(ee=true,X=[],He=Date.now(),document.addEventListener("click",qe,{capture:true,passive:true}));}function je(){ee&&(ee=false,document.removeEventListener("click",qe,{capture:true}));}function xt(){return [...X]}function Pt(){X=[];}var Ct=3e4,Ft=25e5,$e="video/webm",Mt=250,It=1e3,Bt=["video/webm;codecs=vp9","video/webm;codecs=vp8","video/webm"];function Xe(){if(typeof MediaRecorder>"u")return null;for(let e of Bt)if(MediaRecorder.isTypeSupported(e))return e;return null}function Dt(){return !E()||typeof navigator?.mediaDevices?.getDisplayMedia!="function"?false:Xe()!==null}async function we(e){let{config:t,signal:n}=e;if(!E()||typeof navigator?.mediaDevices?.getDisplayMedia!="function")throw h("recording_failed",new Error("Screen recording is not supported in this browser"));let o=Xe();if(!o)throw h("recording_failed",new Error("No supported video codec found (WebM required)"));if(n?.aborted)throw h("aborted",new Error("Recording aborted before start"));let r;try{r=await navigator.mediaDevices.getDisplayMedia({video:{displaySurface:"browser"},audio:!1});}catch(l){let k=l instanceof DOMException&&l.name==="NotAllowedError"?"Screen share permission denied":"Failed to start screen share";throw h("recording_failed",new Error(k))}if(n?.aborted)throw r.getTracks().forEach(l=>l.stop()),h("aborted",new Error("Recording aborted after permission"));let i=t?.maxDurationMs??Ct,s=t?.videoBitsPerSecond??Ft,a=new MediaRecorder(r,{mimeType:o,videoBitsPerSecond:s}),c=[],d=[],w=0,g=null,u=null,b=false,f=()=>{je(),g!==null&&(clearInterval(g),g=null),u!==null&&(clearTimeout(u),u=null),r.getTracks().forEach(l=>l.stop());},p=new Promise((l,k)=>{a.ondataavailable=T=>{T.data.size>0&&c.push(T.data);},a.onstop=()=>{if(b)return;b=true,f();let T=Date.now()-w,F=new Blob(c,{type:$e}),v=URL.createObjectURL(F);l({mime:$e,blobUrl:v,blob:F,durationMs:T,sizeBytes:F.size});},a.onerror=()=>{b||(b=true,f(),k(h("recording_failed",new Error("MediaRecorder error"))));};let P=r.getVideoTracks()[0];if(P&&P.addEventListener("ended",()=>{a.state!=="inactive"&&a.stop();}),n){let T=()=>{b||(b=true,a.state!=="inactive"&&a.stop(),f(),k(h("aborted",new Error("Recording aborted"))));};n.addEventListener("abort",T,{once:true});}});return a.start(It),ze(),w=Date.now(),g=setInterval(()=>{let l=Date.now()-w;for(let k of d)k(l);},Mt),u=setTimeout(()=>{!b&&a.state!=="inactive"&&a.stop();},i),{result:p,stop(){!b&&a.state!=="inactive"&&a.stop();},onTick(l){d.push(l);},abort(){b||(b=true,a.state!=="inactive"&&a.stop(),f());}}}var Lt=6e4,Ze="audio/webm",Nt=250,Ot=["audio/webm;codecs=opus","audio/webm","audio/ogg;codecs=opus"];function Ke(){if(typeof MediaRecorder>"u")return null;for(let e of Ot)if(MediaRecorder.isTypeSupported(e))return e;return null}function Ut(){return !E()||typeof navigator?.mediaDevices?.getUserMedia!="function"?false:Ke()!==null}async function be(e){let{config:t,signal:n}=e;if(!E()||typeof navigator?.mediaDevices?.getUserMedia!="function")throw h("recording_failed",new Error("Microphone recording is not supported in this browser"));let o=Ke();if(!o)throw h("recording_failed",new Error("No supported audio codec found"));if(n?.aborted)throw h("aborted",new Error("Voice recording aborted before start"));let r;try{r=await navigator.mediaDevices.getUserMedia({audio:!0});}catch(p){let l=p instanceof DOMException&&p.name==="NotAllowedError"?"Microphone permission denied":"Failed to access microphone";throw h("recording_failed",new Error(l))}if(n?.aborted)throw r.getTracks().forEach(p=>p.stop()),h("aborted",new Error("Voice recording aborted after permission"));let i=t?.maxDurationMs??Lt,s=new MediaRecorder(r,{mimeType:o}),a=[],c=[],d=0,w=null,g=null,u=false,b=()=>{w!==null&&(clearInterval(w),w=null),g!==null&&(clearTimeout(g),g=null),r.getTracks().forEach(p=>p.stop());},f=new Promise((p,l)=>{if(s.ondataavailable=k=>{k.data.size>0&&a.push(k.data);},s.onstop=()=>{if(u)return;u=true,b();let k=Date.now()-d,P=new Blob(a,{type:Ze});p({blob:P,mime:Ze,durationMs:k});},s.onerror=()=>{u||(u=true,b(),l(h("recording_failed",new Error("MediaRecorder error"))));},n){let k=()=>{u||(u=true,s.state!=="inactive"&&s.stop(),b(),l(h("aborted",new Error("Voice recording aborted"))));};n.addEventListener("abort",k,{once:true});}});return s.start(1e3),d=Date.now(),w=setInterval(()=>{let p=Date.now()-d;for(let l of c)l(p);},Nt),g=setTimeout(()=>{!u&&s.state!=="inactive"&&s.stop();},i),{result:f,stop(){!u&&s.state!=="inactive"&&s.stop();},onTick(p){c.push(p);},abort(){u||(u=true,s.state!=="inactive"&&s.stop(),b());}}}var Vt=12e3,Ht=2,qt=500,zt=2e3,ye="https://blocfeed.com/api/feedback",jt="https://blocfeed.com/api/feedback/voice",We=0,Ge="blocfeed-viewer-token",Je="blocfeed-my-feedback-url";function $t(){try{return localStorage.getItem(Ge)}catch{return null}}function qn(){try{return localStorage.getItem(Je)}catch{return null}}function Xt(e,t){try{localStorage.setItem(Ge,e),t&&localStorage.setItem(Je,t);}catch{}}function Qe(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 Zt(e){return e>=500&&e<=599}function Kt(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),s=new Uint8Array(i.length);for(let a=0;a<i.length;a+=1)s[a]=i.charCodeAt(a);return new Blob([s],{type:r})}function Wt(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 Ye(e,t,n){let o=Kt(t);await fetch(e,{method:"PUT",body:o,headers:{"content-type":o.type},...n?{signal:n}:{}});}async function Qt(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(`${ye}/${t}/screenshots`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(i),...r?{signal:r}:{}});}async function Yt(e){await fetch(`${ye}/${e.feedbackId}/video`,{method:"POST",body:e.blob,headers:{"content-type":e.blob.type},...e.signal?{signal:e.signal}:{}});}async function et(e){let{signal:t,transport:n}=e;if(Date.now()-We<zt)return {ok:false,error:h("configuration",new Error("Please wait before submitting again"))};let r=n?.timeoutMs??Vt,i=n?.maxAttempts??Ht,s=n?.backoffMs??qt,a=!!(e.payload.screenshots?.element?.dataUrl||e.payload.screenshots?.fullPage?.dataUrl),c=!!e.payload.video?.blob,d=a||c,{lean:w,extracted:g,extractedVideo:u}=d?Wt(e.payload):{lean:e.payload,extracted:{},extractedVideo:{}},b=$t();b&&(w.viewer_token=b);let f={...g,...e.screenshotDataUrls};for(let p=1;p<=i;p+=1){let l=new AbortController,k=setTimeout(()=>l.abort(),r),P=()=>l.abort();t&&t.addEventListener("abort",P,{once:true});try{let T=await fetch(ye,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(w),signal:l.signal});if(T.ok){We=Date.now();let v;try{v=await T.json();}catch{}if(v?.viewer_token&&Xt(v.viewer_token,v.my_feedback_url),(f.element||f.fullPage)&&v){let m=v.upload_urls;if(m){let y=[];f.element&&m.element&&y.push(Ye(m.element,f.element,t)),f.fullPage&&m.fullPage&&y.push(Ye(m.fullPage,f.fullPage,t));try{await Promise.all(y);}catch{}}else if(v.feedback_id)try{await Qt({feedbackId:v.feedback_id,extracted:f,screenshots:e.payload.screenshots,...t?{signal:t}:{}});}catch{}}if(u.blob&&v){let m=v.upload_urls;if(m?.video)try{await fetch(m.video,{method:"PUT",body:u.blob,headers:{"content-type":u.blob.type},...t?{signal:t}:{}});}catch{}else if(v.feedback_id)try{await Yt({feedbackId:v.feedback_id,blob:u.blob,...t?{signal:t}:{}});}catch{}}let q={ok:!0,status:T.status};return v&&(q.apiResponse=v),q}if(p<i&&Zt(T.status)){let v=.85+Math.random()*.3,H=Math.round(s*2**(p-1)*v);await Qe(H,t);continue}let F=`HTTP ${T.status}`;try{let v=await T.json();v?.error&&(F=v.error);}catch{}return {ok:!1,status:T.status,error:h("api_failed",new Error(F))}}catch(T){if(l.signal.aborted||t?.aborted)return {ok:false,error:h("aborted",T)};if(p<i){let F=.85+Math.random()*.3,v=Math.round(s*2**(p-1)*F);await Qe(v,t);continue}return {ok:false,error:h("api_failed",T)}}finally{clearTimeout(k),t&&t.removeEventListener("abort",P);}}return {ok:false,error:h("api_failed",new Error("Failed"))}}async function tt(e){let{blob:t,mime:n,blocfeedId:o,signal:r}=e,i=await fetch(jt,{method:"POST",headers:{"Content-Type":n,"X-Blocfeed-Id":o},body:t,...r?{signal:r}:{}});if(!i.ok){let a=await i.json().catch(()=>({error:"Unknown error"}));throw h("api_failed",new Error(a?.error??`Voice API returned ${i.status}`))}let s=await i.json();return {text:s.text??"",warning:s.warning}}function Ee(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 te(e){return e instanceof Element?!!e.closest("[data-blocfeed-ui]"):false}function ne(e){e.stopPropagation(),e.stopImmediatePropagation?.();}function nt(e,t){if(!E())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,s=null,a=(f,p=false)=>{if(!f){i=null,s=null,t.onHover(null);return}let l=ae(f.getBoundingClientRect()),k=`${Math.round(l.x)}:${Math.round(l.y)}:${Math.round(l.width)}:${Math.round(l.height)}`;!p&&f===i&&k===s||(i=f,s=k,t.onHover({element:f,rect:l}));},c=Ee(f=>{if(te(f.target))return;let p=document.elementFromPoint(f.clientX,f.clientY),l=de(p,r);a(l);}),d=Ee(()=>{i&&a(i,true);}),w=f=>{te(f.target)||(ne(f),f.pointerType==="mouse"&&f.preventDefault());},g=f=>{te(f.target)||(ne(f),f.pointerType==="mouse"&&f.preventDefault());},u=f=>{if(te(f.target))return;ne(f),f.preventDefault();let p=document.elementFromPoint(f.clientX,f.clientY),l=de(p,r);l&&t.onSelect({element:l,descriptor:Fe(l)});},b=f=>{f.key==="Escape"&&(ne(f),f.preventDefault(),t.onCancel());};return window.addEventListener("pointermove",c,{capture:true,passive:true}),window.addEventListener("pointerdown",w,{capture:true}),window.addEventListener("pointerup",g,{capture:true}),window.addEventListener("click",u,{capture:true}),window.addEventListener("keydown",b,{capture:true}),window.addEventListener("scroll",d,{capture:true,passive:true}),window.addEventListener("resize",d,{passive:true}),{stop(){window.removeEventListener("pointermove",c,{capture:true}),window.removeEventListener("pointerdown",w,{capture:true}),window.removeEventListener("pointerup",g,{capture:true}),window.removeEventListener("click",u,{capture:true}),window.removeEventListener("keydown",b,{capture:true}),window.removeEventListener("scroll",d,{capture:true}),window.removeEventListener("resize",d),c.cancel(),d.cancel(),t.onHover(null);}}}async function ve(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 et(r),o.ok=!!o.api?.ok;}catch(r){o.api={ok:false,error:h("api_failed",r)},o.ok=false;}return {payload:e.payload,result:o}}var Gt=["[data-blocfeed-ui]","[data-blocfeed-ignore]"];function Jt(e){let t=[...Gt,...e?.ignoreSelectors??[]],n=Array.from(new Set(t));return {...e,ignoreSelectors:n}}function ot(){return {phase:"idle"}}function en(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 ao(e){let t=e,n=ot(),o=new Set,r=new Set,i=null,s=null,a=null,c=null,d=0,w=null,g=null,u=null,b=null,f=()=>{for(let m of o)m(n);},p=m=>{for(let y of r)y(m);},l=m=>{n=m,f();},k=()=>{d+=1,c?.abort(),c=null;},P=()=>{i?.stop(),i=null,p(null),a!==null&&E()&&(document.documentElement.style.cursor=a,a=null);},T=()=>{g&&(g.abort(),g=null),u&&(URL.revokeObjectURL(u.blobUrl),u=null);},F=()=>{b&&(b.abort(),b=null);},v=()=>{k(),P(),T(),F(),s=null,l(ot());},H=()=>{if(!E())return;P(),s=null;let m=Jt(t.picker);a=document.documentElement.style.cursor,document.documentElement.style.cursor="crosshair",l({phase:"picking"}),i=nt(m,{onHover:p,onSelect:({element:y,descriptor:x})=>{s=y,P(),l({phase:"review",selection:x});},onCancel:()=>{v();}});},q=()=>{let m=Ve();if(m.length!==0)for(let y of m)ve({payload:y,...t.transport?{transport:t.transport}:{}}).catch(()=>{he(y);});};if(E()){setTimeout(q,1e3);let m=()=>q();window.addEventListener("online",m),w=()=>window.removeEventListener("online",m);}return {getState:()=>n,getConfig:()=>t,subscribe(m){return o.add(m),()=>o.delete(m)},subscribeHover(m){return r.add(m),()=>r.delete(m)},start(){n.phase==="capturing"||n.phase==="submitting"||n.phase==="recording"||n.phase!=="picking"&&H();},stop(){v();},clearSelection(){n.phase==="capturing"||n.phase==="submitting"||n.phase==="recording"||H();},setConfig(m){t=m;},async submit(m,y){if(!E()){let _=h("configuration",new Error("BlocFeed submit can only run in the browser"));return l({phase:"error",lastError:_}),{ok:false}}let x=t.blocfeed_id?.trim?.()??"";if(!x){let M={phase:"error",lastError:h("configuration",new Error("Missing blocfeed_id. Create a project in BlocFeed and pass its blocfeed_id."))};return n.selection&&(M.selection=n.selection),l(M),{ok:false}}if(n.phase==="capturing"||n.phase==="submitting"||n.phase==="recording")return {ok:false};let A=d+1;d=A,c?.abort(),c=new AbortController;let R=c.signal,S=n.selection,I=y?.capture?{...t.capture,...y.capture}:t.capture,B=!!(I?.element||I?.fullPage),z={phase:B?"capturing":"submitting"};S&&(z.selection=S),l(z);try{let _=B?await Oe({selectionElement:s,capture:I,signal:R}):void 0;if(R.aborted||d!==A)return {ok:!1};let M={phase:"submitting"};S&&(M.selection=S),_&&(M.capture=_),l(M);let D={};S&&(D.selection=S),_&&(D.capture=_);let j=await Ue({config:t.metadata,context:D,...t.user?{user:t.user}:{}}),N={version:1,createdAt:new Date().toISOString(),blocfeed_id:x,message:m,metadata:j};y?.category&&(N.category=y.category),t.user&&(N.user=t.user),S&&(N.selection=S),_&&(N.screenshots=_),u&&(N.video=u);let{result:L}=await ve({payload:N,signal:R,...t.transport?{transport:t.transport}:{}});if(R.aborted||d!==A)return L;if(L.ok){u&&(URL.revokeObjectURL(u.blobUrl),u=null);let se={phase:"success",lastSubmit:L};return S&&(se.selection=S),_&&(se.capture=_),l(se),L}en(L)&&he(N);let st=L.api?.error??h("unknown",new Error("Submission failed")),ie={phase:"error",lastSubmit:L,lastError:st};return S&&(ie.selection=S),_&&(ie.capture=_),l(ie),L}catch(_){if(R.aborted||d!==A)return {ok:false};let D={phase:"error",lastError:R.aborted?h("aborted",_):h("unknown",_)};return S&&(D.selection=S),l(D),{ok:false}}finally{d===A&&(c=null);}},async startRecording(){if(n.phase!=="review"||!t.recording?.enabled)return;let m=n.selection,y={phase:"recording",recordingElapsedMs:0};m&&(y.selection=m),l(y);try{let x={config:t.recording};c&&(x.signal=c.signal);let A=await we(x);g=A,A.onTick(I=>{if(n.phase==="recording"){let B={phase:"recording",recordingElapsedMs:I};m&&(B.selection=m),l(B);}});let R=await A.result;g=null,u=R;let S={phase:"review",video:R};m&&(S.selection=m),l(S);}catch(x){g=null;let R={phase:"review",lastError:x?.kind?x:h("recording_failed",x)};m&&(R.selection=m),l(R);}},stopRecording(){n.phase!=="recording"||!g||g.stop();},removeVideo(){u&&(URL.revokeObjectURL(u.blobUrl),u=null);let m=n.selection,y={phase:"review"};m&&(y.selection=m),l(y);},async startVoice(){if(n.phase!=="review"){console.warn("[BlocFeed] startVoice: ignored \u2014 phase is",n.phase,'(expected "review")');return}let m=t.voice;if(!m?.enabled){console.warn("[BlocFeed] startVoice: ignored \u2014 voice is not enabled in config");return}F();let y=n.selection,x={phase:"review",voiceRecording:true,voiceElapsedMs:0};y&&(x.selection=y),u&&(x.video=u),l(x);try{let A={config:m};c&&(A.signal=c.signal);let R=await be(A);b=R,R.onTick(D=>{let j={phase:"review",voiceRecording:!0,voiceElapsedMs:D};y&&(j.selection=y),u&&(j.video=u),l(j);});let S=await R.result;b=null;let I={phase:"review",voiceRecording:!1,voiceTranscribing:!0};y&&(I.selection=y),u&&(I.video=u),l(I);let B={blob:S.blob,mime:S.mime,blocfeedId:t.blocfeed_id};c&&(B.signal=c.signal);let{text:Te,warning:z}=await tt(B),_={phase:"review",voiceRecording:!1,voiceTranscribing:!1};y&&(_.selection=y),u&&(_.video=u),l(_);let M={text:Te};return z&&(M.warning=z),M}catch(A){F();let R=A?.kind?A:h("recording_failed",A);console.warn("[BlocFeed] Voice error:",R.message);let S={phase:"review",voiceRecording:false,voiceTranscribing:false,lastError:R};y&&(S.selection=y),u&&(S.video=u),l(S);return}},stopVoice(){b&&b.stop();},__unsafeGetSelectedElement(){return s},destroy(){v(),o.clear(),r.clear(),w?.(),w=null;}}}var Z=[],K=[],rt=20,it=15,oe=[],W={},Q=null,Y=null,G=null,re=false,tn=["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 nn(e){if(e instanceof Error)return e.message;if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return String(e)}}function on(e,t){let n=t.map(nn).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)),Z.push(r);Z.length>rt;)Z.shift();}function Se(e){let t=e.url.toLowerCase();for(let n of oe)if(t.includes(n))return;for(K.push(e);K.length>it;)K.shift();}function uo(e={}){if(re||!E())return;re=true,rt=e.consoleLimit??20,it=e.networkLimit??15;let t=e.ignoreUrls;if(t!==void 0?oe=t.map(n=>n.toLowerCase()):oe=[...tn],e.console!==false){let n=e.consoleLevels??["error","warn"];for(let o of n)W[o]=console[o],console[o]=(...r)=>{on(o,r),W[o]?.apply(console,r);};}if(e.network!==false&&typeof window.fetch=="function"){Q=window.fetch;let n=Q;window.fetch=async function(r,i){let s=typeof r=="string"?r:r instanceof URL?r.toString():r.url,a=(i?.method??"GET").toUpperCase(),c=Date.now();try{let d=await n.call(window,r,i);return d.ok||Se({url:s.slice(0,500),method:a,status:d.status,statusText:d.statusText,timestamp:c,durationMs:Date.now()-c}),d}catch(d){throw Se({url:s.slice(0,500),method:a,status:0,statusText:d instanceof Error?d.message:"Network error",timestamp:c,durationMs:Date.now()-c}),d}};}if(e.network!==false&&typeof XMLHttpRequest<"u"){Y=XMLHttpRequest.prototype.open,G=XMLHttpRequest.prototype.send;let n=Y,o=G;XMLHttpRequest.prototype.open=function(r,i,...s){return this.__bf_method=r.toUpperCase(),this.__bf_url=String(i),n.apply(this,[r,i,...s])},XMLHttpRequest.prototype.send=function(...r){let i=this.__bf_method||"GET",s=this.__bf_url||"",a=Date.now();return this.addEventListener("loadend",function(){if(this.status>=400||this.status===0){let c={url:s.slice(0,500),method:i,status:this.status,timestamp:a,durationMs:Date.now()-a};this.statusText&&(c.statusText=this.statusText),Se(c);}}),o.apply(this,r)};}}function fo(){if(re){for(let[e,t]of Object.entries(W))console[e]=t;for(let e of Object.keys(W))delete W[e];Q&&(window.fetch=Q,Q=null),Y&&(XMLHttpRequest.prototype.open=Y,Y=null),G&&(XMLHttpRequest.prototype.send=G,G=null),oe=[],re=false;}}function mo(){return {consoleLogs:[...Z],networkErrors:[...K]}}function po(){Z=[],K=[];}var rn=[{name:"supabase_service_role_key",pattern:/SUPABASE_SERVICE_ROLE_KEY["'=:\s]+[A-Za-z0-9_.=-]{30,}/},{name:"supabase_db_password",pattern:/SUPABASE_DB_PASSWORD["'=:\s]+[^\s"']{6,}/},{name:"postgres_password",pattern:/POSTGRES_PASSWORD["'=:\s]+[^\s"']{6,}/},{name:"database_url_with_creds",pattern:/(?:postgres|postgresql|mysql|mongodb|redis|amqp):\/\/[^:]+:[^@\s"']+@/},{name:"aws_access_key",pattern:/AKIA[0-9A-Z]{16}/},{name:"aws_secret_key",pattern:/AWS_SECRET_ACCESS_KEY["'=:\s]+[A-Za-z0-9/+=]{30,}/},{name:"aws_session_token",pattern:/AWS_SESSION_TOKEN["'=:\s]+[A-Za-z0-9/+=]{30,}/},{name:"stripe_secret_key",pattern:/sk_live_[a-zA-Z0-9]{10,}/},{name:"stripe_secret_key_test",pattern:/sk_test_[a-zA-Z0-9]{10,}/},{name:"stripe_restricted_key",pattern:/rk_(?:live|test)_[a-zA-Z0-9]{10,}/},{name:"github_pat",pattern:/ghp_[A-Za-z0-9_]{36,}/},{name:"github_oauth",pattern:/gho_[A-Za-z0-9_]{36,}/},{name:"github_user_token",pattern:/ghu_[A-Za-z0-9_]{36,}/},{name:"github_server_token",pattern:/ghs_[A-Za-z0-9_]{36,}/},{name:"github_fine_grained",pattern:/github_pat_[A-Za-z0-9_]{22,}/},{name:"openai_api_key",pattern:/sk-[a-zA-Z0-9]{20,}(?![a-zA-Z0-9_])/},{name:"anthropic_api_key",pattern:/sk-ant-[a-zA-Z0-9\-_]{20,}/},{name:"private_key",pattern:/-----BEGIN (?:RSA |EC |DSA |OPENSSH |PGP )?PRIVATE KEY-----/},{name:"sendgrid_api_key",pattern:/SG\.[a-zA-Z0-9_-]{22,}\.[a-zA-Z0-9_-]{22,}/},{name:"twilio_auth_token",pattern:/TWILIO_AUTH_TOKEN["'=:\s]+[a-f0-9]{32}/},{name:"generic_secret_key",pattern:/[A-Z_]{2,}_SECRET_KEY["'=:\s]+[^\s"']{8,}/},{name:"generic_secret",pattern:/[A-Z_]{2,}_SECRET["'=:\s]+[^\s"']{8,}/},{name:"generic_password",pattern:/[A-Z_]{2,}_PASSWORD["'=:\s]+[^\s"']{6,}/},{name:"generic_private_key_var",pattern:/[A-Z_]{2,}_PRIVATE_KEY["'=:\s]+[^\s"']{8,}/}],U=[],_e=0,ke=false;function sn(e){let t=e.slice(0,80);return t.length<=6?"***":t.slice(0,6)+"***"}function an(e,t,n,o){if(U.some(s=>s.rule===e&&s.source===t))return;let i={rule:e,source:t,hint:sn(n),timestamp:Date.now()};o&&(i.location=o),U.push(i);}function J(e,t,n,o){for(let{name:r,pattern:i}of n){let s=i.exec(e);s&&an(r,t,s[0],o);}}function cn(e){try{let t=window;if(t.__NEXT_DATA__){let n=JSON.stringify(t.__NEXT_DATA__);J(n,"hydration",e,"__NEXT_DATA__");}if(t.__NUXT__){let n=JSON.stringify(t.__NUXT__);J(n,"hydration",e,"__NUXT__");}}catch{}}function ln(e){try{document.querySelectorAll("script:not([src])").forEach((n,o)=>{let r=n.textContent;r&&r.length>0&&J(r,"scripts",e,`inline-script[${o}]`);});}catch{}}function un(e){try{document.querySelectorAll("meta[content]").forEach(n=>{let o=n.getAttribute("content"),r=n.getAttribute("name")||n.getAttribute("property")||"";o&&o.length>10&&J(o,"meta",e,r?`meta[${r}]`:void 0);});}catch{}}function dn(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&&J(i.value,"dom",e,`${n.tagName.toLowerCase()}[${i.name}]`);}});}catch{}}function wo(e={}){if(ke||!E()||(ke=true,e.secretScan===false))return;let t=[...rn,...e.customPatterns??[]],n=e.scanTargets??["hydration","scripts","meta","dom"];setTimeout(()=>{_e=Date.now(),n.includes("hydration")&&cn(t),n.includes("scripts")&&ln(t),n.includes("meta")&&un(t),n.includes("dom")&&dn(t);let o=e.notify??"both";U.length>0&&(o==="console"||o==="both")&&console.warn(`[BlocFeed Security] Found ${U.length} potential secret(s) exposed in client code:`,U.map(r=>`${r.rule} (${r.source}${r.location?`: ${r.location}`:""})`));},100);}function bo(){return {findings:[...U],scannedAt:_e}}function yo(){U=[],_e=0,ke=false;}
|
|
2
|
-
export{E as a,ae as b,Be as c,Oe as d,Ue as e,he as f,Ve as g,_n as h,Tn as i,xt as j,Pt as k,Dt as l,we as m,Ut as n,be as o,$t as p,qn as q,tt as r,ao as s,uo as t,fo as u,mo as v,po as w,wo as x,bo as y,yo as z};
|
package/dist/chunk-VK43CZAG.cjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
'use strict';function E(){return typeof window<"u"&&typeof document<"u"}function Re(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 ae(e){return {x:e.x,y:e.y,width:e.width,height:e.height}}function at(e){return {x:e.x+window.scrollX,y:e.y+window.scrollY,width:e.width,height:e.height}}function ct(e){return e.replace(/\s+/g," ").trim()}function ce(e,t=140){let n=e.textContent;if(!n)return;let o=ct(n);if(o)return o.length<=t?o:`${o.slice(0,t-1)}\u2026`}function lt(e){let t=1;for(let n=e.previousElementSibling;n;n=n.previousElementSibling)n.tagName===e.tagName&&(t+=1);return t}var Ce=["data-testid","data-test-id","data-test","data-qa","data-cy"],Ae="data-blocfeed-component";function le(e){let t=e.closest(`[${Ae}]`);if(!t)return;let o=t.getAttribute(Ae)?.trim();return o||void 0}function ut(e){for(let t of Ce){let n=e.closest(`[${t}]`);if(!n)continue;let r=n.getAttribute(t)?.trim();if(r)return r}}function xe(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 O(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 $(e){if(e){for(let t of e)if(typeof t.name=="string"&&t.name&&!O(t.name))return t.name}}function C(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 C(r)}}}function ue(e){let t=xe(e);if(!t)return;let n=$(t._debugInfo);if(n)return n;let o=t._debugOwner!==void 0;if(o){let c=t._debugOwner;for(let d=0;c&&d<50;d+=1){let w=$(c._debugInfo);if(w)return w;let g=C(c.type)??C(c.elementType);if(g&&!O(g))return g;c=c._debugOwner;}}if(t._owner!==void 0&&t._owner!==t._debugOwner){let c=t._owner;for(let d=0;c&&d<50;d+=1){let w=$(c._debugInfo);if(w)return w;let g=C(c.type)??C(c.elementType);if(g&&!O(g))return g;c=c._owner;}}let i=t,s=o?80:25;for(let c=0;i&&c<s;c+=1){let d=$(i._debugInfo);if(d)return d;let w=C(i.type)??C(i.elementType);if(w&&!O(w))return w;i=i.return;}let a=e.parentElement;for(let c=0;a&&c<15;c+=1){let d=xe(a);if(d){let w=$(d._debugInfo);if(w)return w;let g=C(d.type)??C(d.elementType);if(g&&!O(g))return g;if(d._debugOwner){let u=C(d._debugOwner.type)??C(d._debugOwner.elementType);if(u&&!O(u))return u}if(d._owner&&d._owner!==d._debugOwner){let u=C(d._owner.type)??C(d._owner.elementType);if(u&&!O(u))return u}}a=a.parentElement;}}function dt(e){let t=e.tagName.toLowerCase(),n=e.getAttribute("id");if(n)return `#${Re(n)}`;for(let o of Ce){let r=e.getAttribute(o);if(r)return `${t}[${o}="${Re(r)}"]`}return `${t}:nth-of-type(${lt(e)})`}function ft(e,t=10){let n=[],o=e;for(;o&&n.length<t;){let r=dt(o);if(n.unshift(r),r.startsWith("#"))break;o=o.parentElement;}return n.join(" > ")}function Pe(e,t){if(!t||t.length===0)return false;for(let n of t)if(e.closest(n))return true;return false}function de(e,t){if(!e||Pe(e,t.ignoreSelectors))return null;let n=e;for(;n;){if(Pe(n,t.ignoreSelectors))return null;if(t.isSelectable?.(n)??mt(n))return n;n=n.parentElement;}return null}function mt(e){let t=e.tagName;return !(t==="HTML"||t==="BODY")}function Fe(e){let t=e.getBoundingClientRect(),n={selector:ft(e),tagName:e.tagName.toLowerCase(),rect:ae(t),pageRect:at(t)},o=e.getAttribute("id");o&&(n.id=o);let r=e.className;typeof r=="string"&&r.trim()&&(n.className=r);let i=ce(e);i&&(n.textSnippet=i);let s=le(e)??ue(e);s&&(n.componentName=s);let a=ut(e);return a&&(n.testId=a),n}var fe=null;async function Me(){return fe||(fe=import('html-to-image')),fe}async function pt(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 Ie(e,t){let{width:n,height:o}=await pt(e);return {dataUrl:e,mime:t,width:n,height:o}}function V(e){if(e?.aborted)throw new Error("Aborted")}function Be(){return {async captureElement(e,t){if(!E())throw new Error("captureElement can only run in the browser");V(t.signal);let n=await Me();V(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 V(t.signal),await Ie(o,t.mime)},async captureFullPage(e){if(!E())throw new Error("captureFullPage can only run in the browser");V(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)),s=Math.max(1,Math.round(o*r)),a=await Me();V(e.signal);let c=e.mime==="image/jpeg"?await a.toJpeg(t,{width:i,height:s,quality:e.quality??.92,pixelRatio:e.pixelRatio}):await a.toPng(t,{width:i,height:s,pixelRatio:e.pixelRatio});return V(e.signal),await Ie(c,e.mime)}}}function gt(e){if(e instanceof Error)return e.message;if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return "Unknown error"}}function h(e,t,n){let o={kind:e,message:gt(t)};return n&&(o.detail=n),o}var ht=12e3,wt=2048,bt=.92;function De(){return Date.now()}function yt(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 Le(e,t,n){let o=new Promise((i,s)=>{let a=setTimeout(()=>s(new Error("Timeout")),t);typeof a.unref=="function"&&a.unref();}),r=[e,o];return n&&r.push(yt(n)),await Promise.race(r)}function Et(e){if(!E())return 1;let t=window.devicePixelRatio||1,n=e?.pixelRatio??Math.min(t,2);return Math.max(.1,n)}function vt(e){return !!(e?.element||e?.fullPage)}function Ne(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 Oe(e){let{selectionElement:t,capture:n,signal:o}=e;if(!E()||!vt(n))return;let r=De(),i=[],s=n?.timeoutMs??ht,a=n?.maxDimension??wt,c=n?.mime??"image/png",d=n?.quality??bt,w=n?.adapter??Be(),g={},u=Et(n);if(n?.element&&t)try{let p=t.getBoundingClientRect(),l=Math.min(1,a/Math.max(p.width,p.height)),k=Math.min(u,u*l),P=await Le(Promise.resolve(w.captureElement(t,{...Ne({mime:c,quality:d,pixelRatio:k,maxDimension:a,includeQuality:c==="image/jpeg",...o?{signal:o}:{}})})),s,o);g.element=P;}catch(p){if(o?.aborted)throw p;i.push(h("capture_failed",p,{target:"element"}));}if(n?.fullPage)try{let p=await Le(Promise.resolve(w.captureFullPage(Ne({mime:c,quality:d,pixelRatio:u,maxDimension:a,includeQuality:c==="image/jpeg",...o?{signal:o}:{}}))),s,o);g.fullPage=p;}catch(p){if(o?.aborted)throw p;i.push(h("capture_failed",p,{target:"fullPage"}));}let b=De(),f={startedAt:r,finishedAt:b,durationMs:Math.max(0,b-r)};return i.length>0&&(f.errors=i),{...g,diagnostics:f}}function St(){try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch{return}}function kt(){return E()?{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:St()}:{}}function _t(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 Ue(e){let{config:t,context:n,user:o}=e;if(t?.enabled===false)return {};let r={...kt(),..._t(o)},i=t?.enrich;if(!i)return r;try{let s=await i(n);return {...r,...s}}catch(s){let a=h("unknown",s);return {...r,blocfeedMetadataError:a.message}}}var me="blocfeed-queue",Tt=50;function pe(){if(!E())return [];try{let e=localStorage.getItem(me);if(!e)return [];let t=JSON.parse(e);return Array.isArray(t)?t:[]}catch{return []}}function ge(e){if(E())try{e.length===0?localStorage.removeItem(me):localStorage.setItem(me,JSON.stringify(e));}catch{}}function Rt(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 he(e){let t=pe(),n=Rt(e);for(n.metadata={...n.metadata,_queued:true},t.push({payload:n,timestamp:Date.now()});t.length>Tt;)t.shift();ge(t);}function Ve(){let e=pe();return e.length===0?[]:(ge([]),e.map(t=>t.payload))}function _n(){ge([]);}function Tn(){return pe().length}var At=200,X=[],He=0,ee=false;function qe(e){let t=e.target;if(!(t instanceof Element)||t.closest("[data-blocfeed-ui]"))return;let n={timestampMs:Date.now()-He,path:window.location.pathname,tagName:t.tagName.toLowerCase()},o=ce(t,100);o&&(n.textSnippet=o);let r=le(t)??ue(t);r&&(n.componentName=r),X.length<At&&X.push(n);}function ze(){ee||!E()||(ee=true,X=[],He=Date.now(),document.addEventListener("click",qe,{capture:true,passive:true}));}function je(){ee&&(ee=false,document.removeEventListener("click",qe,{capture:true}));}function xt(){return [...X]}function Pt(){X=[];}var Ct=3e4,Ft=25e5,$e="video/webm",Mt=250,It=1e3,Bt=["video/webm;codecs=vp9","video/webm;codecs=vp8","video/webm"];function Xe(){if(typeof MediaRecorder>"u")return null;for(let e of Bt)if(MediaRecorder.isTypeSupported(e))return e;return null}function Dt(){return !E()||typeof navigator?.mediaDevices?.getDisplayMedia!="function"?false:Xe()!==null}async function we(e){let{config:t,signal:n}=e;if(!E()||typeof navigator?.mediaDevices?.getDisplayMedia!="function")throw h("recording_failed",new Error("Screen recording is not supported in this browser"));let o=Xe();if(!o)throw h("recording_failed",new Error("No supported video codec found (WebM required)"));if(n?.aborted)throw h("aborted",new Error("Recording aborted before start"));let r;try{r=await navigator.mediaDevices.getDisplayMedia({video:{displaySurface:"browser"},audio:!1});}catch(l){let k=l instanceof DOMException&&l.name==="NotAllowedError"?"Screen share permission denied":"Failed to start screen share";throw h("recording_failed",new Error(k))}if(n?.aborted)throw r.getTracks().forEach(l=>l.stop()),h("aborted",new Error("Recording aborted after permission"));let i=t?.maxDurationMs??Ct,s=t?.videoBitsPerSecond??Ft,a=new MediaRecorder(r,{mimeType:o,videoBitsPerSecond:s}),c=[],d=[],w=0,g=null,u=null,b=false,f=()=>{je(),g!==null&&(clearInterval(g),g=null),u!==null&&(clearTimeout(u),u=null),r.getTracks().forEach(l=>l.stop());},p=new Promise((l,k)=>{a.ondataavailable=T=>{T.data.size>0&&c.push(T.data);},a.onstop=()=>{if(b)return;b=true,f();let T=Date.now()-w,F=new Blob(c,{type:$e}),v=URL.createObjectURL(F);l({mime:$e,blobUrl:v,blob:F,durationMs:T,sizeBytes:F.size});},a.onerror=()=>{b||(b=true,f(),k(h("recording_failed",new Error("MediaRecorder error"))));};let P=r.getVideoTracks()[0];if(P&&P.addEventListener("ended",()=>{a.state!=="inactive"&&a.stop();}),n){let T=()=>{b||(b=true,a.state!=="inactive"&&a.stop(),f(),k(h("aborted",new Error("Recording aborted"))));};n.addEventListener("abort",T,{once:true});}});return a.start(It),ze(),w=Date.now(),g=setInterval(()=>{let l=Date.now()-w;for(let k of d)k(l);},Mt),u=setTimeout(()=>{!b&&a.state!=="inactive"&&a.stop();},i),{result:p,stop(){!b&&a.state!=="inactive"&&a.stop();},onTick(l){d.push(l);},abort(){b||(b=true,a.state!=="inactive"&&a.stop(),f());}}}var Lt=6e4,Ze="audio/webm",Nt=250,Ot=["audio/webm;codecs=opus","audio/webm","audio/ogg;codecs=opus"];function Ke(){if(typeof MediaRecorder>"u")return null;for(let e of Ot)if(MediaRecorder.isTypeSupported(e))return e;return null}function Ut(){return !E()||typeof navigator?.mediaDevices?.getUserMedia!="function"?false:Ke()!==null}async function be(e){let{config:t,signal:n}=e;if(!E()||typeof navigator?.mediaDevices?.getUserMedia!="function")throw h("recording_failed",new Error("Microphone recording is not supported in this browser"));let o=Ke();if(!o)throw h("recording_failed",new Error("No supported audio codec found"));if(n?.aborted)throw h("aborted",new Error("Voice recording aborted before start"));let r;try{r=await navigator.mediaDevices.getUserMedia({audio:!0});}catch(p){let l=p instanceof DOMException&&p.name==="NotAllowedError"?"Microphone permission denied":"Failed to access microphone";throw h("recording_failed",new Error(l))}if(n?.aborted)throw r.getTracks().forEach(p=>p.stop()),h("aborted",new Error("Voice recording aborted after permission"));let i=t?.maxDurationMs??Lt,s=new MediaRecorder(r,{mimeType:o}),a=[],c=[],d=0,w=null,g=null,u=false,b=()=>{w!==null&&(clearInterval(w),w=null),g!==null&&(clearTimeout(g),g=null),r.getTracks().forEach(p=>p.stop());},f=new Promise((p,l)=>{if(s.ondataavailable=k=>{k.data.size>0&&a.push(k.data);},s.onstop=()=>{if(u)return;u=true,b();let k=Date.now()-d,P=new Blob(a,{type:Ze});p({blob:P,mime:Ze,durationMs:k});},s.onerror=()=>{u||(u=true,b(),l(h("recording_failed",new Error("MediaRecorder error"))));},n){let k=()=>{u||(u=true,s.state!=="inactive"&&s.stop(),b(),l(h("aborted",new Error("Voice recording aborted"))));};n.addEventListener("abort",k,{once:true});}});return s.start(1e3),d=Date.now(),w=setInterval(()=>{let p=Date.now()-d;for(let l of c)l(p);},Nt),g=setTimeout(()=>{!u&&s.state!=="inactive"&&s.stop();},i),{result:f,stop(){!u&&s.state!=="inactive"&&s.stop();},onTick(p){c.push(p);},abort(){u||(u=true,s.state!=="inactive"&&s.stop(),b());}}}var Vt=12e3,Ht=2,qt=500,zt=2e3,ye="https://blocfeed.com/api/feedback",jt="https://blocfeed.com/api/feedback/voice",We=0,Ge="blocfeed-viewer-token",Je="blocfeed-my-feedback-url";function $t(){try{return localStorage.getItem(Ge)}catch{return null}}function qn(){try{return localStorage.getItem(Je)}catch{return null}}function Xt(e,t){try{localStorage.setItem(Ge,e),t&&localStorage.setItem(Je,t);}catch{}}function Qe(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 Zt(e){return e>=500&&e<=599}function Kt(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),s=new Uint8Array(i.length);for(let a=0;a<i.length;a+=1)s[a]=i.charCodeAt(a);return new Blob([s],{type:r})}function Wt(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 Ye(e,t,n){let o=Kt(t);await fetch(e,{method:"PUT",body:o,headers:{"content-type":o.type},...n?{signal:n}:{}});}async function Qt(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(`${ye}/${t}/screenshots`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(i),...r?{signal:r}:{}});}async function Yt(e){await fetch(`${ye}/${e.feedbackId}/video`,{method:"POST",body:e.blob,headers:{"content-type":e.blob.type},...e.signal?{signal:e.signal}:{}});}async function et(e){let{signal:t,transport:n}=e;if(Date.now()-We<zt)return {ok:false,error:h("configuration",new Error("Please wait before submitting again"))};let r=n?.timeoutMs??Vt,i=n?.maxAttempts??Ht,s=n?.backoffMs??qt,a=!!(e.payload.screenshots?.element?.dataUrl||e.payload.screenshots?.fullPage?.dataUrl),c=!!e.payload.video?.blob,d=a||c,{lean:w,extracted:g,extractedVideo:u}=d?Wt(e.payload):{lean:e.payload,extracted:{},extractedVideo:{}},b=$t();b&&(w.viewer_token=b);let f={...g,...e.screenshotDataUrls};for(let p=1;p<=i;p+=1){let l=new AbortController,k=setTimeout(()=>l.abort(),r),P=()=>l.abort();t&&t.addEventListener("abort",P,{once:true});try{let T=await fetch(ye,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(w),signal:l.signal});if(T.ok){We=Date.now();let v;try{v=await T.json();}catch{}if(v?.viewer_token&&Xt(v.viewer_token,v.my_feedback_url),(f.element||f.fullPage)&&v){let m=v.upload_urls;if(m){let y=[];f.element&&m.element&&y.push(Ye(m.element,f.element,t)),f.fullPage&&m.fullPage&&y.push(Ye(m.fullPage,f.fullPage,t));try{await Promise.all(y);}catch{}}else if(v.feedback_id)try{await Qt({feedbackId:v.feedback_id,extracted:f,screenshots:e.payload.screenshots,...t?{signal:t}:{}});}catch{}}if(u.blob&&v){let m=v.upload_urls;if(m?.video)try{await fetch(m.video,{method:"PUT",body:u.blob,headers:{"content-type":u.blob.type},...t?{signal:t}:{}});}catch{}else if(v.feedback_id)try{await Yt({feedbackId:v.feedback_id,blob:u.blob,...t?{signal:t}:{}});}catch{}}let q={ok:!0,status:T.status};return v&&(q.apiResponse=v),q}if(p<i&&Zt(T.status)){let v=.85+Math.random()*.3,H=Math.round(s*2**(p-1)*v);await Qe(H,t);continue}let F=`HTTP ${T.status}`;try{let v=await T.json();v?.error&&(F=v.error);}catch{}return {ok:!1,status:T.status,error:h("api_failed",new Error(F))}}catch(T){if(l.signal.aborted||t?.aborted)return {ok:false,error:h("aborted",T)};if(p<i){let F=.85+Math.random()*.3,v=Math.round(s*2**(p-1)*F);await Qe(v,t);continue}return {ok:false,error:h("api_failed",T)}}finally{clearTimeout(k),t&&t.removeEventListener("abort",P);}}return {ok:false,error:h("api_failed",new Error("Failed"))}}async function tt(e){let{blob:t,mime:n,blocfeedId:o,signal:r}=e,i=await fetch(jt,{method:"POST",headers:{"Content-Type":n,"X-Blocfeed-Id":o},body:t,...r?{signal:r}:{}});if(!i.ok){let a=await i.json().catch(()=>({error:"Unknown error"}));throw h("api_failed",new Error(a?.error??`Voice API returned ${i.status}`))}let s=await i.json();return {text:s.text??"",warning:s.warning}}function Ee(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 te(e){return e instanceof Element?!!e.closest("[data-blocfeed-ui]"):false}function ne(e){e.stopPropagation(),e.stopImmediatePropagation?.();}function nt(e,t){if(!E())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,s=null,a=(f,p=false)=>{if(!f){i=null,s=null,t.onHover(null);return}let l=ae(f.getBoundingClientRect()),k=`${Math.round(l.x)}:${Math.round(l.y)}:${Math.round(l.width)}:${Math.round(l.height)}`;!p&&f===i&&k===s||(i=f,s=k,t.onHover({element:f,rect:l}));},c=Ee(f=>{if(te(f.target))return;let p=document.elementFromPoint(f.clientX,f.clientY),l=de(p,r);a(l);}),d=Ee(()=>{i&&a(i,true);}),w=f=>{te(f.target)||(ne(f),f.pointerType==="mouse"&&f.preventDefault());},g=f=>{te(f.target)||(ne(f),f.pointerType==="mouse"&&f.preventDefault());},u=f=>{if(te(f.target))return;ne(f),f.preventDefault();let p=document.elementFromPoint(f.clientX,f.clientY),l=de(p,r);l&&t.onSelect({element:l,descriptor:Fe(l)});},b=f=>{f.key==="Escape"&&(ne(f),f.preventDefault(),t.onCancel());};return window.addEventListener("pointermove",c,{capture:true,passive:true}),window.addEventListener("pointerdown",w,{capture:true}),window.addEventListener("pointerup",g,{capture:true}),window.addEventListener("click",u,{capture:true}),window.addEventListener("keydown",b,{capture:true}),window.addEventListener("scroll",d,{capture:true,passive:true}),window.addEventListener("resize",d,{passive:true}),{stop(){window.removeEventListener("pointermove",c,{capture:true}),window.removeEventListener("pointerdown",w,{capture:true}),window.removeEventListener("pointerup",g,{capture:true}),window.removeEventListener("click",u,{capture:true}),window.removeEventListener("keydown",b,{capture:true}),window.removeEventListener("scroll",d,{capture:true}),window.removeEventListener("resize",d),c.cancel(),d.cancel(),t.onHover(null);}}}async function ve(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 et(r),o.ok=!!o.api?.ok;}catch(r){o.api={ok:false,error:h("api_failed",r)},o.ok=false;}return {payload:e.payload,result:o}}var Gt=["[data-blocfeed-ui]","[data-blocfeed-ignore]"];function Jt(e){let t=[...Gt,...e?.ignoreSelectors??[]],n=Array.from(new Set(t));return {...e,ignoreSelectors:n}}function ot(){return {phase:"idle"}}function en(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 ao(e){let t=e,n=ot(),o=new Set,r=new Set,i=null,s=null,a=null,c=null,d=0,w=null,g=null,u=null,b=null,f=()=>{for(let m of o)m(n);},p=m=>{for(let y of r)y(m);},l=m=>{n=m,f();},k=()=>{d+=1,c?.abort(),c=null;},P=()=>{i?.stop(),i=null,p(null),a!==null&&E()&&(document.documentElement.style.cursor=a,a=null);},T=()=>{g&&(g.abort(),g=null),u&&(URL.revokeObjectURL(u.blobUrl),u=null);},F=()=>{b&&(b.abort(),b=null);},v=()=>{k(),P(),T(),F(),s=null,l(ot());},H=()=>{if(!E())return;P(),s=null;let m=Jt(t.picker);a=document.documentElement.style.cursor,document.documentElement.style.cursor="crosshair",l({phase:"picking"}),i=nt(m,{onHover:p,onSelect:({element:y,descriptor:x})=>{s=y,P(),l({phase:"review",selection:x});},onCancel:()=>{v();}});},q=()=>{let m=Ve();if(m.length!==0)for(let y of m)ve({payload:y,...t.transport?{transport:t.transport}:{}}).catch(()=>{he(y);});};if(E()){setTimeout(q,1e3);let m=()=>q();window.addEventListener("online",m),w=()=>window.removeEventListener("online",m);}return {getState:()=>n,getConfig:()=>t,subscribe(m){return o.add(m),()=>o.delete(m)},subscribeHover(m){return r.add(m),()=>r.delete(m)},start(){n.phase==="capturing"||n.phase==="submitting"||n.phase==="recording"||n.phase!=="picking"&&H();},stop(){v();},clearSelection(){n.phase==="capturing"||n.phase==="submitting"||n.phase==="recording"||H();},setConfig(m){t=m;},async submit(m,y){if(!E()){let _=h("configuration",new Error("BlocFeed submit can only run in the browser"));return l({phase:"error",lastError:_}),{ok:false}}let x=t.blocfeed_id?.trim?.()??"";if(!x){let M={phase:"error",lastError:h("configuration",new Error("Missing blocfeed_id. Create a project in BlocFeed and pass its blocfeed_id."))};return n.selection&&(M.selection=n.selection),l(M),{ok:false}}if(n.phase==="capturing"||n.phase==="submitting"||n.phase==="recording")return {ok:false};let A=d+1;d=A,c?.abort(),c=new AbortController;let R=c.signal,S=n.selection,I=y?.capture?{...t.capture,...y.capture}:t.capture,B=!!(I?.element||I?.fullPage),z={phase:B?"capturing":"submitting"};S&&(z.selection=S),l(z);try{let _=B?await Oe({selectionElement:s,capture:I,signal:R}):void 0;if(R.aborted||d!==A)return {ok:!1};let M={phase:"submitting"};S&&(M.selection=S),_&&(M.capture=_),l(M);let D={};S&&(D.selection=S),_&&(D.capture=_);let j=await Ue({config:t.metadata,context:D,...t.user?{user:t.user}:{}}),N={version:1,createdAt:new Date().toISOString(),blocfeed_id:x,message:m,metadata:j};y?.category&&(N.category=y.category),t.user&&(N.user=t.user),S&&(N.selection=S),_&&(N.screenshots=_),u&&(N.video=u);let{result:L}=await ve({payload:N,signal:R,...t.transport?{transport:t.transport}:{}});if(R.aborted||d!==A)return L;if(L.ok){u&&(URL.revokeObjectURL(u.blobUrl),u=null);let se={phase:"success",lastSubmit:L};return S&&(se.selection=S),_&&(se.capture=_),l(se),L}en(L)&&he(N);let st=L.api?.error??h("unknown",new Error("Submission failed")),ie={phase:"error",lastSubmit:L,lastError:st};return S&&(ie.selection=S),_&&(ie.capture=_),l(ie),L}catch(_){if(R.aborted||d!==A)return {ok:false};let D={phase:"error",lastError:R.aborted?h("aborted",_):h("unknown",_)};return S&&(D.selection=S),l(D),{ok:false}}finally{d===A&&(c=null);}},async startRecording(){if(n.phase!=="review"||!t.recording?.enabled)return;let m=n.selection,y={phase:"recording",recordingElapsedMs:0};m&&(y.selection=m),l(y);try{let x={config:t.recording};c&&(x.signal=c.signal);let A=await we(x);g=A,A.onTick(I=>{if(n.phase==="recording"){let B={phase:"recording",recordingElapsedMs:I};m&&(B.selection=m),l(B);}});let R=await A.result;g=null,u=R;let S={phase:"review",video:R};m&&(S.selection=m),l(S);}catch(x){g=null;let R={phase:"review",lastError:x?.kind?x:h("recording_failed",x)};m&&(R.selection=m),l(R);}},stopRecording(){n.phase!=="recording"||!g||g.stop();},removeVideo(){u&&(URL.revokeObjectURL(u.blobUrl),u=null);let m=n.selection,y={phase:"review"};m&&(y.selection=m),l(y);},async startVoice(){if(n.phase!=="review"){console.warn("[BlocFeed] startVoice: ignored \u2014 phase is",n.phase,'(expected "review")');return}let m=t.voice;if(!m?.enabled){console.warn("[BlocFeed] startVoice: ignored \u2014 voice is not enabled in config");return}F();let y=n.selection,x={phase:"review",voiceRecording:true,voiceElapsedMs:0};y&&(x.selection=y),u&&(x.video=u),l(x);try{let A={config:m};c&&(A.signal=c.signal);let R=await be(A);b=R,R.onTick(D=>{let j={phase:"review",voiceRecording:!0,voiceElapsedMs:D};y&&(j.selection=y),u&&(j.video=u),l(j);});let S=await R.result;b=null;let I={phase:"review",voiceRecording:!1,voiceTranscribing:!0};y&&(I.selection=y),u&&(I.video=u),l(I);let B={blob:S.blob,mime:S.mime,blocfeedId:t.blocfeed_id};c&&(B.signal=c.signal);let{text:Te,warning:z}=await tt(B),_={phase:"review",voiceRecording:!1,voiceTranscribing:!1};y&&(_.selection=y),u&&(_.video=u),l(_);let M={text:Te};return z&&(M.warning=z),M}catch(A){F();let R=A?.kind?A:h("recording_failed",A);console.warn("[BlocFeed] Voice error:",R.message);let S={phase:"review",voiceRecording:false,voiceTranscribing:false,lastError:R};y&&(S.selection=y),u&&(S.video=u),l(S);return}},stopVoice(){b&&b.stop();},__unsafeGetSelectedElement(){return s},destroy(){v(),o.clear(),r.clear(),w?.(),w=null;}}}var Z=[],K=[],rt=20,it=15,oe=[],W={},Q=null,Y=null,G=null,re=false,tn=["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 nn(e){if(e instanceof Error)return e.message;if(typeof e=="string")return e;try{return JSON.stringify(e)}catch{return String(e)}}function on(e,t){let n=t.map(nn).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)),Z.push(r);Z.length>rt;)Z.shift();}function Se(e){let t=e.url.toLowerCase();for(let n of oe)if(t.includes(n))return;for(K.push(e);K.length>it;)K.shift();}function uo(e={}){if(re||!E())return;re=true,rt=e.consoleLimit??20,it=e.networkLimit??15;let t=e.ignoreUrls;if(t!==void 0?oe=t.map(n=>n.toLowerCase()):oe=[...tn],e.console!==false){let n=e.consoleLevels??["error","warn"];for(let o of n)W[o]=console[o],console[o]=(...r)=>{on(o,r),W[o]?.apply(console,r);};}if(e.network!==false&&typeof window.fetch=="function"){Q=window.fetch;let n=Q;window.fetch=async function(r,i){let s=typeof r=="string"?r:r instanceof URL?r.toString():r.url,a=(i?.method??"GET").toUpperCase(),c=Date.now();try{let d=await n.call(window,r,i);return d.ok||Se({url:s.slice(0,500),method:a,status:d.status,statusText:d.statusText,timestamp:c,durationMs:Date.now()-c}),d}catch(d){throw Se({url:s.slice(0,500),method:a,status:0,statusText:d instanceof Error?d.message:"Network error",timestamp:c,durationMs:Date.now()-c}),d}};}if(e.network!==false&&typeof XMLHttpRequest<"u"){Y=XMLHttpRequest.prototype.open,G=XMLHttpRequest.prototype.send;let n=Y,o=G;XMLHttpRequest.prototype.open=function(r,i,...s){return this.__bf_method=r.toUpperCase(),this.__bf_url=String(i),n.apply(this,[r,i,...s])},XMLHttpRequest.prototype.send=function(...r){let i=this.__bf_method||"GET",s=this.__bf_url||"",a=Date.now();return this.addEventListener("loadend",function(){if(this.status>=400||this.status===0){let c={url:s.slice(0,500),method:i,status:this.status,timestamp:a,durationMs:Date.now()-a};this.statusText&&(c.statusText=this.statusText),Se(c);}}),o.apply(this,r)};}}function fo(){if(re){for(let[e,t]of Object.entries(W))console[e]=t;for(let e of Object.keys(W))delete W[e];Q&&(window.fetch=Q,Q=null),Y&&(XMLHttpRequest.prototype.open=Y,Y=null),G&&(XMLHttpRequest.prototype.send=G,G=null),oe=[],re=false;}}function mo(){return {consoleLogs:[...Z],networkErrors:[...K]}}function po(){Z=[],K=[];}var rn=[{name:"supabase_service_role_key",pattern:/SUPABASE_SERVICE_ROLE_KEY["'=:\s]+[A-Za-z0-9_.=-]{30,}/},{name:"supabase_db_password",pattern:/SUPABASE_DB_PASSWORD["'=:\s]+[^\s"']{6,}/},{name:"postgres_password",pattern:/POSTGRES_PASSWORD["'=:\s]+[^\s"']{6,}/},{name:"database_url_with_creds",pattern:/(?:postgres|postgresql|mysql|mongodb|redis|amqp):\/\/[^:]+:[^@\s"']+@/},{name:"aws_access_key",pattern:/AKIA[0-9A-Z]{16}/},{name:"aws_secret_key",pattern:/AWS_SECRET_ACCESS_KEY["'=:\s]+[A-Za-z0-9/+=]{30,}/},{name:"aws_session_token",pattern:/AWS_SESSION_TOKEN["'=:\s]+[A-Za-z0-9/+=]{30,}/},{name:"stripe_secret_key",pattern:/sk_live_[a-zA-Z0-9]{10,}/},{name:"stripe_secret_key_test",pattern:/sk_test_[a-zA-Z0-9]{10,}/},{name:"stripe_restricted_key",pattern:/rk_(?:live|test)_[a-zA-Z0-9]{10,}/},{name:"github_pat",pattern:/ghp_[A-Za-z0-9_]{36,}/},{name:"github_oauth",pattern:/gho_[A-Za-z0-9_]{36,}/},{name:"github_user_token",pattern:/ghu_[A-Za-z0-9_]{36,}/},{name:"github_server_token",pattern:/ghs_[A-Za-z0-9_]{36,}/},{name:"github_fine_grained",pattern:/github_pat_[A-Za-z0-9_]{22,}/},{name:"openai_api_key",pattern:/sk-[a-zA-Z0-9]{20,}(?![a-zA-Z0-9_])/},{name:"anthropic_api_key",pattern:/sk-ant-[a-zA-Z0-9\-_]{20,}/},{name:"private_key",pattern:/-----BEGIN (?:RSA |EC |DSA |OPENSSH |PGP )?PRIVATE KEY-----/},{name:"sendgrid_api_key",pattern:/SG\.[a-zA-Z0-9_-]{22,}\.[a-zA-Z0-9_-]{22,}/},{name:"twilio_auth_token",pattern:/TWILIO_AUTH_TOKEN["'=:\s]+[a-f0-9]{32}/},{name:"generic_secret_key",pattern:/[A-Z_]{2,}_SECRET_KEY["'=:\s]+[^\s"']{8,}/},{name:"generic_secret",pattern:/[A-Z_]{2,}_SECRET["'=:\s]+[^\s"']{8,}/},{name:"generic_password",pattern:/[A-Z_]{2,}_PASSWORD["'=:\s]+[^\s"']{6,}/},{name:"generic_private_key_var",pattern:/[A-Z_]{2,}_PRIVATE_KEY["'=:\s]+[^\s"']{8,}/}],U=[],_e=0,ke=false;function sn(e){let t=e.slice(0,80);return t.length<=6?"***":t.slice(0,6)+"***"}function an(e,t,n,o){if(U.some(s=>s.rule===e&&s.source===t))return;let i={rule:e,source:t,hint:sn(n),timestamp:Date.now()};o&&(i.location=o),U.push(i);}function J(e,t,n,o){for(let{name:r,pattern:i}of n){let s=i.exec(e);s&&an(r,t,s[0],o);}}function cn(e){try{let t=window;if(t.__NEXT_DATA__){let n=JSON.stringify(t.__NEXT_DATA__);J(n,"hydration",e,"__NEXT_DATA__");}if(t.__NUXT__){let n=JSON.stringify(t.__NUXT__);J(n,"hydration",e,"__NUXT__");}}catch{}}function ln(e){try{document.querySelectorAll("script:not([src])").forEach((n,o)=>{let r=n.textContent;r&&r.length>0&&J(r,"scripts",e,`inline-script[${o}]`);});}catch{}}function un(e){try{document.querySelectorAll("meta[content]").forEach(n=>{let o=n.getAttribute("content"),r=n.getAttribute("name")||n.getAttribute("property")||"";o&&o.length>10&&J(o,"meta",e,r?`meta[${r}]`:void 0);});}catch{}}function dn(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&&J(i.value,"dom",e,`${n.tagName.toLowerCase()}[${i.name}]`);}});}catch{}}function wo(e={}){if(ke||!E()||(ke=true,e.secretScan===false))return;let t=[...rn,...e.customPatterns??[]],n=e.scanTargets??["hydration","scripts","meta","dom"];setTimeout(()=>{_e=Date.now(),n.includes("hydration")&&cn(t),n.includes("scripts")&&ln(t),n.includes("meta")&&un(t),n.includes("dom")&&dn(t);let o=e.notify??"both";U.length>0&&(o==="console"||o==="both")&&console.warn(`[BlocFeed Security] Found ${U.length} potential secret(s) exposed in client code:`,U.map(r=>`${r.rule} (${r.source}${r.location?`: ${r.location}`:""})`));},100);}function bo(){return {findings:[...U],scannedAt:_e}}function yo(){U=[],_e=0,ke=false;}
|
|
2
|
-
exports.a=E;exports.b=ae;exports.c=Be;exports.d=Oe;exports.e=Ue;exports.f=he;exports.g=Ve;exports.h=_n;exports.i=Tn;exports.j=xt;exports.k=Pt;exports.l=Dt;exports.m=we;exports.n=Ut;exports.o=be;exports.p=$t;exports.q=qn;exports.r=tt;exports.s=ao;exports.t=uo;exports.u=fo;exports.v=mo;exports.w=po;exports.x=wo;exports.y=bo;exports.z=yo;
|