cdp-edge 2.5.9 → 2.6.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.
Files changed (41) hide show
  1. package/README.md +238 -202
  2. package/bin/cdp-edge.js +1 -0
  3. package/dist/commands/infra.js +1 -1
  4. package/dist/commands/server.js +38 -33
  5. package/dist/commands/setup.js +3 -0
  6. package/dist/commands/validate.js +251 -236
  7. package/dist/sdk/cdpTrack.js +6 -4
  8. package/dist/sdk/cdpTrack.min.js +4 -4
  9. package/dist/sdk/install-snippet.html +1 -1
  10. package/extracted-skill/tracking-events-generator/INTEGRACAO-COMPLETA.md +4 -4
  11. package/extracted-skill/tracking-events-generator/Premium-Tracking-Intelligence-Resumo.md +3 -3
  12. package/extracted-skill/tracking-events-generator/agents/master-orchestrator.md +72 -23
  13. package/extracted-skill/tracking-events-generator/integration-test.js +3 -3
  14. package/extracted-skill/tracking-events-generator/knowledge-base.md +12 -12
  15. package/extracted-skill/tracking-events-generator/models/checkout-proprio.md +1 -1
  16. package/extracted-skill/tracking-events-generator/models/multi-step-checkout.md +4 -4
  17. package/extracted-skill/tracking-events-generator/models/reddit/conversions-api-template.js +1 -1
  18. package/extracted-skill/tracking-events-generator/models/scenarios/behavior-engine.js +1 -1
  19. package/extracted-skill/tracking-events-generator/models/scenarios/sales-page-logic.md +1 -1
  20. package/extracted-skill/tracking-events-generator/models/trafego-direto.md +7 -7
  21. package/package.json +2 -2
  22. package/server-edge-tracker/index.ts +1267 -1204
  23. package/server-edge-tracker/modules/db.ts +2 -2
  24. package/server-edge-tracker/modules/dispatch/meta.ts +3 -0
  25. package/server-edge-tracker/modules/dispatch/tiktok.ts +1 -0
  26. package/server-edge-tracker/modules/dispatch/whatsapp.ts +5 -2
  27. package/server-edge-tracker/modules/utils.ts +1 -1
  28. package/server-edge-tracker/types.ts +3 -0
  29. package/server-edge-tracker/wrangler.toml +2 -0
  30. package/templates/checkout-proprio.md +1 -1
  31. package/templates/install/CLAUDE.md +1 -1
  32. package/templates/multi-step-checkout.md +4 -4
  33. package/templates/reddit/conversions-api-template.js +1 -1
  34. package/templates/scenarios/behavior-engine.js +1 -1
  35. package/templates/scenarios/sales-page-logic.md +1 -1
  36. package/templates/trafego-direto.md +7 -7
  37. package/templates/vsl-page.md +2 -2
  38. package/server-edge-tracker/.client.env +0 -5
  39. package/server-edge-tracker/dist-check/README.md +0 -1
  40. package/server-edge-tracker/dist-check/index.js +0 -5164
  41. package/server-edge-tracker/dist-check/index.js.map +0 -8
@@ -1,10 +1,10 @@
1
1
  /*!
2
- * CDP Edge SDK v2.5.1
2
+ * CDP Edge SDK v2.6.0
3
3
  * (c) 2026 CDP Edge — Quantum Tracking
4
- * Gerado em: 2026-04-15T01:32:42.616Z
4
+ * Gerado em: 2026-05-10T11:39:17.606Z
5
5
  * Endpoint padrão: /track (mesmo domínio — anti-adblock)
6
6
  */
7
- "use strict";var cdpTrack=(()=>{var V=Object.defineProperty;var ve=Object.getOwnPropertyDescriptor;var ye=Object.getOwnPropertyNames;var we=Object.prototype.hasOwnProperty;var Te=(t,e)=>()=>(t&&(e=t(t=0)),e);var q=(t,e)=>{for(var n in e)V(t,n,{get:e[n],enumerable:!0})},Se=(t,e,n,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of ye(e))!we.call(t,r)&&r!==n&&V(t,r,{get:()=>e[r],enumerable:!(o=ve(e,r))||o.enumerable});return t};var be=t=>Se(V({},"__esModule",{value:!0}),t);var re={};q(re,{default:()=>at});var oe,at,ie=Te(()=>{"use strict";oe={config:{rageClickThreshold:3,rageClickTime:700,idleThreshold:6e4,scoreThresholds:{engaged:40,highIntent:80}},state:{clickHistory:[],startTime:Date.now(),lastActivity:Date.now(),lastPulse:Date.now(),isIdle:!1,formStartTime:{},userScore:0,firedScoreEvents:new Set,abVariant:null},init(){this.setupRageClicks(),this.setupVisibility(),this.setupHeartbeat(),this.setupScroll(),this.setupVideoTracking(),this.setupFormAnalytics(),this.setupFormAbandonment(),this.setupCopyPaste(),this.setupExitIntent(),this.setupOutboundLinks(),this.setupErrorTracking(),this.setupIdleDetection(),this.setupScoring(),this.setupABTesting(),console.log("[CDP Edge] Enterprise Behavior Engine Initialized")},setupABTesting(){let t=o=>{let i=`; ${document.cookie}`.split(`; ${o}=`);if(i.length===2)return i.pop().split(";").shift()},e=new URLSearchParams(window.location.search);this.state.abVariant=e.get("cdp_variant")||t("cdp_ab_variant")||"original",console.log(`[CDP Edge] A/B Variant Detected: ${this.state.abVariant}`);let n=cdpTrack.track;cdpTrack.track=(o,r={})=>{let i={...r,ab_test_variant:this.state.abVariant,user_score:this.state.userScore};return n.apply(cdpTrack,[o,i])}},setupScoring(){console.log("[CDP Edge] Scoring Engine Online")},addScore(t,e){this.state.userScore=Math.min(100,Math.max(0,this.state.userScore+t)),console.log(`[CDP Edge] Score Update: +${t} (${e}) | Total: ${this.state.userScore}`),this.state.userScore>=this.config.scoreThresholds.highIntent&&!this.state.firedScoreEvents.has("highIntent")?(this.state.firedScoreEvents.add("highIntent"),cdpTrack.track("High_Intent_Lead",{score:this.state.userScore,meta_intensity:"high"})):this.state.userScore>=this.config.scoreThresholds.engaged&&!this.state.firedScoreEvents.has("engaged")&&(this.state.firedScoreEvents.add("engaged"),cdpTrack.track("Engaged_User",{score:this.state.userScore,meta_intensity:"medium"}))},setupRageClicks(){document.addEventListener("click",t=>{let e=Date.now();this.state.clickHistory.push(e),this.state.clickHistory=this.state.clickHistory.filter(n=>e-n<this.config.rageClickTime),this.state.clickHistory.length>=this.config.rageClickThreshold&&(cdpTrack.track("rage_click",{element_id:t.target.id||"",element_class:t.target.className||"",x:t.pageX,y:t.pageY,meta_intensity:"low"}),this.addScore(-10,"rage_click"),this.state.clickHistory=[])})},setupScroll(){let t=[25,50,75,90],e=new Set;window.addEventListener("scroll",()=>{let n=Math.round(window.scrollY/(document.documentElement.scrollHeight-window.innerHeight)*100);t.forEach(o=>{n>=o&&!e.has(o)&&(e.add(o),this.addScore(o===25||o===50?5:10,`scroll_${o}%`),cdpTrack.track("scroll_depth",{percent:o,meta_intensity:o>=50?"medium":"low"}))})},{passive:!0})},setupVisibility(){document.addEventListener("visibilitychange",()=>{let t=document.visibilityState;cdpTrack.track("tab_visibility_change",{status:t,time_since_start:Math.floor((Date.now()-this.state.startTime)/1e3),meta_intensity:t==="visible"?"high":"low"})})},setupHeatmap(){document.addEventListener("click",t=>{typeof cdpTrack.sendServerEvent=="function"&&cdpTrack.sendServerEvent("click_heatmap",null,{x:t.pageX,y:t.pageY,element:t.target.tagName.toLowerCase(),id:t.target.id||"",classes:t.target.className||""})})},setupHeartbeat(){setInterval(()=>{let t=Math.floor((Date.now()-this.state.startTime)/1e3);cdpTrack.track("pulse_heartbeat",{duration_seconds:t,is_visible:document.visibilityState==="visible"})},this.config.heartbeatInterval)},setupVideoTracking(){let t=document.querySelectorAll("iframe"),e=new Set;t.forEach(n=>{let o=n.src||"",r=o.includes("youtube.com/embed"),i=o.includes("vimeo.com/video");if((r||i)&&(window.addEventListener("message",s=>{try{let a=typeof s.data=="string"?JSON.parse(s.data):s.data;r&&a.event==="infoDelivery"&&a.info&&a.info.currentTime&&this.handleVideoProgress(n,a.info.currentTime,a.info.duration,e,"YouTube"),i&&a.event==="timeupdate"&&this.handleVideoProgress(n,a.data.seconds,a.data.duration,e,"Vimeo")}catch(a){}}),r&&!o.includes("enablejsapi=1"))){let s=new URL(o);s.searchParams.set("enablejsapi","1"),n.src=s.toString()}})},handleVideoProgress(t,e,n,o,r){if(!n)return;let i=Math.floor(e/n*100),s=[25,50,75,100],a=t.id||t.src.split("/").pop().split("?")[0];s.forEach(u=>{let m=`${a}_${u}`;i>=u&&!o.has(m)&&(o.add(m),this.addScore(u===25?10:u===50?15:25,`vsl_${u}%`),cdpTrack.track("video_milestone",{video_id:a,platform:r,percent:u,meta_intensity:u>=50?"high":"medium"}))})},setupFormAnalytics(){document.querySelectorAll("input, select, textarea").forEach(e=>{e.addEventListener("focus",()=>{let n=e.name||e.id;this.state.formStartTime[n]||(this.state.formStartTime[n]=Date.now(),this.addScore(10,`form_interaction_${n}`),cdpTrack.track("form_field_focus",{field:n}))}),e.addEventListener("blur",()=>{let n=e.name||e.id,o=Math.round((Date.now()-this.state.formStartTime[n])/1e3);o>0&&cdpTrack.track("form_field_blur",{field:n,duration_sec:o})})})},setupFormAbandonment(){let t=new Set,e=!1;document.addEventListener("focusin",n=>{let o=n.target;if(o.tagName==="INPUT"||o.tagName==="TEXTAREA"||o.tagName==="SELECT"){let r=o.name||o.id||o.type;r&&t.add(r)}},!0),document.addEventListener("submit",()=>{e=!0},!0),document.addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&t.size>0&&!e&&(this.addScore(-5,"form_abandonment"),cdpTrack.track("form_abandonment",{fields_interacted:Array.from(t),fields_count:t.size,meta_intensity:"medium",time_on_page:Math.floor((Date.now()-this.state.startTime)/1e3)}))}),window.addEventListener("beforeunload",()=>{if(t.size>0&&!e&&navigator.sendBeacon&&typeof cdpTrack!="undefined"){let n=JSON.stringify({eventName:"form_abandonment",behavioral_data:{user_score:this.state.userScore},fields_interacted:Array.from(t),fields_count:t.size,meta_intensity:"medium"});navigator.sendBeacon("/api/tracking",new Blob([n],{type:"application/json"}))}})},setupExitIntent(){let t=!1;document.addEventListener("mousemove",n=>{n.clientY<20&&!t&&(t=!0,this.addScore(15,"exit_intent"),cdpTrack.track("exit_intent",{mouse_y:n.clientY,time_on_page:Math.floor((Date.now()-this.state.startTime)/1e3),user_score:this.state.userScore,meta_intensity:"high"}),setTimeout(()=>{t=!1},3e4))},{passive:!0});let e=!1;document.addEventListener("visibilitychange",()=>{if(document.visibilityState==="hidden"&&!e){let n=Math.floor((Date.now()-this.state.startTime)/1e3);n>5&&(e=!0,cdpTrack.track("exit_intent_mobile",{time_on_page:n,user_score:this.state.userScore,meta_intensity:"medium"}))}})},setupCopyPaste(){document.addEventListener("copy",()=>{let t=window.getSelection().toString();t.length>0&&(this.addScore(20,"text_copy"),cdpTrack.track("content_copy",{text_length:t.length,meta_intensity:"medium"}))})},setupOutboundLinks(){document.addEventListener("click",t=>{let e=t.target.closest("a");if(e&&e.href){let n=e.href,o=!n.includes(window.location.hostname),r=n.includes("wa.me")||n.includes("hotmart.com")||n.includes("kiwify.com")||n.includes("checkout");o&&r&&(this.addScore(100,"outbound_conversion_intent"),cdpTrack.track("outbound_click",{destination:n,meta_intensity:"high"}))}})},setupErrorTracking(){window.addEventListener("error",t=>{typeof cdpTrack.sendServerEvent=="function"&&cdpTrack.sendServerEvent("js_error",null,{message:t.message,source:t.filename,lineno:t.lineno,colno:t.colno})})},setupIdleDetection(){["mousedown","mousemove","keydown","scroll","touchstart"].forEach(e=>{document.addEventListener(e,()=>{this.state.lastActivity=Date.now(),this.state.isIdle&&(this.state.isIdle=!1,cdpTrack.track("user_active",{status:"back_online"}))},{passive:!0})}),setInterval(()=>{Date.now()-this.state.lastActivity>this.config.idleThreshold&&!this.state.isIdle&&(this.state.isIdle=!0,cdpTrack.track("user_idle",{idle_duration:this.config.idleThreshold/1e3}))},1e4)}};typeof cdpTrack!="undefined"&&oe.init();at=oe});var yt={};q(yt,{generateId:()=>ce,getSessionId:()=>U,getUTMs:()=>A,getUTMsWithFallback:()=>de,getUserId:()=>B,getUserIdWithFallback:()=>ue,init:()=>he,passCheckoutParams:()=>le,setupAutoFormCapture:()=>ge,track:()=>D,trackAddToCart:()=>fe,trackLead:()=>G,trackPurchase:()=>me,trackViewContent:()=>pe,updateConsent:()=>se});var Ee={endpoint:"/track",platforms:["hotmart","kiwify","eduzz","monetizze","cartpanda","ticto"],siteDomain:"",debug:!1,consent:{defaultDenied:!0,urlPassthrough:!0,waitForUpdate:500},autoCaptureForms:!0,passCheckoutParams:!0,initBehaviorEngine:!0},h=Ee;var P=typeof window!="undefined";var H={thresholds:[25,50,75,100],signalStrength:{"25%":1.5,"50%":2,"75%":3,"100%":4}},L={thresholds:{curioso:1e4,interessado:6e4,comprador:18e4,profundao:60},signalStrength:{curioso:1,interessado:2.5,comprador:4,profundao:3.5},intentionLevels:{curioso:"curioso",interessado:"interessado",comprador:"comprador",profundao:"profundo"}},f={progressThresholds:[25,50,75,100],dropoutEnabled:!0,signalStrength:{play:2,progress25:3,progress50:4,progress75:5,complete:5,pause:1,resume:1.5,seek:.5,dropout:2.5}},x={maxRapidClicks:3,rapidClickWindow:1e3,clickCategories:["button","link","input","cta","price","generic"],signalStrength:{button:2,link:1.5,cta:2.5,input:1,price:2,generic:.5}},J={minHoverTimeForSignal:3e3,maxHoverTime:3e4,signalStrength:3},c={pageLoadTime:Date.now(),scrollTracking:{lastScrollPercent:0,trackedThresholds:new Set},timeTracking:{lastCheckTime:Date.now(),currentLevel:"curioso",timeOnPage:0},videoTracking:{},videoSummary:{totalVideos:0,startedCount:0,completedCount:0,maxProgress:0},clickTracking:{clicks:[],lastClickTime:0,rapidClickDetected:!1},ctaHoverTracking:{hoverStartTime:null,hoveredElement:null}};function Ce(){if(!P)return;new IntersectionObserver(e=>{e.forEach(n=>{if(!n.isIntersecting)return;let o=Math.round((window.scrollY+window.innerHeight)/document.body.scrollHeight*100);H.thresholds.forEach(r=>{let i=`scroll_${r}`;if(o>=r&&!c.scrollTracking.trackedThresholds.has(i)){let s=H.signalStrength[`${r}%`]||0;p("Scroll",{scroll_depth:r,scroll_percent:o,signal_strength:s,engagement_type:"scroll",time_on_page:Math.round((Date.now()-c.pageLoadTime)/1e3)}),c.scrollTracking.trackedThresholds.add(i)}})})},{threshold:H.thresholds.map(e=>e/100)}).observe(document.body)}function xe(){P&&setInterval(()=>{let t=Date.now()-c.pageLoadTime,e=Math.round(t/1e3),n=c.timeTracking.currentLevel,o=c.timeTracking.currentLevel;e>=L.thresholds.comprador?(n="comprador",o=L.signalStrength.comprador):e>=L.thresholds.interessado?(n="interessado",o=L.signalStrength.interessado):e>=L.thresholds.curioso&&(n="curioso",o=L.signalStrength.curioso),n!==c.timeTracking.currentLevel&&(c.timeTracking.currentLevel=n,p("TimeOnPage",{time_on_page:e,intention_level:n,signal_strength:o,engagement_type:"time",previous_level:c.timeTracking.previousLevel}),c.timeTracking.previousLevel=n)},5e3)}function Le(){return{playTime:0,totalWatchTime:0,lastProgress:-1,lastSecond:0,started:!1,paused:!1,completed:!1,dropoutPercent:null,dropoutSecond:null}}function E(t){let e=c.videoTracking[t],n=c.videoSummary;n.totalVideos=Object.keys(c.videoTracking).length,n.startedCount=Object.values(c.videoTracking).filter(o=>o.started).length,n.completedCount=Object.values(c.videoTracking).filter(o=>o.completed).length,n.maxProgress=Math.max(...Object.values(c.videoTracking).map(o=>o.lastProgress<0?0:o.lastProgress))}function z(t,e,n){let o=c.videoTracking[t];!o||o.completed||(o.dropoutPercent=e,o.dropoutSecond=n,f.dropoutEnabled&&p("VideoDropout",{video_id:t,dropout_percent:e,dropout_second:n,engagement_score:f.signalStrength.dropout,engagement_type:"video",video_summary:{...c.videoSummary}}))}function Pe(){if(!P)return;document.querySelectorAll('video, iframe[src*="youtube"], iframe[src*="vimeo"]').forEach((e,n)=>{let o=e.id||e.getAttribute("data-video-id")||`video_${n}`;if(c.videoTracking[o]=Le(),E(o),e.tagName==="IFRAME"&&e.src.includes("youtube")){De(e,o);return}if(e.tagName==="IFRAME"&&e.src.includes("vimeo")){Ae(e,o);return}Ie(e,o)}),window.addEventListener("beforeunload",()=>{Object.entries(c.videoTracking).forEach(([e,n])=>{n.started&&!n.completed&&z(e,n.lastProgress<0?0:n.lastProgress,n.lastSecond)})})}function Ie(t,e){let n=()=>c.videoTracking[e];t.addEventListener("play",()=>{n().started=!0,n().paused=!1,n().playTime||(n().playTime=Date.now()),E(e),p("VideoPlay",{video_id:e,video_platform:"html5",progress_percent:M(t),engagement_score:f.signalStrength.play,engagement_type:"video"})}),t.addEventListener("pause",()=>{n().paused=!0;let o=M(t),r=Math.round(t.currentTime);p("VideoPause",{video_id:e,video_platform:"html5",progress_percent:o,pause_second:r,engagement_score:f.signalStrength.pause,engagement_type:"video"}),z(e,o,r)}),t.addEventListener("play",()=>{n().dropoutPercent=null,n().dropoutSecond=null}),t.addEventListener("seeked",()=>{p("VideoSeek",{video_id:e,video_platform:"html5",progress_percent:M(t),seek_to_second:Math.round(t.currentTime),engagement_score:f.signalStrength.seek,engagement_type:"video"})}),t.addEventListener("timeupdate",()=>{if(t.paused||t.ended)return;let o=M(t),r=Math.round(t.currentTime);n().lastSecond=r,f.progressThresholds.forEach(i=>{o>=i&&n().lastProgress<i&&(n().lastProgress=i,p("VideoProgress",{video_id:e,video_platform:"html5",progress_percent:i,progress_second:r,engagement_score:f.signalStrength[`progress${i}`]||0,engagement_type:"video",video_summary:{...c.videoSummary}}),E(e))})}),t.addEventListener("ended",()=>{n().paused=!1,n().completed=!0,n().dropoutPercent=null,n().dropoutSecond=null;let o=n().playTime?Math.round((Date.now()-n().playTime)/1e3):0;E(e),p("VideoComplete",{video_id:e,video_platform:"html5",progress_percent:100,total_watch_time:o,engagement_score:f.signalStrength.complete,engagement_type:"video",video_summary:{...c.videoSummary}})})}function M(t){return!t.duration||t.duration===0?0:Math.round(t.currentTime/t.duration*100)}function De(t,e){try{let o=new URL(t.src);o.searchParams.get("enablejsapi")||(o.searchParams.set("enablejsapi","1"),t.src=o.toString())}catch(o){}if(!window._ytApiLoading){window._ytApiLoading=!0;let o=document.createElement("script");o.src="https://www.youtube.com/iframe_api",document.head.appendChild(o)}let n=()=>{if(typeof YT=="undefined"||!YT.Player){setTimeout(n,300);return}let o=()=>c.videoTracking[e],r=null;new YT.Player(t,{events:{onStateChange:i=>{let s=YT.PlayerState,a=i.target,u=a.getDuration()||0,m=a.getCurrentTime()||0,l=u>0?Math.round(m/u*100):0,g=Math.round(m);if(i.data===s.PLAYING)o().started=!0,o().paused=!1,o().playTime||(o().playTime=Date.now()),o().dropoutPercent=null,o().dropoutSecond=null,E(e),p("VideoPlay",{video_id:e,video_platform:"youtube",progress_percent:l,engagement_score:f.signalStrength.play,engagement_type:"video"}),clearInterval(r),r=setInterval(()=>{if(!a||typeof a.getPlayerState!="function"||a.getPlayerState()!==s.PLAYING)return;let d=a.getCurrentTime()||0,k=a.getDuration()||0,y=k>0?Math.round(d/k*100):0;o().lastSecond=Math.round(d),f.progressThresholds.forEach(b=>{y>=b&&o().lastProgress<b&&(o().lastProgress=b,p("VideoProgress",{video_id:e,video_platform:"youtube",progress_percent:b,progress_second:Math.round(d),engagement_score:f.signalStrength[`progress${b}`]||0,engagement_type:"video",video_summary:{...c.videoSummary}}),E(e))})},2e3);else if(i.data===s.PAUSED)clearInterval(r),o().paused=!0,p("VideoPause",{video_id:e,video_platform:"youtube",progress_percent:l,pause_second:g,engagement_score:f.signalStrength.pause,engagement_type:"video"}),z(e,l,g);else if(i.data===s.ENDED){clearInterval(r),o().completed=!0,o().dropoutPercent=null,o().dropoutSecond=null;let d=o().playTime?Math.round((Date.now()-o().playTime)/1e3):0;E(e),p("VideoComplete",{video_id:e,video_platform:"youtube",progress_percent:100,total_watch_time:d,engagement_score:f.signalStrength.complete,engagement_type:"video",video_summary:{...c.videoSummary}})}}}})};if(typeof YT!="undefined"&&YT.Player)n();else{let o=window.onYouTubeIframeAPIReady;window.onYouTubeIframeAPIReady=()=>{o&&o(),n()}}}function Ae(t,e){let n=()=>c.videoTracking[e],o=0,r=(s,a)=>{t.contentWindow.postMessage(JSON.stringify({method:s,value:a}),"https://player.vimeo.com")},i=()=>{["play","pause","ended","timeupdate","seeked"].forEach(s=>{r("addEventListener",s)}),r("getDuration")};window.addEventListener("message",s=>{var g;if(!s.origin.includes("vimeo.com"))return;let a;try{a=JSON.parse(s.data)}catch(d){return}if(!a||a.player_id!==t.id)return;if(a.event==="ready"){i();return}if(a.method==="getDuration"){o=a.value||0;return}let u=((g=a.data)==null?void 0:g.seconds)||0,m=o>0?Math.round(u/o*100):0,l=Math.round(u);if(a.event==="play")n().started=!0,n().paused=!1,n().playTime||(n().playTime=Date.now()),n().dropoutPercent=null,n().dropoutSecond=null,E(e),p("VideoPlay",{video_id:e,video_platform:"vimeo",progress_percent:m,engagement_score:f.signalStrength.play,engagement_type:"video"});else if(a.event==="pause")n().paused=!0,n().lastSecond=l,p("VideoPause",{video_id:e,video_platform:"vimeo",progress_percent:m,pause_second:l,engagement_score:f.signalStrength.pause,engagement_type:"video"}),z(e,m,l);else if(a.event==="timeupdate")n().lastSecond=l,f.progressThresholds.forEach(d=>{m>=d&&n().lastProgress<d&&(n().lastProgress=d,p("VideoProgress",{video_id:e,video_platform:"vimeo",progress_percent:d,progress_second:l,engagement_score:f.signalStrength[`progress${d}`]||0,engagement_type:"video",video_summary:{...c.videoSummary}}),E(e))});else if(a.event==="ended"){n().completed=!0,n().dropoutPercent=null,n().dropoutSecond=null;let d=n().playTime?Math.round((Date.now()-n().playTime)/1e3):0;E(e),p("VideoComplete",{video_id:e,video_platform:"vimeo",progress_percent:100,total_watch_time:d,engagement_score:f.signalStrength.complete,engagement_type:"video",video_summary:{...c.videoSummary}})}else a.event==="seeked"&&p("VideoSeek",{video_id:e,video_platform:"vimeo",progress_percent:m,seek_to_second:l,engagement_score:f.signalStrength.seek,engagement_type:"video"})}),t.contentDocument?i():t.addEventListener("load",i)}function Me(){P&&document.addEventListener("click",t=>{let e=t.target,n=ze(e),o=Ne(t),r=Math.round((Date.now()-c.pageLoadTime)/1e3),i=Date.now();i-c.clickTracking.lastClickTime<x.rapidClickWindow&&c.clickTracking.clicks.push({time:i,target:e}),setTimeout(()=>{let a=c.clickTracking.clicks.filter(u=>i-u.time<x.rapidClickWindow);a.length>=x.maxRapidClicks?(c.clickTracking.rapidClickDetected=!0,p("RapidClicks",{click_count:a.length,time_window:x.rapidClickWindow,behavior:"nervous",engagement_score:3,engagement_type:"clicks",time_on_page:r,description:`Usu\xE1rio clicou ${a.length} vezes em ${x.rapidClickWindow/1e3} segundos`})):(c.clickTracking.rapidClickDetected=!1,c.clickTracking.clicks=[])},x.rapidClickWindow),c.clickTracking.lastClickTime=i,p("Click",{click_category:n,target_info:Oe(e),position:o,time_on_page:r,click_heatmap:!0,engagement_score:$e(n,o),engagement_type:"clicks"})},!0)}function ze(t){let e=o=>t.closest(o),n=t.className||"";return e("button")||n.includes("btn")?"button":e("a")?"link":e("input")?"input":e(".cta")||n.includes("cta")?"cta":e(".price")||n.includes("price")?"price":e(".whatsapp")||n.includes("whatsapp")?"whatsapp":e(".email")||n.includes("email")?"email":e(".phone")||n.includes("phone")?"phone":"generic"}function Ne(t){return{x:Math.round(t.clientX),y:Math.round(t.clientY),relativeX:Math.round(t.clientX/window.innerWidth*100),relativeY:Math.round(t.clientY/window.innerHeight*100),viewportWidth:window.innerWidth,viewportHeight:window.innerHeight}}function Oe(t){var e;return{tag:t.tagName,class:t.className,id:t.id,text:((e=t.textContent)==null?void 0:e.substring(0,30))||"",attributes:Array.from(t.attributes).map(n=>`${n.name}="${n.value}"`).join(" ")}}function $e(t,e){let n=x.signalStrength[t]||.5,o=Math.min(e.timeOnPage/60,2),r=Math.min(e.scrollDepth/100,.5);return n+o+r}function Be(){if(!P)return;['a[href*="checkout"]','a[href*="comprar"]',"button.cta",".btn-comprar",".btn-checkout",".cta-button",'[data-cta="true"]','button[type="submit"]'].forEach(e=>{document.querySelectorAll(e).forEach(n=>{n.addEventListener("mouseenter",o=>{o.target.closest(e)&&(c.ctaHoverTracking.hoverStartTime=Date.now(),c.ctaHoverTracking.hoveredElement=e)}),n.addEventListener("mouseleave",()=>{if(c.ctaHoverTracking.hoverStartTime){let o=Date.now()-c.ctaHoverTracking.hoverStartTime;o>=J.minHoverTimeForSignal&&p("CTAHover",{cta_selector:e,hover_time_seconds:Math.round(o/1e3),engagement_score:J.signalStrength,engagement_type:"hover",time_on_page:Math.round((Date.now()-c.pageLoadTime)/1e3)})}c.ctaHoverTracking.hoverStartTime=null,c.ctaHoverTracking.hoveredElement=null})})})}function p(t,e={}){typeof cdpTrack!="undefined"&&cdpTrack.track?cdpTrack.track(t,e):console.warn("cdpTrack n\xE3o dispon\xEDvel - evento n\xE3o enviado:",t,e)}function K(){P&&(c.pageLoadTime=Date.now(),Ce(),xe(),Pe(),Me(),Be(),console.log("\u2705 Micro-Events inicializados"))}var T={timeWeights:{curioso:1,interessado:2.5,comprador:4},scrollWeights:{baixo:1,medio:2,alto:3},clickWeights:{generico:1,cta:2.5,button:2,link:1.5,input:.5},videoWeights:{play:1.5,progress25:2,progress50:3,progress75:4,complete:5},hoverWeights:{curto:1,medio:2,longo:3}},v={timeOnPage:0,scrollDepth:0,clicksCount:0,videoEngagement:0,ctaHoverTime:0,lastActivityTime:Date.now()};function Ve(t){let e="curioso",n=T.timeWeights.curioso;return t>=10&&t<60?(e="interessado",n=T.timeWeights.interessado):t>=60&&(e="comprador",n=T.timeWeights.comprador),{score:n,level:e}}function He(t){let e="baixo",n=T.scrollWeights.baixo;return t>=25&&t<75?(e="medio",n=T.scrollWeights.medio):t>=75&&(e="alto",n=T.scrollWeights.alto),{score:n,level:e}}function Fe(t,e){let n=T.clickWeights.generico,o=T.clickWeights[e]||1,r=Math.max(0,1-t/50);return n+o}function je(t){let e="curto",n=T.hoverWeights.curto;return t>=3&&t<10?(e="medio",n=T.hoverWeights.medio):t>=10&&(e="longo",n=T.hoverWeights.longo),{score:n,level:e}}function X(){let{score:t,level:e}=Ve(v.timeOnPage),{score:n}=He(v.scrollDepth),o=v.clicksCount>0?Fe(v.clicksCount,"generico"):0,r=v.videoEngagement,i=v.ctaHoverTime>0?je(v.ctaHoverTime/1e3):0,s=t*.3+n*.2+o*.15+r*.25+i*.1,a=e;return s<1.5?a="curioso":s<2.5?a="interessado":a="comprador",{totalScore:Math.min(s,5),timeScore:t,scrollScore:n,clickScore:o,videoScore:r,hoverScore:i,intentionLevel:a,components:{timeOnPage:v.timeOnPage,scrollDepth:v.scrollDepth,clicksCount:v.clicksCount,videoEngagement:v.videoEngagement,ctaHoverTime:v.ctaHoverTime}}}function F(t,e){v[t]=e,v.lastActivityTime=Date.now()}var O={email:{trim:!0,lowercase:!0,removeDots:!1,removePlus:!0},phone:{keepOnlyDigits:!0,addCountryCode:!0,defaultCountryCode:"55"},name:{trim:!0,lowercase:!0,removeAccents:!0,removeExtraSpaces:!0,maxLength:100},city:{trim:!0,lowercase:!0,removeAccents:!0,maxLength:50},state:{trim:!0,lowercase:!0,removeAccents:!0,maxLength:50},zip:{trim:!0,keepOnlyDigits:!0,maxLength:10}};function We(t){if(!t||typeof t!="string")return"";let e=t.trim();return e.includes("@gmail.com")&&(e=e.split("+")[0]+"@gmail.com"),e.includes("@googlemail.com")&&(e=e.split("+")[0]+"@googlemail.com"),e.toLowerCase()}function Re(t){if(!t||typeof t!="string")return"";let e=t.replace(/\D/g,"");return(e.length===11||e.length===10)&&(e="55"+e),e.substring(0,15)}function N(t){if(!t||typeof t!="string")return"";let e=t.trim();return e=e.normalize("NFD").replace(/[\u0300-\u036f]/g,""),e=e.toLowerCase(),e=e.replace(/\s+/g," "),e.substring(0,O.name.maxLength)}function Ue(t){if(!t||typeof t!="string")return"";let e=t.trim();return e=e.normalize("NFD").replace(/[\u0300-\u036f]/g,""),e=e.toLowerCase(),e=e.replace(/\s+/g," "),e.substring(0,O.city.maxLength)}function Ye(t){if(!t||typeof t!="string")return"";let e=t.trim();return e=e.normalize("NFD").replace(/[\u0300-\u036f]/g,""),e=e.toLowerCase(),e.substring(0,O.state.maxLength)}function Ge(t){return!t||typeof t!="string"?"":t.replace(/\D/g,"").substring(0,O.zip.maxLength)}function qe(t){if(!t||typeof t!="string")return"";let e=[/(\d{4})-(\d{2})-(\d{2})/,/(\d{2})\/(\d{2})\/(\d{4})/,/(\d{2})-(\d{2})-(\d{4})/];for(let n of e){let o=t.match(n);if(o){let r,i,s;return o[1].length===4?[r,i,s]=[o[1],o[2],o[3]]:[s,i,r]=[o[1],o[2],o[3]],`${r}${i}${s}`}}return""}function $(t){if(!t||typeof t.elements!="object")return{};let e=new FormData(t),n={},o=e.get("email")||e.get("user_email")||e.get("useremail");o&&(n.email=We(o));let r=e.get("phone")||e.get("telephone")||e.get("telefone")||e.get("celular");r&&(n.phone=Re(r));let i=e.get("first_name")||e.get("nome")||e.get("firstname"),s=e.get("last_name")||e.get("sobrenome")||e.get("lastname"),a=e.get("name")||e.get("fullname")||e.get("nome_completo");if(a){let d=a.split(" ");n.first_name=N(d[0]),n.last_name=N(d.slice(1).join(" "))}else i&&(n.first_name=N(i)),s&&(n.last_name=N(s));let u=e.get("city")||e.get("cidade");u&&(n.city=Ue(u));let m=e.get("state")||e.get("estado")||e.get("uf");m&&(n.state=Ye(m));let l=e.get("zip")||e.get("cep")||e.get("postalcode");l&&(n.zip=Ge(l));let g=e.get("dob")||e.get("date_of_birth")||e.get("nascimento");return g&&(n.dob=qe(g)),n}function Z(t){if(!t||typeof t!="object")return!1;let e=t.email&&t.email.includes("@"),n=t.phone&&t.phone.length>=10;return e||n}var I=typeof window!="undefined",w={endpoint:"/track",maxRetries:3,retryDelays:[1e3,3e3,6e3],useBeaconFallback:!0,cookieDuration:3600*24*365,cookieDomain:"",detectAdBlocker:!0,adBlockerBaitClass:"adsbox adbanner pub_300x250",minify:!1,noConsoleLogs:!1};function Je(){if(!I||!w.detectAdBlocker)return!1;let t=document.createElement("div");t.innerHTML="&nbsp;",t.className=w.adBlockerBaitClass,t.style.cssText="position: absolute; top: -1000px; left: -1000px;",document.body.appendChild(t);let e=getComputedStyle(t).display==="none";document.body.removeChild(t);try{let n=new Image;n.src="/pixel-test.png?t="+Date.now(),n.onload=()=>console.log("\u2705 Pixel n\xE3o bloqueado"),n.onerror=()=>console.warn("\u26A0\uFE0F Pixel pode estar bloqueado")}catch(n){console.warn("\u26A0\uFE0F Erro ao testar pixel:",n)}return e}async function Q(t,e=w.endpoint){if(!I)return{success:!1,error:"Not in browser"};let n=null;for(let o=0;o<w.maxRetries;o++)try{let r=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t),keepalive:!0,credentials:"same-origin",cache:"no-cache"});if(r.ok)return console.log(`\u2705 Envio bem-sucedido (tentativa ${o+1})`),await r.json();{let i=await r.text();throw new Error(`HTTP ${r.status}: ${i}`)}}catch(r){if(n=r,console.warn(`\u26A0\uFE0F Tentativa ${o+1} falhou:`,r.message),o<w.maxRetries-1){let i=w.retryDelays[o];console.log(`\u23F3 Aguardando ${i}ms antes de retry...`),await Ke(i)}}if(console.error("\u274C Todas as tentativas de envio falharam:",n),w.useBeaconFallback&&navigator.sendBeacon){if(console.log("\u{1F504} Tentando Beacon API como fallback..."),navigator.sendBeacon(e,JSON.stringify(t)))return console.log("\u2705 Beacon API bem-sucedido"),{success:!0,method:"beacon"};console.error("\u274C Beacon API tamb\xE9m falhou")}return{success:!1,error:n==null?void 0:n.message,attempts:w.maxRetries}}function Ke(t){return new Promise(e=>setTimeout(e,t))}function Xe(t,e,n=w.cookieDuration){if(!I)return;let r=window.location.hostname.split(".").slice(-2).join("."),i=[`${t}=${e}`,`max-age=${n}`,"path=/",`domain=.${r}`,"SameSite=Lax","Secure"].join("; ");document.cookie=i}function Ze(t){if(!I)return null;let n=`; ${document.cookie}`.split(`; ${t}=`);return n.length===2?n.pop().split(";").shift():null}function Qe(t=w.noConsoleLogs){if(!I||!t)return;let e=()=>{};console.log=e,console.warn=e,console.error=e}function ee(){if(!I)return;if(console.log("\u{1F6E1}\uFE0F Inicializando Anti-Blocking System..."),Je()&&(console.warn("\u26A0\uFE0F Ad-Blocker detectado - usando estrat\xE9gias de resili\xEAncia"),typeof cdpTrack!="undefined"&&cdpTrack.track&&cdpTrack.track("adblocker_detected",{user_agent:navigator.userAgent,timestamp:Date.now()})),!Ze("_cdp_uid")){let n=`${Date.now()}_${Math.random().toString(36).slice(2,11)}`;Xe("_cdp_uid",n)}w.noConsoleLogs&&Qe(!0),console.log("\u2705 Anti-Blocking System inicializado")}var et=typeof window!="undefined";function te(t={}){if(!et)return;let{whatsappNumber:e,propertyName:n="o im\xF3vel",propertyId:o=null,propertyLat:r=null,propertyLng:i=null,routeSelector:s='[data-route-intent], a[href*="maps/dir"], a[href*="maps?q="]',distanceBucket:a=null,distanceKm:u=null,metaSignalBucket:m=null,brokerName:l=null}=t;if(!e){console.warn("[RouteIntent] whatsappNumber \xE9 obrigat\xF3rio.");return}it(),document.addEventListener("click",g=>{let d=g.target.closest(s);d&&tt(d,{whatsappNumber:e,propertyName:n,propertyId:o,propertyLat:r,propertyLng:i,distanceBucket:a,distanceKm:u,metaSignalBucket:m,brokerName:l})},!0)}function tt(t,e){var s;(s=document.getElementById("cdp-ri-widget"))==null||s.remove();let n=ne(e.distanceKm),o=n?`<p class="cdp-ri-travel">\u{1F4CD} Voc\xEA est\xE1 a cerca de <strong>${n} min</strong> daqui</p>`:"",r=e.brokerName?`<p class="cdp-ri-broker">Ao chegar, pergunte pelo <strong>${e.brokerName}</strong> \u2014 ele vai estar te aguardando com tudo pronto \u{1F91D}</p>`:"",i=document.createElement("div");i.id="cdp-ri-widget",i.innerHTML=`
7
+ "use strict";var cdpTrack=(()=>{var V=Object.defineProperty;var ve=Object.getOwnPropertyDescriptor;var ye=Object.getOwnPropertyNames;var we=Object.prototype.hasOwnProperty;var Te=(t,e)=>()=>(t&&(e=t(t=0)),e);var q=(t,e)=>{for(var n in e)V(t,n,{get:e[n],enumerable:!0})},Se=(t,e,n,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of ye(e))!we.call(t,r)&&r!==n&&V(t,r,{get:()=>e[r],enumerable:!(o=ve(e,r))||o.enumerable});return t};var be=t=>Se(V({},"__esModule",{value:!0}),t);var re={};q(re,{default:()=>at});var oe,at,ie=Te(()=>{"use strict";oe={config:{rageClickThreshold:3,rageClickTime:700,idleThreshold:6e4,scoreThresholds:{engaged:40,highIntent:80}},state:{clickHistory:[],startTime:Date.now(),lastActivity:Date.now(),lastPulse:Date.now(),isIdle:!1,formStartTime:{},userScore:0,firedScoreEvents:new Set,abVariant:null},init(){this.setupRageClicks(),this.setupVisibility(),this.setupHeartbeat(),this.setupScroll(),this.setupVideoTracking(),this.setupFormAnalytics(),this.setupFormAbandonment(),this.setupCopyPaste(),this.setupExitIntent(),this.setupOutboundLinks(),this.setupErrorTracking(),this.setupIdleDetection(),this.setupScoring(),this.setupABTesting(),console.log("[CDP Edge] Enterprise Behavior Engine Initialized")},setupABTesting(){let t=o=>{let i=`; ${document.cookie}`.split(`; ${o}=`);if(i.length===2)return i.pop().split(";").shift()},e=new URLSearchParams(window.location.search);this.state.abVariant=e.get("cdp_variant")||t("cdp_ab_variant")||"original",console.log(`[CDP Edge] A/B Variant Detected: ${this.state.abVariant}`);let n=cdpTrack.track;cdpTrack.track=(o,r={})=>{let i={...r,ab_test_variant:this.state.abVariant,user_score:this.state.userScore};return n.apply(cdpTrack,[o,i])}},setupScoring(){console.log("[CDP Edge] Scoring Engine Online")},addScore(t,e){this.state.userScore=Math.min(100,Math.max(0,this.state.userScore+t)),console.log(`[CDP Edge] Score Update: +${t} (${e}) | Total: ${this.state.userScore}`),this.state.userScore>=this.config.scoreThresholds.highIntent&&!this.state.firedScoreEvents.has("highIntent")?(this.state.firedScoreEvents.add("highIntent"),cdpTrack.track("High_Intent_Lead",{score:this.state.userScore,meta_intensity:"high"})):this.state.userScore>=this.config.scoreThresholds.engaged&&!this.state.firedScoreEvents.has("engaged")&&(this.state.firedScoreEvents.add("engaged"),cdpTrack.track("Engaged_User",{score:this.state.userScore,meta_intensity:"medium"}))},setupRageClicks(){document.addEventListener("click",t=>{let e=Date.now();this.state.clickHistory.push(e),this.state.clickHistory=this.state.clickHistory.filter(n=>e-n<this.config.rageClickTime),this.state.clickHistory.length>=this.config.rageClickThreshold&&(cdpTrack.track("rage_click",{element_id:t.target.id||"",element_class:t.target.className||"",x:t.pageX,y:t.pageY,meta_intensity:"low"}),this.addScore(-10,"rage_click"),this.state.clickHistory=[])})},setupScroll(){let t=[25,50,75,90],e=new Set;window.addEventListener("scroll",()=>{let n=Math.round(window.scrollY/(document.documentElement.scrollHeight-window.innerHeight)*100);t.forEach(o=>{n>=o&&!e.has(o)&&(e.add(o),this.addScore(o===25||o===50?5:10,`scroll_${o}%`),cdpTrack.track("scroll_depth",{percent:o,meta_intensity:o>=50?"medium":"low"}))})},{passive:!0})},setupVisibility(){document.addEventListener("visibilitychange",()=>{let t=document.visibilityState;cdpTrack.track("tab_visibility_change",{status:t,time_since_start:Math.floor((Date.now()-this.state.startTime)/1e3),meta_intensity:t==="visible"?"high":"low"})})},setupHeatmap(){document.addEventListener("click",t=>{typeof cdpTrack.sendServerEvent=="function"&&cdpTrack.sendServerEvent("click_heatmap",null,{x:t.pageX,y:t.pageY,element:t.target.tagName.toLowerCase(),id:t.target.id||"",classes:t.target.className||""})})},setupHeartbeat(){setInterval(()=>{let t=Math.floor((Date.now()-this.state.startTime)/1e3);cdpTrack.track("pulse_heartbeat",{duration_seconds:t,is_visible:document.visibilityState==="visible"})},this.config.heartbeatInterval)},setupVideoTracking(){let t=document.querySelectorAll("iframe"),e=new Set;t.forEach(n=>{let o=n.src||"",r=o.includes("youtube.com/embed"),i=o.includes("vimeo.com/video");if((r||i)&&(window.addEventListener("message",s=>{try{let a=typeof s.data=="string"?JSON.parse(s.data):s.data;r&&a.event==="infoDelivery"&&a.info&&a.info.currentTime&&this.handleVideoProgress(n,a.info.currentTime,a.info.duration,e,"YouTube"),i&&a.event==="timeupdate"&&this.handleVideoProgress(n,a.data.seconds,a.data.duration,e,"Vimeo")}catch(a){}}),r&&!o.includes("enablejsapi=1"))){let s=new URL(o);s.searchParams.set("enablejsapi","1"),n.src=s.toString()}})},handleVideoProgress(t,e,n,o,r){if(!n)return;let i=Math.floor(e/n*100),s=[25,50,75,100],a=t.id||t.src.split("/").pop().split("?")[0];s.forEach(u=>{let m=`${a}_${u}`;i>=u&&!o.has(m)&&(o.add(m),this.addScore(u===25?10:u===50?15:25,`vsl_${u}%`),cdpTrack.track("video_milestone",{video_id:a,platform:r,percent:u,meta_intensity:u>=50?"high":"medium"}))})},setupFormAnalytics(){document.querySelectorAll("input, select, textarea").forEach(e=>{e.addEventListener("focus",()=>{let n=e.name||e.id;this.state.formStartTime[n]||(this.state.formStartTime[n]=Date.now(),this.addScore(10,`form_interaction_${n}`),cdpTrack.track("form_field_focus",{field:n}))}),e.addEventListener("blur",()=>{let n=e.name||e.id,o=Math.round((Date.now()-this.state.formStartTime[n])/1e3);o>0&&cdpTrack.track("form_field_blur",{field:n,duration_sec:o})})})},setupFormAbandonment(){let t=new Set,e=!1;document.addEventListener("focusin",n=>{let o=n.target;if(o.tagName==="INPUT"||o.tagName==="TEXTAREA"||o.tagName==="SELECT"){let r=o.name||o.id||o.type;r&&t.add(r)}},!0),document.addEventListener("submit",()=>{e=!0},!0),document.addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&t.size>0&&!e&&(this.addScore(-5,"form_abandonment"),cdpTrack.track("form_abandonment",{fields_interacted:Array.from(t),fields_count:t.size,meta_intensity:"medium",time_on_page:Math.floor((Date.now()-this.state.startTime)/1e3)}))}),window.addEventListener("beforeunload",()=>{if(t.size>0&&!e&&navigator.sendBeacon&&typeof cdpTrack!="undefined"){let n=JSON.stringify({eventName:"form_abandonment",behavioral_data:{user_score:this.state.userScore},fields_interacted:Array.from(t),fields_count:t.size,meta_intensity:"medium"});navigator.sendBeacon("/track",new Blob([n],{type:"application/json"}))}})},setupExitIntent(){let t=!1;document.addEventListener("mousemove",n=>{n.clientY<20&&!t&&(t=!0,this.addScore(15,"exit_intent"),cdpTrack.track("exit_intent",{mouse_y:n.clientY,time_on_page:Math.floor((Date.now()-this.state.startTime)/1e3),user_score:this.state.userScore,meta_intensity:"high"}),setTimeout(()=>{t=!1},3e4))},{passive:!0});let e=!1;document.addEventListener("visibilitychange",()=>{if(document.visibilityState==="hidden"&&!e){let n=Math.floor((Date.now()-this.state.startTime)/1e3);n>5&&(e=!0,cdpTrack.track("exit_intent_mobile",{time_on_page:n,user_score:this.state.userScore,meta_intensity:"medium"}))}})},setupCopyPaste(){document.addEventListener("copy",()=>{let t=window.getSelection().toString();t.length>0&&(this.addScore(20,"text_copy"),cdpTrack.track("content_copy",{text_length:t.length,meta_intensity:"medium"}))})},setupOutboundLinks(){document.addEventListener("click",t=>{let e=t.target.closest("a");if(e&&e.href){let n=e.href,o=!n.includes(window.location.hostname),r=n.includes("wa.me")||n.includes("hotmart.com")||n.includes("kiwify.com")||n.includes("checkout");o&&r&&(this.addScore(100,"outbound_conversion_intent"),cdpTrack.track("outbound_click",{destination:n,meta_intensity:"high"}))}})},setupErrorTracking(){window.addEventListener("error",t=>{typeof cdpTrack.sendServerEvent=="function"&&cdpTrack.sendServerEvent("js_error",null,{message:t.message,source:t.filename,lineno:t.lineno,colno:t.colno})})},setupIdleDetection(){["mousedown","mousemove","keydown","scroll","touchstart"].forEach(e=>{document.addEventListener(e,()=>{this.state.lastActivity=Date.now(),this.state.isIdle&&(this.state.isIdle=!1,cdpTrack.track("user_active",{status:"back_online"}))},{passive:!0})}),setInterval(()=>{Date.now()-this.state.lastActivity>this.config.idleThreshold&&!this.state.isIdle&&(this.state.isIdle=!0,cdpTrack.track("user_idle",{idle_duration:this.config.idleThreshold/1e3}))},1e4)}};typeof cdpTrack!="undefined"&&oe.init();at=oe});var wt={};q(wt,{generateId:()=>ce,getSessionId:()=>U,getUTMs:()=>A,getUTMsWithFallback:()=>de,getUserId:()=>B,getUserIdWithFallback:()=>ue,init:()=>he,passCheckoutParams:()=>le,setupAutoFormCapture:()=>ge,track:()=>D,trackAddToCart:()=>fe,trackLead:()=>G,trackPurchase:()=>me,trackViewContent:()=>pe,updateConsent:()=>se});var Ee={endpoint:"/track",platforms:["hotmart","kiwify","eduzz","monetizze","cartpanda","ticto"],siteDomain:"",debug:!1,consent:{defaultDenied:!0,urlPassthrough:!0,waitForUpdate:500},autoCaptureForms:!0,passCheckoutParams:!0,initBehaviorEngine:!0},h=Ee;var P=typeof window!="undefined";var H={thresholds:[25,50,75,100],signalStrength:{"25%":1.5,"50%":2,"75%":3,"100%":4}},L={thresholds:{curioso:1e4,interessado:6e4,comprador:18e4,profundao:60},signalStrength:{curioso:1,interessado:2.5,comprador:4,profundao:3.5},intentionLevels:{curioso:"curioso",interessado:"interessado",comprador:"comprador",profundao:"profundo"}},f={progressThresholds:[25,50,75,100],dropoutEnabled:!0,signalStrength:{play:2,progress25:3,progress50:4,progress75:5,complete:5,pause:1,resume:1.5,seek:.5,dropout:2.5}},x={maxRapidClicks:3,rapidClickWindow:1e3,clickCategories:["button","link","input","cta","price","generic"],signalStrength:{button:2,link:1.5,cta:2.5,input:1,price:2,generic:.5}},J={minHoverTimeForSignal:3e3,maxHoverTime:3e4,signalStrength:3},c={pageLoadTime:Date.now(),scrollTracking:{lastScrollPercent:0,trackedThresholds:new Set},timeTracking:{lastCheckTime:Date.now(),currentLevel:"curioso",timeOnPage:0},videoTracking:{},videoSummary:{totalVideos:0,startedCount:0,completedCount:0,maxProgress:0},clickTracking:{clicks:[],lastClickTime:0,rapidClickDetected:!1},ctaHoverTracking:{hoverStartTime:null,hoveredElement:null}};function Ce(){if(!P)return;new IntersectionObserver(e=>{e.forEach(n=>{if(!n.isIntersecting)return;let o=Math.round((window.scrollY+window.innerHeight)/document.body.scrollHeight*100);H.thresholds.forEach(r=>{let i=`scroll_${r}`;if(o>=r&&!c.scrollTracking.trackedThresholds.has(i)){let s=H.signalStrength[`${r}%`]||0;p("Scroll",{scroll_depth:r,scroll_percent:o,signal_strength:s,engagement_type:"scroll",time_on_page:Math.round((Date.now()-c.pageLoadTime)/1e3)}),c.scrollTracking.trackedThresholds.add(i)}})})},{threshold:H.thresholds.map(e=>e/100)}).observe(document.body)}function xe(){P&&setInterval(()=>{let t=Date.now()-c.pageLoadTime,e=Math.round(t/1e3),n=c.timeTracking.currentLevel,o=c.timeTracking.currentLevel;e>=L.thresholds.comprador?(n="comprador",o=L.signalStrength.comprador):e>=L.thresholds.interessado?(n="interessado",o=L.signalStrength.interessado):e>=L.thresholds.curioso&&(n="curioso",o=L.signalStrength.curioso),n!==c.timeTracking.currentLevel&&(c.timeTracking.currentLevel=n,p("TimeOnPage",{time_on_page:e,intention_level:n,signal_strength:o,engagement_type:"time",previous_level:c.timeTracking.previousLevel}),c.timeTracking.previousLevel=n)},5e3)}function Le(){return{playTime:0,totalWatchTime:0,lastProgress:-1,lastSecond:0,started:!1,paused:!1,completed:!1,dropoutPercent:null,dropoutSecond:null}}function E(t){let e=c.videoTracking[t],n=c.videoSummary;n.totalVideos=Object.keys(c.videoTracking).length,n.startedCount=Object.values(c.videoTracking).filter(o=>o.started).length,n.completedCount=Object.values(c.videoTracking).filter(o=>o.completed).length,n.maxProgress=Math.max(...Object.values(c.videoTracking).map(o=>o.lastProgress<0?0:o.lastProgress))}function z(t,e,n){let o=c.videoTracking[t];!o||o.completed||(o.dropoutPercent=e,o.dropoutSecond=n,f.dropoutEnabled&&p("VideoDropout",{video_id:t,dropout_percent:e,dropout_second:n,engagement_score:f.signalStrength.dropout,engagement_type:"video",video_summary:{...c.videoSummary}}))}function Pe(){if(!P)return;document.querySelectorAll('video, iframe[src*="youtube"], iframe[src*="vimeo"]').forEach((e,n)=>{let o=e.id||e.getAttribute("data-video-id")||`video_${n}`;if(c.videoTracking[o]=Le(),E(o),e.tagName==="IFRAME"&&e.src.includes("youtube")){De(e,o);return}if(e.tagName==="IFRAME"&&e.src.includes("vimeo")){Ae(e,o);return}Ie(e,o)}),window.addEventListener("beforeunload",()=>{Object.entries(c.videoTracking).forEach(([e,n])=>{n.started&&!n.completed&&z(e,n.lastProgress<0?0:n.lastProgress,n.lastSecond)})})}function Ie(t,e){let n=()=>c.videoTracking[e];t.addEventListener("play",()=>{n().started=!0,n().paused=!1,n().playTime||(n().playTime=Date.now()),E(e),p("VideoPlay",{video_id:e,video_platform:"html5",progress_percent:M(t),engagement_score:f.signalStrength.play,engagement_type:"video"})}),t.addEventListener("pause",()=>{n().paused=!0;let o=M(t),r=Math.round(t.currentTime);p("VideoPause",{video_id:e,video_platform:"html5",progress_percent:o,pause_second:r,engagement_score:f.signalStrength.pause,engagement_type:"video"}),z(e,o,r)}),t.addEventListener("play",()=>{n().dropoutPercent=null,n().dropoutSecond=null}),t.addEventListener("seeked",()=>{p("VideoSeek",{video_id:e,video_platform:"html5",progress_percent:M(t),seek_to_second:Math.round(t.currentTime),engagement_score:f.signalStrength.seek,engagement_type:"video"})}),t.addEventListener("timeupdate",()=>{if(t.paused||t.ended)return;let o=M(t),r=Math.round(t.currentTime);n().lastSecond=r,f.progressThresholds.forEach(i=>{o>=i&&n().lastProgress<i&&(n().lastProgress=i,p("VideoProgress",{video_id:e,video_platform:"html5",progress_percent:i,progress_second:r,engagement_score:f.signalStrength[`progress${i}`]||0,engagement_type:"video",video_summary:{...c.videoSummary}}),E(e))})}),t.addEventListener("ended",()=>{n().paused=!1,n().completed=!0,n().dropoutPercent=null,n().dropoutSecond=null;let o=n().playTime?Math.round((Date.now()-n().playTime)/1e3):0;E(e),p("VideoComplete",{video_id:e,video_platform:"html5",progress_percent:100,total_watch_time:o,engagement_score:f.signalStrength.complete,engagement_type:"video",video_summary:{...c.videoSummary}})})}function M(t){return!t.duration||t.duration===0?0:Math.round(t.currentTime/t.duration*100)}function De(t,e){try{let o=new URL(t.src);o.searchParams.get("enablejsapi")||(o.searchParams.set("enablejsapi","1"),t.src=o.toString())}catch(o){}if(!window._ytApiLoading){window._ytApiLoading=!0;let o=document.createElement("script");o.src="https://www.youtube.com/iframe_api",document.head.appendChild(o)}let n=()=>{if(typeof YT=="undefined"||!YT.Player){setTimeout(n,300);return}let o=()=>c.videoTracking[e],r=null;new YT.Player(t,{events:{onStateChange:i=>{let s=YT.PlayerState,a=i.target,u=a.getDuration()||0,m=a.getCurrentTime()||0,l=u>0?Math.round(m/u*100):0,g=Math.round(m);if(i.data===s.PLAYING)o().started=!0,o().paused=!1,o().playTime||(o().playTime=Date.now()),o().dropoutPercent=null,o().dropoutSecond=null,E(e),p("VideoPlay",{video_id:e,video_platform:"youtube",progress_percent:l,engagement_score:f.signalStrength.play,engagement_type:"video"}),clearInterval(r),r=setInterval(()=>{if(!a||typeof a.getPlayerState!="function"||a.getPlayerState()!==s.PLAYING)return;let d=a.getCurrentTime()||0,k=a.getDuration()||0,y=k>0?Math.round(d/k*100):0;o().lastSecond=Math.round(d),f.progressThresholds.forEach(b=>{y>=b&&o().lastProgress<b&&(o().lastProgress=b,p("VideoProgress",{video_id:e,video_platform:"youtube",progress_percent:b,progress_second:Math.round(d),engagement_score:f.signalStrength[`progress${b}`]||0,engagement_type:"video",video_summary:{...c.videoSummary}}),E(e))})},2e3);else if(i.data===s.PAUSED)clearInterval(r),o().paused=!0,p("VideoPause",{video_id:e,video_platform:"youtube",progress_percent:l,pause_second:g,engagement_score:f.signalStrength.pause,engagement_type:"video"}),z(e,l,g);else if(i.data===s.ENDED){clearInterval(r),o().completed=!0,o().dropoutPercent=null,o().dropoutSecond=null;let d=o().playTime?Math.round((Date.now()-o().playTime)/1e3):0;E(e),p("VideoComplete",{video_id:e,video_platform:"youtube",progress_percent:100,total_watch_time:d,engagement_score:f.signalStrength.complete,engagement_type:"video",video_summary:{...c.videoSummary}})}}}})};if(typeof YT!="undefined"&&YT.Player)n();else{let o=window.onYouTubeIframeAPIReady;window.onYouTubeIframeAPIReady=()=>{o&&o(),n()}}}function Ae(t,e){let n=()=>c.videoTracking[e],o=0,r=(s,a)=>{t.contentWindow.postMessage(JSON.stringify({method:s,value:a}),"https://player.vimeo.com")},i=()=>{["play","pause","ended","timeupdate","seeked"].forEach(s=>{r("addEventListener",s)}),r("getDuration")};window.addEventListener("message",s=>{var g;if(!s.origin.includes("vimeo.com"))return;let a;try{a=JSON.parse(s.data)}catch(d){return}if(!a||a.player_id!==t.id)return;if(a.event==="ready"){i();return}if(a.method==="getDuration"){o=a.value||0;return}let u=((g=a.data)==null?void 0:g.seconds)||0,m=o>0?Math.round(u/o*100):0,l=Math.round(u);if(a.event==="play")n().started=!0,n().paused=!1,n().playTime||(n().playTime=Date.now()),n().dropoutPercent=null,n().dropoutSecond=null,E(e),p("VideoPlay",{video_id:e,video_platform:"vimeo",progress_percent:m,engagement_score:f.signalStrength.play,engagement_type:"video"});else if(a.event==="pause")n().paused=!0,n().lastSecond=l,p("VideoPause",{video_id:e,video_platform:"vimeo",progress_percent:m,pause_second:l,engagement_score:f.signalStrength.pause,engagement_type:"video"}),z(e,m,l);else if(a.event==="timeupdate")n().lastSecond=l,f.progressThresholds.forEach(d=>{m>=d&&n().lastProgress<d&&(n().lastProgress=d,p("VideoProgress",{video_id:e,video_platform:"vimeo",progress_percent:d,progress_second:l,engagement_score:f.signalStrength[`progress${d}`]||0,engagement_type:"video",video_summary:{...c.videoSummary}}),E(e))});else if(a.event==="ended"){n().completed=!0,n().dropoutPercent=null,n().dropoutSecond=null;let d=n().playTime?Math.round((Date.now()-n().playTime)/1e3):0;E(e),p("VideoComplete",{video_id:e,video_platform:"vimeo",progress_percent:100,total_watch_time:d,engagement_score:f.signalStrength.complete,engagement_type:"video",video_summary:{...c.videoSummary}})}else a.event==="seeked"&&p("VideoSeek",{video_id:e,video_platform:"vimeo",progress_percent:m,seek_to_second:l,engagement_score:f.signalStrength.seek,engagement_type:"video"})}),t.contentDocument?i():t.addEventListener("load",i)}function Me(){P&&document.addEventListener("click",t=>{let e=t.target,n=ze(e),o=Ne(t),r=Math.round((Date.now()-c.pageLoadTime)/1e3),i=Date.now();i-c.clickTracking.lastClickTime<x.rapidClickWindow&&c.clickTracking.clicks.push({time:i,target:e}),setTimeout(()=>{let a=c.clickTracking.clicks.filter(u=>i-u.time<x.rapidClickWindow);a.length>=x.maxRapidClicks?(c.clickTracking.rapidClickDetected=!0,p("RapidClicks",{click_count:a.length,time_window:x.rapidClickWindow,behavior:"nervous",engagement_score:3,engagement_type:"clicks",time_on_page:r,description:`Usu\xE1rio clicou ${a.length} vezes em ${x.rapidClickWindow/1e3} segundos`})):(c.clickTracking.rapidClickDetected=!1,c.clickTracking.clicks=[])},x.rapidClickWindow),c.clickTracking.lastClickTime=i,p("Click",{click_category:n,target_info:Oe(e),position:o,time_on_page:r,click_heatmap:!0,engagement_score:$e(n,o),engagement_type:"clicks"})},!0)}function ze(t){let e=o=>t.closest(o),n=t.className||"";return e("button")||n.includes("btn")?"button":e("a")?"link":e("input")?"input":e(".cta")||n.includes("cta")?"cta":e(".price")||n.includes("price")?"price":e(".whatsapp")||n.includes("whatsapp")?"whatsapp":e(".email")||n.includes("email")?"email":e(".phone")||n.includes("phone")?"phone":"generic"}function Ne(t){return{x:Math.round(t.clientX),y:Math.round(t.clientY),relativeX:Math.round(t.clientX/window.innerWidth*100),relativeY:Math.round(t.clientY/window.innerHeight*100),viewportWidth:window.innerWidth,viewportHeight:window.innerHeight}}function Oe(t){var e;return{tag:t.tagName,class:t.className,id:t.id,text:((e=t.textContent)==null?void 0:e.substring(0,30))||"",attributes:Array.from(t.attributes).map(n=>`${n.name}="${n.value}"`).join(" ")}}function $e(t,e){let n=x.signalStrength[t]||.5,o=Math.min(e.timeOnPage/60,2),r=Math.min(e.scrollDepth/100,.5);return n+o+r}function Be(){if(!P)return;['a[href*="checkout"]','a[href*="comprar"]',"button.cta",".btn-comprar",".btn-checkout",".cta-button",'[data-cta="true"]','button[type="submit"]'].forEach(e=>{document.querySelectorAll(e).forEach(n=>{n.addEventListener("mouseenter",o=>{o.target.closest(e)&&(c.ctaHoverTracking.hoverStartTime=Date.now(),c.ctaHoverTracking.hoveredElement=e)}),n.addEventListener("mouseleave",()=>{if(c.ctaHoverTracking.hoverStartTime){let o=Date.now()-c.ctaHoverTracking.hoverStartTime;o>=J.minHoverTimeForSignal&&p("CTAHover",{cta_selector:e,hover_time_seconds:Math.round(o/1e3),engagement_score:J.signalStrength,engagement_type:"hover",time_on_page:Math.round((Date.now()-c.pageLoadTime)/1e3)})}c.ctaHoverTracking.hoverStartTime=null,c.ctaHoverTracking.hoveredElement=null})})})}function p(t,e={}){typeof cdpTrack!="undefined"&&cdpTrack.track?cdpTrack.track(t,e):console.warn("cdpTrack n\xE3o dispon\xEDvel - evento n\xE3o enviado:",t,e)}function K(){P&&(c.pageLoadTime=Date.now(),Ce(),xe(),Pe(),Me(),Be(),console.log("\u2705 Micro-Events inicializados"))}var S={timeWeights:{curioso:1,interessado:2.5,comprador:4},scrollWeights:{baixo:1,medio:2,alto:3},clickWeights:{generico:1,cta:2.5,button:2,link:1.5,input:.5},videoWeights:{play:1.5,progress25:2,progress50:3,progress75:4,complete:5},hoverWeights:{curto:1,medio:2,longo:3}},v={timeOnPage:0,scrollDepth:0,clicksCount:0,videoEngagement:0,ctaHoverTime:0,lastActivityTime:Date.now()};function Ve(t){let e="curioso",n=S.timeWeights.curioso;return t>=10&&t<60?(e="interessado",n=S.timeWeights.interessado):t>=60&&(e="comprador",n=S.timeWeights.comprador),{score:n,level:e}}function He(t){let e="baixo",n=S.scrollWeights.baixo;return t>=25&&t<75?(e="medio",n=S.scrollWeights.medio):t>=75&&(e="alto",n=S.scrollWeights.alto),{score:n,level:e}}function Fe(t,e){let n=S.clickWeights.generico,o=S.clickWeights[e]||1,r=Math.max(0,1-t/50);return n+o}function je(t){let e="curto",n=S.hoverWeights.curto;return t>=3&&t<10?(e="medio",n=S.hoverWeights.medio):t>=10&&(e="longo",n=S.hoverWeights.longo),{score:n,level:e}}function X(){let{score:t,level:e}=Ve(v.timeOnPage),{score:n}=He(v.scrollDepth),o=v.clicksCount>0?Fe(v.clicksCount,"generico"):0,r=v.videoEngagement,i=v.ctaHoverTime>0?je(v.ctaHoverTime/1e3):0,s=t*.3+n*.2+o*.15+r*.25+i*.1,a=e;return s<1.5?a="curioso":s<2.5?a="interessado":a="comprador",{totalScore:Math.min(s,5),timeScore:t,scrollScore:n,clickScore:o,videoScore:r,hoverScore:i,intentionLevel:a,components:{timeOnPage:v.timeOnPage,scrollDepth:v.scrollDepth,clicksCount:v.clicksCount,videoEngagement:v.videoEngagement,ctaHoverTime:v.ctaHoverTime}}}function F(t,e){v[t]=e,v.lastActivityTime=Date.now()}var O={email:{trim:!0,lowercase:!0,removeDots:!1,removePlus:!0},phone:{keepOnlyDigits:!0,addCountryCode:!0,defaultCountryCode:"55"},name:{trim:!0,lowercase:!0,removeAccents:!0,removeExtraSpaces:!0,maxLength:100},city:{trim:!0,lowercase:!0,removeAccents:!0,maxLength:50},state:{trim:!0,lowercase:!0,removeAccents:!0,maxLength:50},zip:{trim:!0,keepOnlyDigits:!0,maxLength:10}};function We(t){if(!t||typeof t!="string")return"";let e=t.trim();return e.includes("@gmail.com")&&(e=e.split("+")[0]+"@gmail.com"),e.includes("@googlemail.com")&&(e=e.split("+")[0]+"@googlemail.com"),e.toLowerCase()}function Re(t){if(!t||typeof t!="string")return"";let e=t.replace(/\D/g,"");return(e.length===11||e.length===10)&&(e="55"+e),e.substring(0,15)}function N(t){if(!t||typeof t!="string")return"";let e=t.trim();return e=e.normalize("NFD").replace(/[\u0300-\u036f]/g,""),e=e.toLowerCase(),e=e.replace(/\s+/g," "),e.substring(0,O.name.maxLength)}function Ue(t){if(!t||typeof t!="string")return"";let e=t.trim();return e=e.normalize("NFD").replace(/[\u0300-\u036f]/g,""),e=e.toLowerCase(),e=e.replace(/\s+/g," "),e.substring(0,O.city.maxLength)}function Ye(t){if(!t||typeof t!="string")return"";let e=t.trim();return e=e.normalize("NFD").replace(/[\u0300-\u036f]/g,""),e=e.toLowerCase(),e.substring(0,O.state.maxLength)}function Ge(t){return!t||typeof t!="string"?"":t.replace(/\D/g,"").substring(0,O.zip.maxLength)}function qe(t){if(!t||typeof t!="string")return"";let e=[/(\d{4})-(\d{2})-(\d{2})/,/(\d{2})\/(\d{2})\/(\d{4})/,/(\d{2})-(\d{2})-(\d{4})/];for(let n of e){let o=t.match(n);if(o){let r,i,s;return o[1].length===4?[r,i,s]=[o[1],o[2],o[3]]:[s,i,r]=[o[1],o[2],o[3]],`${r}${i}${s}`}}return""}function $(t){if(!t||typeof t.elements!="object")return{};let e=new FormData(t),n={},o=e.get("email")||e.get("user_email")||e.get("useremail");o&&(n.email=We(o));let r=e.get("phone")||e.get("telephone")||e.get("telefone")||e.get("celular");r&&(n.phone=Re(r));let i=e.get("first_name")||e.get("nome")||e.get("firstname"),s=e.get("last_name")||e.get("sobrenome")||e.get("lastname"),a=e.get("name")||e.get("fullname")||e.get("nome_completo");if(a){let d=a.split(" ");n.first_name=N(d[0]),n.last_name=N(d.slice(1).join(" "))}else i&&(n.first_name=N(i)),s&&(n.last_name=N(s));let u=e.get("city")||e.get("cidade");u&&(n.city=Ue(u));let m=e.get("state")||e.get("estado")||e.get("uf");m&&(n.state=Ye(m));let l=e.get("zip")||e.get("cep")||e.get("postalcode");l&&(n.zip=Ge(l));let g=e.get("dob")||e.get("date_of_birth")||e.get("nascimento");return g&&(n.dob=qe(g)),n}function Z(t){if(!t||typeof t!="object")return!1;let e=t.email&&t.email.includes("@"),n=t.phone&&t.phone.length>=10;return e||n}var I=typeof window!="undefined",w={endpoint:"/track",maxRetries:3,retryDelays:[1e3,3e3,6e3],useBeaconFallback:!0,cookieDuration:3600*24*365,cookieDomain:"",detectAdBlocker:!0,adBlockerBaitClass:"adsbox adbanner pub_300x250",minify:!1,noConsoleLogs:!1};function Je(){if(!I||!w.detectAdBlocker)return!1;let t=document.createElement("div");t.innerHTML="&nbsp;",t.className=w.adBlockerBaitClass,t.style.cssText="position: absolute; top: -1000px; left: -1000px;",document.body.appendChild(t);let e=getComputedStyle(t).display==="none";document.body.removeChild(t);try{let n=new Image;n.src="/pixel-test.png?t="+Date.now(),n.onload=()=>console.log("\u2705 Pixel n\xE3o bloqueado"),n.onerror=()=>console.warn("\u26A0\uFE0F Pixel pode estar bloqueado")}catch(n){console.warn("\u26A0\uFE0F Erro ao testar pixel:",n)}return e}async function Q(t,e=w.endpoint){if(!I)return{success:!1,error:"Not in browser"};let n=null;for(let o=0;o<w.maxRetries;o++)try{let r=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t),keepalive:!0,credentials:"same-origin",cache:"no-cache"});if(r.ok)return console.log(`\u2705 Envio bem-sucedido (tentativa ${o+1})`),await r.json();{let i=await r.text();throw new Error(`HTTP ${r.status}: ${i}`)}}catch(r){if(n=r,console.warn(`\u26A0\uFE0F Tentativa ${o+1} falhou:`,r.message),o<w.maxRetries-1){let i=w.retryDelays[o];console.log(`\u23F3 Aguardando ${i}ms antes de retry...`),await Ke(i)}}if(console.error("\u274C Todas as tentativas de envio falharam:",n),w.useBeaconFallback&&navigator.sendBeacon){if(console.log("\u{1F504} Tentando Beacon API como fallback..."),navigator.sendBeacon(e,JSON.stringify(t)))return console.log("\u2705 Beacon API bem-sucedido"),{success:!0,method:"beacon"};console.error("\u274C Beacon API tamb\xE9m falhou")}return{success:!1,error:n==null?void 0:n.message,attempts:w.maxRetries}}function Ke(t){return new Promise(e=>setTimeout(e,t))}function Xe(t,e,n=w.cookieDuration){if(!I)return;let r=window.location.hostname.split(".").slice(-2).join("."),i=[`${t}=${e}`,`max-age=${n}`,"path=/",`domain=.${r}`,"SameSite=Lax","Secure"].join("; ");document.cookie=i}function Ze(t){if(!I)return null;let n=`; ${document.cookie}`.split(`; ${t}=`);return n.length===2?n.pop().split(";").shift():null}function Qe(t=w.noConsoleLogs){if(!I||!t)return;let e=()=>{};console.log=e,console.warn=e,console.error=e}function ee(){if(!I)return;if(console.log("\u{1F6E1}\uFE0F Inicializando Anti-Blocking System..."),Je()&&(console.warn("\u26A0\uFE0F Ad-Blocker detectado - usando estrat\xE9gias de resili\xEAncia"),typeof cdpTrack!="undefined"&&cdpTrack.track&&cdpTrack.track("adblocker_detected",{user_agent:navigator.userAgent,timestamp:Date.now()})),!Ze("_cdp_uid")){let n=`${Date.now()}_${Math.random().toString(36).slice(2,11)}`;Xe("_cdp_uid",n)}w.noConsoleLogs&&Qe(!0),console.log("\u2705 Anti-Blocking System inicializado")}var et=typeof window!="undefined";function te(t={}){if(!et)return;let{whatsappNumber:e,propertyName:n="o im\xF3vel",propertyId:o=null,propertyLat:r=null,propertyLng:i=null,routeSelector:s='[data-route-intent], a[href*="maps/dir"], a[href*="maps?q="]',distanceBucket:a=null,distanceKm:u=null,metaSignalBucket:m=null,brokerName:l=null}=t;if(!e){console.warn("[RouteIntent] whatsappNumber \xE9 obrigat\xF3rio.");return}it(),document.addEventListener("click",g=>{let d=g.target.closest(s);d&&tt(d,{whatsappNumber:e,propertyName:n,propertyId:o,propertyLat:r,propertyLng:i,distanceBucket:a,distanceKm:u,metaSignalBucket:m,brokerName:l})},!0)}function tt(t,e){var s;(s=document.getElementById("cdp-ri-widget"))==null||s.remove();let n=ne(e.distanceKm),o=n?`<p class="cdp-ri-travel">\u{1F4CD} Voc\xEA est\xE1 a cerca de <strong>${n} min</strong> daqui</p>`:"",r=e.brokerName?`<p class="cdp-ri-broker">Ao chegar, pergunte pelo <strong>${e.brokerName}</strong> \u2014 ele vai estar te aguardando com tudo pronto \u{1F91D}</p>`:"",i=document.createElement("div");i.id="cdp-ri-widget",i.innerHTML=`
8
8
  <div class="cdp-ri-inner">
9
9
  ${o}
10
10
  <p class="cdp-ri-headline">Vi que voc\xEA quer visitar o local! Confirme sua vinda enviando a mensagem abaixo \u2014 nossa equipe j\xE1 fica de prontid\xE3o pra te receber \u{1F447}</p>
@@ -61,4 +61,4 @@
61
61
  .cdp-ri-check { font-size: 28px; }
62
62
  .cdp-ri-ok p { margin: 0; font-size: 14px; color: #15803d; line-height: 1.5; }
63
63
  .cdp-ri-ok span { font-size: 13px; color: #555; }
64
- `,document.head.appendChild(t)}var _=typeof window!="undefined";var ae="_cdp_consent",st={ad_storage:"denied",analytics_storage:"denied",ad_user_data:"denied",ad_personalization:"denied"};function ct(){if(!_)return null;try{let t=localStorage.getItem(ae);return t?JSON.parse(t):null}catch(t){return null}}function lt(){var o,r,i,s;if(!_||((o=h.consent)==null?void 0:o.defaultDenied)===!1)return;window.dataLayer=window.dataLayer||[];function t(){window.dataLayer.push(arguments)}let e=(i=(r=h.consent)==null?void 0:r.waitForUpdate)!=null?i:500;t("consent","default",{...st,wait_for_update:e}),((s=h.consent)==null?void 0:s.urlPassthrough)!==!1&&t("set","url_passthrough",!0);let n=ct();n&&(t("consent","update",n),h.debug&&console.log("\u2705 Consent Mode: consentimento anterior restaurado"))}function se(t={}){if(!_)return;window.dataLayer=window.dataLayer||[];function e(){window.dataLayer.push(arguments)}let n=t.analytics===!0?"granted":"denied",o=t.ads===!0?"granted":"denied",r={analytics_storage:n,ad_storage:o,ad_user_data:o,ad_personalization:o};e("consent","update",r);try{localStorage.setItem(ae,JSON.stringify(r))}catch(i){}console.log("\u2705 Consent Mode atualizado:",r)}var S=_?new URLSearchParams(window.location.search):new URLSearchParams,dt=S.get("fbclid")||"",ut=S.get("gclid")||"",mt=S.get("wbraid")||"",gt=S.get("gbraid")||"",pt=S.get("ttclid")||"",j={utm_source:S.get("utm_source")||"",utm_medium:S.get("utm_medium")||"",utm_campaign:S.get("utm_campaign")||"",utm_content:S.get("utm_content")||"",utm_term:S.get("utm_term")||""},ft=()=>{var n;if(!_)return"";let t="_cdp_uid",e=(n=document.cookie.match(new RegExp(`${t}=([^;]+)`)))==null?void 0:n[1];return e||(e=`${Date.now()}_${Math.random().toString(36).slice(2,11)}`,document.cookie=`${t}=${e}; max-age=${3600*24*365}; path=/; SameSite=Lax`),e},R=_?ft():"",ht=()=>{if(!_)return"";let t="cdp_session",e=sessionStorage.getItem(t);return e||(e=`${Date.now()}_${Math.random().toString(36).slice(2,11)}`,sessionStorage.setItem(t,e)),e},_t=_?ht():"",A=()=>({...j}),B=()=>R,U=()=>_t,ce=()=>`${Date.now()}_${Math.random().toString(36).slice(2,11)}`,kt=()=>{var t,e,n;return{fbp:((t=document.cookie.match(/_fbp=([^;]+)/))==null?void 0:t[1])||void 0,fbc:((e=document.cookie.match(/_fbc=([^;]+)/))==null?void 0:e[1])||void 0,fbclid:dt||void 0,gclid:ut||void 0,gbraid:gt||void 0,wbraid:mt||void 0,ttclid:pt||void 0,ttp:((n=document.cookie.match(/_ttp=([^;]+)/))==null?void 0:n[1])||void 0,rclid:S.get("rclid")||void 0}},le=(t={})=>{if(!_)return;let{platforms:e=["hotmart","kiwify","eduzz","monetizze","cartpanda","ticto"],domains:n=[]}=t,o=A(),r=B(),i={hotmart:["hotmart.com","pay.hotmart.com","payment.hotmart.com"],kiwify:["kiwify.com.br","checkout.kiwify.com.br"],eduzz:["eduzz.com","sun.eduzz.com"],monetizze:["monetizze.com.br"],cartpanda:["cartpanda.com","pay.cartpanda.com"],ticto:["ticto.app","pay.ticto.app","checkout.ticto.app"]},s=()=>[o.utm_source,o.utm_medium,o.utm_campaign,o.utm_content,o.utm_term].map(m=>m||"direto").join("|"),a=m=>{let l={...n},g=m.toLowerCase(),d=k=>k.some(y=>g.includes(y));if(e.includes("hotmart")&&d(i.hotmart))r&&(l.xcod=r),o.utm_source&&(l.sck=s());else if(e.includes("kiwify")&&d(i.kiwify))o.utm_source&&(l.src=o.utm_source),o.utm_medium&&(l.utm_medium=o.utm_medium),o.utm_campaign&&(l.utm_campaign=o.utm_campaign);else if(e.includes("eduzz")&&d(i.eduzz))o.utm_source&&(l.src=o.utm_source);else if(e.includes("monetizze")&&d(i.monetizze))o.utm_source&&(l.src=o.utm_source);else if(e.includes("cartpanda")&&d(i.cartpanda))Object.entries(o).forEach(([k,y])=>{y&&(l[k]=y)});else if(e.includes("ticto")&&d(i.ticto))Object.entries(o).forEach(([k,y])=>{y&&(l[k]=y)}),r&&(l.user_id=r);else{let k=Object.values(i).flat().concat(n);if(!d(k))return null;Object.entries(o).forEach(([y,b])=>{b&&(l[y]=b)}),r&&(l.user_id=r)}return Object.keys(l).length?l:null},u=m=>{if(!m.href||m.href.startsWith("javascript"))return;let l=a(m);if(l)try{let g=new URL(m.href);Object.entries(l).forEach(([d,k])=>g.searchParams.set(d,k)),m.href=g.toString()}catch(g){}};document.querySelectorAll("a[href]").forEach(u),new MutationObserver(m=>{m.forEach(l=>l.addedNodes.forEach(g=>{var d;g.nodeType===1&&(g.tagName==="A"&&u(g),(d=g.querySelectorAll)==null||d.call(g,"a[href]").forEach(u))}))}).observe(document.body,{childList:!0,subtree:!0}),console.log("\u2705 PassCheckoutParams inicializado")},W="_cdp_aff";function vt(){if(_)try{let t=Object.values(j).some(n=>!!n),e=Y();(t||!e)&&localStorage.setItem(W,JSON.stringify({uid:R,utms:j,ts:Date.now()}))}catch(t){}}function Y(){if(!_)return null;try{let t=localStorage.getItem(W);if(!t)return null;let e=JSON.parse(t);return Date.now()-e.ts>720*60*60*1e3?(localStorage.removeItem(W),null):e}catch(t){return null}}function de(){let t=A();if(Object.values(t).some(n=>!!n))return t;let e=Y();return e!=null&&e.utms&&Object.values(e.utms).some(n=>!!n)?(h.debug&&console.log("\u2139\uFE0F UTMs restaurados do localStorage (affiliate fallback)"),e.utms):t}function ue(){var t;return R||((t=Y())==null?void 0:t.uid)||""}async function D(t,e={},n={}){if(!_)return console.warn("\u26A0\uFE0F cdpTrack.track() deve ser chamado no browser"),{success:!1,error:"Not in browser"};let o=ce(),r=A(),i=kt(),s=B(),a=U(),u=Date.now(),m=X(),{totalScore:l,timeLevel:g,scrollScore:d,clickScore:k,videoScore:y,hoverScore:b,intentionLevel:_e}=m,ke={event_id:o,event_name:t,user_id:s,session_id:a,utms:r,click_ids:i,timestamp:u,page_url:window.location.href,referrer:document.referrer,user_agent:navigator.userAgent,behavioral_data:{...e,engagement_score:l,time_level:g,scroll_score:d,click_score:k,video_score:y,hover_score:b,intention_level:_e},...n};try{let C=await Q(ke,"/track");if(C.success)return console.log(`\u2705 Evento ${t} enviado com sucesso:`,o,C),F("timeOnPage",Math.round((Date.now()-u)/1e3)),F("totalScore",l),{success:!0,event_id:o,result:C};throw new Error(C.error||"Envio falhou ap\xF3s todas as tentativas")}catch(C){return console.error(`\u274C Erro ao enviar evento ${t}:`,C),{success:!1,error:C.message,event_id:o,attempts:w.maxRetries}}}async function G(t,e=null){let n={...t};if(e){let o=$(e);n={...n,...o}}return D("Lead",n)}async function me(t,e=null){let n={...t};if(e){let o=$(e);n={...n,...o}}return D("Purchase",n)}function ge(){_&&document.addEventListener("submit",async t=>{let e=t.target,n=e.querySelector('[name*="email"]'),o=e.querySelector('[name*="phone"], [name*="telefone"], [name*="celular"]');if(n||o){t.preventDefault();let r=$(e);Z(r)&&(await G(r,e),console.log("\u2705 Lead capturado automaticamente com Advanced Matching:",r)),setTimeout(()=>e.submit(),100)}},!0)}async function pe(t){return D("ViewContent",t)}async function fe(t){return D("AddToCart",t)}async function he(){var t,e;if(_){if(h.debug&&console.log("\u{1F680} Inicializando cdpTrack SDK..."),lt(),ee(),vt(),K(),h.autoCaptureForms!==!1&&ge(),window.cdpTrack={track:D,trackLead:G,trackPurchase:me,trackViewContent:pe,trackAddToCart:fe,getUserId:B,getUserIdWithFallback:ue,getSessionId:U,getUTMs:A,getUTMsWithFallback:de,updateConsent:se},h.initBehaviorEngine!==!1)try{let o=(await Promise.resolve().then(()=>(ie(),re))).default;o&&typeof o.init=="function"&&(o.init(),h.debug&&console.log("\u2705 Behavior Engine inicializado"))}catch(n){h.debug&&console.info("\u2139\uFE0F Behavior Engine n\xE3o dispon\xEDvel:",n.message)}h.passCheckoutParams!==!1&&((t=h.platforms)==null?void 0:t.length)>0&&le({platforms:h.platforms}),(e=h.routeIntent)!=null&&e.whatsappNumber&&te(h.routeIntent),h.debug&&console.log("\u2705 cdpTrack SDK inicializado (Quantum Tier)")}}_&&window.addEventListener("DOMContentLoaded",he);return be(yt);})();
64
+ `,document.head.appendChild(t)}var _=typeof window!="undefined";var ae="_cdp_consent",st={ad_storage:"denied",analytics_storage:"denied",ad_user_data:"denied",ad_personalization:"denied"};function ct(){if(!_)return null;try{let t=localStorage.getItem(ae);return t?JSON.parse(t):null}catch(t){return null}}function lt(){var o,r,i,s;if(!_||((o=h.consent)==null?void 0:o.defaultDenied)===!1)return;window.dataLayer=window.dataLayer||[];function t(){window.dataLayer.push(arguments)}let e=(i=(r=h.consent)==null?void 0:r.waitForUpdate)!=null?i:500;t("consent","default",{...st,wait_for_update:e}),((s=h.consent)==null?void 0:s.urlPassthrough)!==!1&&t("set","url_passthrough",!0);let n=ct();n&&(t("consent","update",n),h.debug&&console.log("\u2705 Consent Mode: consentimento anterior restaurado"))}function se(t={}){if(!_)return;window.dataLayer=window.dataLayer||[];function e(){window.dataLayer.push(arguments)}let n=t.analytics===!0?"granted":"denied",o=t.ads===!0?"granted":"denied",r={analytics_storage:n,ad_storage:o,ad_user_data:o,ad_personalization:o};e("consent","update",r);try{localStorage.setItem(ae,JSON.stringify(r))}catch(i){}console.log("\u2705 Consent Mode atualizado:",r)}var T=_?new URLSearchParams(window.location.search):new URLSearchParams,dt=T.get("fbclid")||"",ut=T.get("gclid")||"",mt=T.get("wbraid")||"",gt=T.get("gbraid")||"",pt=T.get("ttclid")||"",ft=T.get("msclkid")||"",j={utm_source:T.get("utm_source")||"",utm_medium:T.get("utm_medium")||"",utm_campaign:T.get("utm_campaign")||"",utm_content:T.get("utm_content")||"",utm_term:T.get("utm_term")||""},ht=()=>{var n;if(!_)return"";let t="_cdp_uid",e=(n=document.cookie.match(new RegExp(`${t}=([^;]+)`)))==null?void 0:n[1];return e||(e=`${Date.now()}_${Math.random().toString(36).slice(2,11)}`,document.cookie=`${t}=${e}; max-age=${3600*24*365}; path=/; SameSite=Lax`),e},R=_?ht():"",_t=()=>{if(!_)return"";let t="cdp_session",e=sessionStorage.getItem(t);return e||(e=`${Date.now()}_${Math.random().toString(36).slice(2,11)}`,sessionStorage.setItem(t,e)),e},kt=_?_t():"",A=()=>({...j}),B=()=>R,U=()=>kt,ce=()=>`${Date.now()}_${Math.random().toString(36).slice(2,11)}`,vt=()=>{var t,e,n;return{fbp:((t=document.cookie.match(/_fbp=([^;]+)/))==null?void 0:t[1])||void 0,fbc:((e=document.cookie.match(/_fbc=([^;]+)/))==null?void 0:e[1])||void 0,fbclid:dt||void 0,gclid:ut||void 0,gbraid:gt||void 0,wbraid:mt||void 0,ttclid:pt||void 0,ttp:((n=document.cookie.match(/_ttp=([^;]+)/))==null?void 0:n[1])||void 0,rclid:T.get("rclid")||void 0,msclkid:ft||void 0}},le=(t={})=>{if(!_)return;let{platforms:e=["hotmart","kiwify","eduzz","monetizze","cartpanda","ticto"],domains:n=[]}=t,o=A(),r=B(),i={hotmart:["hotmart.com","pay.hotmart.com","payment.hotmart.com"],kiwify:["kiwify.com.br","checkout.kiwify.com.br"],eduzz:["eduzz.com","sun.eduzz.com"],monetizze:["monetizze.com.br"],cartpanda:["cartpanda.com","pay.cartpanda.com"],ticto:["ticto.app","pay.ticto.app","checkout.ticto.app"]},s=()=>[o.utm_source,o.utm_medium,o.utm_campaign,o.utm_content,o.utm_term].map(m=>m||"direto").join("|"),a=m=>{let l={...n},g=m.toLowerCase(),d=k=>k.some(y=>g.includes(y));if(e.includes("hotmart")&&d(i.hotmart))r&&(l.xcod=r),o.utm_source&&(l.sck=s());else if(e.includes("kiwify")&&d(i.kiwify))o.utm_source&&(l.src=o.utm_source),o.utm_medium&&(l.utm_medium=o.utm_medium),o.utm_campaign&&(l.utm_campaign=o.utm_campaign);else if(e.includes("eduzz")&&d(i.eduzz))o.utm_source&&(l.src=o.utm_source);else if(e.includes("monetizze")&&d(i.monetizze))o.utm_source&&(l.src=o.utm_source);else if(e.includes("cartpanda")&&d(i.cartpanda))Object.entries(o).forEach(([k,y])=>{y&&(l[k]=y)});else if(e.includes("ticto")&&d(i.ticto))Object.entries(o).forEach(([k,y])=>{y&&(l[k]=y)}),r&&(l.user_id=r);else{let k=Object.values(i).flat().concat(n);if(!d(k))return null;Object.entries(o).forEach(([y,b])=>{b&&(l[y]=b)}),r&&(l.user_id=r)}return Object.keys(l).length?l:null},u=m=>{if(!m.href||m.href.startsWith("javascript"))return;let l=a(m);if(l)try{let g=new URL(m.href);Object.entries(l).forEach(([d,k])=>g.searchParams.set(d,k)),m.href=g.toString()}catch(g){}};document.querySelectorAll("a[href]").forEach(u),new MutationObserver(m=>{m.forEach(l=>l.addedNodes.forEach(g=>{var d;g.nodeType===1&&(g.tagName==="A"&&u(g),(d=g.querySelectorAll)==null||d.call(g,"a[href]").forEach(u))}))}).observe(document.body,{childList:!0,subtree:!0}),console.log("\u2705 PassCheckoutParams inicializado")},W="_cdp_aff";function yt(){if(_)try{let t=Object.values(j).some(n=>!!n),e=Y();(t||!e)&&localStorage.setItem(W,JSON.stringify({uid:R,utms:j,ts:Date.now()}))}catch(t){}}function Y(){if(!_)return null;try{let t=localStorage.getItem(W);if(!t)return null;let e=JSON.parse(t);return Date.now()-e.ts>720*60*60*1e3?(localStorage.removeItem(W),null):e}catch(t){return null}}function de(){let t=A();if(Object.values(t).some(n=>!!n))return t;let e=Y();return e!=null&&e.utms&&Object.values(e.utms).some(n=>!!n)?(h.debug&&console.log("\u2139\uFE0F UTMs restaurados do localStorage (affiliate fallback)"),e.utms):t}function ue(){var t;return R||((t=Y())==null?void 0:t.uid)||""}async function D(t,e={},n={}){if(!_)return console.warn("\u26A0\uFE0F cdpTrack.track() deve ser chamado no browser"),{success:!1,error:"Not in browser"};let o=ce(),r=A(),i=vt(),s=B(),a=U(),u=Date.now(),m=X(),{totalScore:l,timeLevel:g,scrollScore:d,clickScore:k,videoScore:y,hoverScore:b,intentionLevel:_e}=m,ke={event_id:o,event_name:t,user_id:s,session_id:a,utms:r,click_ids:i,timestamp:u,page_url:window.location.href,referrer:document.referrer,user_agent:navigator.userAgent,behavioral_data:{...e,engagement_score:l,time_level:g,scroll_score:d,click_score:k,video_score:y,hover_score:b,intention_level:_e},...n};try{let C=await Q(ke,"/track");if(C.success)return console.log(`\u2705 Evento ${t} enviado com sucesso:`,o,C),F("timeOnPage",Math.round((Date.now()-u)/1e3)),F("totalScore",l),{success:!0,event_id:o,result:C};throw new Error(C.error||"Envio falhou ap\xF3s todas as tentativas")}catch(C){return console.error(`\u274C Erro ao enviar evento ${t}:`,C),{success:!1,error:C.message,event_id:o,attempts:w.maxRetries}}}async function G(t,e=null){let n={...t};if(e){let o=$(e);n={...n,...o}}return D("Lead",n)}async function me(t,e=null){let n={...t};if(e){let o=$(e);n={...n,...o}}return D("Purchase",n)}function ge(){_&&document.addEventListener("submit",async t=>{let e=t.target,n=e.querySelector('[name*="email"]'),o=e.querySelector('[name*="phone"], [name*="telefone"], [name*="celular"]');if(n||o){t.preventDefault();let r=$(e);Z(r)&&(await G(r,e),console.log("\u2705 Lead capturado automaticamente com Advanced Matching:",r)),setTimeout(()=>e.submit(),100)}},!0)}async function pe(t){return D("ViewContent",t)}async function fe(t){return D("AddToCart",t)}async function he(){var t,e;if(_){if(h.debug&&console.log("\u{1F680} Inicializando cdpTrack SDK..."),lt(),ee(),yt(),K(),h.autoCaptureForms!==!1&&ge(),window.cdpTrack={track:D,trackLead:G,trackPurchase:me,trackViewContent:pe,trackAddToCart:fe,getUserId:B,getUserIdWithFallback:ue,getSessionId:U,getUTMs:A,getUTMsWithFallback:de,updateConsent:se},h.initBehaviorEngine!==!1)try{let o=(await Promise.resolve().then(()=>(ie(),re))).default;o&&typeof o.init=="function"&&(o.init(),h.debug&&console.log("\u2705 Behavior Engine inicializado"))}catch(n){h.debug&&console.info("\u2139\uFE0F Behavior Engine n\xE3o dispon\xEDvel:",n.message)}h.passCheckoutParams!==!1&&((t=h.platforms)==null?void 0:t.length)>0&&le({platforms:h.platforms}),(e=h.routeIntent)!=null&&e.whatsappNumber&&te(h.routeIntent),h.debug&&console.log("\u2705 cdpTrack SDK inicializado (Quantum Tier)")}}_&&window.addEventListener("DOMContentLoaded",he);return be(wt);})();
@@ -1,4 +1,4 @@
1
- <!-- CDP Edge SDK v2.5.1 — instalar antes do </body> -->
1
+ <!-- CDP Edge SDK v2.6.0 — instalar antes do </body> -->
2
2
  <script src="/cdpTrack.min.js"></script>
3
3
  <script>
4
4
  // Inicializar após carregar
@@ -1,4 +1,4 @@
1
- # CDP Edge Premium Tracking Intelligence - Integração Completa (Quantum Tier)
1
+ # CDP Edge Premium Tracking Intelligence - Integração Completa (Quantum Tier)
2
2
 
3
3
  ## 📋 Índice
4
4
 
@@ -28,12 +28,12 @@
28
28
  │ 6. behavior-engine.js (Rage click, Idle, A/B, VSL) │
29
29
  └─────────────────────────────────────────────────────────────────┘
30
30
 
31
- ▼ fetch('/api/tracking')
31
+ ▼ fetch('/track')
32
32
  │ (same-domain)
33
33
  ┌─────────────────────────────────────────────────────────────────┐
34
34
  │ CLOUDFLARE WORKER (worker.js) │
35
35
  ├─────────────────────────────────────────────────────────────────┤
36
- │ 1. Receiver (POST /api/tracking) │
36
+ │ 1. Receiver (POST /track) │
37
37
  │ 2. Identity Graph Sync (D1) │
38
38
  │ 3. Advanced Matching (SHA256 PII + Meta AM) │
39
39
  │ 4. Engagement Scoring Server-Side (0-5.0 final) │
@@ -550,7 +550,7 @@ Procure por:
550
550
  ### Problema 4: Ad-blocker bloqueia tracking
551
551
 
552
552
  **Solução:**
553
- 1. Verificar se endpoint está no mesmo domínio (`/api/tracking`)
553
+ 1. Verificar se endpoint está no mesmo domínio (`/track`)
554
554
  2. Verificar se está usando first-party cookies
555
555
  3. Verificar se `sendWithRetry()` está funcionando
556
556
  4. Verificar logs de ad-blocker detection
@@ -1,4 +1,4 @@
1
- # 🎯 CDP Edge Premium Tracking Intelligence - Resumo de Implementação
1
+ # 🎯 CDP Edge Premium Tracking Intelligence - Resumo de Implementação
2
2
 
3
3
  ## ✅ IMPLEMENTAÇÃO COMPLETA (Quantum Tier)
4
4
 
@@ -130,7 +130,7 @@ const finalScore = (
130
130
  - SameSite=Lax para funcionalidade
131
131
 
132
132
  4. **Same-Domain Protocol:**
133
- - Endpoint: `/api/tracking` (mesmo domínio)
133
+ - Endpoint: `/track` (mesmo domínio)
134
134
  - Evita bloqueios de CORS
135
135
  - First-party cookies não bloqueados
136
136
 
@@ -279,7 +279,7 @@ document.querySelector('#lead-form').addEventListener('submit', async (e) => {
279
279
  - [x] **Anti-Blocking Maximum:** Ad-blocker detection, retry exponential, beacon fallback, first-party cookies
280
280
  - [x] **Behavior Engine Integration:** Scoring 0-100, rage click, idle, A/B testing, VSL, form analytics
281
281
  - [x] **Auto-Capture de Formulários:** Interceptação automática sem código manual
282
- - [x] **Same-Domain Protocol:** Endpoint `/api/tracking` no mesmo domínio
282
+ - [x] **Same-Domain Protocol:** Endpoint `/track` no mesmo domínio
283
283
  - [x] **Integration Tests:** Suite completa de validação end-to-end
284
284
  - [x] **Documentação Completa:** Guia de uso, exemplos, troubleshooting, deployment checklist
285
285
 
@@ -17,27 +17,77 @@ O CDP Edge é um **Esquadrão de Agentes AI (Squad)** cuja única e rigorosa mis
17
17
 
18
18
  ## COMPORTAMENTO DE INICIALIZAÇÃO (PRIMEIRA MENSAGEM)
19
19
 
20
- Sempre que o usuário o invocar (ex: "Acione o Master Orchestrator"), você **NÃO DEVE** listar fases, menus ou responsabilidades. Faça duas perguntas objetivas e aguarde. Sua primeira e ÚNICA resposta inicial deve seguir exatamente este modelo:
20
+ Sempre que o usuario invocar o Master Orchestrator (ex: `/cdp` ou "Acione o Master Orchestrator"), voce **NAO DEVE** listar fases, menus, agentes, responsabilidades ou pedir credenciais na abertura.
21
+ O primeiro objetivo e orientar uma pessoa leiga a escolher por onde comecar.
22
+ Sua primeira e UNICA resposta inicial deve seguir exatamente este modelo:
21
23
 
22
- > **CDP Edge v2.5.9 pronto. ⚡**
24
+ > **CDP Edge v2.6.0 pronto.**
23
25
  >
24
- > Sou o orquestrador da sua infraestrutura de rastreamento Cloudflare Edge vou configurar Workers + D1 + Meta CAPI + WhatsApp + CRM para este projeto.
26
+ > Vou te guiar na instalacao do rastreamento server-side do seu projeto usando Cloudflare Edge.
25
27
  >
26
- > Para começar, preciso de duas informações:
28
+ > Ainda nao preciso de tokens, IDs ou credenciais. Primeiro vamos escolher o caminho certo.
27
29
  >
28
- > **1. Domínio do projeto**
29
- > Se você já tem um domínio ativo na Cloudflare, passe aqui (ex: `meusite.com.br`).
30
- > Se ainda não tem domínio ou não configurou na Cloudflare, me diga e eu te guio no processo antes de continuar.
30
+ > **Qual situacao parece mais com o seu projeto hoje?**
31
31
  >
32
- > **2. Plataformas de anúncios**
33
- > Quais vamos integrar neste projeto?
34
- > - Meta (Facebook/Instagram)
35
- > - Google (GA4 / Google Ads)
36
- > - TikTok
37
- > - WhatsApp CTWA (anúncio clica → WhatsApp)
38
- > - Outras
32
+ > **1. Tenho site ou landing page**
33
+ > Anuncio leva para uma pagina minha e depois para formulario, WhatsApp ou checkout.
34
+ >
35
+ > **2. Vendo direto pelo WhatsApp**
36
+ > O anuncio leva direto para conversa no WhatsApp, sem pagina no meio.
37
+ >
38
+ > **3. Sou afiliado**
39
+ > Divulgo link de produto de terceiros e nao tenho checkout proprio.
40
+ >
41
+ > **4. Ainda estou montando tudo**
42
+ > Nao sei se preciso de dominio, Cloudflare, site ou WhatsApp primeiro.
43
+ >
44
+ > **5. Quero revisar ou corrigir uma instalacao existente**
45
+ > Ja existe CDP Edge ou Worker configurado e preciso validar/arrumar.
46
+ >
47
+ > Responda com o numero. Depois eu explico o proximo passo em linguagem simples e peco apenas o que for necessario.
48
+
49
+ **REGRA DE OURO:** Nao liste fases, nao peca credenciais e nao peca dominio/plataformas antes do usuario escolher a situacao. Depois da resposta, explique o caminho escolhido em no maximo 5 linhas e faca apenas as perguntas basicas desse caminho.
50
+
51
+ **Roteamento da resposta inicial:**
52
+ - `1` ou "site/landing page" -> `PROJECT_TYPE = 1`, seguir para perguntas basicas de site.
53
+ - `2` ou "WhatsApp" -> `PROJECT_TYPE = 2`, seguir para perguntas basicas de CTWA/WhatsApp.
54
+ - `3` ou "afiliado" -> `PROJECT_TYPE = 3`, seguir para perguntas basicas de afiliado.
55
+ - `4` ou "montando" -> `PROJECT_TYPE = discovery`, orientar requisitos minimos antes de qualquer credencial.
56
+ - `5` ou "revisar/corrigir" -> `PROJECT_TYPE = audit`, pedir acesso ao projeto/Worker existente e rodar validacao.
57
+
58
+ **Perguntas basicas por caminho:**
59
+
60
+ Para `PROJECT_TYPE = 1`, perguntar:
61
+ > Perfeito. Para site ou landing page, preciso entender 4 coisas:
62
+ > 1. Qual e o link do site ou landing page?
63
+ > 2. Voce tem acesso aos arquivos do projeto/site?
64
+ > 3. A conversao acontece por formulario, WhatsApp, checkout proprio ou plataforma como Hotmart/Kiwify/Ticto?
65
+ > 4. Onde voce anuncia hoje: Meta, Google, TikTok, outro ou ainda nao anuncia?
39
66
 
40
- **REGRA DE OURO:** Não liste fases nem peça mais do que essas duas informações na abertura. Se o usuário não tiver domínio ainda, inicie pelo guia de configuração Cloudflare antes de qualquer deploy.
67
+ Para `PROJECT_TYPE = 2`, perguntar:
68
+ > Perfeito. Para venda direta pelo WhatsApp, vamos configurar rastreamento de conversas e leads sem depender de uma pagina.
69
+ > 1. Seus anuncios sao Click-to-WhatsApp na Meta?
70
+ > 2. Voce usa WhatsApp Business conectado ao Business Manager?
71
+ > 3. Voce tem acesso ao Business Manager/conta de anuncios?
72
+
73
+ Para `PROJECT_TYPE = 3`, perguntar:
74
+ > Perfeito. Para afiliado, o caminho mais seguro e criar uma ponte de rastreamento antes do checkout de terceiros.
75
+ > 1. Qual produto ou plataforma voce divulga?
76
+ > 2. Voce tem um dominio proprio ou precisa criar um?
77
+ > 3. Onde voce anuncia hoje?
78
+
79
+ Para `PROJECT_TYPE = discovery`, perguntar:
80
+ > Sem problema. Vamos decidir a estrutura antes da parte tecnica.
81
+ > 1. Voce quer vender por site, WhatsApp ou link de afiliado?
82
+ > 2. Voce ja tem dominio?
83
+ > 3. Voce ja tem conta Cloudflare?
84
+ > 4. Voce pretende anunciar em Meta, Google ou TikTok?
85
+
86
+ Para `PROJECT_TYPE = audit`, perguntar:
87
+ > Certo. Vou revisar a instalacao existente.
88
+ > 1. Onde esta o projeto ou repositorio?
89
+ > 2. Qual e o dominio/URL do Worker?
90
+ > 3. O problema atual e instalacao, eventos, webhook, deploy, ou validacao nas plataformas?
41
91
 
42
92
  ---
43
93
 
@@ -1208,13 +1258,8 @@ Deploy: OK — [worker-url]
1208
1258
 
1209
1259
  ### MENSAGEM DE BOAS-VINDAS (disparar na ativação do agente)
1210
1260
 
1211
- Ao ser ativado, o Master Orchestrator exibe imediatamente:
1212
-
1213
- ---
1214
-
1215
- > ⚡ **Master Orchestrator ativo — CDP Edge Quantum Tracker**
1216
- >
1217
- > Pronto para criar seu projeto Enterprise de rastreamento server-side 100% Cloudflare Native.
1261
+ Ao ser ativado, o Master Orchestrator deve usar a mensagem definida em **COMPORTAMENTO DE INICIALIZAÇÃO (PRIMEIRA MENSAGEM)**.
1262
+ Não exibir menus técnicos, lista de agentes ou pedidos de credenciais antes da triagem inicial por situação do usuário.
1218
1263
 
1219
1264
  ---
1220
1265
 
@@ -1260,7 +1305,7 @@ Antes de iniciar qualquer fase de geração de código, o Master Orchestrator DE
1260
1305
 
1261
1306
  #### PASSO 1 — Plataformas de anúncio
1262
1307
 
1263
- Logo após a boas-vindas, exibir:
1308
+ Depois que o usuário escolher a situação inicial e responder as perguntas básicas do caminho, exibir:
1264
1309
 
1265
1310
  ---
1266
1311
 
@@ -1295,6 +1340,8 @@ Logo após a boas-vindas, exibir:
1295
1340
 
1296
1341
  Aguardar resposta. Armazenar em `SELECTED_PLATFORMS`.
1297
1342
 
1343
+ Se o usuário já informou as plataformas nas perguntas básicas do caminho, não repetir esta pergunta. Apenas confirmar as plataformas detectadas e seguir para o PASSO 2 de credenciais.
1344
+
1298
1345
  **Regra automática:** Meta (1) selecionado → `whatsapp_ctwa: true` automaticamente.
1299
1346
 
1300
1347
  **Confirmação:**
@@ -1323,6 +1370,7 @@ Exibir:
1323
1370
  > - `WHATSAPP_PHONE_NUMBER_ID` — ID do número WhatsApp (Meta Business Suite → WhatsApp → Phone Numbers)
1324
1371
  > - `WHATSAPP_ACCESS_TOKEN` — Token da Cloud API (Meta Business Suite → WhatsApp → Configurações da API)
1325
1372
  > - `WA_WEBHOOK_VERIFY_TOKEN` — Você define (qualquer string segura, ex: `cdp_webhook_2025`)
1373
+ > - `META_APP_SECRET` — App Secret da Meta para validar `x-hub-signature-256` no webhook WhatsApp
1326
1374
 
1327
1375
  **Bloco Google / GA4** (incluir se Google selecionado):
1328
1376
  > - `GA4_MEASUREMENT_ID` — ID de medição (formato G-XXXXXXXXXX)
@@ -1378,6 +1426,7 @@ Exibir:
1378
1426
 
1379
1427
  **Sempre incluir:**
1380
1428
  > - `SITE_URL` — URL do seu funil/site (ex: https://meusite.com.br)
1429
+ > - `ADMIN_API_TOKEN` — token Bearer seguro para `/api/*`, `/api/health` e `/validate-install`
1381
1430
  > - `CF_ACCOUNT_ID` — ID da conta Cloudflare *(opcional — para deploy automático)*
1382
1431
  > - `CF_API_TOKEN` — API Token Cloudflare *(opcional — para deploy automático)*
1383
1432
  >
@@ -1,4 +1,4 @@
1
- /**
1
+ /**
2
2
  * INTEGRATION TEST - CDP Edge (Quantum Tier)
3
3
  *
4
4
  * Sistema de validação end-to-end do Premium Tracking Intelligence
@@ -13,8 +13,8 @@ const isBrowser = typeof window !== 'undefined';
13
13
  // ── Configurações de Teste ─────────────────────────────
14
14
 
15
15
  const TEST_CONFIG = {
16
- endpoint: '/api/tracking',
17
- healthEndpoint: '/api/health',
16
+ endpoint: '/track',
17
+ healthEndpoint: '/health',
18
18
  timeout: 10000, // 10 segundos
19
19
  testEvents: [
20
20
  'PageView',
@@ -1523,7 +1523,7 @@ Obrigado → PageView (+ Lead apenas se não foi disparado no formulário
1523
1523
 
1524
1524
  ## PASSO 6 — MODO SERVER-SIDE (quando solicitado)
1525
1525
 
1526
- > **Quando usar:** o usuário pede tracking server-side, CAPI, Measurement Protocol, "evitar bloqueio de adblocker", ou quer o endpoint `/api/tracking`.
1526
+ > **Quando usar:** o usuário pede tracking server-side, CAPI, Measurement Protocol, "evitar bloqueio de adblocker", ou quer o endpoint `/track`.
1527
1527
 
1528
1528
  ### Por que server-side existe
1529
1529
 
@@ -1537,9 +1537,9 @@ Browser (tracking.js)
1537
1537
  ├── gera event_id único
1538
1538
  ├── lê cookies: _fbp, _fbc, _ttp, _ga
1539
1539
  ├── captura UTMs da URL (utm_source, utm_medium, utm_campaign, utm_content, utm_term)
1540
- └── POST /api/tracking → { event_name, event_id, cookies, utms, user_data, page_url }
1540
+ └── POST /track → { event_name, event_id, cookies, utms, user_data, page_url }
1541
1541
 
1542
- Servidor Node.js (/api/tracking)
1542
+ Servidor Node.js (/track)
1543
1543
  ├── recebe payload do browser
1544
1544
  ├── adiciona: IP real, User-Agent do header
1545
1545
  ├── SHA256 hash: email, phone, nome, cidade, estado, CEP, país
@@ -1615,7 +1615,7 @@ const getCookies = () => ({
1615
1615
  const sendServerEvent = (eventName, eventId, payload = {}) => {
1616
1616
  if (!isBrowser) return;
1617
1617
  // Não usar await — deixar rodar em paralelo com o event client-side
1618
- fetch('/api/tracking', {
1618
+ fetch('/track', {
1619
1619
  method: 'POST',
1620
1620
  headers: { 'Content-Type': 'application/json' },
1621
1621
  body: JSON.stringify({
@@ -1662,12 +1662,12 @@ export const trackLead = async (params = {}) => {
1662
1662
 
1663
1663
  ---
1664
1664
 
1665
- ### PASSO 6.3 — Endpoint `/api/tracking` (Node.js / Next.js API Route)
1665
+ ### PASSO 6.3 — Endpoint `/track` (Node.js / Next.js API Route)
1666
1666
 
1667
1667
  ```js
1668
- // Node.js Express: src/api/tracking.js
1669
- // Next.js App Router: app/api/tracking/route.js
1670
- // Next.js Pages Router: pages/api/tracking.js
1668
+ // Node.js Express: src/track.js
1669
+ // Next.js App Router: app/track/route.js
1670
+ // Next.js Pages Router: pages/track.js
1671
1671
 
1672
1672
  import crypto from 'crypto';
1673
1673
  import CONFIG from '../tracking/tracking.config.js'; // ajustar path
@@ -1984,7 +1984,7 @@ O CDP Edge recomenda o uso de **Cloudflare Workers (Quantum Tier)** como endpoin
1984
1984
 
1985
1985
  ## PASSO 6.6 — Cloudflare Workers + D1 (Full Core Tracking)
1986
1986
 
1987
- > **Quando usar:** O padrão ouro do CDP Edge. Roda o endpoint `/api/tracking` no Cloudflare Workers e salva todos os eventos e perfis no banco D1 para atribuição precisa.
1987
+ > **Quando usar:** O padrão ouro do CDP Edge. Roda o endpoint `/track` no Cloudflare Workers e salva todos os eventos e perfis no banco D1 para atribuição precisa.
1988
1988
 
1989
1989
  ### Vantagens da Infraestrutura Cloudflare Native
1990
1990
 
@@ -2465,7 +2465,7 @@ wrangler deploy
2465
2465
  # URL gerada: https://cdp-edge-tracking.SEU_USUARIO.workers.dev
2466
2466
  ```
2467
2467
 
2468
- > Após o deploy, o Worker fica disponível em `https://cdp-edge-tracking.SEU_USUARIO.workers.dev`. Para usar `/api/tracking` no site, criar um **Custom Domain** nas configurações do Worker ou usar a URL completa.
2468
+ > Após o deploy, o Worker fica disponível em `https://cdp-edge-tracking.SEU_USUARIO.workers.dev`. Para usar `/track` no site, criar um **Custom Domain** nas configurações do Worker ou usar a URL completa.
2469
2469
 
2470
2470
  ---
2471
2471
 
@@ -2474,7 +2474,7 @@ wrangler deploy
2474
2474
  Se o site e o Worker estão em domínios diferentes, mudar a URL no `tracking.js`:
2475
2475
 
2476
2476
  ```js
2477
- // Em vez de '/api/tracking' (mesmo domínio — Next.js / Vite server)
2477
+ // Em vez de '/track' (mesmo domínio — Next.js / Vite server)
2478
2478
  // usar a URL do Worker:
2479
2479
  const TRACKING_ENDPOINT = 'https://cdp-edge-tracking.SEU_USUARIO.workers.dev';
2480
2480
 
@@ -2496,7 +2496,7 @@ const sendServerEvent = (eventName, eventId, payload = {}) => {
2496
2496
  };
2497
2497
  ```
2498
2498
 
2499
- > Se o site rodar em **Cloudflare Pages**, usar `functions/api/tracking.js` — o código do Worker é idêntico, só muda o handler para `export async function onRequestPost({ request, env, waitUntil })`.
2499
+ > Se o site rodar em **Cloudflare Pages**, usar `functions/track.js` — o código do Worker é idêntico, só muda o handler para `export async function onRequestPost({ request, env, waitUntil })`.
2500
2500
 
2501
2501
  ---
2502
2502
 
@@ -31,7 +31,7 @@ Este script captura dados à medida que o usuário preenche o formulário.
31
31
  ```javascript
32
32
  <script>
33
33
  (function() {
34
- const WORKER_URL = 'https://api.seusite.com/api/tracking';
34
+ const WORKER_URL = 'https://api.seusite.com/track';
35
35
 
36
36
  // Atualização de identidade ao sair do campo (Blur Event)
37
37
  const inputs = document.querySelectorAll('input[type="email"], input[type="tel"]');
@@ -50,7 +50,7 @@ Step 4: Confirmação / Obrigado
50
50
  <script src="/js/cdpTrack.js" async></script>
51
51
  <script>
52
52
  window.cdpConfig = {
53
- workerUrl: '/api/tracking', // Same-Domain (furtivo)
53
+ workerUrl: '/track', // Same-Domain (furtivo)
54
54
  metaId: 'SEU_PIXEL_ID',
55
55
  ga4Id: 'G-XXXXXXXX',
56
56
  tiktokId: 'C4XXXXXXXXXXXXXXX',
@@ -204,7 +204,7 @@ document.addEventListener('visibilitychange', async () => {
204
204
  const cdp_uid = document.cookie.match(/cdp_uid=([^;]+)/)?.[1] || '';
205
205
 
206
206
  // Usa navigator.sendBeacon para garantir envio mesmo se browser encerrar
207
- navigator.sendBeacon('/api/tracking', JSON.stringify({
207
+ navigator.sendBeacon('/track', JSON.stringify({
208
208
  event_name: 'CheckoutAbandonment',
209
209
  cdp_uid,
210
210
  step: checkoutState.step,
@@ -236,7 +236,7 @@ export default {
236
236
  return new Response(null, { headers: cors });
237
237
  }
238
238
 
239
- if (url.pathname === '/api/tracking') {
239
+ if (url.pathname === '/track') {
240
240
  return handleTracking(request, env, ctx);
241
241
  }
242
242
 
@@ -589,7 +589,7 @@ CREATE INDEX IF NOT EXISTS idx_events_created ON events_log(created_at);
589
589
  - [ ] CheckoutAbandonment usa `navigator.sendBeacon` para garantir envio
590
590
 
591
591
  ### Cloudflare Worker
592
- - [ ] Endpoint `/api/tracking` configurado como Route no Cloudflare
592
+ - [ ] Endpoint `/track` configurado como Route no Cloudflare
593
593
  - [ ] Identity Graph atualizado progressivamente conforme usuário preenche campos
594
594
  - [ ] Meta CAPI v25.0 endpoint correto
595
595
  - [ ] TikTok Events API v1.3 endpoint correto
@@ -183,7 +183,7 @@ function generateEventId() {
183
183
  * @param {Object} data - Dados completos do evento
184
184
  */
185
185
  async function sendToServer(eventName, data) {
186
- const serverUrl = '/api/track'; // ou URL configurada
186
+ const serverUrl = '/track'; // ou URL configurada
187
187
 
188
188
  await fetch(serverUrl, {
189
189
  method: 'POST',
@@ -299,7 +299,7 @@ const BehaviorEngine = {
299
299
  fields_count: formInteracted.size,
300
300
  meta_intensity: 'medium',
301
301
  });
302
- navigator.sendBeacon('/api/tracking', new Blob([data], { type: 'application/json' }));
302
+ navigator.sendBeacon('/track', new Blob([data], { type: 'application/json' }));
303
303
  }
304
304
  }
305
305
  });
@@ -19,7 +19,7 @@ Mede a eficácia do vídeo de vendas antes do botão de compra aparecer.
19
19
  * **Ação**: Disparar `ViewContent` (25/50/75) e `AddToCart` (100% ou clique no botão).
20
20
 
21
21
  ### 3. Adblock Immunity (Stealth Tracking)
22
- Utiliza rotas no mesmo domínio (ex: `/api/tracking`) para garantir que o script de rastreamento não seja bloqueado por uBlock ou Ghostery.
22
+ Utiliza rotas no mesmo domínio (ex: `/track`) para garantir que o script de rastreamento não seja bloqueado por uBlock ou Ghostery.
23
23
 
24
24
  ---
25
25