@gurulu/web 1.2.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"activate-runtime.d.ts","sourceRoot":"","sources":["../src/activate-runtime.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,gBAAgB,EAAqB,MAAM,iBAAiB,CAAC;AAE3E,UAAU,cAAc;IACtB,UAAU,EAAE,gBAAgB,CAAC;CAC9B;AAoOD;;;GAGG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,cAAc,EACnB,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,eAAe,CAAC,EAAE,OAAO,CAAA;CAAE,GACtE,OAAO,CAAC,IAAI,CAAC,CAYf"}
1
+ {"version":3,"file":"activate-runtime.d.ts","sourceRoot":"","sources":["../src/activate-runtime.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,gBAAgB,EAAqB,MAAM,iBAAiB,CAAC;AAE3E,UAAU,cAAc;IACtB,UAAU,EAAE,gBAAgB,CAAC;CAC9B;AAoPD;;;GAGG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,cAAc,EACnB,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,eAAe,CAAC,EAAE,OAAO,CAAA;CAAE,GACtE,OAAO,CAAC,IAAI,CAAC,CAYf"}
@@ -64,15 +64,17 @@ function renderPopup(act, p) {
64
64
  const bg = c.bg_color || "#ffffff";
65
65
  const text = c.text_color || "#111111";
66
66
  const accent = c.accent_color || "#2563eb";
67
+ const imgUrl = sanitizeUrl(c.image_url);
68
+ const ctaUrl = sanitizeUrl(c.cta_url);
67
69
  const inner = document.createElement("div");
68
70
  inner.style.background = bg;
69
71
  inner.style.color = text;
70
72
  inner.innerHTML = `
71
73
  <button class="gurulu-close" aria-label="close">&times;</button>
72
- ${c.image_url ? `<img class="gurulu-img" src="${c.image_url}" alt="">` : ""}
74
+ ${imgUrl ? `<img class="gurulu-img" src="${imgUrl}" alt="">` : ""}
73
75
  ${c.title ? `<div class="gurulu-title">${escapeText(c.title)}</div>` : ""}
74
76
  ${c.body_html ? `<div class="gurulu-body">${c.body_html}</div>` : ""}
75
- ${c.cta_label ? `<a class="gurulu-cta" style="background:${accent}" href="${c.cta_url || "#"}" target="_blank" rel="noopener">${escapeText(c.cta_label)}</a>` : ""}
77
+ ${c.cta_label ? `<a class="gurulu-cta" style="background:${accent}" href="${ctaUrl || "#"}" target="_blank" rel="noopener">${escapeText(c.cta_label)}</a>` : ""}
76
78
  `;
77
79
  let container;
78
80
  if (p.type === "banner") {
@@ -215,6 +217,15 @@ function runTour(act, tour) {
215
217
  function escapeText(s) {
216
218
  return s.replace(/[&<>"]/g, (ch) => ch === "&" ? "&amp;" : ch === "<" ? "&lt;" : ch === ">" ? "&gt;" : "&quot;");
217
219
  }
220
+ function sanitizeUrl(v) {
221
+ if (!v)
222
+ return "";
223
+ if (!/^(https?:\/\/|mailto:)/i.test(v))
224
+ return "";
225
+ if (/["'<>\s]/.test(v))
226
+ return "";
227
+ return v;
228
+ }
218
229
  async function runActivation(sdk, opts) {
219
230
  if (typeof document === "undefined")
220
231
  return;
@@ -93,7 +93,18 @@ export declare class GuruluActivation {
93
93
  getVariant(experimentKey: string): string | null;
94
94
  trackPopup(key: string, action: 'shown' | 'clicked' | 'dismissed'): void;
95
95
  trackTour(key: string, action: 'started' | 'step_completed' | 'completed' | 'dismissed', stepIndex?: number): void;
96
- /** Tur ilerlemesini server'a kaydet (cross-device). Best-effort. */
96
+ /**
97
+ * Tur ilerlemesini server'a kaydet (cross-device). Best-effort.
98
+ *
99
+ * Public plane v1'de progress = event-driven: bu metod `tour_step_completed` /
100
+ * `tour_completed` / `tour_dismissed` Interaction event'lerini emit eder
101
+ * (K16 gözlem). Server tarafında `apps/workers` tour-progress-worker bunları
102
+ * `events_canonical`'dan çekip PG `tour_progress` tablosuna upsert eder
103
+ * (identity M5 uid ile cross-device resume). SDK'da ağır mantık yok — sadece
104
+ * track; tour_id çözümü + array union server'da. Hosted runtime'da
105
+ * (`@gurulu/web/activate`) bu event'ler zaten `trackTour` ile gider, bu metod
106
+ * headless müşteri (kendi render) için aynı yolu sağlar.
107
+ */
97
108
  saveTourProgress(tourKey: string, body: {
98
109
  current_step?: number;
99
110
  completed_step?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"activation.d.ts","sourceRoot":"","sources":["../src/activation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"activation.d.ts","sourceRoot":"","sources":["../src/activation.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -106,7 +106,17 @@ class GuruluActivation {
106
106
  ...stepIndex !== undefined ? { step_index: stepIndex } : {}
107
107
  });
108
108
  }
109
- async saveTourProgress(tourKey, body) {}
109
+ async saveTourProgress(tourKey, body) {
110
+ if (body.completed_step !== undefined) {
111
+ this.trackTour(tourKey, "step_completed", body.completed_step);
112
+ }
113
+ if (body.completed) {
114
+ this.trackTour(tourKey, "completed", body.current_step);
115
+ }
116
+ if (body.dismissed) {
117
+ this.trackTour(tourKey, "dismissed", body.current_step);
118
+ }
119
+ }
110
120
  snapshot() {
111
121
  return this.data ?? EMPTY;
112
122
  }
@@ -1 +1 @@
1
- {"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../src/react.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,SAAS,EAAa,MAAM,OAAO,CAAC;AAElD,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE/D,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,CAAC;AAExE,+DAA+D;AAC/D,wBAAgB,cAAc,CAAC,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,mBAAmB,GAAG,SAAS,CAOpF;AAED,sEAAsE;AACtE,wBAAgB,SAAS,IAAI,eAAe,CAE3C"}
1
+ {"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../src/react.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,SAAS,EAAa,MAAM,OAAO,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG/D,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,CAAC;AAExE,+DAA+D;AAC/D,wBAAgB,cAAc,CAAC,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,EAAE,mBAAmB,GAAG,SAAS,CAOpF;AAED,sEAAsE;AACtE,wBAAgB,SAAS,IAAI,eAAe,CAE3C"}
package/dist/react.js CHANGED
@@ -106,7 +106,17 @@ class GuruluActivation {
106
106
  ...stepIndex !== undefined ? { step_index: stepIndex } : {}
107
107
  });
108
108
  }
109
- async saveTourProgress(tourKey, body) {}
109
+ async saveTourProgress(tourKey, body) {
110
+ if (body.completed_step !== undefined) {
111
+ this.trackTour(tourKey, "step_completed", body.completed_step);
112
+ }
113
+ if (body.completed) {
114
+ this.trackTour(tourKey, "completed", body.current_step);
115
+ }
116
+ if (body.dismissed) {
117
+ this.trackTour(tourKey, "dismissed", body.current_step);
118
+ }
119
+ }
110
120
  snapshot() {
111
121
  return this.data ?? EMPTY;
112
122
  }
package/dist/t.js CHANGED
@@ -1,10 +1,10 @@
1
- function Mu(u){let r=2166136261;for(let o=0;o<u.length;o++)r^=u.charCodeAt(o),r=Math.imul(r,16777619);return r>>>0}function zu(u,r){return Mu(`${u}:${r}`)%1e4/1e4}var d={workspace_id:"",popups:[],tours:[],personalizations:[],experiments:[]};class V{cfg;data=null;pending=null;exposed=new Set;served=new Set;constructor(u){this.cfg=u}async refresh(u){if(this.pending)return this.pending;let r=this.cfg.fetchImpl??(typeof fetch<"u"?fetch.bind(globalThis):null);if(!r)return d;let o=this.cfg.getUid(),n=new URLSearchParams;if(o)n.set("uid",o);let m=typeof window<"u"&&window.location?window.location.href:"",_=u?.url??m;if(_)n.set("url",_);let c=typeof navigator<"u"&&navigator.userAgent?navigator.userAgent:"",A=u?.device??(/Mobi|Android/i.test(c)?"mobile":"desktop");return n.set("device",A),this.pending=(async()=>{try{let E=await r(`${this.cfg.endpoint}/v1/activate?${n.toString()}`,{method:"GET",headers:{Authorization:`Bearer ${this.cfg.workspaceKey}`},credentials:"omit"});if(!E.ok)return this.data??d;return this.data=await E.json(),this.data}catch{return this.data??d}finally{this.pending=null}})(),this.pending}getPopups(){return this.data?.popups??[]}getTours(){return this.data?.tours??[]}getContent(u){let r=(this.data?.personalizations??[]).find((o)=>o.slot_key===u);if(!r)return null;if(!this.served.has(r.key))this.served.add(r.key),this.cfg.track("personalization_served",{personalization_key:r.key,variant_key:r.variant_key,is_holdout:r.is_holdout});return r.content}getVariant(u){let r=(this.data?.experiments??[]).find((n)=>n.key===u);if(!r)return null;let o=r.assigned_variant??Du(u,this.cfg.getUid(),r.variants);if(o&&!this.exposed.has(u))this.exposed.add(u),this.cfg.track("experiment_exposed",{experiment_key:u,variant_key:o});return o}trackPopup(u,r){this.cfg.track(`popup_${r}`,{popup_key:u})}trackTour(u,r,o){this.cfg.track(`tour_${r}`,{tour_key:u,...o!==void 0?{step_index:o}:{}})}async saveTourProgress(u,r){}snapshot(){return this.data??d}}function Du(u,r,o){let n=o.filter((A)=>A.weight>0&&A.key.length>0);if(n.length===0||!r)return null;let m=n.reduce((A,E)=>A+E.weight,0);if(m<=0)return null;let _=zu(u,r),c=0;for(let A of n)if(c+=A.weight/m,_<c)return A.key;return n[n.length-1].key}class h{workspaceId;apiUrl;fetchImpl;storage;autoBanner;locale;anonymousIdValue;bannerConfigCache=null;bannerEl=null;constructor(u){this.workspaceId=u.workspaceId,this.apiUrl=(u.apiUrl??"https://api.gurulu.io").replace(/\/+$/,""),this.fetchImpl=u.fetchImpl??(typeof fetch<"u"?fetch.bind(globalThis):$u),this.storage=u.storage??(typeof globalThis<"u"&&"localStorage"in globalThis?globalThis.localStorage:null),this.autoBanner=u.autoBanner??!0,this.locale=u.locale??Vu(),this.anonymousIdValue=u.anonymousId??this.loadOrCreateAnonId()}async init(){if(typeof window>"u")return;try{let r=await this.fetchImpl(`${this.apiUrl}/v1/consent/banner-config?workspace_id=${encodeURIComponent(this.workspaceId)}`,{method:"GET",credentials:"omit"});if(!r.ok)return;this.bannerConfigCache=await r.json()}catch{return}if(!this.getState()&&this.autoBanner&&this.bannerConfigCache?.mode==="banner_required")this.showBanner()}getState(){if(!this.storage)return null;try{let u=this.storage.getItem(this.storageKey());if(!u)return null;let r=JSON.parse(u);if(r.expiresAt&&new Date(r.expiresAt).getTime()<Date.now())return this.storage.removeItem(this.storageKey()),null;return r}catch{return null}}async setState(u){let r=this.getState()?.categories,o={necessary:!0,analytics:u.analytics??r?.analytics??!1,marketing:u.marketing??r?.marketing??!1,functional:u.functional??r?.functional??!1,personalization:u.personalization??r?.personalization??!1},n=new Date,m=this.bannerConfigCache?.renewal_months??13,_=new Date(n);_.setMonth(_.getMonth()+m);let c={workspaceId:this.workspaceId,anonymousId:this.anonymousIdValue,categories:o,grantedAt:n.toISOString(),expiresAt:_.toISOString(),source:"sdk_api"};if(this.storage)try{this.storage.setItem(this.storageKey(),JSON.stringify(c))}catch{}try{await this.fetchImpl(`${this.apiUrl}/v1/consent/state`,{method:"POST",credentials:"omit",headers:{"content-type":"application/json"},body:JSON.stringify({workspace_id:this.workspaceId,anonymous_id:this.anonymousIdValue,necessary:o.necessary,analytics:o.analytics,marketing:o.marketing,functional:o.functional,personalization:o.personalization,source:"sdk_api"})})}catch{}}showBanner(){if(typeof document>"u")return;if(this.bannerEl)return;let u=this.bannerConfigCache?.banner_config??{},r=this.bannerText(),o=u.brand?.primary_color??"#fafafa",n=u.position??"bottom",m=document.createElement("div");m.setAttribute("data-gurulu-consent-banner",""),m.setAttribute("role","dialog"),m.setAttribute("aria-label",r.heading),m.style.cssText=Tu(n),m.innerHTML=qu(r,o);let _=m.querySelector("[data-gurulu-accept]"),c=m.querySelector("[data-gurulu-reject]");_?.addEventListener("click",()=>{this.setState({analytics:!0,marketing:!0,functional:!0,personalization:!0}),this.hideBanner()}),c?.addEventListener("click",()=>{this.setState({analytics:!1,marketing:!1,functional:!1,personalization:!1}),this.hideBanner()}),document.body.appendChild(m),this.bannerEl=m}hideBanner(){if(this.bannerEl?.parentNode)this.bannerEl.parentNode.removeChild(this.bannerEl);this.bannerEl=null}buildIngestHeader(){let u=this.getState();if(!u)return JSON.stringify({necessary:!0});return JSON.stringify(u.categories)}getAnonymousId(){return this.anonymousIdValue}storageKey(){return`gurulu_consent_${this.workspaceId}`}loadOrCreateAnonId(){if(!this.storage)return R();try{let u=this.storage.getItem("gurulu_anon_id");if(u)return u;let r=R();return this.storage.setItem("gurulu_anon_id",r),r}catch{return R()}}bannerText(){let r=this.bannerConfigCache?.banner_config?.text_overrides?.[this.locale];if(this.locale==="tr")return{heading:r?.heading??"Çerezleri tercih et",body:r?.body??"Deneyimini iyileştirmek için analytics + pazarlama çerezleri kullanıyoruz.",accept:r?.accept??"Tümünü kabul et",reject:r?.reject??"Sadece gerekli olanlar"};return{heading:r?.heading??"Manage cookies",body:r?.body??"We use analytics and marketing cookies to improve your experience.",accept:r?.accept??"Accept all",reject:r?.reject??"Necessary only"}}}function Tu(u){switch(u){case"top":return"position:fixed;z-index:2147483647;background:#141414;color:#fafafa;border:1px solid #262626;border-radius:8px;padding:16px;font-family:-apple-system,Segoe UI,Roboto,sans-serif;font-size:14px;line-height:1.5;box-shadow:0 4px 24px rgba(0,0,0,0.4);max-width:480px;top:16px;left:50%;transform:translateX(-50%);";case"bottom-left":return"position:fixed;z-index:2147483647;background:#141414;color:#fafafa;border:1px solid #262626;border-radius:8px;padding:16px;font-family:-apple-system,Segoe UI,Roboto,sans-serif;font-size:14px;line-height:1.5;box-shadow:0 4px 24px rgba(0,0,0,0.4);max-width:480px;bottom:16px;left:16px;";case"bottom-right":return"position:fixed;z-index:2147483647;background:#141414;color:#fafafa;border:1px solid #262626;border-radius:8px;padding:16px;font-family:-apple-system,Segoe UI,Roboto,sans-serif;font-size:14px;line-height:1.5;box-shadow:0 4px 24px rgba(0,0,0,0.4);max-width:480px;bottom:16px;right:16px;";case"modal":return"position:fixed;z-index:2147483647;background:#141414;color:#fafafa;border:1px solid #262626;border-radius:8px;padding:16px;font-family:-apple-system,Segoe UI,Roboto,sans-serif;font-size:14px;line-height:1.5;box-shadow:0 4px 24px rgba(0,0,0,0.4);max-width:480px;top:50%;left:50%;transform:translate(-50%,-50%);";default:return"position:fixed;z-index:2147483647;background:#141414;color:#fafafa;border:1px solid #262626;border-radius:8px;padding:16px;font-family:-apple-system,Segoe UI,Roboto,sans-serif;font-size:14px;line-height:1.5;box-shadow:0 4px 24px rgba(0,0,0,0.4);max-width:480px;bottom:16px;left:50%;transform:translateX(-50%);"}}function qu(u,r){return`
2
- <div style="margin-bottom:12px;font-weight:600;">${$(u.heading)}</div>
3
- <div style="margin-bottom:16px;color:#a3a3a3;">${$(u.body)}</div>
1
+ function qu(u){let n=2166136261;for(let r=0;r<u.length;r++)n^=u.charCodeAt(r),n=Math.imul(n,16777619);return n>>>0}function zu(u,n){return qu(`${u}:${n}`)%1e4/1e4}var N={workspace_id:"",popups:[],tours:[],personalizations:[],experiments:[]};class h{cfg;data=null;pending=null;exposed=new Set;served=new Set;constructor(u){this.cfg=u}async refresh(u){if(this.pending)return this.pending;let n=this.cfg.fetchImpl??(typeof fetch<"u"?fetch.bind(globalThis):null);if(!n)return N;let r=this.cfg.getUid(),m=new URLSearchParams;if(r)m.set("uid",r);let _=typeof window<"u"&&window.location?window.location.href:"",A=u?.url??_;if(A)m.set("url",A);let c=typeof navigator<"u"&&navigator.userAgent?navigator.userAgent:"",E=u?.device??(/Mobi|Android/i.test(c)?"mobile":"desktop");return m.set("device",E),this.pending=(async()=>{try{let o=await n(`${this.cfg.endpoint}/v1/activate?${m.toString()}`,{method:"GET",headers:{Authorization:`Bearer ${this.cfg.workspaceKey}`},credentials:"omit"});if(!o.ok)return this.data??N;return this.data=await o.json(),this.data}catch{return this.data??N}finally{this.pending=null}})(),this.pending}getPopups(){return this.data?.popups??[]}getTours(){return this.data?.tours??[]}getContent(u){let n=(this.data?.personalizations??[]).find((r)=>r.slot_key===u);if(!n)return null;if(!this.served.has(n.key))this.served.add(n.key),this.cfg.track("personalization_served",{personalization_key:n.key,variant_key:n.variant_key,is_holdout:n.is_holdout});return n.content}getVariant(u){let n=(this.data?.experiments??[]).find((m)=>m.key===u);if(!n)return null;let r=n.assigned_variant??Tu(u,this.cfg.getUid(),n.variants);if(r&&!this.exposed.has(u))this.exposed.add(u),this.cfg.track("experiment_exposed",{experiment_key:u,variant_key:r});return r}trackPopup(u,n){this.cfg.track(`popup_${n}`,{popup_key:u})}trackTour(u,n,r){this.cfg.track(`tour_${n}`,{tour_key:u,...r!==void 0?{step_index:r}:{}})}async saveTourProgress(u,n){if(n.completed_step!==void 0)this.trackTour(u,"step_completed",n.completed_step);if(n.completed)this.trackTour(u,"completed",n.current_step);if(n.dismissed)this.trackTour(u,"dismissed",n.current_step)}snapshot(){return this.data??N}}function Tu(u,n,r){let m=r.filter((E)=>E.weight>0&&E.key.length>0);if(m.length===0||!n)return null;let _=m.reduce((E,o)=>E+o.weight,0);if(_<=0)return null;let A=zu(u,n),c=0;for(let E of m)if(c+=E.weight/_,A<c)return E.key;return m[m.length-1].key}class R{workspaceId;apiUrl;fetchImpl;storage;autoBanner;locale;anonymousIdValue;bannerConfigCache=null;bannerEl=null;constructor(u){this.workspaceId=u.workspaceId,this.apiUrl=(u.apiUrl??"https://api.gurulu.io").replace(/\/+$/,""),this.fetchImpl=u.fetchImpl??(typeof fetch<"u"?fetch.bind(globalThis):Qu),this.storage=u.storage??(typeof globalThis<"u"&&"localStorage"in globalThis?globalThis.localStorage:null),this.autoBanner=u.autoBanner??!0,this.locale=u.locale??hu(),this.anonymousIdValue=u.anonymousId??this.loadOrCreateAnonId()}async init(){if(typeof window>"u")return;try{let n=await this.fetchImpl(`${this.apiUrl}/v1/consent/banner-config?workspace_id=${encodeURIComponent(this.workspaceId)}`,{method:"GET",credentials:"omit"});if(!n.ok)return;this.bannerConfigCache=await n.json()}catch{return}if(!this.getState()&&this.autoBanner&&this.bannerConfigCache?.mode==="banner_required")this.showBanner()}getState(){if(!this.storage)return null;try{let u=this.storage.getItem(this.storageKey());if(!u)return null;let n=JSON.parse(u);if(n.expiresAt&&new Date(n.expiresAt).getTime()<Date.now())return this.storage.removeItem(this.storageKey()),null;return n}catch{return null}}async setState(u){let n=this.getState()?.categories,r={necessary:!0,analytics:u.analytics??n?.analytics??!1,marketing:u.marketing??n?.marketing??!1,functional:u.functional??n?.functional??!1,personalization:u.personalization??n?.personalization??!1},m=new Date,_=this.bannerConfigCache?.renewal_months??13,A=new Date(m);A.setMonth(A.getMonth()+_);let c={workspaceId:this.workspaceId,anonymousId:this.anonymousIdValue,categories:r,grantedAt:m.toISOString(),expiresAt:A.toISOString(),source:"sdk_api"};if(this.storage)try{this.storage.setItem(this.storageKey(),JSON.stringify(c))}catch{}try{await this.fetchImpl(`${this.apiUrl}/v1/consent/state`,{method:"POST",credentials:"omit",headers:{"content-type":"application/json"},body:JSON.stringify({workspace_id:this.workspaceId,anonymous_id:this.anonymousIdValue,necessary:r.necessary,analytics:r.analytics,marketing:r.marketing,functional:r.functional,personalization:r.personalization,source:"sdk_api"})})}catch{}}showBanner(){if(typeof document>"u")return;if(this.bannerEl)return;let u=this.bannerConfigCache?.banner_config??{},n=this.bannerText(),r=u.brand?.primary_color??"#fafafa",m=u.position??"bottom",_=document.createElement("div");_.setAttribute("data-gurulu-consent-banner",""),_.setAttribute("role","dialog"),_.setAttribute("aria-label",n.heading),_.style.cssText=Vu(m),_.innerHTML=$u(n,r);let A=_.querySelector("[data-gurulu-accept]"),c=_.querySelector("[data-gurulu-reject]");A?.addEventListener("click",()=>{this.setState({analytics:!0,marketing:!0,functional:!0,personalization:!0}),this.hideBanner()}),c?.addEventListener("click",()=>{this.setState({analytics:!1,marketing:!1,functional:!1,personalization:!1}),this.hideBanner()}),document.body.appendChild(_),this.bannerEl=_}hideBanner(){if(this.bannerEl?.parentNode)this.bannerEl.parentNode.removeChild(this.bannerEl);this.bannerEl=null}buildIngestHeader(){let u=this.getState();if(!u)return JSON.stringify({necessary:!0});return JSON.stringify(u.categories)}getAnonymousId(){return this.anonymousIdValue}storageKey(){return`gurulu_consent_${this.workspaceId}`}loadOrCreateAnonId(){if(!this.storage)return W();try{let u=this.storage.getItem("gurulu_anon_id");if(u)return u;let n=W();return this.storage.setItem("gurulu_anon_id",n),n}catch{return W()}}bannerText(){let n=this.bannerConfigCache?.banner_config?.text_overrides?.[this.locale];if(this.locale==="tr")return{heading:n?.heading??"Çerezleri tercih et",body:n?.body??"Deneyimini iyileştirmek için analytics + pazarlama çerezleri kullanıyoruz.",accept:n?.accept??"Tümünü kabul et",reject:n?.reject??"Sadece gerekli olanlar"};return{heading:n?.heading??"Manage cookies",body:n?.body??"We use analytics and marketing cookies to improve your experience.",accept:n?.accept??"Accept all",reject:n?.reject??"Necessary only"}}}function Vu(u){switch(u){case"top":return"position:fixed;z-index:2147483647;background:#141414;color:#fafafa;border:1px solid #262626;border-radius:8px;padding:16px;font-family:-apple-system,Segoe UI,Roboto,sans-serif;font-size:14px;line-height:1.5;box-shadow:0 4px 24px rgba(0,0,0,0.4);max-width:480px;top:16px;left:50%;transform:translateX(-50%);";case"bottom-left":return"position:fixed;z-index:2147483647;background:#141414;color:#fafafa;border:1px solid #262626;border-radius:8px;padding:16px;font-family:-apple-system,Segoe UI,Roboto,sans-serif;font-size:14px;line-height:1.5;box-shadow:0 4px 24px rgba(0,0,0,0.4);max-width:480px;bottom:16px;left:16px;";case"bottom-right":return"position:fixed;z-index:2147483647;background:#141414;color:#fafafa;border:1px solid #262626;border-radius:8px;padding:16px;font-family:-apple-system,Segoe UI,Roboto,sans-serif;font-size:14px;line-height:1.5;box-shadow:0 4px 24px rgba(0,0,0,0.4);max-width:480px;bottom:16px;right:16px;";case"modal":return"position:fixed;z-index:2147483647;background:#141414;color:#fafafa;border:1px solid #262626;border-radius:8px;padding:16px;font-family:-apple-system,Segoe UI,Roboto,sans-serif;font-size:14px;line-height:1.5;box-shadow:0 4px 24px rgba(0,0,0,0.4);max-width:480px;top:50%;left:50%;transform:translate(-50%,-50%);";default:return"position:fixed;z-index:2147483647;background:#141414;color:#fafafa;border:1px solid #262626;border-radius:8px;padding:16px;font-family:-apple-system,Segoe UI,Roboto,sans-serif;font-size:14px;line-height:1.5;box-shadow:0 4px 24px rgba(0,0,0,0.4);max-width:480px;bottom:16px;left:50%;transform:translateX(-50%);"}}function $u(u,n){return`
2
+ <div style="margin-bottom:12px;font-weight:600;">${Q(u.heading)}</div>
3
+ <div style="margin-bottom:16px;color:#a3a3a3;">${Q(u.body)}</div>
4
4
  <div style="display:flex;gap:8px;flex-wrap:wrap;">
5
- <button data-gurulu-accept type="button" style="background:${du(r)};color:#0a0a0a;border:none;padding:8px 16px;border-radius:6px;font-weight:600;cursor:pointer;">${$(u.accept)}</button>
6
- <button data-gurulu-reject type="button" style="background:transparent;color:#fafafa;border:1px solid #404040;padding:8px 16px;border-radius:6px;cursor:pointer;">${$(u.reject)}</button>
5
+ <button data-gurulu-accept type="button" style="background:${Nu(n)};color:#0a0a0a;border:none;padding:8px 16px;border-radius:6px;font-weight:600;cursor:pointer;">${Q(u.accept)}</button>
6
+ <button data-gurulu-reject type="button" style="background:transparent;color:#fafafa;border:1px solid #404040;padding:8px 16px;border-radius:6px;cursor:pointer;">${Q(u.reject)}</button>
7
7
  </div>
8
- `}function $(u){return u.replace(/[&<>"']/g,(r)=>{switch(r){case"&":return"&amp;";case"<":return"&lt;";case">":return"&gt;";case'"':return"&quot;";case"'":return"&#39;";default:return r}})}function du(u){return u.replace(/[^a-zA-Z0-9#()_\-., ]/g,"")}function Vu(){if(typeof navigator>"u")return"en";let u=(navigator.language??"").toLowerCase();if(u.startsWith("tr"))return"tr";if(u.startsWith("zh"))return"zh";if(u.startsWith("ar"))return"ar";return"en"}function R(){if(typeof crypto<"u"&&typeof crypto.randomUUID==="function")return`anon_${crypto.randomUUID()}`;return`anon_${Math.random().toString(36).slice(2)}${Date.now().toString(36)}`}async function $u(){throw Error("fetch not available — provide opts.fetchImpl")}var hu=new Set(["A","BUTTON"]),Nu=/\.(pdf|zip|dmg|exe|tar|gz|rar|7z|mp3|mp4|csv|xlsx?|docx?|pptx?)(\?|$)/i;function Gu(u){let r=u;while(r){if(r.hasAttribute?.("data-gurulu-no-track"))return!1;r=r.parentElement}return!0}function Qu(u){let r=u;while(r){if(!r.tagName){r=r.parentElement;continue}if(hu.has(r.tagName))return r;if(r.getAttribute?.("role")==="button")return r;if(r.tagName==="INPUT"){let o=r.type?.toLowerCase();if(o==="submit"||o==="button")return r}r=r.parentElement}return null}function Ru(u){let r={};if(!u.attributes)return r;for(let o=0;o<u.attributes.length;o+=1){let n=u.attributes.item(o);if(!n)continue;if(n.name.startsWith("data-gurulu-prop-")){let m=n.name.slice(17);r[m]=n.value}}return r}function U(u){if(typeof document>"u")return{stop:()=>{return}};let r=(o)=>{let n=Qu(o.target);if(!n||!Gu(n))return;let m={element_tag:n.tagName.toLowerCase()};if(n.id)m.element_id=n.id;if(n.className&&typeof n.className==="string")m.element_class=n.className.slice(0,256);let _=(n.textContent??"").trim().slice(0,200);if(_)m.element_text=_;if(n.tagName==="A"){let A=n.href;if(A){m.href=A;try{let E=new URL(A).hostname;if(typeof window<"u"&&E!==window.location.hostname)m.is_outbound=!0}catch{}if(Nu.test(A))m.is_download=!0}}let c=n.getAttribute?.("data-gurulu-event");if(c)m.custom_event=c,m.custom_props=Ru(n);u(m)};return document.addEventListener("click",r,!0),{stop(){document.removeEventListener("click",r,!0)}}}function K(u){if(typeof window>"u")return{stop:()=>{return}};let r=(n)=>{let m=n.error;u({message:String(n.message??m?.message??"Error").slice(0,1000),error_type:m?.name??"Error",...n.filename?{source:n.filename}:{},...typeof n.lineno==="number"?{lineno:n.lineno}:{},...typeof n.colno==="number"?{colno:n.colno}:{},...m?.stack?{stack:String(m.stack).slice(0,2000)}:{}})},o=(n)=>{let m=n.reason,_=m instanceof Error;u({message:String(_?m.message:m).slice(0,1000),error_type:_?m.name:"UnhandledRejection",..._&&m.stack?{stack:String(m.stack).slice(0,2000)}:{}})};return window.addEventListener("error",r),window.addEventListener("unhandledrejection",o),{stop(){window.removeEventListener("error",r),window.removeEventListener("unhandledrejection",o)}}}var Zu=new Set(["password","tel"]);function O(u){if(u.tagName!=="INPUT")return!1;let r=u,o=(r.type??"").toLowerCase();if(Zu.has(o))return!0;if((r.autocomplete??"").toLowerCase().startsWith("cc-"))return!0;return!1}function k(u){let r=u;while(r){if(r.hasAttribute?.("data-gurulu-no-track"))return!1;r=r.parentElement}return!0}function iu(u){let r=u;while(r){if(r.tagName==="FORM")return r;r=r.parentElement}return null}function x(u){let r={count:u.elements?.length??0};if(u.id)r.id=u.id;if(u.name)r.name=u.name;return r}function y(u){if(typeof document>"u")return{stop:()=>{return}};let r=new WeakSet,o=(m)=>{let _=m.target;if(!_)return;if(O(_))return;if(!k(_))return;let c=iu(_);if(!c||r.has(c))return;r.add(c);let A=x(c),E={field_count:A.count};if(A.id)E.form_id=A.id;if(A.name)E.form_name=A.name;u.onStart(E)},n=(m)=>{let _=m.target;if(!_||_.tagName!=="FORM")return;if(!k(_))return;let c=x(_),A=[],E=_.elements;for(let t=0;t<E.length;t+=1){let l=E[t];if(!l)continue;if(O(l))continue;if(!("value"in l))continue;if(typeof l.value==="string"&&l.value.length>0&&l.name)A.push(l.name)}let j={field_count:c.count};if(c.id)j.form_id=c.id;if(c.name)j.form_name=c.name;if(A.length>0)j.filled_fields=A;u.onSubmit(j)};return document.addEventListener("focus",o,!0),document.addEventListener("submit",n,!0),{stop(){document.removeEventListener("focus",o,!0),document.removeEventListener("submit",n,!0)}}}function I(u){if(typeof window>"u"||typeof document>"u")return{stop:()=>{return}};let r=window.location.pathname+window.location.search;function o(){let c=window.location.pathname+window.location.search;if(c===r)return;r=c,u(window.location.href,document.title,document.referrer)}u(window.location.href,document.title,document.referrer);let n=()=>o();window.addEventListener("popstate",n);let m=history.pushState.bind(history),_=history.replaceState.bind(history);return history.pushState=function(...A){let E=m(...A);return queueMicrotask(o),E},history.replaceState=function(...A){let E=_(...A);return queueMicrotask(o),E},{stop(){window.removeEventListener("popstate",n),history.pushState=m,history.replaceState=_}}}var fu=[25,50,75,90];function v(u){if(typeof window>"u"||typeof document>"u")return{stop:()=>{return}};let r=new Set,o=0,n=()=>{o=0;let{documentElement:_,body:c}=document;if(!_||!c)return;let A=window.scrollY??_.scrollTop??0,E=window.innerHeight??_.clientHeight??0,j=Math.max(c.scrollHeight??0,_.scrollHeight??0);if(j<=E)return;let t=(A+E)/j*100;for(let l of fu)if(t>=l&&!r.has(l))r.add(l),u({depth_percent:l})},m=()=>{if(o!==0)return;o=requestAnimationFrame(n)};return window.addEventListener("scroll",m,{passive:!0}),{stop(){if(window.removeEventListener("scroll",m),o!==0)cancelAnimationFrame(o)}}}var Fu={LCP:[2500,4000],FID:[100,300],INP:[200,500],CLS:[0.1,0.25],TTFB:[800,1800],FCP:[1800,3000]};function M(u,r){let[o,n]=Fu[u];if(r<=o)return"good";if(r<=n)return"needs-improvement";return"poor"}function N(u,r,o){if(typeof PerformanceObserver>"u")return null;try{let n=new PerformanceObserver((m)=>o(m.getEntries()));return n.observe({type:u,buffered:r}),n}catch{return null}}function a(u){if(typeof window>"u")return{stop:()=>{return}};let r=[];try{let C=performance.getEntriesByType("navigation")[0];if(C&&C.responseStart>0)u({metric:"TTFB",value:C.responseStart,rating:M("TTFB",C.responseStart)});let S=performance.getEntriesByName("first-contentful-paint")[0];if(S)u({metric:"FCP",value:S.startTime,rating:M("FCP",S.startTime)})}catch{}let o=0,n=N("largest-contentful-paint",!0,(C)=>{let S=C[C.length-1];if(S)o=S.startTime});if(n)r.push(n);let m=N("first-input",!0,(C)=>{let S=C[0];if(S){let H=S.processingStart-S.startTime;u({metric:"FID",value:H,rating:M("FID",H)})}});if(m)r.push(m);let _=0,c=N("event",!0,(C)=>{for(let S of C){let H=S.duration;if(H>_)_=H}});if(c)r.push(c);let A=0,E=N("layout-shift",!0,(C)=>{for(let S of C){let H=S;if(!H.hadRecentInput)A+=H.value}});if(E)r.push(E);let j=()=>{if(o>0)u({metric:"LCP",value:o,rating:M("LCP",o)});if(_>0)u({metric:"INP",value:_,rating:M("INP",_)});if(A>0)u({metric:"CLS",value:A,rating:M("CLS",A)});o=0,_=0,A=0},t=null,l=null;if(typeof document<"u")t=()=>{if(document.visibilityState==="hidden")j()},l=j,document.addEventListener("visibilitychange",t),window.addEventListener("pagehide",l);return{stop(){for(let C of r)try{C.disconnect()}catch{}if(typeof document<"u"&&t)document.removeEventListener("visibilitychange",t);if(typeof window<"u"&&l)window.removeEventListener("pagehide",l)}}}var gu={page_view:!0,click:!0,form_started:!0,form_submitted:!0,scroll_depth:!0,web_vitals:!0,outbound_link_click:!0,download_click:!0,js_error:!1,console_error:!1,network_error:!1};function e(u,r){if(u===!1)return{stopAll:()=>{return}};let o={...gu,...u??{}},n=[];if(o.page_view)n.push(I(r.pageView));if(o.click)n.push(U(r.click));if(o.form_started||o.form_submitted)n.push(y({onStart:o.form_started?r.formStarted:()=>{return},onSubmit:o.form_submitted?r.formSubmitted:()=>{return}}));if(o.scroll_depth)n.push(v(r.scrollDepth));if(o.web_vitals)n.push(a(r.webVital));if(o.js_error)n.push(K(r.jsError));return{stopAll(){for(let m of n)try{m.stop()}catch{}}}}function z(){return typeof window<"u"&&typeof document<"u"}function i(){if(typeof crypto<"u"&&typeof crypto.randomUUID==="function")return crypto.randomUUID();return`${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`}function s(u){if(!z())return null;try{return window.localStorage.getItem(u)}catch{return null}}function G(u,r){if(!z())return;try{window.localStorage.setItem(u,r)}catch{}}function p(u){if(!z())return;try{window.localStorage.removeItem(u)}catch{}}function wu(u){if(!z())return null;let r=document.cookie??"";for(let o of r.split(";")){let[n,m]=o.trim().split("=");if(n===u&&m!==void 0)return decodeURIComponent(m)}return null}function Z(u,r,o=365){if(!z())return;let n=new Date(Date.now()+o*86400000).toUTCString(),m=window.location.hostname,_=m.split("."),c=_.length>=2?`.${_.slice(-2).join(".")}`:m;try{document.cookie=`${u}=${encodeURIComponent(r)}; path=/; domain=${c}; expires=${n}; SameSite=Lax`}catch{}}function uu(){let u=s("gurulu_aid")??wu("gurulu_aid_mirror");if(u)return G("gurulu_aid",u),Z("gurulu_aid_mirror",u),u;let r=i();return G("gurulu_aid",r),Z("gurulu_aid_mirror",r),r}function ru(u){G("gurulu_pid",u)}function f(){return s("gurulu_pid")}function nu(){p("gurulu_pid"),p("gurulu_aid");let u=i();return G("gurulu_aid",u),Z("gurulu_aid_mirror",u),u}function ou(){return i()}class J extends Error{code;constructor(u,r){super(r);this.code=u,this.name="SDKError"}}class mu extends J{constructor(u){super("SDK_INIT",u);this.name="InitError"}}class b extends J{status;constructor(u,r){super("SDK_NETWORK",u);if(this.name="NetworkError",r!==void 0)this.status=r}}class _u extends J{constructor(u){super("SDK_QUEUE_FULL",u);this.name="QueueFullError"}}class cu extends J{constructor(){super("SDK_OPTED_OUT","tracking disabled — gurulu.optOut() in effect");this.name="OptedOutError"}}class Au extends J{constructor(){super("SDK_CONSENT_BLOCKED","event queued — awaiting consent grant");this.name="ConsentBlockedError"}}var Wu=65536;function Eu(u,r){let o=new Headers({"content-type":"application/json",authorization:`Bearer ${u.workspaceKey}`,"x-gurulu-sdk":`@gurulu/web@${u.sdkVersion}`});if(r)for(let[n,m]of Object.entries(r))o.set(n,m);return o}async function lu(u,r,o){let n=u.fetchImpl??(typeof fetch<"u"?fetch.bind(globalThis):null);if(!n)throw new b("fetch unavailable");let m=`${u.endpoint}/v1/ingest/batch`,_=await n(m,{method:"POST",keepalive:!0,credentials:"omit",headers:Eu(u,o),body:JSON.stringify(r)});if(!_.ok)throw new b(`ingest ${_.status}`,_.status)}function Cu(u,r){if(typeof navigator>"u"||typeof navigator.sendBeacon!=="function")return!1;let o=`${u.endpoint}/v1/ingest/batch?wk=${encodeURIComponent(u.workspaceKey)}&sdk=${encodeURIComponent(u.sdkVersion)}`;try{let n=JSON.stringify(r);if(n.length>=Wu)return!1;let m=new Blob([n],{type:"application/json"});return navigator.sendBeacon(o,m)}catch{return!1}}async function Su(u,r){let o=u.fetchImpl??(typeof fetch<"u"?fetch.bind(globalThis):null);if(!o)throw new b("fetch unavailable");let n=await o(`${u.endpoint}/v1/ingest/identify`,{method:"POST",keepalive:!0,credentials:"omit",headers:Eu(u),body:JSON.stringify(r)});if(!n.ok)throw new b(`identify ${n.status}`,n.status)}var g="gurulu_queue";function w(){return typeof window<"u"}function Bu(){if(!w())return[];try{let u=window.localStorage.getItem(g);if(!u)return[];let r=JSON.parse(u);return Array.isArray(r)?r:[]}catch{return[]}}function F(u){if(!w())return;try{if(u.length===0)window.localStorage.removeItem(g);else window.localStorage.setItem(g,JSON.stringify(u))}catch{}}class W{opts;buffer;timer=null;flushing=!1;constructor(u){if(this.opts=u,this.buffer=Bu(),this.scheduleNext(),this.installUnloadHooks(),this.buffer.length>0)this.scheduleImmediate()}enqueue(u){if(this.buffer.push(u),F(this.buffer),this.buffer.length>=this.opts.maxQueueSize)this.flush();else this.scheduleNext()}size(){return this.buffer.length}async flush(){if(this.flushing||this.buffer.length===0)return;this.flushing=!0;let u=this.buffer.slice(0);try{await this.sendWithRetry(u),this.buffer=this.buffer.slice(u.length),F(this.buffer)}catch(r){if(this.opts.debug&&typeof console<"u")console.warn("[gurulu] flush failed, retain queue",r)}finally{this.flushing=!1}}flushBeacon(){if(this.buffer.length===0)return;if(Cu(this.opts.transport,{events:this.buffer}))this.buffer=[],F(this.buffer)}scheduleNext(){if(this.timer!==null)return;this.timer=setTimeout(()=>{this.timer=null,this.flush()},this.opts.flushIntervalMs)}scheduleImmediate(){if(this.timer!==null)clearTimeout(this.timer),this.timer=null;this.timer=setTimeout(()=>{this.timer=null,this.flush()},50)}async sendWithRetry(u){let r=0,o=3;while(r<o)try{await lu(this.opts.transport,{events:u});return}catch(n){if(r+=1,r>=o)throw n;let m=2**r*1000;await new Promise((_)=>setTimeout(_,m))}}installUnloadHooks(){if(!w()||typeof document>"u")return;let u=()=>{if(document.visibilityState==="hidden")this.flushBeacon()};try{document.addEventListener("visibilitychange",u),window.addEventListener("pagehide",()=>this.flushBeacon())}catch{}}}function ju(){return typeof window<"u"}function Lu(){if(typeof crypto<"u"&&typeof crypto.randomUUID==="function")return crypto.randomUUID();return`${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`}function T(u){if(!ju())return null;try{return window.localStorage.getItem(u)}catch{return null}}function D(u,r){if(!ju())return;try{window.localStorage.setItem(u,r)}catch{}}function Q(u=Date.now()){let r=T("gurulu_sid"),o=Number(T("gurulu_session_started_at")??"0"),n=Number(T("gurulu_last_event_at")??"0");if(r&&o&&u-n<1800000)return D("gurulu_last_event_at",String(u)),{session_id:r,session_started_at:o,is_new:!1};let m=Lu();return D("gurulu_sid",m),D("gurulu_session_started_at",String(u)),D("gurulu_last_event_at",String(u)),{session_id:m,session_started_at:u,is_new:!0}}function tu(u,r){let o={},n={};if(!u)return{utm:o,click_id:n};let m;try{m=new URL(u)}catch{return{utm:o,click_id:n}}let _=m.searchParams,c=_.get("utm_source");if(c)o.source=c;let A=_.get("utm_medium");if(A)o.medium=A;let E=_.get("utm_campaign");if(E)o.campaign=E;let j=_.get("utm_term");if(j)o.term=j;let t=_.get("utm_content");if(t)o.content=t;let l=_.get("gclid");if(l)n.gclid=l;let C=_.get("fbclid");if(C)n.fbclid=C;let S=_.get("ttclid");if(S)n.ttclid=S;let H=_.get("li_fat_id");if(H)n.li_fat_id=H;return{utm:o,click_id:n}}function Hu(u){if(T("gurulu_first_source"))return;D("gurulu_first_source",JSON.stringify(u))}function Xu(){let u=T("gurulu_first_source");if(!u)return null;try{return JSON.parse(u)}catch{return null}}var B="0.1.0",L="https://ingest.gurulu.io",Yu="https://api.gurulu.io",Y="gurulu_opt_out";function Ju(){if(typeof window>"u")return!1;try{return window.localStorage.getItem(Y)==="1"}catch{return!1}}function bu(u){if(typeof window>"u")return;try{if(u)window.localStorage.setItem(Y,"1");else window.localStorage.removeItem(Y)}catch{}}function Pu(){return new Date().toISOString()}class q{initialized=!1;opts=null;queue=null;session=null;anonymousId=null;autocaptureHandle=null;testMode=!1;consent;activation;init(u){if(this.initialized){if(u.debug&&typeof console<"u")console.warn("[gurulu] init() already called — ignoring");return}if(typeof window>"u")return;this.opts=u,this.testMode=u.test_mode===!0,this.anonymousId=uu(),this.session=Q(),this.consent=new h({workspaceId:u.workspaceKey,apiUrl:u.apiUrl??Yu,anonymousId:this.anonymousId,autoBanner:u.consent_mode==="banner_required"}),this.consent.init(),this.activation=new V({endpoint:u.endpoint??L,workspaceKey:u.workspaceKey,getUid:()=>f()??this.anonymousId??"",track:(n,m)=>this.track(n,m)});let r={endpoint:u.endpoint??L,workspaceKey:u.workspaceKey,sdkVersion:B};this.queue=new W({transport:r,flushIntervalMs:u.flush_interval_ms??5000,maxQueueSize:u.max_queue_size??50,...u.debug?{debug:!0}:{}});let o=tu(window.location.href,document.referrer);if(Object.keys(o.utm).length>0||Object.keys(o.click_id).length>0){let n={utm:o.utm,click_id:o.click_id,referrer:document.referrer,landing_url:window.location.href,captured_at:Date.now()};Hu(n)}this.autocaptureHandle=e(u.autocapture,{pageView:(n,m,_)=>this.queueEvent("page_view","interaction",{url:n,title:m,referrer:_}),click:(n)=>{let m=n.custom_event??"element_clicked",_={element_tag:n.element_tag,...n.element_id?{element_id:n.element_id}:{},...n.element_class?{element_class:n.element_class}:{},...n.element_text?{element_text:n.element_text}:{},...n.href?{href:n.href}:{},...n.is_outbound?{is_outbound:!0}:{},...n.is_download?{is_download:!0}:{},...n.custom_props??{}};this.queueEvent(m,"interaction",_)},formStarted:(n)=>this.queueEvent("form_started","interaction",n),formSubmitted:(n)=>this.queueEvent("form_submitted","interaction",n),scrollDepth:(n)=>this.queueEvent("scroll_depth","interaction",n),webVital:(n)=>this.queueEvent("web_vital","interaction",n),jsError:(n)=>this.queueEvent("js_error","interaction",n)}),this.initialized=!0}track(u,r){this.queueEvent(u,"interaction",r)}page(u){if(!this.initialized||typeof window>"u")return;let r=u?.url??window.location.href,o=u?.title??document.title,n=u?.referrer??document.referrer;this.queueEvent("page_view","interaction",{url:r,title:o,referrer:n})}async identify(u,r){if(!this.initialized||Ju())return;if(ru(u),!this.opts)return;try{await Su({endpoint:this.opts.endpoint??L,workspaceKey:this.opts.workspaceKey,sdkVersion:B},{anonymous_id:this.anonymousId,external_user_id:u,...r?.email?{email:r.email}:{},...r?.phone?{phone:r.phone}:{},...r?{traits:r}:{}})}catch(o){if(this.opts?.debug&&typeof console<"u")console.warn("[gurulu] identify failed",o)}}reset(){if(this.anonymousId=nu(),typeof window<"u")try{window.localStorage.removeItem("gurulu_sid"),window.localStorage.removeItem("gurulu_session_started_at"),window.localStorage.removeItem("gurulu_last_event_at"),window.localStorage.removeItem("gurulu_first_source")}catch{}this.session=Q()}async flush(){await this.queue?.flush()}optOut(){bu(!0)}optIn(){bu(!1)}queueEvent(u,r,o){if(!this.initialized||!this.queue||Ju())return;if(!this.consentAllowsAnalytics()&&this.opts?.consent_mode==="banner_required")return;this.session=Q();let n={anonymous_id:this.anonymousId??"anon_unknown",event_id:ou(),event_key:u,event_type:r,occurred_at:Pu(),producer:"script",producer_version:B,...this.session?{session_id:this.session.session_id}:{}},m=f();if(m)n.person_id=m;if(o&&Object.keys(o).length>0)n.properties=o;let _=this.buildContext();if(_)n.context=_;let c=this.snapshotConsent();if(c)n.consent_state=c;if(this.testMode)n.test_mode=!0;this.queue.enqueue(n)}snapshotConsent(){let u=this.consent?.getState();if(!u)return;return{necessary:u.categories.necessary,analytics:u.categories.analytics,marketing:u.categories.marketing,functional:u.categories.functional,personalization:u.categories.personalization}}consentAllowsAnalytics(){let u=this.consent?.getState();if(!u)return!1;return u.categories.analytics===!0}buildContext(){if(typeof window>"u")return;let u={url:window.location.href,referrer:document.referrer,page_title:document.title,user_agent:navigator.userAgent,domain:window.location.hostname},r=Xu();if(r?.utm&&Object.keys(r.utm).length>0)u.utm=r.utm;if(r?.click_id&&Object.keys(r.click_id).length>0)u.click_id=r.click_id;return u}}var Uu="0.1.0",X=new q;function Tr(){return new q}var P={init:(u)=>X.init(u),track:(u,r)=>X.track(u,r),identify:(u,r)=>X.identify(u,r),page:(u)=>X.page(u),reset:()=>X.reset(),flush:()=>X.flush(),optOut:()=>X.optOut(),optIn:()=>X.optIn(),get consent(){return X.consent},get activation(){return X.activation},VERSION:Uu};function Ku(){if(typeof document>"u")return;let u=document.currentScript,r=!u?document.querySelector("script[data-workspace]"):u;if(!r)return;let o=r.getAttribute("data-workspace");if(!o)return;let n={workspaceKey:o},m=r.getAttribute("data-endpoint");if(m)n.endpoint=m;let _=r.getAttribute("data-api-url");if(_)n.apiUrl=_;let c=r.getAttribute("data-consent");if(c==="banner_required"||c==="allow_by_default")n.consent_mode=c;let A=r.getAttribute("data-allowlist");if(A)n.cross_domain_allowlist=A.split(",").map((E)=>E.trim());if(P.init(n),typeof window<"u")window.gurulu=P}Ku();var Nr=P;export{Nr as default,Tr as createGurulu,Ku as autoBootstrap,Uu as VERSION,J as SDKError,_u as QueueFullError,cu as OptedOutError,b as NetworkError,mu as InitError,h as GuruluConsent,V as GuruluActivation,q as Gurulu,Au as ConsentBlockedError};
8
+ `}function Q(u){return u.replace(/[&<>"']/g,(n)=>{switch(n){case"&":return"&amp;";case"<":return"&lt;";case">":return"&gt;";case'"':return"&quot;";case"'":return"&#39;";default:return n}})}function Nu(u){return u.replace(/[^a-zA-Z0-9#()_\-., ]/g,"")}function hu(){if(typeof navigator>"u")return"en";let u=(navigator.language??"").toLowerCase();if(u.startsWith("tr"))return"tr";if(u.startsWith("zh"))return"zh";if(u.startsWith("ar"))return"ar";return"en"}function W(){if(typeof crypto<"u"&&typeof crypto.randomUUID==="function")return`anon_${crypto.randomUUID()}`;return`anon_${Math.random().toString(36).slice(2)}${Date.now().toString(36)}`}async function Qu(){throw Error("fetch not available — provide opts.fetchImpl")}var Ru=new Set(["A","BUTTON"]),Zu=/\.(pdf|zip|dmg|exe|tar|gz|rar|7z|mp3|mp4|csv|xlsx?|docx?|pptx?)(\?|$)/i;function Gu(u){let n=u;while(n){if(n.hasAttribute?.("data-gurulu-no-track"))return!1;n=n.parentElement}return!0}function Fu(u){let n=u;while(n){if(!n.tagName){n=n.parentElement;continue}if(Ru.has(n.tagName))return n;if(n.getAttribute?.("role")==="button")return n;if(n.tagName==="INPUT"){let r=n.type?.toLowerCase();if(r==="submit"||r==="button")return n}n=n.parentElement}return null}function Wu(u){let n={};if(!u.attributes)return n;for(let r=0;r<u.attributes.length;r+=1){let m=u.attributes.item(r);if(!m)continue;if(m.name.startsWith("data-gurulu-prop-")){let _=m.name.slice(17);n[_]=m.value}}return n}function i(u){if(typeof document>"u")return{stop:()=>{return}};let n=(r)=>{let m=Fu(r.target);if(!m||!Gu(m))return;let _={element_tag:m.tagName.toLowerCase()};if(m.id)_.element_id=m.id;if(m.className&&typeof m.className==="string")_.element_class=m.className.slice(0,256);let A=(m.textContent??"").trim().slice(0,200);if(A)_.element_text=A;if(m.tagName==="A"){let E=m.href;if(E){_.href=E;try{let o=new URL(E).hostname;if(typeof window<"u"&&o!==window.location.hostname)_.is_outbound=!0}catch{}if(Zu.test(E))_.is_download=!0}}let c=m.getAttribute?.("data-gurulu-event");if(c)_.custom_event=c,_.custom_props=Wu(m);u(_)};return document.addEventListener("click",n,!0),{stop(){document.removeEventListener("click",n,!0)}}}function K(u){if(typeof window>"u")return{stop:()=>{return}};let n=(m)=>{let _=m.error;u({message:String(m.message??_?.message??"Error").slice(0,1000),error_type:_?.name??"Error",...m.filename?{source:m.filename}:{},...typeof m.lineno==="number"?{lineno:m.lineno}:{},...typeof m.colno==="number"?{colno:m.colno}:{},..._?.stack?{stack:String(_.stack).slice(0,2000)}:{}})},r=(m)=>{let _=m.reason,A=_ instanceof Error;u({message:String(A?_.message:_).slice(0,1000),error_type:A?_.name:"UnhandledRejection",...A&&_.stack?{stack:String(_.stack).slice(0,2000)}:{}})};return window.addEventListener("error",n),window.addEventListener("unhandledrejection",r),{stop(){window.removeEventListener("error",n),window.removeEventListener("unhandledrejection",r)}}}var fu=new Set(["password","tel"]);function x(u){if(u.tagName!=="INPUT")return!1;let n=u,r=(n.type??"").toLowerCase();if(fu.has(r))return!0;if((n.autocomplete??"").toLowerCase().startsWith("cc-"))return!0;return!1}function k(u){let n=u;while(n){if(n.hasAttribute?.("data-gurulu-no-track"))return!1;n=n.parentElement}return!0}function Bu(u){let n=u;while(n){if(n.tagName==="FORM")return n;n=n.parentElement}return null}function d(u){let n={count:u.elements?.length??0};if(u.id)n.id=u.id;if(u.name)n.name=u.name;return n}function I(u){if(typeof document>"u")return{stop:()=>{return}};let n=new WeakSet,r=(_)=>{let A=_.target;if(!A)return;if(x(A))return;if(!k(A))return;let c=Bu(A);if(!c||n.has(c))return;n.add(c);let E=d(c),o={field_count:E.count};if(E.id)o.form_id=E.id;if(E.name)o.form_name=E.name;u.onStart(o)},m=(_)=>{let A=_.target;if(!A||A.tagName!=="FORM")return;if(!k(A))return;let c=d(A),E=[],o=A.elements;for(let X=0;X<o.length;X+=1){let C=o[X];if(!C)continue;if(x(C))continue;if(!("value"in C))continue;if(typeof C.value==="string"&&C.value.length>0&&C.name)E.push(C.name)}let l={field_count:c.count};if(c.id)l.form_id=c.id;if(c.name)l.form_name=c.name;if(E.length>0)l.filled_fields=E;u.onSubmit(l)};return document.addEventListener("focus",r,!0),document.addEventListener("submit",m,!0),{stop(){document.removeEventListener("focus",r,!0),document.removeEventListener("submit",m,!0)}}}function y(u){if(typeof window>"u"||typeof document>"u")return{stop:()=>{return}};let n=window.location.pathname+window.location.search;function r(){let c=window.location.pathname+window.location.search;if(c===n)return;n=c,u(window.location.href,document.title,document.referrer)}u(window.location.href,document.title,document.referrer);let m=()=>r();window.addEventListener("popstate",m);let _=history.pushState.bind(history),A=history.replaceState.bind(history);return history.pushState=function(...E){let o=_(...E);return queueMicrotask(r),o},history.replaceState=function(...E){let o=A(...E);return queueMicrotask(r),o},{stop(){window.removeEventListener("popstate",m),history.pushState=_,history.replaceState=A}}}var wu=[25,50,75,90];function v(u){if(typeof window>"u"||typeof document>"u")return{stop:()=>{return}};let n=new Set,r=0,m=()=>{r=0;let{documentElement:A,body:c}=document;if(!A||!c)return;let E=window.scrollY??A.scrollTop??0,o=window.innerHeight??A.clientHeight??0,l=Math.max(c.scrollHeight??0,A.scrollHeight??0);if(l<=o)return;let X=(E+o)/l*100;for(let C of wu)if(X>=C&&!n.has(C))n.add(C),u({depth_percent:C})},_=()=>{if(r!==0)return;r=requestAnimationFrame(m)};return window.addEventListener("scroll",_,{passive:!0}),{stop(){if(window.removeEventListener("scroll",_),r!==0)cancelAnimationFrame(r)}}}var Lu={LCP:[2500,4000],FID:[100,300],INP:[200,500],CLS:[0.1,0.25],TTFB:[800,1800],FCP:[1800,3000]};function q(u,n){let[r,m]=Lu[u];if(n<=r)return"good";if(n<=m)return"needs-improvement";return"poor"}function Z(u,n,r){if(typeof PerformanceObserver>"u")return null;try{let m=new PerformanceObserver((_)=>r(_.getEntries()));return m.observe({type:u,buffered:n}),m}catch{return null}}function a(u){if(typeof window>"u")return{stop:()=>{return}};let n=[];try{let j=performance.getEntriesByType("navigation")[0];if(j&&j.responseStart>0)u({metric:"TTFB",value:j.responseStart,rating:q("TTFB",j.responseStart)});let S=performance.getEntriesByName("first-contentful-paint")[0];if(S)u({metric:"FCP",value:S.startTime,rating:q("FCP",S.startTime)})}catch{}let r=0,m=Z("largest-contentful-paint",!0,(j)=>{let S=j[j.length-1];if(S)r=S.startTime});if(m)n.push(m);let _=Z("first-input",!0,(j)=>{let S=j[0];if(S){let H=S.processingStart-S.startTime;u({metric:"FID",value:H,rating:q("FID",H)})}});if(_)n.push(_);let A=0,c=Z("event",!0,(j)=>{for(let S of j){let H=S.duration;if(H>A)A=H}});if(c)n.push(c);let E=0,o=Z("layout-shift",!0,(j)=>{for(let S of j){let H=S;if(!H.hadRecentInput)E+=H.value}});if(o)n.push(o);let l=()=>{if(r>0)u({metric:"LCP",value:r,rating:q("LCP",r)});if(A>0)u({metric:"INP",value:A,rating:q("INP",A)});if(E>0)u({metric:"CLS",value:E,rating:q("CLS",E)});r=0,A=0,E=0},X=null,C=null;if(typeof document<"u")X=()=>{if(document.visibilityState==="hidden")l()},C=l,document.addEventListener("visibilitychange",X),window.addEventListener("pagehide",C);return{stop(){for(let j of n)try{j.disconnect()}catch{}if(typeof document<"u"&&X)document.removeEventListener("visibilitychange",X);if(typeof window<"u"&&C)window.removeEventListener("pagehide",C)}}}var gu={page_view:!0,click:!0,form_started:!0,form_submitted:!0,scroll_depth:!0,web_vitals:!0,outbound_link_click:!0,download_click:!0,js_error:!1,console_error:!1,network_error:!1};function p(u,n){if(u===!1)return{stopAll:()=>{return}};let r={...gu,...u??{}},m=[];if(r.page_view)m.push(y(n.pageView));if(r.click)m.push(i(n.click));if(r.form_started||r.form_submitted)m.push(I({onStart:r.form_started?n.formStarted:()=>{return},onSubmit:r.form_submitted?n.formSubmitted:()=>{return}}));if(r.scroll_depth)m.push(v(n.scrollDepth));if(r.web_vitals)m.push(a(n.webVital));if(r.js_error)m.push(K(n.jsError));return{stopAll(){for(let _ of m)try{_.stop()}catch{}}}}function z(){return typeof window<"u"&&typeof document<"u"}function B(){if(typeof crypto<"u"&&typeof crypto.randomUUID==="function")return crypto.randomUUID();return`${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`}function e(u){if(!z())return null;try{return window.localStorage.getItem(u)}catch{return null}}function G(u,n){if(!z())return;try{window.localStorage.setItem(u,n)}catch{}}function s(u){if(!z())return;try{window.localStorage.removeItem(u)}catch{}}function Yu(u){if(!z())return null;let n=document.cookie??"";for(let r of n.split(";")){let[m,_]=r.trim().split("=");if(m===u&&_!==void 0)return decodeURIComponent(_)}return null}function f(u,n,r=365){if(!z())return;let m=new Date(Date.now()+r*86400000).toUTCString(),_=window.location.hostname,A=_.split("."),c=A.length>=2?`.${A.slice(-2).join(".")}`:_;try{document.cookie=`${u}=${encodeURIComponent(n)}; path=/; domain=${c}; expires=${m}; SameSite=Lax`}catch{}}function uu(){let u=e("gurulu_aid")??Yu("gurulu_aid_mirror");if(u)return G("gurulu_aid",u),f("gurulu_aid_mirror",u),u;let n=B();return G("gurulu_aid",n),f("gurulu_aid_mirror",n),n}function nu(u){G("gurulu_pid",u)}function w(){return e("gurulu_pid")}function mu(){s("gurulu_pid"),s("gurulu_aid");let u=B();return G("gurulu_aid",u),f("gurulu_aid_mirror",u),u}function ru(){return B()}class M extends Error{code;constructor(u,n){super(n);this.code=u,this.name="SDKError"}}class _u extends M{constructor(u){super("SDK_INIT",u);this.name="InitError"}}class D extends M{status;constructor(u,n){super("SDK_NETWORK",u);if(this.name="NetworkError",n!==void 0)this.status=n}}class Au extends M{constructor(u){super("SDK_QUEUE_FULL",u);this.name="QueueFullError"}}class cu extends M{constructor(){super("SDK_OPTED_OUT","tracking disabled — gurulu.optOut() in effect");this.name="OptedOutError"}}class Eu extends M{constructor(){super("SDK_CONSENT_BLOCKED","event queued — awaiting consent grant");this.name="ConsentBlockedError"}}var bu=65536;function ou(u,n){let r=new Headers({"content-type":"application/json",authorization:`Bearer ${u.workspaceKey}`,"x-gurulu-sdk":`@gurulu/web@${u.sdkVersion}`});if(n)for(let[m,_]of Object.entries(n))r.set(m,_);return r}async function Cu(u,n,r){let m=u.fetchImpl??(typeof fetch<"u"?fetch.bind(globalThis):null);if(!m)throw new D("fetch unavailable");let _=`${u.endpoint}/v1/ingest/batch`,A=await m(_,{method:"POST",keepalive:!0,credentials:"omit",headers:ou(u,r),body:JSON.stringify(n)});if(!A.ok)throw new D(`ingest ${A.status}`,A.status)}function ju(u,n){if(typeof navigator>"u"||typeof navigator.sendBeacon!=="function")return!1;let r=`${u.endpoint}/v1/ingest/batch?wk=${encodeURIComponent(u.workspaceKey)}&sdk=${encodeURIComponent(u.sdkVersion)}`;try{let m=JSON.stringify(n);if(m.length>=bu)return!1;let _=new Blob([m],{type:"application/json"});return navigator.sendBeacon(r,_)}catch{return!1}}async function Su(u,n){let r=u.fetchImpl??(typeof fetch<"u"?fetch.bind(globalThis):null);if(!r)throw new D("fetch unavailable");let m=await r(`${u.endpoint}/v1/ingest/identify`,{method:"POST",keepalive:!0,credentials:"omit",headers:ou(u),body:JSON.stringify(n)});if(!m.ok)throw new D(`identify ${m.status}`,m.status)}var g="gurulu_queue";function Y(){return typeof window<"u"}function Uu(){if(!Y())return[];try{let u=window.localStorage.getItem(g);if(!u)return[];let n=JSON.parse(u);return Array.isArray(n)?n:[]}catch{return[]}}function L(u){if(!Y())return;try{if(u.length===0)window.localStorage.removeItem(g);else window.localStorage.setItem(g,JSON.stringify(u))}catch{}}class b{opts;buffer;timer=null;flushing=!1;constructor(u){if(this.opts=u,this.buffer=Uu(),this.scheduleNext(),this.installUnloadHooks(),this.buffer.length>0)this.scheduleImmediate()}enqueue(u){if(this.buffer.push(u),L(this.buffer),this.buffer.length>=this.opts.maxQueueSize)this.flush();else this.scheduleNext()}size(){return this.buffer.length}async flush(){if(this.flushing||this.buffer.length===0)return;this.flushing=!0;let u=this.buffer.slice(0);try{await this.sendWithRetry(u),this.buffer=this.buffer.slice(u.length),L(this.buffer)}catch(n){if(this.opts.debug&&typeof console<"u")console.warn("[gurulu] flush failed, retain queue",n)}finally{this.flushing=!1}}flushBeacon(){if(this.buffer.length===0)return;if(ju(this.opts.transport,{events:this.buffer}))this.buffer=[],L(this.buffer)}scheduleNext(){if(this.timer!==null)return;this.timer=setTimeout(()=>{this.timer=null,this.flush()},this.opts.flushIntervalMs)}scheduleImmediate(){if(this.timer!==null)clearTimeout(this.timer),this.timer=null;this.timer=setTimeout(()=>{this.timer=null,this.flush()},50)}async sendWithRetry(u){let n=0,r=3;while(n<r)try{await Cu(this.opts.transport,{events:u});return}catch(m){if(n+=1,n>=r)throw m;let _=2**n*1000;await new Promise((A)=>setTimeout(A,_))}}installUnloadHooks(){if(!Y()||typeof document>"u")return;let u=()=>{if(document.visibilityState==="hidden")this.flushBeacon()};try{document.addEventListener("visibilitychange",u),window.addEventListener("pagehide",()=>this.flushBeacon())}catch{}}}function lu(){return typeof window<"u"}function Pu(){if(typeof crypto<"u"&&typeof crypto.randomUUID==="function")return crypto.randomUUID();return`${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`}function V(u){if(!lu())return null;try{return window.localStorage.getItem(u)}catch{return null}}function T(u,n){if(!lu())return;try{window.localStorage.setItem(u,n)}catch{}}function F(u=Date.now()){let n=V("gurulu_sid"),r=Number(V("gurulu_session_started_at")??"0"),m=Number(V("gurulu_last_event_at")??"0");if(n&&r&&u-m<1800000)return T("gurulu_last_event_at",String(u)),{session_id:n,session_started_at:r,is_new:!1};let _=Pu();return T("gurulu_sid",_),T("gurulu_session_started_at",String(u)),T("gurulu_last_event_at",String(u)),{session_id:_,session_started_at:u,is_new:!0}}function Xu(u,n){let r={},m={};if(!u)return{utm:r,click_id:m};let _;try{_=new URL(u)}catch{return{utm:r,click_id:m}}let A=_.searchParams,c=A.get("utm_source");if(c)r.source=c;let E=A.get("utm_medium");if(E)r.medium=E;let o=A.get("utm_campaign");if(o)r.campaign=o;let l=A.get("utm_term");if(l)r.term=l;let X=A.get("utm_content");if(X)r.content=X;let C=A.get("gclid");if(C)m.gclid=C;let j=A.get("fbclid");if(j)m.fbclid=j;let S=A.get("ttclid");if(S)m.ttclid=S;let H=A.get("li_fat_id");if(H)m.li_fat_id=H;return{utm:r,click_id:m}}function Hu(u){if(V("gurulu_first_source"))return;T("gurulu_first_source",JSON.stringify(u))}function Ju(){let u=V("gurulu_first_source");if(!u)return null;try{return JSON.parse(u)}catch{return null}}var U="0.1.0",P="https://ingest.gurulu.io",tu="https://api.gurulu.io",t="gurulu_opt_out";function Mu(){if(typeof window>"u")return!1;try{return window.localStorage.getItem(t)==="1"}catch{return!1}}function Du(u){if(typeof window>"u")return;try{if(u)window.localStorage.setItem(t,"1");else window.localStorage.removeItem(t)}catch{}}function Ou(){return new Date().toISOString()}class ${initialized=!1;opts=null;queue=null;session=null;anonymousId=null;autocaptureHandle=null;testMode=!1;consent;activation;init(u){if(this.initialized){if(u.debug&&typeof console<"u")console.warn("[gurulu] init() already called — ignoring");return}if(typeof window>"u")return;this.opts=u,this.testMode=u.test_mode===!0,this.anonymousId=uu(),this.session=F(),this.consent=new R({workspaceId:u.workspaceKey,apiUrl:u.apiUrl??tu,anonymousId:this.anonymousId,autoBanner:u.consent_mode==="banner_required"}),this.consent.init(),this.activation=new h({endpoint:u.endpoint??P,workspaceKey:u.workspaceKey,getUid:()=>w()??this.anonymousId??"",track:(m,_)=>this.track(m,_)});let n={endpoint:u.endpoint??P,workspaceKey:u.workspaceKey,sdkVersion:U};this.queue=new b({transport:n,flushIntervalMs:u.flush_interval_ms??5000,maxQueueSize:u.max_queue_size??50,...u.debug?{debug:!0}:{}});let r=Xu(window.location.href,document.referrer);if(Object.keys(r.utm).length>0||Object.keys(r.click_id).length>0){let m={utm:r.utm,click_id:r.click_id,referrer:document.referrer,landing_url:window.location.href,captured_at:Date.now()};Hu(m)}this.autocaptureHandle=p(u.autocapture,{pageView:(m,_,A)=>this.queueEvent("page_view","interaction",{url:m,title:_,referrer:A}),click:(m)=>{let _=m.custom_event??"element_clicked",A={element_tag:m.element_tag,...m.element_id?{element_id:m.element_id}:{},...m.element_class?{element_class:m.element_class}:{},...m.element_text?{element_text:m.element_text}:{},...m.href?{href:m.href}:{},...m.is_outbound?{is_outbound:!0}:{},...m.is_download?{is_download:!0}:{},...m.custom_props??{}};this.queueEvent(_,"interaction",A)},formStarted:(m)=>this.queueEvent("form_started","interaction",m),formSubmitted:(m)=>this.queueEvent("form_submitted","interaction",m),scrollDepth:(m)=>this.queueEvent("scroll_depth","interaction",m),webVital:(m)=>this.queueEvent("web_vital","interaction",m),jsError:(m)=>this.queueEvent("js_error","interaction",m)}),this.initialized=!0}track(u,n){this.queueEvent(u,"interaction",n)}page(u){if(!this.initialized||typeof window>"u")return;let n=u?.url??window.location.href,r=u?.title??document.title,m=u?.referrer??document.referrer;this.queueEvent("page_view","interaction",{url:n,title:r,referrer:m})}async identify(u,n){if(!this.initialized||Mu())return;if(nu(u),!this.opts)return;try{await Su({endpoint:this.opts.endpoint??P,workspaceKey:this.opts.workspaceKey,sdkVersion:U},{anonymous_id:this.anonymousId,external_user_id:u,...n?.email?{email:n.email}:{},...n?.phone?{phone:n.phone}:{},...n?{traits:n}:{}})}catch(r){if(this.opts?.debug&&typeof console<"u")console.warn("[gurulu] identify failed",r)}}reset(){if(this.anonymousId=mu(),typeof window<"u")try{window.localStorage.removeItem("gurulu_sid"),window.localStorage.removeItem("gurulu_session_started_at"),window.localStorage.removeItem("gurulu_last_event_at"),window.localStorage.removeItem("gurulu_first_source")}catch{}this.session=F()}async flush(){await this.queue?.flush()}optOut(){Du(!0)}optIn(){Du(!1)}queueEvent(u,n,r){if(!this.initialized||!this.queue||Mu())return;if(!this.consentAllowsAnalytics()&&this.opts?.consent_mode==="banner_required")return;this.session=F();let m={anonymous_id:this.anonymousId??"anon_unknown",event_id:ru(),event_key:u,event_type:n,occurred_at:Ou(),producer:"script",producer_version:U,...this.session?{session_id:this.session.session_id}:{}},_=w();if(_)m.person_id=_;if(r&&Object.keys(r).length>0)m.properties=r;let A=this.buildContext();if(A)m.context=A;let c=this.snapshotConsent();if(c)m.consent_state=c;if(this.testMode)m.test_mode=!0;this.queue.enqueue(m)}snapshotConsent(){let u=this.consent?.getState();if(!u)return;return{necessary:u.categories.necessary,analytics:u.categories.analytics,marketing:u.categories.marketing,functional:u.categories.functional,personalization:u.categories.personalization}}consentAllowsAnalytics(){let u=this.consent?.getState();if(!u)return!1;return u.categories.analytics===!0}buildContext(){if(typeof window>"u")return;let u={url:window.location.href,referrer:document.referrer,page_title:document.title,user_agent:navigator.userAgent,domain:window.location.hostname},n=Ju();if(n?.utm&&Object.keys(n.utm).length>0)u.utm=n.utm;if(n?.click_id&&Object.keys(n.click_id).length>0)u.click_id=n.click_id;return u}}var iu="0.1.0",J=new $;function Vn(){return new $}var O={init:(u)=>J.init(u),track:(u,n)=>J.track(u,n),identify:(u,n)=>J.identify(u,n),page:(u)=>J.page(u),reset:()=>J.reset(),flush:()=>J.flush(),optOut:()=>J.optOut(),optIn:()=>J.optIn(),get consent(){return J.consent},get activation(){return J.activation},VERSION:iu};function Ku(){if(typeof document>"u")return;let u=document.currentScript,n=!u?document.querySelector("script[data-workspace]"):u;if(!n)return;let r=n.getAttribute("data-workspace");if(!r)return;let m={workspaceKey:r},_=n.getAttribute("data-endpoint");if(_)m.endpoint=_;let A=n.getAttribute("data-api-url");if(A)m.apiUrl=A;let c=n.getAttribute("data-consent");if(c==="banner_required"||c==="allow_by_default")m.consent_mode=c;let E=n.getAttribute("data-allowlist");if(E)m.cross_domain_allowlist=E.split(",").map((o)=>o.trim());if(O.init(m),typeof window<"u")window.gurulu=O}Ku();var Zn=O;export{Zn as default,Vn as createGurulu,Ku as autoBootstrap,iu as VERSION,M as SDKError,Au as QueueFullError,cu as OptedOutError,D as NetworkError,_u as InitError,R as GuruluConsent,h as GuruluActivation,$ as Gurulu,Eu as ConsentBlockedError};
9
9
 
10
- //# debugId=AF94586E9911F89164756E2164756E21
10
+ //# debugId=DD5377FE7E5C10A864756E2164756E21
package/dist/t.js.map CHANGED
@@ -2,7 +2,7 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/activation.ts", "../src/consent.ts", "../src/autocapture/click.ts", "../src/autocapture/error.ts", "../src/autocapture/form.ts", "../src/autocapture/page.ts", "../src/autocapture/scroll.ts", "../src/autocapture/web-vitals.ts", "../src/autocapture/index.ts", "../src/identity.ts", "../src/errors.ts", "../src/transport.ts", "../src/queue.ts", "../src/session.ts", "../src/core.ts", "../src/index.ts"],
4
4
  "sourcesContent": [
5
- "// @gurulu/web Activation — M31 popup + M32 tour + M33 personalization + M30 experiment\n// HEADLESS katmanı (K35). /v1/activate'ten workspace aktif config'ini çeker, typed\n// erişim + track helper'ları sunar. Müşteri kendi render eder; hosted Shadow DOM\n// render `@gurulu/web/activate` ayrı chunk (activate-runtime.ts).\n//\n// Deterministik atama hash @gurulu/core/activation'ın BİREBİR kopyası (published\n// boundary — @gurulu/core'a bağlanamaz). Algoritma değişirse 3 yer senkron.\n\nexport function fnv1a32(str: string): number {\n let h = 0x811c9dc5;\n for (let i = 0; i < str.length; i++) {\n h ^= str.charCodeAt(i);\n h = Math.imul(h, 0x01000193);\n }\n return h >>> 0;\n}\n\nexport function activationBucket(key: string, uid: string): number {\n return (fnv1a32(`${key}:${uid}`) % 10000) / 10000;\n}\n\n// ── Kontrat tipleri (server JSON) ─────────────────────────────────────────────\nexport interface PopupDef {\n key: string;\n type: 'modal' | 'banner' | 'slidein';\n content: Record<string, string>;\n trigger: { type: string; value?: number };\n frequency_cap?: { per_user_per_day?: number };\n consent_category?: string;\n}\nexport interface TourStepDef {\n selector: string;\n title: string;\n body: string;\n placement?: string;\n advance_on?: string;\n}\nexport interface TourDef {\n key: string;\n steps: TourStepDef[];\n trigger: { auto?: boolean; manual?: boolean };\n progress?: { current_step: number; completed: boolean; dismissed: boolean };\n}\nexport interface PznResolved {\n key: string;\n slot_key: string;\n variant_key: string;\n is_holdout: boolean;\n content: Record<string, string>;\n}\nexport interface ExperimentDef {\n key: string;\n variants: Array<{ key: string; name?: string; weight: number }>;\n assigned_variant?: string | null;\n}\nexport interface ActivationData {\n workspace_id: string;\n popups: PopupDef[];\n tours: TourDef[];\n personalizations: PznResolved[];\n experiments: ExperimentDef[];\n}\n\nexport interface ActivationConfig {\n endpoint: string;\n workspaceKey: string;\n /** person_id ?? anonymous_id. */\n getUid: () => string;\n /** Parent SDK track() — exposure/serve event'leri buradan gider. */\n track: (eventKey: string, properties: Record<string, unknown>) => void;\n fetchImpl?: typeof fetch;\n}\n\nconst EMPTY: ActivationData = {\n workspace_id: '',\n popups: [],\n tours: [],\n personalizations: [],\n experiments: [],\n};\n\nexport class GuruluActivation {\n private data: ActivationData | null = null;\n private pending: Promise<ActivationData> | null = null;\n private exposed = new Set<string>(); // experiment_key — bir kez expose\n private served = new Set<string>(); // personalization_key — bir kez serve\n\n constructor(private cfg: ActivationConfig) {}\n\n /** /v1/activate'ten aktif config'i çek (tek round-trip). Idempotent (in-flight paylaşır). */\n async refresh(opts?: { url?: string; device?: string }): Promise<ActivationData> {\n if (this.pending) return this.pending;\n const f = this.cfg.fetchImpl ?? (typeof fetch !== 'undefined' ? fetch.bind(globalThis) : null);\n if (!f) return EMPTY;\n const uid = this.cfg.getUid();\n const sp = new URLSearchParams();\n if (uid) sp.set('uid', uid);\n const winHref = typeof window !== 'undefined' && window.location ? window.location.href : '';\n const url = opts?.url ?? winHref;\n if (url) sp.set('url', url);\n const ua = typeof navigator !== 'undefined' && navigator.userAgent ? navigator.userAgent : '';\n const device = opts?.device ?? (/Mobi|Android/i.test(ua) ? 'mobile' : 'desktop');\n sp.set('device', device);\n\n this.pending = (async () => {\n try {\n const res = await f(`${this.cfg.endpoint}/v1/activate?${sp.toString()}`, {\n method: 'GET',\n headers: { Authorization: `Bearer ${this.cfg.workspaceKey}` },\n credentials: 'omit',\n });\n if (!res.ok) return this.data ?? EMPTY;\n this.data = (await res.json()) as ActivationData;\n return this.data;\n } catch {\n return this.data ?? EMPTY;\n } finally {\n this.pending = null;\n }\n })();\n return this.pending;\n }\n\n /** Eligible popup'lar (refresh çağrılmadıysa boş). */\n getPopups(): PopupDef[] {\n return this.data?.popups ?? [];\n }\n /** Aktif tour'lar (uid progress dahil, tamamlanan/kapatılan hariç). */\n getTours(): TourDef[] {\n return this.data?.tours ?? [];\n }\n\n /**\n * Slot için çözülmüş içerik (audience/holdout server'da uygulandı). İlk okumada\n * `personalization_served` emit (bir kez). Slot yoksa null.\n */\n getContent(slot: string): Record<string, string> | null {\n const p = (this.data?.personalizations ?? []).find((x) => x.slot_key === slot);\n if (!p) return null;\n if (!this.served.has(p.key)) {\n this.served.add(p.key);\n this.cfg.track('personalization_served', {\n personalization_key: p.key,\n variant_key: p.variant_key,\n is_holdout: p.is_holdout,\n });\n }\n return p.content;\n }\n\n /**\n * Experiment varyantı (server-assigned; yoksa lokal deterministik). İlk okumada\n * `experiment_exposed` emit (bir kez). Experiment yoksa null.\n */\n getVariant(experimentKey: string): string | null {\n const e = (this.data?.experiments ?? []).find((x) => x.key === experimentKey);\n if (!e) return null;\n const variant =\n e.assigned_variant ?? assignLocalVariant(experimentKey, this.cfg.getUid(), e.variants);\n if (variant && !this.exposed.has(experimentKey)) {\n this.exposed.add(experimentKey);\n this.cfg.track('experiment_exposed', {\n experiment_key: experimentKey,\n variant_key: variant,\n });\n }\n return variant;\n }\n\n // ── Track helper'ları (render katmanı çağırır) ──\n trackPopup(key: string, action: 'shown' | 'clicked' | 'dismissed'): void {\n this.cfg.track(`popup_${action}`, { popup_key: key });\n }\n trackTour(\n key: string,\n action: 'started' | 'step_completed' | 'completed' | 'dismissed',\n stepIndex?: number,\n ): void {\n this.cfg.track(`tour_${action}`, {\n tour_key: key,\n ...(stepIndex !== undefined ? { step_index: stepIndex } : {}),\n });\n }\n\n /** Tur ilerlemesini server'a kaydet (cross-device). Best-effort. */\n async saveTourProgress(\n tourKey: string,\n body: {\n current_step?: number;\n completed_step?: number;\n completed?: boolean;\n dismissed?: boolean;\n },\n ): Promise<void> {\n // Not: /progress backend 'u tour_id ister (dashboard). Public plane v1'de\n // progress = event-driven (tour_step_completed); server-side upsert worker'da.\n // Burada track ile yetin (cross-device server tarafında olaylardan türetilir).\n void tourKey;\n void body;\n }\n\n /** Test/SSR için snapshot. */\n snapshot(): ActivationData {\n return this.data ?? EMPTY;\n }\n}\n\nfunction assignLocalVariant(\n key: string,\n uid: string,\n variants: Array<{ key: string; weight: number }>,\n): string | null {\n const valid = variants.filter((v) => v.weight > 0 && v.key.length > 0);\n if (valid.length === 0 || !uid) return null;\n const total = valid.reduce((s, v) => s + v.weight, 0);\n if (total <= 0) return null;\n const bucket = activationBucket(key, uid);\n let cum = 0;\n for (const v of valid) {\n cum += v.weight / total;\n if (bucket < cum) return v.key;\n }\n return valid[valid.length - 1]!.key;\n}\n",
5
+ "// @gurulu/web Activation — M31 popup + M32 tour + M33 personalization + M30 experiment\n// HEADLESS katmanı (K35). /v1/activate'ten workspace aktif config'ini çeker, typed\n// erişim + track helper'ları sunar. Müşteri kendi render eder; hosted Shadow DOM\n// render `@gurulu/web/activate` ayrı chunk (activate-runtime.ts).\n//\n// Deterministik atama hash @gurulu/core/activation'ın BİREBİR kopyası (published\n// boundary — @gurulu/core'a bağlanamaz). Algoritma değişirse 3 yer senkron.\n\nexport function fnv1a32(str: string): number {\n let h = 0x811c9dc5;\n for (let i = 0; i < str.length; i++) {\n h ^= str.charCodeAt(i);\n h = Math.imul(h, 0x01000193);\n }\n return h >>> 0;\n}\n\nexport function activationBucket(key: string, uid: string): number {\n return (fnv1a32(`${key}:${uid}`) % 10000) / 10000;\n}\n\n// ── Kontrat tipleri (server JSON) ─────────────────────────────────────────────\nexport interface PopupDef {\n key: string;\n type: 'modal' | 'banner' | 'slidein';\n content: Record<string, string>;\n trigger: { type: string; value?: number };\n frequency_cap?: { per_user_per_day?: number };\n consent_category?: string;\n}\nexport interface TourStepDef {\n selector: string;\n title: string;\n body: string;\n placement?: string;\n advance_on?: string;\n}\nexport interface TourDef {\n key: string;\n steps: TourStepDef[];\n trigger: { auto?: boolean; manual?: boolean };\n progress?: { current_step: number; completed: boolean; dismissed: boolean };\n}\nexport interface PznResolved {\n key: string;\n slot_key: string;\n variant_key: string;\n is_holdout: boolean;\n content: Record<string, string>;\n}\nexport interface ExperimentDef {\n key: string;\n variants: Array<{ key: string; name?: string; weight: number }>;\n assigned_variant?: string | null;\n}\nexport interface ActivationData {\n workspace_id: string;\n popups: PopupDef[];\n tours: TourDef[];\n personalizations: PznResolved[];\n experiments: ExperimentDef[];\n}\n\nexport interface ActivationConfig {\n endpoint: string;\n workspaceKey: string;\n /** person_id ?? anonymous_id. */\n getUid: () => string;\n /** Parent SDK track() — exposure/serve event'leri buradan gider. */\n track: (eventKey: string, properties: Record<string, unknown>) => void;\n fetchImpl?: typeof fetch;\n}\n\nconst EMPTY: ActivationData = {\n workspace_id: '',\n popups: [],\n tours: [],\n personalizations: [],\n experiments: [],\n};\n\nexport class GuruluActivation {\n private data: ActivationData | null = null;\n private pending: Promise<ActivationData> | null = null;\n private exposed = new Set<string>(); // experiment_key — bir kez expose\n private served = new Set<string>(); // personalization_key — bir kez serve\n\n constructor(private cfg: ActivationConfig) {}\n\n /** /v1/activate'ten aktif config'i çek (tek round-trip). Idempotent (in-flight paylaşır). */\n async refresh(opts?: { url?: string; device?: string }): Promise<ActivationData> {\n if (this.pending) return this.pending;\n const f = this.cfg.fetchImpl ?? (typeof fetch !== 'undefined' ? fetch.bind(globalThis) : null);\n if (!f) return EMPTY;\n const uid = this.cfg.getUid();\n const sp = new URLSearchParams();\n if (uid) sp.set('uid', uid);\n const winHref = typeof window !== 'undefined' && window.location ? window.location.href : '';\n const url = opts?.url ?? winHref;\n if (url) sp.set('url', url);\n const ua = typeof navigator !== 'undefined' && navigator.userAgent ? navigator.userAgent : '';\n const device = opts?.device ?? (/Mobi|Android/i.test(ua) ? 'mobile' : 'desktop');\n sp.set('device', device);\n\n this.pending = (async () => {\n try {\n const res = await f(`${this.cfg.endpoint}/v1/activate?${sp.toString()}`, {\n method: 'GET',\n headers: { Authorization: `Bearer ${this.cfg.workspaceKey}` },\n credentials: 'omit',\n });\n if (!res.ok) return this.data ?? EMPTY;\n this.data = (await res.json()) as ActivationData;\n return this.data;\n } catch {\n return this.data ?? EMPTY;\n } finally {\n this.pending = null;\n }\n })();\n return this.pending;\n }\n\n /** Eligible popup'lar (refresh çağrılmadıysa boş). */\n getPopups(): PopupDef[] {\n return this.data?.popups ?? [];\n }\n /** Aktif tour'lar (uid progress dahil, tamamlanan/kapatılan hariç). */\n getTours(): TourDef[] {\n return this.data?.tours ?? [];\n }\n\n /**\n * Slot için çözülmüş içerik (audience/holdout server'da uygulandı). İlk okumada\n * `personalization_served` emit (bir kez). Slot yoksa null.\n */\n getContent(slot: string): Record<string, string> | null {\n const p = (this.data?.personalizations ?? []).find((x) => x.slot_key === slot);\n if (!p) return null;\n if (!this.served.has(p.key)) {\n this.served.add(p.key);\n this.cfg.track('personalization_served', {\n personalization_key: p.key,\n variant_key: p.variant_key,\n is_holdout: p.is_holdout,\n });\n }\n return p.content;\n }\n\n /**\n * Experiment varyantı (server-assigned; yoksa lokal deterministik). İlk okumada\n * `experiment_exposed` emit (bir kez). Experiment yoksa null.\n */\n getVariant(experimentKey: string): string | null {\n const e = (this.data?.experiments ?? []).find((x) => x.key === experimentKey);\n if (!e) return null;\n const variant =\n e.assigned_variant ?? assignLocalVariant(experimentKey, this.cfg.getUid(), e.variants);\n if (variant && !this.exposed.has(experimentKey)) {\n this.exposed.add(experimentKey);\n this.cfg.track('experiment_exposed', {\n experiment_key: experimentKey,\n variant_key: variant,\n });\n }\n return variant;\n }\n\n // ── Track helper'ları (render katmanı çağırır) ──\n trackPopup(key: string, action: 'shown' | 'clicked' | 'dismissed'): void {\n this.cfg.track(`popup_${action}`, { popup_key: key });\n }\n trackTour(\n key: string,\n action: 'started' | 'step_completed' | 'completed' | 'dismissed',\n stepIndex?: number,\n ): void {\n this.cfg.track(`tour_${action}`, {\n tour_key: key,\n ...(stepIndex !== undefined ? { step_index: stepIndex } : {}),\n });\n }\n\n /**\n * Tur ilerlemesini server'a kaydet (cross-device). Best-effort.\n *\n * Public plane v1'de progress = event-driven: bu metod `tour_step_completed` /\n * `tour_completed` / `tour_dismissed` Interaction event'lerini emit eder\n * (K16 gözlem). Server tarafında `apps/workers` tour-progress-worker bunları\n * `events_canonical`'dan çekip PG `tour_progress` tablosuna upsert eder\n * (identity M5 uid ile cross-device resume). SDK'da ağır mantık yok — sadece\n * track; tour_id çözümü + array union server'da. Hosted runtime'da\n * (`@gurulu/web/activate`) bu event'ler zaten `trackTour` ile gider, bu metod\n * headless müşteri (kendi render) için aynı yolu sağlar.\n */\n async saveTourProgress(\n tourKey: string,\n body: {\n current_step?: number;\n completed_step?: number;\n completed?: boolean;\n dismissed?: boolean;\n },\n ): Promise<void> {\n if (body.completed_step !== undefined) {\n this.trackTour(tourKey, 'step_completed', body.completed_step);\n }\n if (body.completed) {\n this.trackTour(tourKey, 'completed', body.current_step);\n }\n if (body.dismissed) {\n this.trackTour(tourKey, 'dismissed', body.current_step);\n }\n }\n\n /** Test/SSR için snapshot. */\n snapshot(): ActivationData {\n return this.data ?? EMPTY;\n }\n}\n\nfunction assignLocalVariant(\n key: string,\n uid: string,\n variants: Array<{ key: string; weight: number }>,\n): string | null {\n const valid = variants.filter((v) => v.weight > 0 && v.key.length > 0);\n if (valid.length === 0 || !uid) return null;\n const total = valid.reduce((s, v) => s + v.weight, 0);\n if (total <= 0) return null;\n const bucket = activationBucket(key, uid);\n let cum = 0;\n for (const v of valid) {\n cum += v.weight / total;\n if (bucket < cum) return v.key;\n }\n return valid[valid.length - 1]!.key;\n}\n",
6
6
  "// @gurulu/web — browser SDK consent hook (Sprint D, M11 K28 zero-runtime-dep).\n//\n// API:\n// const consent = new GuruluConsent({ workspaceId, apiUrl: 'https://api.gurulu.io' });\n// await consent.init(); // banner-config fetch + auto-show if needed\n// consent.getState(); // localStorage snapshot\n// await consent.setState({ analytics: true }); // POST /v1/consent/state + cache\n// consent.showBanner() / hideBanner();\n// consent.buildIngestHeader(); // gurulu.track() için header\n//\n// Tasarım:\n// - LocalStorage key: gurulu_consent_{workspaceId}\n// - Fetch credentials: 'omit' (3rd-party context — cookie istemiyoruz)\n// - Banner UI: minimal positioned <div>, inline styles (CSP friendly).\n// - SSR-safe — window/document undefined check'leri.\n//\n// PostHog/Mixpanel/GA4 karşılaştırma:\n// - GA4 Consent Mode: gtag('consent', 'update', {...}) — Gurulu API'mizden de\n// set edilen state'i `dataLayer`a kopyalama optional helper (Faz 1.x).\n// - PostHog: cookie-based, banner kendi UI yok — Gurulu inline minimal banner.\n// - Mixpanel: opt_out_tracking() — Gurulu `setState({analytics:false})` eşdeğer.\n\nexport interface ConsentCategories {\n necessary: boolean;\n analytics: boolean;\n marketing: boolean;\n functional: boolean;\n personalization: boolean;\n}\n\nexport interface ConsentSnapshot {\n workspaceId: string;\n anonymousId: string;\n categories: ConsentCategories;\n /** ISO 8601. */\n grantedAt: string;\n /** ISO 8601. */\n expiresAt: string;\n /** Hangi kaynaktan geldi — 'banner' | 'settings_page' | 'sdk_api' | 'remote'. */\n source: 'banner' | 'settings_page' | 'sdk_api' | 'remote';\n}\n\nexport interface BannerConfig {\n position?: 'bottom' | 'top' | 'bottom-left' | 'bottom-right' | 'modal';\n theme?: 'auto' | 'light' | 'dark';\n buttons?: {\n accept?: boolean;\n reject?: boolean;\n customize?: boolean;\n };\n brand?: {\n logo_url?: string;\n primary_color?: string;\n };\n text_overrides?: Record<string, Record<string, string>>;\n}\n\nexport interface BannerConfigResponse {\n workspace_id: string;\n mode: 'allow_by_default' | 'banner_required' | 'strict_gdpr';\n categories: {\n necessary: { required: true; default: true };\n analytics: { default: boolean };\n marketing: { default: boolean };\n functional: { default: boolean };\n personalization: { default: boolean };\n };\n banner_config: BannerConfig;\n renewal_months: number;\n eu_detected: {\n country: string;\n region: string;\n gdpr_applicable: boolean;\n };\n}\n\nexport interface GuruluConsentOptions {\n workspaceId: string;\n /** Default 'https://api.gurulu.io'. Local dev: 'http://localhost:3000'. */\n apiUrl?: string;\n /** Browser locale (banner copy fallback). Default navigator.language. */\n locale?: 'tr' | 'en' | 'zh' | 'ar';\n /** Anonymous ID (otherwise generated). */\n anonymousId?: string;\n /** Test injection. */\n fetchImpl?: typeof fetch;\n /** Test injection. */\n storage?: Storage;\n /** Auto-call showBanner() in init() if mode requires. Default true. */\n autoBanner?: boolean;\n}\n\nconst DEFAULT_API_URL = 'https://api.gurulu.io';\nconst STORAGE_PREFIX = 'gurulu_consent_';\nconst ANON_STORAGE_KEY = 'gurulu_anon_id';\n\n/**\n * Browser SDK consent manager.\n * Zero runtime dep (M11 K28). SSR-safe (init no-op if window undefined).\n */\nexport class GuruluConsent {\n private readonly workspaceId: string;\n private readonly apiUrl: string;\n private readonly fetchImpl: typeof fetch;\n private readonly storage: Storage | null;\n private readonly autoBanner: boolean;\n private readonly locale: 'tr' | 'en' | 'zh' | 'ar';\n private anonymousIdValue: string;\n private bannerConfigCache: BannerConfigResponse | null = null;\n private bannerEl: HTMLElement | null = null;\n\n constructor(opts: GuruluConsentOptions) {\n this.workspaceId = opts.workspaceId;\n this.apiUrl = (opts.apiUrl ?? DEFAULT_API_URL).replace(/\\/+$/, '');\n this.fetchImpl =\n opts.fetchImpl ??\n (typeof fetch !== 'undefined'\n ? (fetch.bind(globalThis) as typeof fetch)\n : (noFetch as unknown as typeof fetch));\n this.storage =\n opts.storage ??\n (typeof globalThis !== 'undefined' && 'localStorage' in globalThis\n ? (globalThis as unknown as { localStorage: Storage }).localStorage\n : null);\n this.autoBanner = opts.autoBanner ?? true;\n this.locale = opts.locale ?? detectLocale();\n this.anonymousIdValue = opts.anonymousId ?? this.loadOrCreateAnonId();\n }\n\n /**\n * Banner config fetch + auto-show. Idempotent — tekrar çağırılabilir.\n */\n async init(): Promise<void> {\n if (typeof window === 'undefined') return; // SSR no-op\n\n try {\n const res = await this.fetchImpl(\n `${this.apiUrl}/v1/consent/banner-config?workspace_id=${encodeURIComponent(this.workspaceId)}`,\n { method: 'GET', credentials: 'omit' },\n );\n if (!res.ok) return;\n this.bannerConfigCache = (await res.json()) as BannerConfigResponse;\n } catch {\n // Network fail — caller decides (state lookup local fallback).\n return;\n }\n\n const local = this.getState();\n if (!local && this.autoBanner && this.bannerConfigCache?.mode === 'banner_required') {\n this.showBanner();\n }\n }\n\n /** Local consent snapshot — `null` if visitor henüz consent vermemiş. */\n getState(): ConsentSnapshot | null {\n if (!this.storage) return null;\n try {\n const raw = this.storage.getItem(this.storageKey());\n if (!raw) return null;\n const parsed = JSON.parse(raw) as ConsentSnapshot;\n // Expiry check.\n if (parsed.expiresAt && new Date(parsed.expiresAt).getTime() < Date.now()) {\n this.storage.removeItem(this.storageKey());\n return null;\n }\n return parsed;\n } catch {\n return null;\n }\n }\n\n /**\n * Consent state set + remote sync (POST /v1/consent/state).\n * `necessary` her zaman true (forced).\n */\n async setState(categories: Partial<ConsentCategories>): Promise<void> {\n const current = this.getState()?.categories;\n const next: ConsentCategories = {\n necessary: true,\n analytics: categories.analytics ?? current?.analytics ?? false,\n marketing: categories.marketing ?? current?.marketing ?? false,\n functional: categories.functional ?? current?.functional ?? false,\n personalization: categories.personalization ?? current?.personalization ?? false,\n };\n\n const grantedAt = new Date();\n const renewalMonths = this.bannerConfigCache?.renewal_months ?? 13;\n const expiresAt = new Date(grantedAt);\n expiresAt.setMonth(expiresAt.getMonth() + renewalMonths);\n\n const snapshot: ConsentSnapshot = {\n workspaceId: this.workspaceId,\n anonymousId: this.anonymousIdValue,\n categories: next,\n grantedAt: grantedAt.toISOString(),\n expiresAt: expiresAt.toISOString(),\n source: 'sdk_api',\n };\n\n // Local-first — Faz 1: 3rd-party context cookie-less.\n if (this.storage) {\n try {\n this.storage.setItem(this.storageKey(), JSON.stringify(snapshot));\n } catch {\n /* quota / private mode */\n }\n }\n\n // Remote sync — best-effort.\n try {\n await this.fetchImpl(`${this.apiUrl}/v1/consent/state`, {\n method: 'POST',\n credentials: 'omit',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({\n workspace_id: this.workspaceId,\n anonymous_id: this.anonymousIdValue,\n necessary: next.necessary,\n analytics: next.analytics,\n marketing: next.marketing,\n functional: next.functional,\n personalization: next.personalization,\n source: 'sdk_api',\n }),\n });\n } catch {\n // Offline — local state geçerli, next init() sync edecek.\n }\n }\n\n /** Banner DOM elemanını oluştur + body'ye ekle. Idempotent. */\n showBanner(): void {\n if (typeof document === 'undefined') return;\n if (this.bannerEl) return;\n\n const cfg = this.bannerConfigCache?.banner_config ?? {};\n const text = this.bannerText();\n const accentColor = cfg.brand?.primary_color ?? '#fafafa';\n const position = cfg.position ?? 'bottom';\n\n const el = document.createElement('div');\n el.setAttribute('data-gurulu-consent-banner', '');\n el.setAttribute('role', 'dialog');\n el.setAttribute('aria-label', text.heading);\n el.style.cssText = bannerCss(position);\n el.innerHTML = bannerHtml(text, accentColor);\n\n const acceptBtn = el.querySelector<HTMLButtonElement>('[data-gurulu-accept]');\n const rejectBtn = el.querySelector<HTMLButtonElement>('[data-gurulu-reject]');\n acceptBtn?.addEventListener('click', () => {\n void this.setState({\n analytics: true,\n marketing: true,\n functional: true,\n personalization: true,\n });\n this.hideBanner();\n });\n rejectBtn?.addEventListener('click', () => {\n void this.setState({\n analytics: false,\n marketing: false,\n functional: false,\n personalization: false,\n });\n this.hideBanner();\n });\n\n document.body.appendChild(el);\n this.bannerEl = el;\n }\n\n hideBanner(): void {\n if (this.bannerEl?.parentNode) {\n this.bannerEl.parentNode.removeChild(this.bannerEl);\n }\n this.bannerEl = null;\n }\n\n /**\n * gurulu.track() için header — `X-Gurulu-Consent: {categories JSON}`.\n * Ingest endpoint K17 event snapshot için bu header'ı okur.\n */\n buildIngestHeader(): string {\n const snap = this.getState();\n if (!snap) return JSON.stringify({ necessary: true });\n return JSON.stringify(snap.categories);\n }\n\n /** Test util — current anon id. */\n getAnonymousId(): string {\n return this.anonymousIdValue;\n }\n\n // ─── internal ──────────────────────────────────────────────────────────\n\n private storageKey(): string {\n return `${STORAGE_PREFIX}${this.workspaceId}`;\n }\n\n private loadOrCreateAnonId(): string {\n if (!this.storage) return generateAnonId();\n try {\n const existing = this.storage.getItem(ANON_STORAGE_KEY);\n if (existing) return existing;\n const fresh = generateAnonId();\n this.storage.setItem(ANON_STORAGE_KEY, fresh);\n return fresh;\n } catch {\n return generateAnonId();\n }\n }\n\n private bannerText(): { heading: string; body: string; accept: string; reject: string } {\n // Per-locale text — backend banner_config text_overrides override eder.\n const cfg = this.bannerConfigCache?.banner_config;\n const localeOverride = cfg?.text_overrides?.[this.locale];\n if (this.locale === 'tr') {\n return {\n heading: localeOverride?.heading ?? 'Çerezleri tercih et',\n body:\n localeOverride?.body ??\n 'Deneyimini iyileştirmek için analytics + pazarlama çerezleri kullanıyoruz.',\n accept: localeOverride?.accept ?? 'Tümünü kabul et',\n reject: localeOverride?.reject ?? 'Sadece gerekli olanlar',\n };\n }\n return {\n heading: localeOverride?.heading ?? 'Manage cookies',\n body:\n localeOverride?.body ??\n 'We use analytics and marketing cookies to improve your experience.',\n accept: localeOverride?.accept ?? 'Accept all',\n reject: localeOverride?.reject ?? 'Necessary only',\n };\n }\n}\n\nfunction bannerCss(position: NonNullable<BannerConfig['position']>): string {\n const base =\n 'position:fixed;z-index:2147483647;background:#141414;color:#fafafa;border:1px solid #262626;border-radius:8px;padding:16px;font-family:-apple-system,Segoe UI,Roboto,sans-serif;font-size:14px;line-height:1.5;box-shadow:0 4px 24px rgba(0,0,0,0.4);max-width:480px;';\n switch (position) {\n case 'top':\n return `${base}top:16px;left:50%;transform:translateX(-50%);`;\n case 'bottom-left':\n return `${base}bottom:16px;left:16px;`;\n case 'bottom-right':\n return `${base}bottom:16px;right:16px;`;\n case 'modal':\n return `${base}top:50%;left:50%;transform:translate(-50%,-50%);`;\n default:\n return `${base}bottom:16px;left:50%;transform:translateX(-50%);`;\n }\n}\n\nfunction bannerHtml(\n text: { heading: string; body: string; accept: string; reject: string },\n accent: string,\n): string {\n // Inline button colors — accent ile primary, gri secondary.\n return `\n <div style=\"margin-bottom:12px;font-weight:600;\">${escapeHtml(text.heading)}</div>\n <div style=\"margin-bottom:16px;color:#a3a3a3;\">${escapeHtml(text.body)}</div>\n <div style=\"display:flex;gap:8px;flex-wrap:wrap;\">\n <button data-gurulu-accept type=\"button\" style=\"background:${escapeAttr(accent)};color:#0a0a0a;border:none;padding:8px 16px;border-radius:6px;font-weight:600;cursor:pointer;\">${escapeHtml(text.accept)}</button>\n <button data-gurulu-reject type=\"button\" style=\"background:transparent;color:#fafafa;border:1px solid #404040;padding:8px 16px;border-radius:6px;cursor:pointer;\">${escapeHtml(text.reject)}</button>\n </div>\n `;\n}\n\nfunction escapeHtml(s: string): string {\n return s.replace(/[&<>\"']/g, (c) => {\n switch (c) {\n case '&':\n return '&amp;';\n case '<':\n return '&lt;';\n case '>':\n return '&gt;';\n case '\"':\n return '&quot;';\n case \"'\":\n return '&#39;';\n default:\n return c;\n }\n });\n}\n\nfunction escapeAttr(s: string): string {\n return s.replace(/[^a-zA-Z0-9#()_\\-., ]/g, '');\n}\n\nfunction detectLocale(): 'tr' | 'en' | 'zh' | 'ar' {\n if (typeof navigator === 'undefined') return 'en';\n const lang = (navigator.language ?? '').toLowerCase();\n if (lang.startsWith('tr')) return 'tr';\n if (lang.startsWith('zh')) return 'zh';\n if (lang.startsWith('ar')) return 'ar';\n return 'en';\n}\n\nfunction generateAnonId(): string {\n // RFC 4122 v4-ish; crypto.randomUUID varsa kullan.\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return `anon_${crypto.randomUUID()}`;\n }\n return `anon_${Math.random().toString(36).slice(2)}${Date.now().toString(36)}`;\n}\n\nasync function noFetch(): Promise<Response> {\n throw new Error('fetch not available — provide opts.fetchImpl');\n}\n",
7
7
  "// @gurulu/web autocapture — click on <a>/<button>/[role=button]/<input type=submit|button>.\n//\n// Privacy: traverse up — bail if any ancestor has `data-gurulu-no-track`.\n// Skip elements inside password/payment <input> (auto-redact category).\n//\n// Spec § 2.5 + § 4.3.\n\nexport interface ClickPayload {\n element_tag: string;\n element_id?: string;\n element_class?: string;\n element_text?: string;\n href?: string;\n is_outbound?: boolean;\n is_download?: boolean;\n custom_event?: string;\n custom_props?: Record<string, string>;\n}\n\nexport type ClickTracker = (payload: ClickPayload) => void;\n\nconst CLICKABLE_TAGS = new Set(['A', 'BUTTON']);\nconst DOWNLOAD_EXT = /\\.(pdf|zip|dmg|exe|tar|gz|rar|7z|mp3|mp4|csv|xlsx?|docx?|pptx?)(\\?|$)/i;\n\nfunction isTrackable(el: HTMLElement): boolean {\n let node: HTMLElement | null = el;\n while (node) {\n if (node.hasAttribute?.('data-gurulu-no-track')) return false;\n node = node.parentElement;\n }\n return true;\n}\n\nfunction findClickable(target: EventTarget | null): HTMLElement | null {\n let node = target as HTMLElement | null;\n while (node) {\n if (!node.tagName) {\n node = node.parentElement;\n continue;\n }\n if (CLICKABLE_TAGS.has(node.tagName)) return node;\n if (node.getAttribute?.('role') === 'button') return node;\n if (node.tagName === 'INPUT') {\n const t = (node as HTMLInputElement).type?.toLowerCase();\n if (t === 'submit' || t === 'button') return node;\n }\n node = node.parentElement;\n }\n return null;\n}\n\nfunction readCustomProps(el: HTMLElement): Record<string, string> {\n const out: Record<string, string> = {};\n if (!el.attributes) return out;\n for (let i = 0; i < el.attributes.length; i += 1) {\n const attr = el.attributes.item(i);\n if (!attr) continue;\n if (attr.name.startsWith('data-gurulu-prop-')) {\n const k = attr.name.slice('data-gurulu-prop-'.length);\n out[k] = attr.value;\n }\n }\n return out;\n}\n\nexport interface ClickAutocaptureHandle {\n stop(): void;\n}\n\nexport function startClickAutocapture(track: ClickTracker): ClickAutocaptureHandle {\n if (typeof document === 'undefined') return { stop: () => undefined };\n\n const handler = (ev: Event): void => {\n const found = findClickable(ev.target);\n if (!found || !isTrackable(found)) return;\n\n const payload: ClickPayload = {\n element_tag: found.tagName.toLowerCase(),\n };\n if (found.id) payload.element_id = found.id;\n if (found.className && typeof found.className === 'string') {\n payload.element_class = found.className.slice(0, 256);\n }\n const text = (found.textContent ?? '').trim().slice(0, 200);\n if (text) payload.element_text = text;\n\n if (found.tagName === 'A') {\n const href = (found as HTMLAnchorElement).href;\n if (href) {\n payload.href = href;\n try {\n const host = new URL(href).hostname;\n if (typeof window !== 'undefined' && host !== window.location.hostname) {\n payload.is_outbound = true;\n }\n } catch {\n /* invalid href */\n }\n if (DOWNLOAD_EXT.test(href)) payload.is_download = true;\n }\n }\n\n const customEvent = found.getAttribute?.('data-gurulu-event');\n if (customEvent) {\n payload.custom_event = customEvent;\n payload.custom_props = readCustomProps(found);\n }\n\n track(payload);\n };\n\n document.addEventListener('click', handler, true);\n\n return {\n stop(): void {\n document.removeEventListener('click', handler, true);\n },\n };\n}\n",
8
8
  "// @gurulu/web autocapture — js_error via window.onerror + unhandledrejection.\n//\n// Opt-in (config.js_error=true) — default kapalı. `js_error` event'i emit eder.\n// message/stack müşteri verisi içerebilir → opt-in + müşteri kontrolünde.\n// Stack + message truncate edilir (payload şişmesin).\n\nexport interface JsErrorPayload {\n message: string;\n error_type: string;\n source?: string;\n lineno?: number;\n colno?: number;\n stack?: string;\n}\n\nexport type JsErrorTracker = (payload: JsErrorPayload) => void;\n\nexport interface ErrorAutocaptureHandle {\n stop(): void;\n}\n\nconst MAX_STACK = 2000;\nconst MAX_MESSAGE = 1000;\n\nexport function startErrorAutocapture(track: JsErrorTracker): ErrorAutocaptureHandle {\n if (typeof window === 'undefined') return { stop: () => undefined };\n\n const onError = (ev: ErrorEvent): void => {\n const err = ev.error as Error | undefined;\n track({\n message: String(ev.message ?? err?.message ?? 'Error').slice(0, MAX_MESSAGE),\n error_type: err?.name ?? 'Error',\n ...(ev.filename ? { source: ev.filename } : {}),\n ...(typeof ev.lineno === 'number' ? { lineno: ev.lineno } : {}),\n ...(typeof ev.colno === 'number' ? { colno: ev.colno } : {}),\n ...(err?.stack ? { stack: String(err.stack).slice(0, MAX_STACK) } : {}),\n });\n };\n\n const onRejection = (ev: PromiseRejectionEvent): void => {\n const reason = ev.reason;\n const isErr = reason instanceof Error;\n track({\n message: String(isErr ? reason.message : reason).slice(0, MAX_MESSAGE),\n error_type: isErr ? reason.name : 'UnhandledRejection',\n ...(isErr && reason.stack ? { stack: String(reason.stack).slice(0, MAX_STACK) } : {}),\n });\n };\n\n window.addEventListener('error', onError);\n window.addEventListener('unhandledrejection', onRejection);\n\n return {\n stop(): void {\n window.removeEventListener('error', onError);\n window.removeEventListener('unhandledrejection', onRejection);\n },\n };\n}\n",
@@ -19,7 +19,7 @@
19
19
  "// @gurulu/web core — main Gurulu SDK class.\n// Spec: docs/specs/07-sdk-web.md\n//\n// Lifecycle:\n// const sdk = createGurulu();\n// sdk.init({ workspaceKey: 'pk_xxx' });\n// sdk.track('button_clicked', { ... });\n// sdk.identify('user_42', { email: '...' });\n// sdk.reset(); // logout\n// sdk.flush(); // unload edge\n//\n// Zero runtime dep — all transport via native fetch + sendBeacon.\n\nimport { GuruluActivation } from './activation.ts';\nimport { startAutocapture } from './autocapture/index.ts';\nimport { GuruluConsent } from './consent.ts';\nimport {\n clearIdentity,\n getOrCreateAnonymousId,\n getPersonId,\n newEventId,\n setPersonId,\n} from './identity.ts';\nimport { EventQueue } from './queue.ts';\nimport {\n getFirstSource,\n parseUrlContext,\n preserveFirstSource,\n resolveSession,\n type SessionState,\n} from './session.ts';\nimport { sendIdentify, type TransportConfig } from './transport.ts';\nimport type {\n ConsentCategoriesState,\n EventContext,\n EventType,\n InitOptions,\n OutgoingEvent,\n} from './types.ts';\n\nconst SDK_VERSION = '0.1.0';\nconst DEFAULT_ENDPOINT = 'https://ingest.gurulu.io';\nconst DEFAULT_API_URL = 'https://api.gurulu.io';\nconst OPT_OUT_KEY = 'gurulu_opt_out';\n\nfunction isOptedOut(): boolean {\n if (typeof window === 'undefined') return false;\n try {\n return window.localStorage.getItem(OPT_OUT_KEY) === '1';\n } catch {\n return false;\n }\n}\n\nfunction setOptOut(flag: boolean): void {\n if (typeof window === 'undefined') return;\n try {\n if (flag) window.localStorage.setItem(OPT_OUT_KEY, '1');\n else window.localStorage.removeItem(OPT_OUT_KEY);\n } catch {\n /* noop */\n }\n}\n\nfunction nowIso(): string {\n return new Date().toISOString();\n}\n\nexport interface PageOverride {\n url?: string;\n title?: string;\n referrer?: string;\n}\n\nexport class Gurulu {\n private initialized = false;\n private opts: InitOptions | null = null;\n private queue: EventQueue | null = null;\n private session: SessionState | null = null;\n private anonymousId: string | null = null;\n private autocaptureHandle: { stopAll: () => void } | null = null;\n private testMode = false;\n consent!: GuruluConsent;\n /** M31/M32/M33/M30 Activation — headless (refresh/getPopups/getContent/getVariant). */\n activation!: GuruluActivation;\n\n /**\n * 1-line init. Idempotent — second call no-ops with debug warning.\n */\n init(opts: InitOptions): void {\n if (this.initialized) {\n if (opts.debug && typeof console !== 'undefined') {\n // eslint-disable-next-line no-console\n console.warn('[gurulu] init() already called — ignoring');\n }\n return;\n }\n if (typeof window === 'undefined') return; // SSR no-op\n\n this.opts = opts;\n this.testMode = opts.test_mode === true;\n this.anonymousId = getOrCreateAnonymousId();\n this.session = resolveSession();\n this.consent = new GuruluConsent({\n workspaceId: opts.workspaceKey,\n apiUrl: opts.apiUrl ?? DEFAULT_API_URL,\n anonymousId: this.anonymousId,\n autoBanner: opts.consent_mode === 'banner_required',\n });\n // Fire consent banner-config (best-effort, async).\n void this.consent.init();\n\n // M31/M32/M33/M30 Activation headless layer (lazy — refresh çağrılana dek fetch yok).\n this.activation = new GuruluActivation({\n endpoint: opts.endpoint ?? DEFAULT_ENDPOINT,\n workspaceKey: opts.workspaceKey,\n getUid: () => getPersonId() ?? this.anonymousId ?? '',\n track: (key, props) => this.track(key, props),\n });\n\n const transport: TransportConfig = {\n endpoint: opts.endpoint ?? DEFAULT_ENDPOINT,\n workspaceKey: opts.workspaceKey,\n sdkVersion: SDK_VERSION,\n };\n this.queue = new EventQueue({\n transport,\n flushIntervalMs: opts.flush_interval_ms ?? 5000,\n maxQueueSize: opts.max_queue_size ?? 50,\n ...(opts.debug ? { debug: true } : {}),\n });\n\n // First-touch UTM preserve.\n const ctx = parseUrlContext(window.location.href, document.referrer);\n if (Object.keys(ctx.utm).length > 0 || Object.keys(ctx.click_id).length > 0) {\n const touch = {\n utm: ctx.utm,\n click_id: ctx.click_id,\n referrer: document.referrer,\n landing_url: window.location.href,\n captured_at: Date.now(),\n };\n preserveFirstSource(touch);\n }\n\n // Wire autocapture.\n this.autocaptureHandle = startAutocapture(opts.autocapture, {\n pageView: (url, title, referrer) =>\n this.queueEvent('page_view', 'interaction', { url, title, referrer }),\n click: (payload) => {\n const ev = payload.custom_event ?? 'element_clicked';\n const props: Record<string, unknown> = {\n element_tag: payload.element_tag,\n ...(payload.element_id ? { element_id: payload.element_id } : {}),\n ...(payload.element_class ? { element_class: payload.element_class } : {}),\n ...(payload.element_text ? { element_text: payload.element_text } : {}),\n ...(payload.href ? { href: payload.href } : {}),\n ...(payload.is_outbound ? { is_outbound: true } : {}),\n ...(payload.is_download ? { is_download: true } : {}),\n ...(payload.custom_props ?? {}),\n };\n this.queueEvent(ev, 'interaction', props);\n },\n formStarted: (p) =>\n this.queueEvent('form_started', 'interaction', p as unknown as Record<string, unknown>),\n formSubmitted: (p) =>\n this.queueEvent('form_submitted', 'interaction', p as unknown as Record<string, unknown>),\n scrollDepth: (p) =>\n this.queueEvent('scroll_depth', 'interaction', p as unknown as Record<string, unknown>),\n webVital: (p) =>\n this.queueEvent('web_vital', 'interaction', p as unknown as Record<string, unknown>),\n jsError: (p) =>\n this.queueEvent('js_error', 'interaction', p as unknown as Record<string, unknown>),\n });\n\n this.initialized = true;\n }\n\n /** Manual `track()` — typed via codegen (`@gurulu/web/generated`). */\n track(eventKey: string, properties?: Record<string, unknown>): void {\n this.queueEvent(eventKey, 'interaction', properties);\n }\n\n /** Manual `page()` — SPA route helper for non-history flows. */\n page(override?: PageOverride): void {\n if (!this.initialized || typeof window === 'undefined') return;\n const url = override?.url ?? window.location.href;\n const title = override?.title ?? document.title;\n const referrer = override?.referrer ?? document.referrer;\n this.queueEvent('page_view', 'interaction', { url, title, referrer });\n }\n\n /**\n * Identify — anonymous → person merge.\n * Stores person_id locally + best-effort POST /v1/ingest/identify.\n */\n async identify(personId: string, traits?: Record<string, unknown>): Promise<void> {\n if (!this.initialized || isOptedOut()) return;\n setPersonId(personId);\n if (!this.opts) return;\n try {\n await sendIdentify(\n {\n endpoint: this.opts.endpoint ?? DEFAULT_ENDPOINT,\n workspaceKey: this.opts.workspaceKey,\n sdkVersion: SDK_VERSION,\n },\n {\n anonymous_id: this.anonymousId,\n external_user_id: personId,\n ...(traits?.email ? { email: traits.email } : {}),\n ...(traits?.phone ? { phone: traits.phone } : {}),\n ...(traits ? { traits } : {}),\n },\n );\n } catch (err) {\n if (this.opts?.debug && typeof console !== 'undefined') {\n // eslint-disable-next-line no-console\n console.warn('[gurulu] identify failed', err);\n }\n }\n }\n\n /** Logout — wipes person_id, rotates anonymous_id, new session. */\n reset(): void {\n this.anonymousId = clearIdentity();\n if (typeof window !== 'undefined') {\n try {\n window.localStorage.removeItem('gurulu_sid');\n window.localStorage.removeItem('gurulu_session_started_at');\n window.localStorage.removeItem('gurulu_last_event_at');\n window.localStorage.removeItem('gurulu_first_source');\n } catch {\n /* noop */\n }\n }\n this.session = resolveSession();\n }\n\n /** Manual flush — caller may await. */\n async flush(): Promise<void> {\n await this.queue?.flush();\n }\n\n /** Tracking opt-out — all subsequent track/identify no-op. */\n optOut(): void {\n setOptOut(true);\n }\n\n /** Re-enable tracking. */\n optIn(): void {\n setOptOut(false);\n }\n\n // ───────────────────────── internal ──────────────────────────────\n\n private queueEvent(\n eventKey: string,\n eventType: EventType,\n properties?: Record<string, unknown>,\n ): void {\n if (!this.initialized || !this.queue || isOptedOut()) return;\n if (!this.consentAllowsAnalytics() && this.opts?.consent_mode === 'banner_required') {\n // Drop pre-consent in banner_required mode; SDK queue still captures\n // necessary events post-consent.\n return;\n }\n this.session = resolveSession();\n const event: OutgoingEvent = {\n anonymous_id: this.anonymousId ?? 'anon_unknown',\n event_id: newEventId(),\n event_key: eventKey,\n event_type: eventType,\n occurred_at: nowIso(),\n producer: 'script',\n producer_version: SDK_VERSION,\n ...(this.session ? { session_id: this.session.session_id } : {}),\n };\n const pid = getPersonId();\n if (pid) event.person_id = pid;\n if (properties && Object.keys(properties).length > 0) event.properties = properties;\n const ctx = this.buildContext();\n if (ctx) event.context = ctx;\n const consent = this.snapshotConsent();\n if (consent) event.consent_state = consent;\n // Opt-in test_mode flag — only attach when true so prod payloads stay lean.\n if (this.testMode) event.test_mode = true;\n this.queue.enqueue(event);\n }\n\n private snapshotConsent(): ConsentCategoriesState | undefined {\n const snap = this.consent?.getState();\n if (!snap) return undefined;\n return {\n necessary: snap.categories.necessary,\n analytics: snap.categories.analytics,\n marketing: snap.categories.marketing,\n functional: snap.categories.functional,\n personalization: snap.categories.personalization,\n };\n }\n\n private consentAllowsAnalytics(): boolean {\n const snap = this.consent?.getState();\n if (!snap) return false;\n return snap.categories.analytics === true;\n }\n\n private buildContext(): EventContext | undefined {\n if (typeof window === 'undefined') return undefined;\n const ctx: EventContext = {\n url: window.location.href,\n referrer: document.referrer,\n page_title: document.title,\n user_agent: navigator.userAgent,\n domain: window.location.hostname,\n };\n const first = getFirstSource();\n if (first?.utm && Object.keys(first.utm).length > 0) ctx.utm = first.utm;\n if (first?.click_id && Object.keys(first.click_id).length > 0) ctx.click_id = first.click_id;\n return ctx;\n }\n}\n",
20
20
  "// @gurulu/web — Modül 11 browser SDK. PUBLIC NPM + CDN `t.js` (apps/cdn).\n//\n// Spec: docs/specs/07-sdk-web.md\n// Install (1-line script):\n// <script src=\"https://cdn.gurulu.io/t.js\" data-workspace=\"pk_xxx\" defer></script>\n//\n// npm:\n// import gurulu, { GuruluEvents } from '@gurulu/web';\n// gurulu.init({ workspaceKey: 'pk_xxx' });\n// gurulu.track('button_clicked', { ... });\n//\n// Sprint F1.3: core + queue + transport + identity + session + autocapture\n// (page/click/form/scroll/web-vitals) + script-tag bootstrap. Zero runtime\n// dep (M11 K28). SSR-safe.\n\nexport const VERSION = '0.1.0';\n\nexport {\n type ActivationData,\n type ExperimentDef,\n GuruluActivation,\n type PopupDef,\n type PznResolved,\n type TourDef,\n type TourStepDef,\n} from './activation.ts';\nexport {\n type BannerConfig,\n type BannerConfigResponse,\n type ConsentCategories,\n type ConsentSnapshot,\n GuruluConsent,\n type GuruluConsentOptions,\n} from './consent.ts';\nexport { Gurulu, type PageOverride } from './core.ts';\nexport {\n ConsentBlockedError,\n InitError,\n NetworkError,\n OptedOutError,\n QueueFullError,\n SDKError,\n} from './errors.ts';\nexport type {\n AutocaptureConfig,\n ClickIdContext,\n ConsentCategoriesState,\n EventContext,\n EventProducer,\n EventType,\n InitOptions,\n OutgoingEvent,\n UTMContext,\n} from './types.ts';\n\nimport { Gurulu } from './core.ts';\nimport type { InitOptions } from './types.ts';\n\n/** Singleton — matches `window.gurulu` global behaviour. */\nconst singleton = new Gurulu();\n\nexport interface GuruluPublicSDK {\n init: (opts: InitOptions) => void;\n track: (eventKey: string, properties?: Record<string, unknown>) => void;\n identify: (personId: string, traits?: Record<string, unknown>) => Promise<void>;\n page: (override?: Parameters<Gurulu['page']>[0]) => void;\n reset: () => void;\n flush: () => Promise<void>;\n optOut: () => void;\n optIn: () => void;\n consent: Gurulu['consent'];\n /** M31/M32/M33/M30 Activation headless layer (init sonrası). */\n activation: Gurulu['activation'];\n VERSION: string;\n}\n\n/**\n * Factory — `createGurulu()` returns an isolated instance (multi-tenant SDK or\n * test harness). For 99% of consumers, prefer the default singleton via the\n * default export below.\n */\nexport function createGurulu(): Gurulu {\n return new Gurulu();\n}\n\nconst publicSdk = {\n init: (opts: InitOptions) => singleton.init(opts),\n track: (eventKey: string, properties?: Record<string, unknown>) =>\n singleton.track(eventKey, properties),\n identify: (personId: string, traits?: Record<string, unknown>) =>\n singleton.identify(personId, traits),\n page: (override?: Parameters<Gurulu['page']>[0]) => singleton.page(override),\n reset: () => singleton.reset(),\n flush: () => singleton.flush(),\n optOut: () => singleton.optOut(),\n optIn: () => singleton.optIn(),\n get consent() {\n return singleton.consent;\n },\n get activation() {\n return singleton.activation;\n },\n VERSION,\n};\n\n/**\n * Script-tag auto-init — reads `<script data-workspace=\"pk_xxx\" ...>` and\n * runs `init()` automatically. No-op in non-browser environments and when\n * the script is loaded via ESM import (no `data-workspace` attr).\n */\nexport function autoBootstrap(): void {\n if (typeof document === 'undefined') return;\n const script = document.currentScript as HTMLScriptElement | null;\n const fallback = !script\n ? (document.querySelector('script[data-workspace]') as HTMLScriptElement | null)\n : script;\n if (!fallback) return;\n const workspaceKey = fallback.getAttribute('data-workspace');\n if (!workspaceKey) return;\n const opts: InitOptions = { workspaceKey };\n const endpoint = fallback.getAttribute('data-endpoint');\n if (endpoint) opts.endpoint = endpoint;\n const apiUrl = fallback.getAttribute('data-api-url');\n if (apiUrl) opts.apiUrl = apiUrl;\n const consentMode = fallback.getAttribute('data-consent');\n if (consentMode === 'banner_required' || consentMode === 'allow_by_default') {\n opts.consent_mode = consentMode;\n }\n const allowlist = fallback.getAttribute('data-allowlist');\n if (allowlist) opts.cross_domain_allowlist = allowlist.split(',').map((s) => s.trim());\n publicSdk.init(opts);\n if (typeof window !== 'undefined') {\n (window as unknown as { gurulu: typeof publicSdk }).gurulu = publicSdk;\n }\n}\n\n// Side-effect: auto-bootstrap when running as the CDN `t.js` build target.\n// In ESM consumer mode (`import gurulu from '@gurulu/web'`), `currentScript`\n// is null + no `data-workspace` attribute, so this is a safe no-op.\nautoBootstrap();\n\nexport default publicSdk;\n"
21
21
  ],
22
- "mappings": "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",
23
- "debugId": "AF94586E9911F89164756E2164756E21",
22
+ "mappings": "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",
23
+ "debugId": "DD5377FE7E5C10A864756E2164756E21",
24
24
  "names": []
25
25
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gurulu/web",
3
- "version": "1.2.0",
3
+ "version": "1.2.1",
4
4
  "private": false,
5
5
  "license": "MIT",
6
6
  "publishConfig": {