@webority/analytics 0.32.0 → 0.33.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/check-events.js +9 -9
- package/dist/chunk-XM2MLNVT.js +1 -0
- package/dist/fleet-tracking-plan.json +30 -0
- package/dist/generate-events.js +10 -10
- package/dist/index.js +1 -1
- package/dist/react-native.js +1 -1
- package/dist/site.js +1 -1
- package/dist/tracking-plan.schema.json +15 -0
- package/dist/webority-analytics-site.global.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-SR72OIQ6.js +0 -1
package/dist/check-events.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{readFileSync as
|
|
2
|
+
import{readFileSync as He}from"node:fs";import{resolve as le}from"node:path";import{parseArgs as ze}from"node:util";import{existsSync as H,readdirSync as Ae,readFileSync as z}from"node:fs";import{basename as Te,dirname as W,join as $e,relative as V,resolve as x,sep as Se}from"node:path";var u=Object.freeze({SIGNUP_STARTED:"signup_started",SIGNUP_COMPLETED:"signup_completed",LOGIN_SUCCEEDED:"login_succeeded",ONBOARDING_STARTED:"onboarding_started",ONBOARDING_STEP_COMPLETED:"onboarding_step_completed",ONBOARDING_COMPLETED:"onboarding_completed",SUBSCRIPTION_ACTIVATED:"subscription_activated",SUBSCRIPTION_CANCELLED:"subscription_cancelled",PAYMENT_SUCCEEDED:"payment_succeeded",PAYMENT_FAILED:"payment_failed",FEEDBACK_SUBMITTED:"feedback_submitted",LEAD_SUBMITTED:"lead_submitted",LEAD_QUALIFIED:"lead_qualified",LEAD_WON:"lead_won",WHATSAPP_CLICK:"whatsapp_click",CALCULATOR_USE:"calculator_use",PHONE_CLICK:"phone_click",DEMO_BOOKED:"demo_booked",CONTACT_SUBMITTED:"contact_submitted",TRIAL_START_CLICK:"trial_start_click",SAMPLE_REPORT_DOWNLOAD:"sample_report_download",REPORT_VERIFIED:"report_verified",CONTENT_ENGAGED:"content_engaged",EMAIL_CLICK:"email_click",PAGE_NOT_FOUND:"page_not_found",CHAT_OPENED:"chat_opened",CHAT_STARTED:"chat_started",CHAT_INPUT_SUBMITTED:"chat_input_submitted",CHAT_HANDOFF_REQUESTED:"chat_handoff_requested",CHAT_RATED:"chat_rated",CHAT_ACTION_REPEATED:"chat_action_repeated",TOUR_STARTED:"tour_started",TOUR_STEP_VIEWED:"tour_step_viewed",TOUR_COMPLETED:"tour_completed",TOUR_SKIPPED:"tour_skipped"}),Ye=Object.freeze({signupStarted:u.SIGNUP_STARTED,signupCompleted:u.SIGNUP_COMPLETED,loginSucceeded:u.LOGIN_SUCCEEDED,onboardingStarted:u.ONBOARDING_STARTED,onboardingStepCompleted:u.ONBOARDING_STEP_COMPLETED,onboardingCompleted:u.ONBOARDING_COMPLETED,subscriptionActivated:u.SUBSCRIPTION_ACTIVATED,subscriptionCancelled:u.SUBSCRIPTION_CANCELLED,paymentSucceeded:u.PAYMENT_SUCCEEDED,paymentFailed:u.PAYMENT_FAILED,feedbackSubmitted:u.FEEDBACK_SUBMITTED,leadSubmitted:u.LEAD_SUBMITTED,leadQualified:u.LEAD_QUALIFIED,leadWon:u.LEAD_WON,whatsappClick:u.WHATSAPP_CLICK,calculatorUse:u.CALCULATOR_USE,phoneClick:u.PHONE_CLICK,demoBooked:u.DEMO_BOOKED,contactSubmitted:u.CONTACT_SUBMITTED,trialStartClick:u.TRIAL_START_CLICK,sampleReportDownload:u.SAMPLE_REPORT_DOWNLOAD,reportVerified:u.REPORT_VERIFIED,contentEngaged:u.CONTENT_ENGAGED,emailClick:u.EMAIL_CLICK,pageNotFound:u.PAGE_NOT_FOUND,chatOpened:u.CHAT_OPENED,chatStarted:u.CHAT_STARTED,chatInputSubmitted:u.CHAT_INPUT_SUBMITTED,chatHandoffRequested:u.CHAT_HANDOFF_REQUESTED,chatRated:u.CHAT_RATED,chatActionRepeated:u.CHAT_ACTION_REPEATED,tourStarted:u.TOUR_STARTED,tourStepViewed:u.TOUR_STEP_VIEWED,tourCompleted:u.TOUR_COMPLETED,tourSkipped:u.TOUR_SKIPPED}),D=/^[a-z][a-z0-9]*(_[a-z0-9]+)*$/;var C={"(":")","[":"]","{":"}"},v=new Set([")","]","}"]),ue=/[A-Za-z_$]/,de=/[A-Za-z0-9_$]/;function w(e,n=new Map){let s=N(e,"csharp"),o=P(s),t=[],r=/\bconst\s+string\s+(\w+)\s*=\s*(?:"((?:[^"\\]|\\.)*)"|([A-Za-z_][\w.]*))\s*;/g;for(let i of s.matchAll(r)){let c=i[2]??null;if(c===null){let a=i[3].split(".");c=a.length>=2&&a.at(-2)==="AnalyticsEvents"?n.get(a.at(-1))??null:null}t.push({name:i[1],value:c,line:o(i.index)})}return t}function U(e){let n=N(e,"javascript"),s=P(n),o=[],t=/([A-Za-z_$][\w$]*)\s*:\s*(?:"((?:[^"\\]|\\.)*)"|'((?:[^'\\]|\\.)*)')/g;for(let r of n.matchAll(t))o.push({name:r[1],value:r[2]??r[3],line:s(r.index)});return o}function M(e,n,s){if(n.length===0)return[];let o=N(e,s),t=n.map(G).join("|"),r=new RegExp(`(?<![\\w$.])(?:${t})((?:\\.[A-Za-z_$][\\w$]*)+)`,"g"),i=P(o),c=[];for(let a of o.matchAll(r)){if(B(o,a.index,s))continue;let l=a[1].split(".").at(-1),f=a.index+a[0].length;/^\s*\(/.test(o.slice(f,f+8))||c.push({constant:l,line:i(a.index),properties:K(o,f,s)})}return c}function F(e,n,s){if(n.length===0)return[];let o=N(e,s),t=n.map(G).join("|"),r=new RegExp(`(?<![\\w$])(${t})\\s*\\(`,"g"),i=P(o),c=[];for(let a of o.matchAll(r)){if(B(o,a.index,s))continue;let{names:l,end:f}=me(o,a.index+a[0].length,s);if(l.length===0)continue;let d=K(o,f,s),_=i(a.index);for(let A of l)c.push({call:a[1],name:A,line:_,properties:d})}return c}function me(e,n,s){let o=[],t=n,r="(",i=0;for(let c=n;c<e.length;c++){let a=y(e,c,s);if(a!==c){if(i===0&&Ee(e,c,a,s)){let f=e.slice(a).trimStart().charAt(0);((r==="("||r===":")&&(f===","||f===")")||r==="?"&&f===":")&&(o.push(e.slice(c+1,a-1)),t=a)}r="literal",c=a-1;continue}let l=e[c];if(!/\s/.test(l)){if(C[l])i++;else if(v.has(l)){if(i===0)break;i--}else if(i===0&&l===",")break;if(l==="?"&&(e[c+1]==="?"||e[c+1]===".")){r="operator",c++;continue}r=l}}return{names:o,end:t}}function Ee(e,n,s,o){let t=e[n];return s-n<2||e[s-1]!==t?!1:t==="`"?!e.slice(n,s).includes("${"):o==="javascript"||t==='"'}function K(e,n,s){let o=0,t=null;for(let r=n;r<e.length;r++){let i=y(e,r,s);if(i!==r){r=i-1;continue}let c=e[r];if(o===0){if(c===";"||c==="="&&e[r+1]===">")break;if(c==="{"){let a=ge(e,r,s),l=s==="csharp"?_e(e,r,a):he(e,r,a,s);l.length>0&&(t=[...t??[],...l]),r=a;continue}}if(C[c])o++;else if(v.has(c)){if(o===0)break;o--}}return t}function he(e,n,s,o){let t=[],r=!0,i=0;for(let c=n+1;c<s;c++){let a=y(e,c,o);if(a!==c){if(r&&i===0&&(e[c]==='"'||e[c]==="'")){let f=e.slice(c+1,a-1);/^\s*:/.test(e.slice(a,s))&&t.push(f)}r=!1,c=a-1;continue}let l=e[c];if(C[l]){i++,r=!1;continue}if(v.has(l)){i--;continue}if(!(i>0)){if(l===","){r=!0;continue}if(!(!r||/\s/.test(l))){if(ue.test(l)){let f=c;for(;f<s&&de.test(e[f]);)f++;let d=e.slice(f,s).trimStart();(d.startsWith(":")||d.startsWith(",")||d==="")&&t.push(e.slice(c,f)),c=f-1}r=!1}}}return t}function _e(e,n,s){let o=e.slice(n,s+1),t=[];for(let r of o.matchAll(/\[\s*"((?:[^"\\]|\\.)*)"\s*\]\s*=(?!=)/g))t.push(r[1]);for(let r of o.matchAll(/\{\s*"((?:[^"\\]|\\.)*)"\s*,/g))r.index>0&&t.push(r[1]);return t}function ge(e,n,s){let o=0;for(let t=n;t<e.length;t++){let r=y(e,t,s);if(r!==t){t=r-1;continue}if(C[e[t]])o++;else if(v.has(e[t])&&--o===0)return t}return e.length-1}function y(e,n,s){let o=e[n];if(s==="csharp"&&o==="@"&&e[n+1]==='"'){let r=n+2;for(;r<e.length;){if(e[r]==='"'&&e[r+1]==='"'){r+=2;continue}if(e[r]==='"')return r+1;r++}return e.length}if(o!=='"'&&o!=="'"&&!(o==="`"&&s==="javascript"))return n;let t=n+1;for(;t<e.length&&e[t]!==o;){if(e[t]==="\\")t++;else if(e[t]===`
|
|
3
3
|
`&&o!=="`")return t;t++}return t+1}function B(e,n,s){let o=e.lastIndexOf(`
|
|
4
|
-
`,n)+1;for(let t=o;t<n;t++){let r=
|
|
5
|
-
`),o="";for(let t=0;t<s.length;t++){let r=
|
|
6
|
-
`,t),
|
|
4
|
+
`,n)+1;for(let t=o;t<n;t++){let r=y(e,t,s);if(r!==t){if(r>n)return!0;t=r-1}}return!1}function N(e,n){let s=e.replace(/\r\n?/g,`
|
|
5
|
+
`),o="";for(let t=0;t<s.length;t++){let r=y(s,t,n);if(r!==t){o+=s.slice(t,r),t=r-1;continue}if(s[t]==="/"&&s[t+1]==="/"){let i=s.indexOf(`
|
|
6
|
+
`,t),c=i===-1?s.length:i;o+=" ".repeat(c-t),t=c-1;continue}if(s[t]==="/"&&s[t+1]==="*"){let i=s.indexOf("*/",t+2),c=i===-1?s.length:i+2;o+=s.slice(t,c).replace(/[^\n]/g," "),t=c-1;continue}o+=s[t]}return o}function P(e){let n=[];for(let s=e.indexOf(`
|
|
7
7
|
`);s!==-1;s=e.indexOf(`
|
|
8
|
-
`,s+1))n.push(s);return s=>{let o=0,t=n.length;for(;o<t;){let r=o+t>>>1;n[r]<s?o=r+1:t=r}return o+1}}function G(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}var be={csharp:new Set([".cs"]),javascript:new Set([".js",".jsx",".mjs",".cjs",".ts",".tsx",".html",".cshtml",".razor"])},Te="trackSiteEvent",Oe=/^(node_modules|bin|obj|dist|build|coverage|\.git|\.expo|__tests__|__mocks__|tests?)$|\.Tests?$/i,ve=/\.(test|spec)\.[cm]?[jt]sx?$|\.d\.ts$/i;function De(e){let n=new Map;for(let[s,o]of e.events)o.origin==="fleet"&&n.set(Pe(s),s);return n}function H(e,n){let s=[],o=(i,a,c)=>s.push({file:i?q(Y(n,i)):null,line:a,message:c}),t=De(e),r={constants:0,callSites:0,files:0};for(let i of e.sources){let a=new Map,c=new Set(i.ignoreConstants??[]),l=new Set;for(let y of i.constants??[]){let h=x(n,y);if(l.add(h),!z(h)){o(null,null,`${i.sender}: constants file ${y} does not exist`);continue}let E=W(h,"utf8"),A=i.language==="csharp"?w(E,t):U(E);for(let p of A){if(c.has(p.name))continue;if(r.constants++,p.value===null){o(h,p.line,`${p.name} is not a string literal or an AnalyticsEvents constant, so its event name cannot be read`);continue}if(!v.test(p.value)){o(h,p.line,`${p.name} = "${p.value}" is not a snake_case event name (list it in ignoreConstants if it is not an event)`);continue}e.events.has(p.value)||o(h,p.line,`event "${p.value}" (${p.name}) is not in the ${e.product} tracking plan`);let g=a.get(p.name);g!==void 0&&g!==p.value&&o(h,p.line,`${p.name} is declared twice with different events ("${g}" and "${p.value}")`),a.set(p.name,p.value)}}let f=i.references??[],d=i.language==="csharp",_=d?[...new Set([...f,"AnalyticsEvents"])]:f,$=i.language==="javascript"?[...new Set([...i.calls??[],Te])]:i.calls??[];if(_.length===0&&$.length===0)continue;let L=(y,h,E,A)=>{let p=e.events.get(E);if(p){p.senders.includes(i.sender)||o(y,h,`event "${E}" is sent by ${i.sender}, which its plan entry does not list as a sender`);for(let g of A??[])!p.properties.has(g)&&!e.commonProperties.has(g)&&o(y,h,`event "${E}" sends property "${g}", which the plan does not declare`)}};for(let y of i.scan??[]){let h=x(n,y);if(!z(h)){o(null,null,`${i.sender}: scan folder ${y} does not exist`);continue}for(let E of J(h,be[i.language],i.exclude??[],n)){if(l.has(E))continue;r.files++;let A=W(E,"utf8");for(let p of M(A,_,i.language)){if(c.has(p.constant))continue;let g=a.get(p.constant)??(d?t.get(p.constant):void 0);if(g===void 0){i.language==="javascript"&&o(E,p.line,`${p.constant} is not an event constant in ${i.constants.join(", ")}`);continue}r.callSites++,L(E,p.line,g,p.properties)}for(let p of F(A,$,i.language)){if(r.callSites++,!e.events.has(p.name)){o(E,p.line,`event "${p.name}" (sent through ${p.call}) is not in the ${e.product} tracking plan`);continue}L(E,p.line,p.name,p.properties)}}}}return{problems:s,summary:r}}function*J(e,n,s,o){let t=$e(e,{withFileTypes:!0}).sort((r,i)=>r.name<i.name?-1:r.name>i.name?1:0);for(let r of t){let i=Se(e,r.name),a=q(Y(o,i));s.some(c=>a===c||a.startsWith(`${c}/`)||r.name===c)||(r.isDirectory()?Oe.test(r.name)||(yield*J(i,n,s,o)):r.isFile()&&n.has(Ne(r.name))&&!ve.test(r.name)&&(yield i))}}function Ne(e){let n=e.lastIndexOf(".");return n===-1?"":e.slice(n).toLowerCase()}function Z(e){let n=V(x(e));return ye(n)===".webority"?V(n):n}function Pe(e){return e.split("_").map(n=>n.charAt(0).toUpperCase()+n.slice(1)).join("")}function q(e){return e.split(Ae).join("/")}import{readFileSync as Ce}from"node:fs";import{dirname as Ie,resolve as te}from"node:path";var ne="@webority/analytics/fleet",X=Object.freeze(["acquisition","activation","engagement","retention","revenue","referral","support","quality"]),I=Object.freeze(["none","pseudonymous","personal"]),Q=Object.freeze(["string","integer","number","boolean","array","object"]),se=/^[a-z][a-z0-9]*(_[a-z0-9]+)*$/,oe=new Set(["properties","senders"]),Re=new Set(["$schema","product","extends","description","commonProperties","events","sources"]),xe=new Set(["description","stage","owner","personalData","senders","properties"]),ke=new Set(["type","description","values","nullable","personalData"]),je=new Set(["sender","language","constants","references","calls","ignoreConstants","scan","exclude"]),Le=/^[A-Za-z_$][\w$]*$/,we=new Set(["csharp","javascript"]),ee=4,Ue=new URL("./fleet-tracking-plan.json",import.meta.url);function re(e){return ie(te(e),0)}function ie(e,n){let s=typeof e=="string"?e:"fleet-tracking-plan.json",o=[],t;try{t=JSON.parse(Ce(e,"utf8"))}catch(a){return{plan:null,problems:[`${s}: cannot read the plan (${a.message})`]}}if(o.push(...Fe(t,s)),o.length>0)return{plan:null,problems:o};let r=null;if(t.extends!==void 0){if(n>=ee)return{plan:null,problems:[`${s}: "extends" is nested more than ${ee} deep`]};let a=t.extends===ne?Ue:te(Ie(String(e)),t.extends),c=ie(a,n+1);if(!c.plan)return{plan:null,problems:c.problems};r=c.plan}let i=Me(r,t,s);return{plan:i.plan,problems:i.problems}}function Me(e,n,s="plan"){let o=[],t=new Map,r=new Map(e?.commonProperties??[]);for(let[c,l]of e?.events??[])t.set(c,{...l,properties:new Map(l.properties),senders:[...l.senders]});for(let[c,l]of Object.entries(n.commonProperties??{})){let f=r.get(c);if(f&&f.type!==l.type){o.push(`${s}: common property "${c}" is ${l.type} here but ${f.type} in the base plan`);continue}r.set(c,{...l,origin:f?.origin??n.product})}for(let[c,l]of Object.entries(n.events??{})){let f=t.get(c);if(!f){let d=["description","stage","owner","personalData"].filter(_=>l[_]===void 0);d.length>0&&o.push(`${s}: event "${c}" is not in the base plan, so it needs description, stage, owner and personalData (missing ${d.join(", ")})`),t.set(c,{name:c,description:l.description,stage:l.stage,owner:l.owner,personalData:l.personalData,senders:[...l.senders??[]],properties:new Map(Object.entries(l.properties??{})),origin:n.product});continue}for(let d of Object.keys(l))oe.has(d)||o.push(`${s}: event "${c}" is defined by the base plan, so it may only add properties or senders (found "${d}")`);for(let d of l.senders??[])f.senders.includes(d)||f.senders.push(d);for(let[d,_]of Object.entries(l.properties??{})){let $=f.properties.get(d);if($&&$.type!==_.type){o.push(`${s}: "${c}.${d}" is ${_.type} here but ${$.type} in the base plan`);continue}f.properties.set(d,_)}}for(let[c,l]of t)for(let f of l.properties.keys())r.has(f)&&o.push(`${s}: "${c}.${f}" is already a common property, so it must not be declared on the event`);let i=n.sources??[],a=new Set(i.map(c=>c.sender));if(i.length>0)for(let[c,l]of Object.entries(n.events??{}))for(let f of l.senders??[])a.has(f)||o.push(`${s}: event "${c}" names sender "${f}", which no source declares`);return{plan:{product:n.product,events:t,commonProperties:r,sources:i,file:s},problems:o}}function Fe(e,n="plan"){let s=[],o=t=>s.push(`${n}: ${t}`);if(!S(e))return o("the plan must be a JSON object"),s;if(R(e,Re,"the plan",o),(typeof e.product!="string"||!se.test(e.product))&&o('"product" must be a snake_case product slug'),e.extends!==void 0&&(typeof e.extends!="string"||e.extends.length===0)&&o(`"extends" must be "${ne}" or a path to another plan`),!S(e.events))o('"events" must be an object keyed by event name');else for(let[t,r]of Object.entries(e.events))Ke(t,r,o);if(e.commonProperties!==void 0&&ce("commonProperties",e.commonProperties,o),e.sources!==void 0)if(!Array.isArray(e.sources))o('"sources" must be an array');else for(let[t,r]of e.sources.entries())Be(r,t,o);return s}function Ke(e,n,s){if(v.test(e)||s(`event "${e}" is not a snake_case name`),!S(n)){s(`event "${e}" must be an object`);return}R(n,xe,`event "${e}"`,s),Object.keys(n).every(t=>oe.has(t))||((typeof n.description!="string"||n.description.trim()==="")&&s(`event "${e}" needs a description`),X.includes(n.stage)||s(`event "${e}" stage must be one of ${X.join(", ")}`),(typeof n.owner!="string"||n.owner.trim()==="")&&s(`event "${e}" needs an owner`),I.includes(n.personalData)||s(`event "${e}" personalData must be one of ${I.join(", ")}`)),n.senders!==void 0&&(!Array.isArray(n.senders)||n.senders.some(t=>typeof t!="string"))&&s(`event "${e}" senders must be an array of sender names`),n.properties!==void 0&&ce(`event "${e}"`,n.properties,s)}function ce(e,n,s){if(!S(n)){s(`${e} properties must be an object keyed by property name`);return}for(let[o,t]of Object.entries(n)){if(se.test(o)||s(`${e} property "${o}" is not a snake_case name`),!S(t)){s(`${e} property "${o}" must be an object`);continue}R(t,ke,`${e} property "${o}"`,s),Q.includes(t.type)||s(`${e} property "${o}" type must be one of ${Q.join(", ")}`),t.values!==void 0&&(!Array.isArray(t.values)||t.values.length===0)&&s(`${e} property "${o}" values must be a non-empty array`),t.nullable!==void 0&&typeof t.nullable!="boolean"&&s(`${e} property "${o}" nullable must be true or false`),t.personalData!==void 0&&!I.includes(t.personalData)&&s(`${e} property "${o}" personalData must be one of ${I.join(", ")}`)}}function Be(e,n,s){let o=`sources[${n}]`;if(!S(e)){s(`${o} must be an object`);return}R(e,je,o,s),(typeof e.sender!="string"||e.sender==="")&&s(`${o} needs a sender`),we.has(e.language)||s(`${o} language must be csharp or javascript`);for(let t of["constants","references","calls","ignoreConstants","scan","exclude"])e[t]!==void 0&&(!Array.isArray(e[t])||e[t].some(r=>typeof r!="string"))&&s(`${o} ${t} must be an array of strings`);Array.isArray(e.calls)&&e.calls.some(t=>typeof t=="string"&&!Le.test(t))&&s(`${o} calls must be function names, such as trackSiteEvent`),(e.constants?.length??0)===0&&((e.references?.length??0)>0||(e.calls?.length??0)===0)&&s(`${o} needs at least one constants file, unless it has calls and no references`)}function R(e,n,s,o){for(let t of Object.keys(e))n.has(t)||o(`${s} has an unknown field "${t}"`)}function S(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function ae(e,n,s={}){if(typeof n=="string"&&n.startsWith("$"))return[];let o=e.events.get(n);if(!o)return[`event "${n}" is not in the ${e.product} tracking plan`];let t=[];for(let[r,i]of Object.entries(s??{})){if(r.startsWith("$"))continue;let a=o.properties.get(r)??e.commonProperties.get(r);if(!a){t.push(`event "${n}" sends property "${r}", which the plan does not declare`);continue}let c=Ge(a,i);c&&t.push(`event "${n}" property "${r}" ${c}`)}return t}function Ge(e,n){return n==null?e.nullable?null:"is null, and the plan does not mark it nullable":{string:typeof n=="string",integer:Number.isInteger(n),number:typeof n=="number"&&Number.isFinite(n),boolean:typeof n=="boolean",array:Array.isArray(n),object:S(n)}[e.type]?e.values&&!e.values.includes(n)?`is "${n}", which is not one of ${e.values.join(", ")}`:null:`is ${Array.isArray(n)?"array":typeof n}, but the plan declares ${e.type}`}var pe=`usage: webority-analytics-check-events --plan <tracking-plan.json> [--root <dir>] [--events <file.jsonl>]
|
|
9
|
-
`,m;try{m=
|
|
10
|
-
${pe}`),process.exit(2)}(m.help||!m.plan)&&((m.help?process.stdout:process.stderr).write(pe),process.exit(m.help?0:2));var{plan:
|
|
8
|
+
`,s+1))n.push(s);return s=>{let o=0,t=n.length;for(;o<t;){let r=o+t>>>1;n[r]<s?o=r+1:t=r}return o+1}}function G(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}var ye={csharp:new Set([".cs"]),javascript:new Set([".js",".jsx",".mjs",".cjs",".ts",".tsx",".html",".cshtml",".razor"])},be="trackSiteEvent",Oe=/^(node_modules|bin|obj|dist|build|coverage|\.git|\.expo|__tests__|__mocks__|tests?)$|\.Tests?$/i,De=/\.(test|spec)\.[cm]?[jt]sx?$|\.d\.ts$/i;function Ce(e){let n=new Map;for(let[s,o]of e.events)o.origin==="fleet"&&n.set(Ne(s),s);return n}function Y(e,n){let s=[],o=(i,c,a)=>s.push({file:i?Z(V(n,i)):null,line:c,message:a}),t=Ce(e),r={constants:0,callSites:0,files:0};for(let i of e.sources){let c=new Map,a=new Set(i.ignoreConstants??[]),l=new Set;for(let T of i.constants??[]){let E=x(n,T);if(l.add(E),!H(E)){o(null,null,`${i.sender}: constants file ${T} does not exist`);continue}let h=z(E,"utf8"),S=i.language==="csharp"?w(h,t):U(h);for(let p of S){if(a.has(p.name))continue;if(r.constants++,p.value===null){o(E,p.line,`${p.name} is not a string literal or an AnalyticsEvents constant, so its event name cannot be read`);continue}if(!D.test(p.value)){o(E,p.line,`${p.name} = "${p.value}" is not a snake_case event name (list it in ignoreConstants if it is not an event)`);continue}e.events.has(p.value)||o(E,p.line,`event "${p.value}" (${p.name}) is not in the ${e.product} tracking plan`);let g=c.get(p.name);g!==void 0&&g!==p.value&&o(E,p.line,`${p.name} is declared twice with different events ("${g}" and "${p.value}")`),c.set(p.name,p.value)}}let f=i.references??[],d=i.language==="csharp",_=d?[...new Set([...f,"AnalyticsEvents"])]:f,A=i.language==="javascript"?[...new Set([...i.calls??[],be])]:i.calls??[];if(_.length===0&&A.length===0)continue;let L=(T,E,h,S)=>{let p=e.events.get(h);if(p){p.senders.includes(i.sender)||o(T,E,`event "${h}" is sent by ${i.sender}, which its plan entry does not list as a sender`);for(let g of S??[])!p.properties.has(g)&&!e.commonProperties.has(g)&&o(T,E,`event "${h}" sends property "${g}", which the plan does not declare`)}};for(let T of i.scan??[]){let E=x(n,T);if(!H(E)){o(null,null,`${i.sender}: scan folder ${T} does not exist`);continue}for(let h of q(E,ye[i.language],i.exclude??[],n)){if(l.has(h))continue;r.files++;let S=z(h,"utf8");for(let p of M(S,_,i.language)){if(a.has(p.constant))continue;let g=c.get(p.constant)??(d?t.get(p.constant):void 0);if(g===void 0){i.language==="javascript"&&o(h,p.line,`${p.constant} is not an event constant in ${i.constants.join(", ")}`);continue}r.callSites++,L(h,p.line,g,p.properties)}for(let p of F(S,A,i.language)){if(r.callSites++,!e.events.has(p.name)){o(h,p.line,`event "${p.name}" (sent through ${p.call}) is not in the ${e.product} tracking plan`);continue}L(h,p.line,p.name,p.properties)}}}}return{problems:s,summary:r}}function*q(e,n,s,o){let t=Ae(e,{withFileTypes:!0}).sort((r,i)=>r.name<i.name?-1:r.name>i.name?1:0);for(let r of t){let i=$e(e,r.name),c=Z(V(o,i));s.some(a=>c===a||c.startsWith(`${a}/`)||r.name===a)||(r.isDirectory()?Oe.test(r.name)||(yield*q(i,n,s,o)):r.isFile()&&n.has(ve(r.name))&&!De.test(r.name)&&(yield i))}}function ve(e){let n=e.lastIndexOf(".");return n===-1?"":e.slice(n).toLowerCase()}function J(e){let n=W(x(e));return Te(n)===".webority"?W(n):n}function Ne(e){return e.split("_").map(n=>n.charAt(0).toUpperCase()+n.slice(1)).join("")}function Z(e){return e.split(Se).join("/")}import{readFileSync as Pe}from"node:fs";import{dirname as Re,resolve as te}from"node:path";var ne="@webority/analytics/fleet",Q=Object.freeze(["acquisition","activation","engagement","retention","revenue","referral","support","quality"]),R=Object.freeze(["none","pseudonymous","personal"]),X=Object.freeze(["string","integer","number","boolean","array","object"]),se=/^[a-z][a-z0-9]*(_[a-z0-9]+)*$/,oe=new Set(["properties","senders"]),Ie=new Set(["$schema","product","extends","description","commonProperties","events","sources"]),xe=new Set(["description","stage","owner","personalData","senders","properties"]),ke=new Set(["type","description","values","nullable","personalData"]),je=new Set(["sender","language","constants","references","calls","ignoreConstants","scan","exclude"]),Le=/^[A-Za-z_$][\w$]*$/,we=new Set(["csharp","javascript"]),ee=4,Ue=new URL("./fleet-tracking-plan.json",import.meta.url);function re(e){return ie(te(e),0)}function ie(e,n){let s=typeof e=="string"?e:"fleet-tracking-plan.json",o=[],t;try{t=JSON.parse(Pe(e,"utf8"))}catch(c){return{plan:null,problems:[`${s}: cannot read the plan (${c.message})`]}}if(o.push(...Fe(t,s)),o.length>0)return{plan:null,problems:o};let r=null;if(t.extends!==void 0){if(n>=ee)return{plan:null,problems:[`${s}: "extends" is nested more than ${ee} deep`]};let c=t.extends===ne?Ue:te(Re(String(e)),t.extends),a=ie(c,n+1);if(!a.plan)return{plan:null,problems:a.problems};r=a.plan}let i=Me(r,t,s);return{plan:i.plan,problems:i.problems}}function Me(e,n,s="plan"){let o=[],t=new Map,r=new Map(e?.commonProperties??[]);for(let[a,l]of e?.events??[])t.set(a,{...l,properties:new Map(l.properties),senders:[...l.senders]});for(let[a,l]of Object.entries(n.commonProperties??{})){let f=r.get(a);if(f&&f.type!==l.type){o.push(`${s}: common property "${a}" is ${l.type} here but ${f.type} in the base plan`);continue}r.set(a,{...l,origin:f?.origin??n.product})}for(let[a,l]of Object.entries(n.events??{})){let f=t.get(a);if(!f){let d=["description","stage","owner","personalData"].filter(_=>l[_]===void 0);d.length>0&&o.push(`${s}: event "${a}" is not in the base plan, so it needs description, stage, owner and personalData (missing ${d.join(", ")})`),t.set(a,{name:a,description:l.description,stage:l.stage,owner:l.owner,personalData:l.personalData,senders:[...l.senders??[]],properties:new Map(Object.entries(l.properties??{})),origin:n.product});continue}for(let d of Object.keys(l))oe.has(d)||o.push(`${s}: event "${a}" is defined by the base plan, so it may only add properties or senders (found "${d}")`);for(let d of l.senders??[])f.senders.includes(d)||f.senders.push(d);for(let[d,_]of Object.entries(l.properties??{})){let A=f.properties.get(d);if(A&&A.type!==_.type){o.push(`${s}: "${a}.${d}" is ${_.type} here but ${A.type} in the base plan`);continue}f.properties.set(d,_)}}for(let[a,l]of t)for(let f of l.properties.keys())r.has(f)&&o.push(`${s}: "${a}.${f}" is already a common property, so it must not be declared on the event`);let i=n.sources??[],c=new Set(i.map(a=>a.sender));if(i.length>0)for(let[a,l]of Object.entries(n.events??{}))for(let f of l.senders??[])c.has(f)||o.push(`${s}: event "${a}" names sender "${f}", which no source declares`);return{plan:{product:n.product,events:t,commonProperties:r,sources:i,file:s},problems:o}}function Fe(e,n="plan"){let s=[],o=t=>s.push(`${n}: ${t}`);if(!$(e))return o("the plan must be a JSON object"),s;if(I(e,Ie,"the plan",o),(typeof e.product!="string"||!se.test(e.product))&&o('"product" must be a snake_case product slug'),e.extends!==void 0&&(typeof e.extends!="string"||e.extends.length===0)&&o(`"extends" must be "${ne}" or a path to another plan`),!$(e.events))o('"events" must be an object keyed by event name');else for(let[t,r]of Object.entries(e.events))Ke(t,r,o);if(e.commonProperties!==void 0&&ae("commonProperties",e.commonProperties,o),e.sources!==void 0)if(!Array.isArray(e.sources))o('"sources" must be an array');else for(let[t,r]of e.sources.entries())Be(r,t,o);return s}function Ke(e,n,s){if(D.test(e)||s(`event "${e}" is not a snake_case name`),!$(n)){s(`event "${e}" must be an object`);return}I(n,xe,`event "${e}"`,s),Object.keys(n).every(t=>oe.has(t))||((typeof n.description!="string"||n.description.trim()==="")&&s(`event "${e}" needs a description`),Q.includes(n.stage)||s(`event "${e}" stage must be one of ${Q.join(", ")}`),(typeof n.owner!="string"||n.owner.trim()==="")&&s(`event "${e}" needs an owner`),R.includes(n.personalData)||s(`event "${e}" personalData must be one of ${R.join(", ")}`)),n.senders!==void 0&&(!Array.isArray(n.senders)||n.senders.some(t=>typeof t!="string"))&&s(`event "${e}" senders must be an array of sender names`),n.properties!==void 0&&ae(`event "${e}"`,n.properties,s)}function ae(e,n,s){if(!$(n)){s(`${e} properties must be an object keyed by property name`);return}for(let[o,t]of Object.entries(n)){if(se.test(o)||s(`${e} property "${o}" is not a snake_case name`),!$(t)){s(`${e} property "${o}" must be an object`);continue}I(t,ke,`${e} property "${o}"`,s),X.includes(t.type)||s(`${e} property "${o}" type must be one of ${X.join(", ")}`),t.values!==void 0&&(!Array.isArray(t.values)||t.values.length===0)&&s(`${e} property "${o}" values must be a non-empty array`),t.nullable!==void 0&&typeof t.nullable!="boolean"&&s(`${e} property "${o}" nullable must be true or false`),t.personalData!==void 0&&!R.includes(t.personalData)&&s(`${e} property "${o}" personalData must be one of ${R.join(", ")}`)}}function Be(e,n,s){let o=`sources[${n}]`;if(!$(e)){s(`${o} must be an object`);return}I(e,je,o,s),(typeof e.sender!="string"||e.sender==="")&&s(`${o} needs a sender`),we.has(e.language)||s(`${o} language must be csharp or javascript`);for(let t of["constants","references","calls","ignoreConstants","scan","exclude"])e[t]!==void 0&&(!Array.isArray(e[t])||e[t].some(r=>typeof r!="string"))&&s(`${o} ${t} must be an array of strings`);Array.isArray(e.calls)&&e.calls.some(t=>typeof t=="string"&&!Le.test(t))&&s(`${o} calls must be function names, such as trackSiteEvent`),(e.constants?.length??0)===0&&((e.references?.length??0)>0||(e.calls?.length??0)===0)&&s(`${o} needs at least one constants file, unless it has calls and no references`)}function I(e,n,s,o){for(let t of Object.keys(e))n.has(t)||o(`${s} has an unknown field "${t}"`)}function $(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function ce(e,n,s={}){if(typeof n=="string"&&n.startsWith("$"))return[];let o=e.events.get(n);if(!o)return[`event "${n}" is not in the ${e.product} tracking plan`];let t=[];for(let[r,i]of Object.entries(s??{})){if(r.startsWith("$"))continue;let c=o.properties.get(r)??e.commonProperties.get(r);if(!c){t.push(`event "${n}" sends property "${r}", which the plan does not declare`);continue}let a=Ge(c,i);a&&t.push(`event "${n}" property "${r}" ${a}`)}return t}function Ge(e,n){return n==null?e.nullable?null:"is null, and the plan does not mark it nullable":{string:typeof n=="string",integer:Number.isInteger(n),number:typeof n=="number"&&Number.isFinite(n),boolean:typeof n=="boolean",array:Array.isArray(n),object:$(n)}[e.type]?e.values&&!e.values.includes(n)?`is "${n}", which is not one of ${e.values.join(", ")}`:null:`is ${Array.isArray(n)?"array":typeof n}, but the plan declares ${e.type}`}var pe=`usage: webority-analytics-check-events --plan <tracking-plan.json> [--root <dir>] [--events <file.jsonl>]
|
|
9
|
+
`,m;try{m=ze({options:{plan:{type:"string"},root:{type:"string"},events:{type:"string"},help:{type:"boolean"}}}).values}catch(e){process.stderr.write(`${e.message}
|
|
10
|
+
${pe}`),process.exit(2)}(m.help||!m.plan)&&((m.help?process.stdout:process.stderr).write(pe),process.exit(m.help?0:2));var{plan:b,problems:k}=re(m.plan);if(!b||k.length>0){process.stderr.write(`The tracking plan has ${k.length} problem(s):
|
|
11
11
|
`);for(let e of k)process.stderr.write(` ${e}
|
|
12
|
-
`);process.exit(1)}var
|
|
12
|
+
`);process.exit(1)}var We=le(m.root??J(m.plan)),{problems:O,summary:j}=Y(b,We),fe=0;m.events&&He(le(m.events),"utf8").split(/\r?\n/).forEach((n,s)=>{if(n.trim()==="")return;let o;try{o=JSON.parse(n)}catch{O.push({file:m.events,line:s+1,message:"not a JSON object"});return}fe++;for(let t of ce(b,o.event,o.properties))O.push({file:m.events,line:s+1,message:t})});if(O.length>0){process.stderr.write(`${O.length} event problem(s) against the ${b.product} tracking plan (${m.plan}):
|
|
13
13
|
`);for(let{file:e,line:n,message:s}of O)process.stderr.write(` ${e?`${e}${n?`:${n}`:""}: `:""}${s}
|
|
14
|
-
`);process.exit(1)}var
|
|
14
|
+
`);process.exit(1)}var Ve=m.events?`, ${fe} captured event(s)`:"";process.stdout.write(`OK: ${b.events.size} events in the ${b.product} plan; ${j.constants} constants and ${j.callSites} call sites in ${j.files} files${Ve} all match.
|
|
15
15
|
`);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as Z}from"./chunk-JKZNJI5Q.js";var De=["google","googleads","adwords","youtube"],Le=["meta","facebook","fb","instagram","ig","messenger"],ke=["linkedin","lnkd"],ve=["bing","microsoft","microsoftads","msn"],ee=Object.freeze([["chatgpt",["chatgpt.com","chat.openai.com"]],["perplexity",["perplexity.ai"]],["gemini",["gemini.google.com"]],["copilot",["copilot.microsoft.com"]],["claude",["claude.ai"]],["you",["you.com"]],["phind",["phind.com"]],["deepseek",["deepseek.com"]],["grok",["grok.com"]],["meta_ai",["meta.ai"]],["poe",["poe.com"]]]),xe=["bing.com","duckduckgo.com","search.yahoo.com","ecosia.org","search.brave.com"],Ue=["google","yandex"],Fe=["facebook.com","fb.com","instagram.com","linkedin.com","lnkd.in","twitter.com","t.co","x.com","reddit.com","pinterest.com","youtube.com","youtu.be","tiktok.com","whatsapp.com","threads.net","t.me","telegram.org"],f=Object.freeze({DIRECT:"direct",GOOGLE:"google",META:"meta",LINKEDIN:"linkedin",MICROSOFT:"microsoft",OTHER:"other",AI_ASSISTANT:"ai_assistant",ORGANIC_SEARCH:"organic_search",ORGANIC_SOCIAL:"organic_social",REFERRAL:"referral"});function w(e){if(!e)return f.DIRECT;let t=m(e.utmSource);if(t){let r=O(t);if(De.includes(r))return f.GOOGLE;if(Le.includes(r))return f.META;if(ke.includes(r))return f.LINKEDIN;if(ve.includes(r))return f.MICROSOFT}if(m(e.fbclid))return f.META;if(m(e.gclid)||m(e.gbraid)||m(e.wbraid))return f.GOOGLE;if(m(e.liFatId))return f.LINKEDIN;if(m(e.msclkid))return f.MICROSOFT;if(te(t))return f.AI_ASSISTANT;if(t||m(e.utmMedium)||m(e.utmCampaign)||m(e.utmContent)||m(e.utmTerm))return f.OTHER;let o=re(e.referrer);return o?ne(o)?f.AI_ASSISTANT:Pe(o)?f.ORGANIC_SEARCH:Fe.some(r=>oe(o,r))?f.ORGANIC_SOCIAL:f.REFERRAL:f.DIRECT}function x(e){if(!e)return"";let t=te(m(e.utmSource));if(t)return t;let n=re(e.referrer);return n?ne(n):""}function te(e){if(!e)return"";let t=O(e);for(let[n,o]of ee)if(O(n)===t||o.some(r=>O(r)===t))return n;return""}function ne(e){for(let[t,n]of ee)if(n.some(o=>oe(e,o)))return t;return""}function Pe(e){return xe.includes(e)?!0:Ue.some(t=>{if(!e.startsWith(`${t}.`))return!1;let n=e.slice(t.length+1).split(".");return n.length===1||n.length===2&&(n[0]==="co"||n[0]==="com")})}function oe(e,t){return e===t||e.endsWith(`.${t}`)}function re(e){let t=m(e);if(!t)return"";try{let n=new URL(/^[a-z][a-z0-9+.-]*:\/\//i.test(t)?t:`https://${t}`).hostname.toLowerCase();return n.startsWith("www.")?n.slice(4):n}catch{return""}}function O(e){return String(e).toLowerCase().replace(/[^\p{L}\p{N}]/gu,"")}function m(e){return String(e??"").trim()}var U=Object.freeze(["AT","BE","BG","HR","CY","CZ","DK","EE","FI","FR","DE","GR","HU","IE","IT","LV","LT","LU","MT","NL","PL","PT","RO","SK","SI","ES","SE","IS","LI","NO","GB","CH"]);function Me(e){let t=typeof e=="string"?e.trim().toUpperCase():"";return t.length!==2||t==="XX"||t==="T1"?!0:U.includes(t)}var A="webority_cookie_consent",ae="webority-consent-change",se=365,a={initialized:!1,requiresOptIn:!0,strictOptIn:!1,adStorage:!0,cookieDays:se,cookieDomain:null,regionCookie:null,region:null,saved:null},ce=["eea","other"],F=new Set;function $e(e){let t=e?.strictOptIn??!1;if(typeof t!="boolean")throw new Error("@webority/analytics: initConsent strictOptIn must be true or false, or left out.");if(t){if(e.requiresOptIn!==void 0&&e.requiresOptIn!==!0)throw new Error("@webority/analytics: initConsent strictOptIn asks every visitor to opt in, so requiresOptIn must be true or left out.")}else if(typeof e?.requiresOptIn!="boolean")throw new Error("@webority/analytics: initConsent needs requiresOptIn (true or false), decided from the visitor's country.");if(e.cookieDomain!==void 0&&(typeof e.cookieDomain!="string"||!e.cookieDomain.trim()))throw new Error('@webority/analytics: initConsent cookieDomain must be a domain such as ".example.com", or left out.');if(e.cookieDays!==void 0&&!(Number.isInteger(e.cookieDays)&&e.cookieDays>0))throw new Error("@webority/analytics: initConsent cookieDays must be a whole number of days above zero, or left out.");if(e.adStorage!==void 0&&typeof e.adStorage!="boolean")throw new Error("@webority/analytics: initConsent adStorage must be true or false, or left out.");if(e.regionCookie!==void 0&&(typeof e.regionCookie!="string"||!/^[\w.-]+$/.test(e.regionCookie)))throw new Error('@webority/analytics: initConsent regionCookie must be a cookie name such as "wui_region", or left out.');a.initialized=!0,a.strictOptIn=t,a.requiresOptIn=t||e.requiresOptIn,a.adStorage=e.adStorage??!t,a.cookieDays=e.cookieDays??se,a.cookieDomain=e.cookieDomain?.trim()??null,a.regionCookie=e.regionCookie??null,a.region=a.regionCookie?Ke(a.regionCookie):null;let{saved:n,entryCount:o}=qe();a.saved=n,a.cookieDomain&&o>1&&n&&pe(n),Be(),ze(),a.saved?$(a.saved):de()&&fe()}function Ge(e){if(M("setConsentRegion"),!ce.includes(e))throw new Error('@webority/analytics: setConsentRegion needs "eea" or "other".');let t=d();if(a.region=e,a.saved)return;let n=d();t.analytics===n.analytics&&t.functional===n.functional&&t.marketing===n.marketing||(fe(),le(n))}function E(){return a.initialized}function ue(){return a.strictOptIn}function P(){return a.adStorage}function d(){M("getConsent");let e=a.saved;if(e)return{essential:!0,analytics:e.analytics,functional:e.functional,marketing:e.marketing,decided:!0};if(de())return{essential:!0,analytics:!0,functional:!0,marketing:!1,decided:!1};let t=!a.requiresOptIn;return{essential:!0,analytics:t,functional:t,marketing:t,decided:!1}}function He(e){M("saveConsent");let t={essential:!0,analytics:e?.analytics===!0,functional:e?.functional===!0,marketing:e?.marketing===!0,timestamp:new Date().toISOString()};pe(t),a.saved=t,$(t),le(d())}function y(e){return F.add(e),()=>F.delete(e)}function le(e){for(let t of F)try{t(e)}catch(n){queueMicrotask(()=>{throw n})}typeof window?.dispatchEvent=="function"&&typeof CustomEvent=="function"&&window.dispatchEvent(new CustomEvent(ae,{detail:e}))}function M(e){if(!a.initialized)throw new Error(`@webority/analytics: call initConsent before ${e}.`)}function S(){window.dataLayer=window.dataLayer||[],window.dataLayer.push(arguments)}function Be(){if(a.strictOptIn){S("consent","default",{ad_storage:"denied",ad_user_data:"denied",ad_personalization:"denied",analytics_storage:"denied",functionality_storage:"denied",personalization_storage:"denied",security_storage:"granted",wait_for_update:500});return}S("consent","default",{ad_storage:"denied",ad_user_data:"denied",ad_personalization:"denied",analytics_storage:"denied",functionality_storage:"denied",personalization_storage:"denied",security_storage:"granted",wait_for_update:500,region:[...U]});let e=a.adStorage?"granted":"denied";S("consent","default",{ad_storage:e,ad_user_data:e,ad_personalization:e,analytics_storage:"granted",functionality_storage:"granted",personalization_storage:"granted",security_storage:"granted"})}function ze(){S("set","ads_data_redaction",!0),S("set","url_passthrough",!0)}function de(){return a.requiresOptIn&&!a.strictOptIn&&a.region==="other"}function fe(){let e=d();$(e,e.analytics&&a.adStorage)}function $(e,t=e.marketing&&a.adStorage){let n=o=>o?"granted":"denied";S("consent","update",{analytics_storage:n(e.analytics),functionality_storage:n(e.functional),personalization_storage:n(e.functional),ad_storage:n(t),ad_user_data:n(t),ad_personalization:n(t)})}function qe(){let e=`${A}=`,t=(document.cookie||"").split(";").map(o=>o.trim()).filter(o=>o.startsWith(e)),n=t.map(o=>Ve(o.slice(e.length))).filter(Boolean);return{saved:We(n),entryCount:t.length}}function Ke(e){let t=`${e}=`,o=(document.cookie||"").split(";").map(r=>r.trim()).find(r=>r.startsWith(t))?.slice(t.length);return ce.includes(o)?o:null}function Ve(e){try{let t=JSON.parse(decodeURIComponent(e));return!t||typeof t!="object"?null:{essential:!0,analytics:t.analytics===!0,functional:t.functional===!0,marketing:t.marketing===!0,timestamp:t.timestamp??null}}catch{return null}}function We(e){if(e.length===0)return null;let t=e.map(o=>typeof o.timestamp=="string"?Date.parse(o.timestamp):Number.NaN);if(t.some(Number.isNaN))return e.at(-1);let n=0;for(let o=1;o<e.length;o++)t[o]>=t[n]&&(n=o);return e[n]}function pe(e){let t=typeof e.timestamp=="string"?Date.parse(e.timestamp):Number.NaN,n=(Number.isNaN(t)?Date.now():t)+a.cookieDays*24*60*60*1e3,o=window.location?.protocol==="https:"?";Secure":"";a.cookieDomain&&ie(`${A}=;expires=Thu, 01 Jan 1970 00:00:00 GMT;max-age=0;path=/;SameSite=Lax${o}`);let r=a.cookieDomain?`;domain=${a.cookieDomain}`:"";ie(`${A}=${encodeURIComponent(JSON.stringify(e))};expires=${new Date(n).toUTCString()};path=/${r};SameSite=Lax${o}`)}function ie(e){document.cookie=e}var R="webority_attribution",je=2160*60*60*1e3,Ye=200,G=500,Qe=Object.freeze({utm_source:"utmSource",utm_medium:"utmMedium",utm_campaign:"utmCampaign",utm_content:"utmContent",utm_term:"utmTerm",gclid:"gclid",gbraid:"gbraid",wbraid:"wbraid",fbclid:"fbclid",msclkid:"msclkid",li_fat_id:"liFatId"}),me=!1;function Xe(){Ee("captureAttribution"),tt();let e=Ze();if(!e)return;let t=K(H());ge(H(),{firstTouch:t?.firstTouch??e,lastTouch:e}),Je(e)}function Je(e){let t={event:"acquisition_touch",acquisition_channel:w(e)};e.aiSource&&(t.ai_source=e.aiSource),window.dataLayer=window.dataLayer||[],window.dataLayer.push(t)}function q(){return Ee("getAttribution"),K(H())}function Ze(){let e=new URLSearchParams(window.location.search),t={};for(let[r,c]of Object.entries(Qe)){let s=b(e.get(r),Ye);s&&(t[c]=s)}let n=b(e.get("referrer"),G)||et();if(n&&(t.referrer=n),Object.keys(t).length===0)return null;let o=x(t);return o&&(t.aiSource=o),t.landingPage=b(window.location.pathname,G),t.capturedDateTimeUtc=new Date().toISOString(),t}function et(){let e=document.referrer;if(!e)return"";try{return new URL(e).hostname===window.location.hostname?"":b(e,G)}catch{return""}}function tt(){me||(me=!0,y(e=>{let t=e.marketing?z():B(),n=e.marketing?B():z(),o=K(t);nt(t),o&&ge(n,o)}))}function H(){return d().marketing?B():z()}function B(){try{return window.localStorage}catch{return null}}function z(){try{return window.sessionStorage}catch{return null}}function K(e){try{let t=e?.getItem(R);if(!t)return null;let n=JSON.parse(t),o=_e(n?.firstTouch),r=_e(n?.lastTouch);return!o&&!r?(e.removeItem(R),null):{firstTouch:o??r,lastTouch:r??o}}catch{return null}}function ge(e,t){try{e?.setItem(R,JSON.stringify(t))}catch{}}function nt(e){try{e?.removeItem(R)}catch{}}function _e(e){if(!e||typeof e!="object")return null;let t=Date.parse(e.capturedDateTimeUtc);return Number.isFinite(t)&&Date.now()-t<=je?e:null}function b(e,t){let n=String(e??"").trim();return n?n.slice(0,t):""}function Ee(e){if(!E())throw new Error(`@webority/analytics: call initConsent before ${e}.`)}function ye(e,t){return import("./web-vitals-G2NSUBUS.js").then(n=>n.startWebVitals(e,t)).catch(()=>{})}var ot=["scroll","mousemove","touchstart","keydown","pointerdown"];function N(e){let t=!1,n=()=>{t||(t=!0,e())};for(let o of ot)window.addEventListener(o,n,{once:!0,passive:!0});document.readyState==="complete"?setTimeout(n,1500):window.addEventListener("load",()=>setTimeout(n,1500),{once:!0})}var i=Object.freeze({SIGNUP_STARTED:"signup_started",SIGNUP_COMPLETED:"signup_completed",LOGIN_SUCCEEDED:"login_succeeded",ONBOARDING_STARTED:"onboarding_started",ONBOARDING_STEP_COMPLETED:"onboarding_step_completed",ONBOARDING_COMPLETED:"onboarding_completed",SUBSCRIPTION_ACTIVATED:"subscription_activated",SUBSCRIPTION_CANCELLED:"subscription_cancelled",PAYMENT_SUCCEEDED:"payment_succeeded",PAYMENT_FAILED:"payment_failed",FEEDBACK_SUBMITTED:"feedback_submitted",LEAD_SUBMITTED:"lead_submitted",LEAD_QUALIFIED:"lead_qualified",LEAD_WON:"lead_won",WHATSAPP_CLICK:"whatsapp_click",CALCULATOR_USE:"calculator_use",PHONE_CLICK:"phone_click",DEMO_BOOKED:"demo_booked",CONTACT_SUBMITTED:"contact_submitted",TRIAL_START_CLICK:"trial_start_click",SAMPLE_REPORT_DOWNLOAD:"sample_report_download",REPORT_VERIFIED:"report_verified",CONTENT_ENGAGED:"content_engaged",EMAIL_CLICK:"email_click",PAGE_NOT_FOUND:"page_not_found",CHAT_OPENED:"chat_opened",CHAT_STARTED:"chat_started",CHAT_INPUT_SUBMITTED:"chat_input_submitted",CHAT_HANDOFF_REQUESTED:"chat_handoff_requested",CHAT_RATED:"chat_rated",CHAT_ACTION_REPEATED:"chat_action_repeated",TOUR_STARTED:"tour_started",TOUR_STEP_VIEWED:"tour_step_viewed",TOUR_COMPLETED:"tour_completed",TOUR_SKIPPED:"tour_skipped"}),Gt=Object.freeze({signupStarted:i.SIGNUP_STARTED,signupCompleted:i.SIGNUP_COMPLETED,loginSucceeded:i.LOGIN_SUCCEEDED,onboardingStarted:i.ONBOARDING_STARTED,onboardingStepCompleted:i.ONBOARDING_STEP_COMPLETED,onboardingCompleted:i.ONBOARDING_COMPLETED,subscriptionActivated:i.SUBSCRIPTION_ACTIVATED,subscriptionCancelled:i.SUBSCRIPTION_CANCELLED,paymentSucceeded:i.PAYMENT_SUCCEEDED,paymentFailed:i.PAYMENT_FAILED,feedbackSubmitted:i.FEEDBACK_SUBMITTED,leadSubmitted:i.LEAD_SUBMITTED,leadQualified:i.LEAD_QUALIFIED,leadWon:i.LEAD_WON,whatsappClick:i.WHATSAPP_CLICK,calculatorUse:i.CALCULATOR_USE,phoneClick:i.PHONE_CLICK,demoBooked:i.DEMO_BOOKED,contactSubmitted:i.CONTACT_SUBMITTED,trialStartClick:i.TRIAL_START_CLICK,sampleReportDownload:i.SAMPLE_REPORT_DOWNLOAD,reportVerified:i.REPORT_VERIFIED,contentEngaged:i.CONTENT_ENGAGED,emailClick:i.EMAIL_CLICK,pageNotFound:i.PAGE_NOT_FOUND,chatOpened:i.CHAT_OPENED,chatStarted:i.CHAT_STARTED,chatInputSubmitted:i.CHAT_INPUT_SUBMITTED,chatHandoffRequested:i.CHAT_HANDOFF_REQUESTED,chatRated:i.CHAT_RATED,chatActionRepeated:i.CHAT_ACTION_REPEATED,tourStarted:i.TOUR_STARTED,tourStepViewed:i.TOUR_STEP_VIEWED,tourCompleted:i.TOUR_COMPLETED,tourSkipped:i.TOUR_SKIPPED}),Ce=/^[a-z][a-z0-9]*(_[a-z0-9]+)*$/;var rt=50;function Te(){let e=new Set(Object.values(i)),t=new Set;return{warned:t,register(n){for(let o of n){if(!Ce.test(o))throw new Error(`@webority/analytics: invalid event name "${o}". Expected snake_case.`);e.add(o)}},accept(n,o){return e.has(n)?!0:(it(t,n,o),!1)}}}function it(e,t,n){if(e.has(t))return;e.size<rt&&e.add(t);let o=`@webority/analytics: event "${t}" is not registered, so it was dropped. Call registerEvents() first.`;if(typeof n?.warn=="function"){n.warn(o);return}if(typeof n?.info=="function"){n.info(o);return}console.warn(o)}var D=Te(),l={config:null,posthogInstance:null,posthogInitPromise:null,warnedUnregisteredEvents:D.warned,pendingIdentify:null};function Vt(e){l.config=e,l.posthogInstance=null,l.posthogInitPromise=null,l.pendingIdentify=null}function at(){let e=l.config;return e?!!(e.enabled&&e.clientKey&&e.environment!=="Local"):!1}function L(){return E()&&d().analytics}function Se(){return at()&&L()}var k=new Set,he=new WeakSet,Ie=null;function Yt(e){let t=V();if(!t)return!1;try{return t.isFeatureEnabled(e)===!0}catch{return!1}}function Qt(e){let t=V();if(!t)return null;try{return t.getFeatureFlag(e)??null}catch{return null}}function Xt(e){k.add(e);let t=V();return(!t||Ie===t)&&queueMicrotask(()=>{k.has(e)&&Oe(e)}),()=>k.delete(e)}function we(e){l.config?.featureFlags!==!0||he.has(e)||typeof e.onFeatureFlags!="function"||(he.add(e),e.onFeatureFlags(()=>{Ie=e;for(let t of[...k])Oe(t)}))}function V(){return l.config?.featureFlags!==!0||!Se()?null:l.posthogInstance??null}function Oe(e){try{e()}catch(t){queueMicrotask(()=>{throw t})}}var st=new Set(["token","code","email","access_token","id_token","state","session_state","password","search","q","query"]),ct=/(?:access_token|id_token|session_state|token|code|state|email|password)=/i,ut=["$current_url","$referrer","$pathname","$initial_current_url","$initial_referrer","$initial_pathname","$session_entry_url","$session_entry_referrer","$session_entry_pathname"],lt=4,dt=5,ft=6;function h(e){if(typeof e!="string")return e;let t=e.indexOf("#"),n=t===-1?e:e.slice(0,t),o=t===-1||ct.test(e.slice(t))?"":e.slice(t),r=n.indexOf("?");if(r===-1)return n+o;let c=n.slice(r+1).split("&"),s=c.filter(g=>!st.has(gt(g))).map(_t);if(s.length===c.length&&s.every((g,I)=>g===c[I]))return n+o;let p=n.slice(0,r),T=s.filter(g=>g!=="").join("&");return(T?`${p}?${T}`:p)+o}function Ae(e){if(!e||typeof e!="object")return e;let t=e.properties;for(let r of[t,e.$set,e.$set_once,t?.$set,t?.$set_once])mt(r);let n=t?.$heatmap_data;if(n&&typeof n=="object"){let r={};for(let[c,s]of Object.entries(n)){let p=h(c);r[p]=r[p]?r[p].concat(s):s}t.$heatmap_data=r}if(t&&typeof t=="object"){for(let[r,c]of Object.entries(t))if(r.startsWith("$web_vitals_")&&r.endsWith("_event")&&c&&typeof c=="object")for(let s of["$current_url","navigationURL"])typeof c[s]=="string"&&(c[s]=h(c[s]))}let o=t?.$snapshot_data;if(e.event==="$snapshot"&&o&&typeof o=="object")for(let r of Array.isArray(o)?o:[o])pt(r);return e}function pt(e){let t=e?.data;if(!(!t||typeof t!="object")){if(e.type===lt)v(t,["href"]);else if(e.type===dt)v(t.payload,["href"]);else if(e.type===ft&&Array.isArray(t.payload?.requests))for(let n of t.payload.requests)v(n,["name","url"])}}function v(e,t){if(!(!e||typeof e!="object"))for(let n of t)typeof e[n]=="string"&&(e[n]=h(e[n]))}function mt(e){v(e,ut)}function _t(e){let t=e.indexOf("=");if(t===-1)return e;let n;try{n=decodeURIComponent(e.slice(t+1).replace(/\+/g," "))}catch{return e}if(!n.startsWith("/")&&!/^https?:\/\//i.test(n))return e;let o=h(n);return o===n?e:`${e.slice(0,t)}=${encodeURIComponent(o)}`}function gt(e){let t=e.split("=",1)[0].replace(/\+/g," ");try{return decodeURIComponent(t).toLowerCase()}catch{return t.toLowerCase()}}async function on(){if(l.posthogInstance)return l.posthogInstance;if(l.posthogInitPromise)return l.posthogInitPromise;let e=l.config;return l.posthogInitPromise=import("posthog-js").then(t=>{let n=t.default??t,o=W(j(e),L(),e.featureFlags===!0);return n.init(e.clientKey,o),n.register({product:e.product,surface:e.surface,environment:e.environment}),L()?n.opt_in_capturing({captureEventName:!1}):n.opt_out_capturing(),l.posthogInstance=n,we(n),n}).catch(t=>{throw l.posthogInitPromise=null,t}),l.posthogInitPromise}function W(e,t,n=!1){return t?e:{...e,opt_out_capturing_by_default:!0,...n?{advanced_disable_feature_flags_on_first_load:!0}:{}}}function j(e){let t=e.sessionRecording??{enabled:!1},n={api_host:e.host,autocapture:!1,capture_pageview:"history_change",cookieless_mode:"on_reject",person_profiles:"identified_only",persistence:"localStorage+cookie",cross_subdomain_cookie:!0,disable_session_recording:!t.enabled,enable_heatmaps:e.heatmaps===!0,capture_exceptions:e.captureExceptions===!0,capture_performance:{web_vitals:!1},disable_surveys:!0,disable_product_tours:!0,disable_conversations:!0,advanced_disable_feature_flags:!(t.enabled||e.featureFlags===!0),before_send:Ae};return t.enabled&&(n.session_recording={maskAllInputs:t.maskAllInputs??!0,...t.maskTextSelector?{maskTextSelector:t.maskTextSelector}:{},maskCapturedNetworkRequestFn:o=>({...o,name:h(o.name)}),recordBody:!1,recordHeaders:!1}),n}var Et=()=>import("posthog-js"),yt=100,u={config:null,posthog:null,pending:[],failed:!1,loadPosthog:Et,startVitals:ye,stopFollowingConsent:null};function Ct({host:e,clientKey:t,product:n,surface:o,environment:r,enabled:c=!0,sessionRecording:s,heatmaps:p=!1,captureExceptions:T=!1,webVitals:g=!1}={}){if(!E())throw new Error("@webority/analytics: call initConsent before initSiteAnalytics.");let I=Z(g);!c||!e||!t||r==="Local"||u.config||(u.config={host:e,clientKey:t,product:n,surface:o,environment:r,sessionRecording:s,heatmaps:p,captureExceptions:T,webVitals:I},u.stopFollowingConsent=y(C=>St(C.analytics)),N(()=>{Promise.resolve().then(u.loadPosthog).then(C=>Tt(C.default??C)).catch(()=>{u.failed=!0,u.pending=[]})}))}function Tt(e){let t=u.config,n=d().analytics;e.init(t.clientKey,W(ht(t),n)),e.register({product:t.product,surface:t.surface,environment:t.environment}),n?e.opt_in_capturing({captureEventName:!1}):e.opt_out_capturing(),u.posthog=e;let o=u.pending;u.pending=[];for(let[r,c]of o)Y(e,r,c);t.webVitals&&u.startVitals(t.webVitals,(r,c)=>Y(e,r,c))}function St(e){u.posthog&&(e?u.posthog.opt_in_capturing():u.posthog.opt_out_capturing())}function ht(e){return{...j({host:e.host,sessionRecording:e.sessionRecording,heatmaps:e.heatmaps,captureExceptions:e.captureExceptions,webVitals:e.webVitals}),capture_pageview:!0}}function be(e,t){let n=u.config;if(!n)return;let o={...t,product:n.product,surface:n.surface,environment:n.environment};u.posthog?Y(u.posthog,e,o):!u.failed&&u.pending.length<yt&&u.pending.push([e,o])}function Y(e,t,n){try{e.capture(t,n)}catch{}}function It(e,t={}){if(!D.accept(e))return!1;let n=d().analytics,o=q(),r={...t};for(let[c,s]of[["first",o?.firstTouch],["last",o?.lastTouch]])s&&(r[`${c}_touch_channel`]=w(s),s.aiSource&&(r[`${c}_touch_ai_source`]=s.aiSource));return be(e,r),n?(window.dataLayer=window.dataLayer||[],window.dataLayer.push({...r,event:e}),!0):!1}function wt(e){D.register(e)}var Ot="https://www.googletagmanager.com/gtm.js",At=3e3,bt=100,_={loaded:!1,clarityId:null,clarityLoaded:!1,cancelClaritySchedule:null};function Rt(e={}){if(!E())throw new Error("@webority/analytics: call initConsent before loadTags.");if(_.loaded)return;_.loaded=!0;let{gtmId:t,gtmUrl:n=Ot,clarityId:o,ahrefsKey:r}=e;if(typeof n!="string"||n.trim()==="")throw new Error("@webority/analytics: gtmUrl must be a non-empty string.");let c=ue();if(r){let s=()=>X("https://analytics.ahrefs.com/analytics.js",{"data-key":r});c?Re(p=>p.analytics,s):s()}if(t){let s=P(),p=J=>J.analytics||J.marketing&&s,T=()=>{window.dataLayer=window.dataLayer||[],window.dataLayer.push({"gtm.start":Date.now(),event:"gtm.js"}),X(`${n}${n.includes("?")?"&":"?"}id=${encodeURIComponent(t)}`)},g=d(),I=g.decided&&p(g)?Nt:N,C=()=>I(T);c?Re(p,C):C()}o&&(_.clarityId=o,d().analytics&&Dt(),y(s=>{s.analytics&&!_.clarityLoaded?Q():_.clarityLoaded&&Ne(s)}))}function Re(e,t){if(e(d())){t();return}let n=y(o=>{e(o)&&(n(),t())})}function Nt(e){document.readyState==="loading"?document.addEventListener("DOMContentLoaded",e,{once:!0}):e()}function Dt(){let e=()=>{window.scrollY>bt&&Q()};window.addEventListener("scroll",e,{passive:!0});let t=setTimeout(Q,At);_.cancelClaritySchedule=()=>{window.removeEventListener("scroll",e),clearTimeout(t)}}function Q(){_.cancelClaritySchedule?.(),_.cancelClaritySchedule=null,!(_.clarityLoaded||!_.clarityId)&&(_.clarityLoaded=!0,window.clarity=window.clarity||function(){window.clarity.q=window.clarity.q||[],window.clarity.q.push(arguments)},Ne(d()),X(`https://www.clarity.ms/tag/${encodeURIComponent(_.clarityId)}`,{crossorigin:"anonymous"}))}function Ne(e){window.clarity("consentv2",{ad_Storage:e.marketing&&P()?"granted":"denied",analytics_Storage:e.analytics?"granted":"denied"})}function X(e,t={}){let n=document.createElement("script");n.async=!0,n.src=e;for(let[o,r]of Object.entries(t))n.setAttribute(o,r);document.head.appendChild(n)}export{Me as a,A as b,ae as c,$e as d,Ge as e,E as f,d as g,He as h,y as i,i as j,Gt as k,D as l,l as m,Vt as n,at as o,L as p,Yt as q,Qt as r,Xt as s,on as t,f as u,w as v,x as w,Xe as x,q as y,Ct as z,It as A,wt as B,Rt as C};
|
|
@@ -202,6 +202,36 @@
|
|
|
202
202
|
}
|
|
203
203
|
}
|
|
204
204
|
},
|
|
205
|
+
"chat_started": {
|
|
206
|
+
"description": "A person sent the first message of a chat conversation.",
|
|
207
|
+
"stage": "engagement",
|
|
208
|
+
"owner": "fleet",
|
|
209
|
+
"personalData": "none"
|
|
210
|
+
},
|
|
211
|
+
"chat_input_submitted": {
|
|
212
|
+
"description": "A person answered a form the chat asked them to fill in.",
|
|
213
|
+
"stage": "engagement",
|
|
214
|
+
"owner": "fleet",
|
|
215
|
+
"personalData": "none"
|
|
216
|
+
},
|
|
217
|
+
"chat_handoff_requested": {
|
|
218
|
+
"description": "A person asked the chat to hand the conversation to a person.",
|
|
219
|
+
"stage": "engagement",
|
|
220
|
+
"owner": "fleet",
|
|
221
|
+
"personalData": "none"
|
|
222
|
+
},
|
|
223
|
+
"chat_rated": {
|
|
224
|
+
"description": "A person rated a chat reply.",
|
|
225
|
+
"stage": "engagement",
|
|
226
|
+
"owner": "fleet",
|
|
227
|
+
"personalData": "none"
|
|
228
|
+
},
|
|
229
|
+
"chat_action_repeated": {
|
|
230
|
+
"description": "The chat answered a repeated request without running its action a second time.",
|
|
231
|
+
"stage": "engagement",
|
|
232
|
+
"owner": "fleet",
|
|
233
|
+
"personalData": "none"
|
|
234
|
+
},
|
|
205
235
|
"tour_started": {
|
|
206
236
|
"description": "A product tour began.",
|
|
207
237
|
"stage": "activation",
|
package/dist/generate-events.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{existsSync as se,readFileSync as oe,writeFileSync as re}from"node:fs";import{basename as ie,resolve as ae}from"node:path";import{parseArgs as ce}from"node:util";var r=Object.freeze({SIGNUP_STARTED:"signup_started",SIGNUP_COMPLETED:"signup_completed",LOGIN_SUCCEEDED:"login_succeeded",ONBOARDING_STARTED:"onboarding_started",ONBOARDING_STEP_COMPLETED:"onboarding_step_completed",ONBOARDING_COMPLETED:"onboarding_completed",SUBSCRIPTION_ACTIVATED:"subscription_activated",SUBSCRIPTION_CANCELLED:"subscription_cancelled",PAYMENT_SUCCEEDED:"payment_succeeded",PAYMENT_FAILED:"payment_failed",FEEDBACK_SUBMITTED:"feedback_submitted",LEAD_SUBMITTED:"lead_submitted",LEAD_QUALIFIED:"lead_qualified",LEAD_WON:"lead_won",WHATSAPP_CLICK:"whatsapp_click",CALCULATOR_USE:"calculator_use",PHONE_CLICK:"phone_click",DEMO_BOOKED:"demo_booked",CONTACT_SUBMITTED:"contact_submitted",TRIAL_START_CLICK:"trial_start_click",SAMPLE_REPORT_DOWNLOAD:"sample_report_download",REPORT_VERIFIED:"report_verified",CONTENT_ENGAGED:"content_engaged",EMAIL_CLICK:"email_click",PAGE_NOT_FOUND:"page_not_found",CHAT_OPENED:"chat_opened",TOUR_STARTED:"tour_started",TOUR_STEP_VIEWED:"tour_step_viewed",TOUR_COMPLETED:"tour_completed",TOUR_SKIPPED:"tour_skipped"}),le=Object.freeze({signupStarted:r.SIGNUP_STARTED,signupCompleted:r.SIGNUP_COMPLETED,loginSucceeded:r.LOGIN_SUCCEEDED,onboardingStarted:r.ONBOARDING_STARTED,onboardingStepCompleted:r.ONBOARDING_STEP_COMPLETED,onboardingCompleted:r.ONBOARDING_COMPLETED,subscriptionActivated:r.SUBSCRIPTION_ACTIVATED,subscriptionCancelled:r.SUBSCRIPTION_CANCELLED,paymentSucceeded:r.PAYMENT_SUCCEEDED,paymentFailed:r.PAYMENT_FAILED,feedbackSubmitted:r.FEEDBACK_SUBMITTED,leadSubmitted:r.LEAD_SUBMITTED,leadQualified:r.LEAD_QUALIFIED,leadWon:r.LEAD_WON,whatsappClick:r.WHATSAPP_CLICK,calculatorUse:r.CALCULATOR_USE,phoneClick:r.PHONE_CLICK,demoBooked:r.DEMO_BOOKED,contactSubmitted:r.CONTACT_SUBMITTED,trialStartClick:r.TRIAL_START_CLICK,sampleReportDownload:r.SAMPLE_REPORT_DOWNLOAD,reportVerified:r.REPORT_VERIFIED,contentEngaged:r.CONTENT_ENGAGED,emailClick:r.EMAIL_CLICK,pageNotFound:r.PAGE_NOT_FOUND,chatOpened:r.CHAT_OPENED,tourStarted:r.TOUR_STARTED,tourStepViewed:r.TOUR_STEP_VIEWED,tourCompleted:r.TOUR_COMPLETED,tourSkipped:r.TOUR_SKIPPED}),
|
|
3
|
-
`)}function P(e,{namespace:o,className:t,accessibility:s="public",planLabel:n="tracking-plan.json"}){let i=["// <auto-generated>",`// Generated by webority-analytics-generate-events from ${n}. Do not edit: change the plan and run the generator.`,"// </auto-generated>","",`namespace ${o};`,"","/// <summary>",`/// Event names from ${
|
|
4
|
-
`)}function v(e){return String(e??"").replace(/\s+/g," ").trim()}function
|
|
2
|
+
import{existsSync as se,readFileSync as oe,writeFileSync as re}from"node:fs";import{basename as ie,resolve as ae}from"node:path";import{parseArgs as ce}from"node:util";var r=Object.freeze({SIGNUP_STARTED:"signup_started",SIGNUP_COMPLETED:"signup_completed",LOGIN_SUCCEEDED:"login_succeeded",ONBOARDING_STARTED:"onboarding_started",ONBOARDING_STEP_COMPLETED:"onboarding_step_completed",ONBOARDING_COMPLETED:"onboarding_completed",SUBSCRIPTION_ACTIVATED:"subscription_activated",SUBSCRIPTION_CANCELLED:"subscription_cancelled",PAYMENT_SUCCEEDED:"payment_succeeded",PAYMENT_FAILED:"payment_failed",FEEDBACK_SUBMITTED:"feedback_submitted",LEAD_SUBMITTED:"lead_submitted",LEAD_QUALIFIED:"lead_qualified",LEAD_WON:"lead_won",WHATSAPP_CLICK:"whatsapp_click",CALCULATOR_USE:"calculator_use",PHONE_CLICK:"phone_click",DEMO_BOOKED:"demo_booked",CONTACT_SUBMITTED:"contact_submitted",TRIAL_START_CLICK:"trial_start_click",SAMPLE_REPORT_DOWNLOAD:"sample_report_download",REPORT_VERIFIED:"report_verified",CONTENT_ENGAGED:"content_engaged",EMAIL_CLICK:"email_click",PAGE_NOT_FOUND:"page_not_found",CHAT_OPENED:"chat_opened",CHAT_STARTED:"chat_started",CHAT_INPUT_SUBMITTED:"chat_input_submitted",CHAT_HANDOFF_REQUESTED:"chat_handoff_requested",CHAT_RATED:"chat_rated",CHAT_ACTION_REPEATED:"chat_action_repeated",TOUR_STARTED:"tour_started",TOUR_STEP_VIEWED:"tour_step_viewed",TOUR_COMPLETED:"tour_completed",TOUR_SKIPPED:"tour_skipped"}),le=Object.freeze({signupStarted:r.SIGNUP_STARTED,signupCompleted:r.SIGNUP_COMPLETED,loginSucceeded:r.LOGIN_SUCCEEDED,onboardingStarted:r.ONBOARDING_STARTED,onboardingStepCompleted:r.ONBOARDING_STEP_COMPLETED,onboardingCompleted:r.ONBOARDING_COMPLETED,subscriptionActivated:r.SUBSCRIPTION_ACTIVATED,subscriptionCancelled:r.SUBSCRIPTION_CANCELLED,paymentSucceeded:r.PAYMENT_SUCCEEDED,paymentFailed:r.PAYMENT_FAILED,feedbackSubmitted:r.FEEDBACK_SUBMITTED,leadSubmitted:r.LEAD_SUBMITTED,leadQualified:r.LEAD_QUALIFIED,leadWon:r.LEAD_WON,whatsappClick:r.WHATSAPP_CLICK,calculatorUse:r.CALCULATOR_USE,phoneClick:r.PHONE_CLICK,demoBooked:r.DEMO_BOOKED,contactSubmitted:r.CONTACT_SUBMITTED,trialStartClick:r.TRIAL_START_CLICK,sampleReportDownload:r.SAMPLE_REPORT_DOWNLOAD,reportVerified:r.REPORT_VERIFIED,contentEngaged:r.CONTENT_ENGAGED,emailClick:r.EMAIL_CLICK,pageNotFound:r.PAGE_NOT_FOUND,chatOpened:r.CHAT_OPENED,chatStarted:r.CHAT_STARTED,chatInputSubmitted:r.CHAT_INPUT_SUBMITTED,chatHandoffRequested:r.CHAT_HANDOFF_REQUESTED,chatRated:r.CHAT_RATED,chatActionRepeated:r.CHAT_ACTION_REPEATED,tourStarted:r.TOUR_STARTED,tourStepViewed:r.TOUR_STEP_VIEWED,tourCompleted:r.TOUR_COMPLETED,tourSkipped:r.TOUR_SKIPPED}),D=/^[a-z][a-z0-9]*(_[a-z0-9]+)*$/;function T(e){return e.split("_").map(o=>o.charAt(0).toUpperCase()+o.slice(1)).join("")}function C(e,{sender:o=null,productOnly:t=!1}={}){return[...e.events.values()].filter(s=>(!o||s.senders.includes(o))&&(!t||s.origin===e.product))}function N(e,{exportName:o="events",keys:t="constant",planLabel:s="tracking-plan.json"}={}){let n=[`// Generated by webority-analytics-generate-events from ${s}. Do not edit: change the plan and run the generator.`,`export const ${o} = Object.freeze({`];for(let i of e)n.push(` // ${v(i.description)} (${i.stage})`),n.push(` ${t==="pascal"?T(i.name):i.name.toUpperCase()}: "${i.name}",`);return n.push("});",""),n.join(`
|
|
3
|
+
`)}function P(e,{namespace:o,className:t,accessibility:s="public",planLabel:n="tracking-plan.json"}){let i=["// <auto-generated>",`// Generated by webority-analytics-generate-events from ${n}. Do not edit: change the plan and run the generator.`,"// </auto-generated>","",`namespace ${o};`,"","/// <summary>",`/// Event names from ${O(n)}.`,"/// </summary>",`${s} static class ${t}`,"{"];return e.forEach((u,f)=>{f>0&&i.push(""),i.push(` /// <summary>${O(v(u.description))} Stage: ${u.stage}.</summary>`),i.push(` public const string ${T(u.name)} = "${u.name}";`)}),i.push("}",""),i.join(`
|
|
4
|
+
`)}function v(e){return String(e??"").replace(/\s+/g," ").trim()}function O(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}import{readFileSync as H}from"node:fs";import{dirname as z,resolve as x}from"node:path";var k="@webority/analytics/fleet",I=Object.freeze(["acquisition","activation","engagement","retention","revenue","referral","support","quality"]),_=Object.freeze(["none","pseudonymous","personal"]),R=Object.freeze(["string","integer","number","boolean","array","object"]),L=/^[a-z][a-z0-9]*(_[a-z0-9]+)*$/,U=new Set(["properties","senders"]),V=new Set(["$schema","product","extends","description","commonProperties","events","sources"]),W=new Set(["description","stage","owner","personalData","senders","properties"]),Y=new Set(["type","description","values","nullable","personalData"]),q=new Set(["sender","language","constants","references","calls","ignoreConstants","scan","exclude"]),J=/^[A-Za-z_$][\w$]*$/,Q=new Set(["csharp","javascript"]),j=4,X=new URL("./fleet-tracking-plan.json",import.meta.url);function w(e){return M(x(e),0)}function M(e,o){let t=typeof e=="string"?e:"fleet-tracking-plan.json",s=[],n;try{n=JSON.parse(H(e,"utf8"))}catch(f){return{plan:null,problems:[`${t}: cannot read the plan (${f.message})`]}}if(s.push(...ee(n,t)),s.length>0)return{plan:null,problems:s};let i=null;if(n.extends!==void 0){if(o>=j)return{plan:null,problems:[`${t}: "extends" is nested more than ${j} deep`]};let f=n.extends===k?X:x(z(String(e)),n.extends),a=M(f,o+1);if(!a.plan)return{plan:null,problems:a.problems};i=a.plan}let u=Z(i,n,t);return{plan:u.plan,problems:u.problems}}function Z(e,o,t="plan"){let s=[],n=new Map,i=new Map(e?.commonProperties??[]);for(let[a,c]of e?.events??[])n.set(a,{...c,properties:new Map(c.properties),senders:[...c.senders]});for(let[a,c]of Object.entries(o.commonProperties??{})){let l=i.get(a);if(l&&l.type!==c.type){s.push(`${t}: common property "${a}" is ${c.type} here but ${l.type} in the base plan`);continue}i.set(a,{...c,origin:l?.origin??o.product})}for(let[a,c]of Object.entries(o.events??{})){let l=n.get(a);if(!l){let d=["description","stage","owner","personalData"].filter(E=>c[E]===void 0);d.length>0&&s.push(`${t}: event "${a}" is not in the base plan, so it needs description, stage, owner and personalData (missing ${d.join(", ")})`),n.set(a,{name:a,description:c.description,stage:c.stage,owner:c.owner,personalData:c.personalData,senders:[...c.senders??[]],properties:new Map(Object.entries(c.properties??{})),origin:o.product});continue}for(let d of Object.keys(c))U.has(d)||s.push(`${t}: event "${a}" is defined by the base plan, so it may only add properties or senders (found "${d}")`);for(let d of c.senders??[])l.senders.includes(d)||l.senders.push(d);for(let[d,E]of Object.entries(c.properties??{})){let h=l.properties.get(d);if(h&&h.type!==E.type){s.push(`${t}: "${a}.${d}" is ${E.type} here but ${h.type} in the base plan`);continue}l.properties.set(d,E)}}for(let[a,c]of n)for(let l of c.properties.keys())i.has(l)&&s.push(`${t}: "${a}.${l}" is already a common property, so it must not be declared on the event`);let u=o.sources??[],f=new Set(u.map(a=>a.sender));if(u.length>0)for(let[a,c]of Object.entries(o.events??{}))for(let l of c.senders??[])f.has(l)||s.push(`${t}: event "${a}" names sender "${l}", which no source declares`);return{plan:{product:o.product,events:n,commonProperties:i,sources:u,file:t},problems:s}}function ee(e,o="plan"){let t=[],s=n=>t.push(`${o}: ${n}`);if(!m(e))return s("the plan must be a JSON object"),t;if(g(e,V,"the plan",s),(typeof e.product!="string"||!L.test(e.product))&&s('"product" must be a snake_case product slug'),e.extends!==void 0&&(typeof e.extends!="string"||e.extends.length===0)&&s(`"extends" must be "${k}" or a path to another plan`),!m(e.events))s('"events" must be an object keyed by event name');else for(let[n,i]of Object.entries(e.events))te(n,i,s);if(e.commonProperties!==void 0&&F("commonProperties",e.commonProperties,s),e.sources!==void 0)if(!Array.isArray(e.sources))s('"sources" must be an array');else for(let[n,i]of e.sources.entries())ne(i,n,s);return t}function te(e,o,t){if(D.test(e)||t(`event "${e}" is not a snake_case name`),!m(o)){t(`event "${e}" must be an object`);return}g(o,W,`event "${e}"`,t),Object.keys(o).every(n=>U.has(n))||((typeof o.description!="string"||o.description.trim()==="")&&t(`event "${e}" needs a description`),I.includes(o.stage)||t(`event "${e}" stage must be one of ${I.join(", ")}`),(typeof o.owner!="string"||o.owner.trim()==="")&&t(`event "${e}" needs an owner`),_.includes(o.personalData)||t(`event "${e}" personalData must be one of ${_.join(", ")}`)),o.senders!==void 0&&(!Array.isArray(o.senders)||o.senders.some(n=>typeof n!="string"))&&t(`event "${e}" senders must be an array of sender names`),o.properties!==void 0&&F(`event "${e}"`,o.properties,t)}function F(e,o,t){if(!m(o)){t(`${e} properties must be an object keyed by property name`);return}for(let[s,n]of Object.entries(o)){if(L.test(s)||t(`${e} property "${s}" is not a snake_case name`),!m(n)){t(`${e} property "${s}" must be an object`);continue}g(n,Y,`${e} property "${s}"`,t),R.includes(n.type)||t(`${e} property "${s}" type must be one of ${R.join(", ")}`),n.values!==void 0&&(!Array.isArray(n.values)||n.values.length===0)&&t(`${e} property "${s}" values must be a non-empty array`),n.nullable!==void 0&&typeof n.nullable!="boolean"&&t(`${e} property "${s}" nullable must be true or false`),n.personalData!==void 0&&!_.includes(n.personalData)&&t(`${e} property "${s}" personalData must be one of ${_.join(", ")}`)}}function ne(e,o,t){let s=`sources[${o}]`;if(!m(e)){t(`${s} must be an object`);return}g(e,q,s,t),(typeof e.sender!="string"||e.sender==="")&&t(`${s} needs a sender`),Q.has(e.language)||t(`${s} language must be csharp or javascript`);for(let n of["constants","references","calls","ignoreConstants","scan","exclude"])e[n]!==void 0&&(!Array.isArray(e[n])||e[n].some(i=>typeof i!="string"))&&t(`${s} ${n} must be an array of strings`);Array.isArray(e.calls)&&e.calls.some(n=>typeof n=="string"&&!J.test(n))&&t(`${s} calls must be function names, such as trackSiteEvent`),(e.constants?.length??0)===0&&((e.references?.length??0)>0||(e.calls?.length??0)===0)&&t(`${s} needs at least one constants file, unless it has calls and no references`)}function g(e,o,t,s){for(let n of Object.keys(e))o.has(n)||s(`${t} has an unknown field "${n}"`)}function m(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}var S=`usage: webority-analytics-generate-events --plan <tracking-plan.json> [--js <file> [--js-export <name>] [--js-keys constant|pascal]] [--cs <file> --cs-namespace <ns> --cs-class <name> [--cs-internal]] [--sender <sender>] [--product-only] [--check]
|
|
5
5
|
`,p;try{p=ce({options:{plan:{type:"string"},js:{type:"string"},"js-export":{type:"string"},"js-keys":{type:"string"},cs:{type:"string"},"cs-namespace":{type:"string"},"cs-class":{type:"string"},"cs-internal":{type:"boolean"},sender:{type:"string"},"product-only":{type:"boolean"},check:{type:"boolean"},help:{type:"boolean"}}}).values}catch(e){process.stderr.write(`${e.message}
|
|
6
|
-
${S}`),process.exit(2)}p.help&&(process.stdout.write(S),process.exit(0));var
|
|
7
|
-
${S}`),process.exit(2));var{plan:
|
|
8
|
-
`);for(let e of
|
|
9
|
-
`);process.exit(1)}var
|
|
10
|
-
`):null;s!==o&&(
|
|
11
|
-
`));continue}re(t,o),process.stdout.write(`Wrote ${
|
|
12
|
-
`)}
|
|
6
|
+
${S}`),process.exit(2)}p.help&&(process.stdout.write(S),process.exit(0));var B=pe(p);B&&(process.stderr.write(`${B}
|
|
7
|
+
${S}`),process.exit(2));var{plan:G,problems:$}=w(p.plan);if(!G||$.length>0){process.stderr.write(`The tracking plan has ${$.length} problem(s):
|
|
8
|
+
`);for(let e of $)process.stderr.write(` ${e}
|
|
9
|
+
`);process.exit(1)}var b=C(G,{sender:p.sender??null,productOnly:p["product-only"]??!1}),A=ie(p.plan),y=[];p.js&&y.push([p.js,N(b,{exportName:p["js-export"]??"events",keys:p["js-keys"]??"constant",planLabel:A})]);p.cs&&y.push([p.cs,P(b,{namespace:p["cs-namespace"],className:p["cs-class"],accessibility:p["cs-internal"]?"internal":"public",planLabel:A})]);var K=0;for(let[e,o]of y){let t=ae(e);if(p.check){let s=se(t)?oe(t,"utf8").replace(/\r\n/g,`
|
|
10
|
+
`):null;s!==o&&(K++,process.stderr.write(`${e} is ${s===null?"missing":"out of date"}; run webority-analytics-generate-events without --check
|
|
11
|
+
`));continue}re(t,o),process.stdout.write(`Wrote ${b.length} events to ${e}
|
|
12
|
+
`)}K>0&&process.exit(1);p.check&&process.stdout.write(`OK: ${y.length} generated file(s) match ${A}.
|
|
13
13
|
`);function pe(e){return e.plan?!e.js&&!e.cs?"pass --js, --cs or both":e.cs&&(!e["cs-namespace"]||!e["cs-class"])?"--cs needs --cs-namespace and --cs-class":e["js-keys"]&&!["constant","pascal"].includes(e["js-keys"])?"--js-keys is constant or pascal":null:"--plan is required"}
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{A as B,B as J,C as Q,a as F,b as N,c as U,d as V,e as W,f as y,g as j,h as K,i as m,j as a,k as _,l as C,m as n,n as O,o as s,p as i,q as D,r as L,s as z,t as c,u as G,v as q,w as H,x as M,y as Y}from"./chunk-
|
|
1
|
+
import{A as B,B as J,C as Q,a as F,b as N,c as U,d as V,e as W,f as y,g as j,h as K,i as m,j as a,k as _,l as C,m as n,n as O,o as s,p as i,q as D,r as L,s as z,t as c,u as G,v as q,w as H,x as M,y as Y}from"./chunk-XM2MLNVT.js";import{a as w,e as T}from"./chunk-JKZNJI5Q.js";import"./chunk-O2XFH626.js";var x=null,p=new Map,X="workspace";function Z(t){if(!y())throw new Error("@webority/analytics: call initConsent before initAnalytics.");let e=w(t.webVitals);x?.(),x=m(o=>tt(o.analytics)),p.clear(),O({host:t.host,clientKey:t.clientKey,product:t.product,surface:t.surface,environment:t.environment,enabled:t.enabled??!0,logger:t.logger??null,sessionRecording:{enabled:t.sessionRecording?.enabled??!1,maskAllInputs:t.sessionRecording?.maskAllInputs??!0,maskTextSelector:t.sessionRecording?.maskTextSelector??null},heatmaps:t.heatmaps??!1,captureExceptions:t.captureExceptions??!1,webVitals:e,featureFlags:t.featureFlags===!0}),s()&&$()}function $(){let t=()=>{s()&&(A(),n.config.webVitals&&T(n.config.webVitals,v))};typeof requestIdleCallback=="function"?requestIdleCallback(t,{timeout:3e3}):setTimeout(t,0)}function A(){c().catch(()=>{})}function tt(t){if(s()){if(t){n.posthogInstance?(n.posthogInstance.opt_in_capturing(),R(n.posthogInstance),k(n.posthogInstance)):c().then(e=>{R(e),e&&k(e)}).catch(()=>{});return}!n.posthogInstance&&!n.posthogInitPromise&&A(),et()}}function R(t){if(!t||!i())return;let e=n.pendingIdentify;e&&t.identify(e.publicId,e.props);for(let[o,{key:r,props:l}]of p)t.group(o,r,l)}function k(t){n.config?.featureFlags===!0&&i()&&t.reloadFeatureFlags?.()}function et(){if(n.posthogInstance){n.posthogInstance.opt_out_capturing();return}n.posthogInitPromise&&n.posthogInitPromise.then(t=>{i()||t?.opt_out_capturing()}).catch(()=>{})}function nt(t,e={}){if(!s()){h("identify",{publicId:t,...e});return}n.pendingIdentify={publicId:t,props:e},i()&&c().then(o=>{!o||!i()||o.identify(t,e)}).catch(()=>{})}function ot(t,e,o={}){if(typeof t!="string"||!t||typeof e!="string"||!e){n.config?.logger?.warn?.("@webority/analytics: group needs a type and a PublicId string, so it was dropped.");return}if(!s()){h("group",{type:t,key:e,...o});return}p.set(t,{key:e,props:o}),i()&&c().then(r=>{!r||!i()||r.group(t,e,o)}).catch(()=>{})}function rt(){n.pendingIdentify=null,p.clear(),n.posthogInstance&&n.posthogInstance.reset()}function u(t,e={}){C.accept(t,n.config?.logger)&&v(t,e)}function v(t,e){if(!s()){h(t,e);return}let o={...e,product:n.config.product,surface:n.config.surface,environment:n.config.environment};c().then(r=>{r?.capture(t,o)}).catch(()=>{})}function h(t,e){n.config?.environment==="Local"&&n.config.logger?.info(t,e)}function it(){if(typeof document>"u")return()=>{};for(let[t,e]of Object.entries(P))document.addEventListener(t,e);return()=>{for(let[t,e]of Object.entries(P))document.removeEventListener(t,e)}}function st(t){d(a.TOUR_STARTED,t,{step_count:f(t.detail?.total)})}function at(t){d(a.TOUR_STEP_VIEWED,t,{step_position:f(t.detail?.position),step_count:f(t.detail?.total)})}function ct(t){let e=t.detail,o={step_position:f(e?.position),step_count:f(e?.total)};e?.reason==="finished"?d(a.TOUR_COMPLETED,t,o):e?.reason==="skipped"&&d(a.TOUR_SKIPPED,t,{...o,via:E(e.via)})}var P={"wui-tour:start":st,"wui-tour:step":at,"wui-tour:close":ct};function d(t,e,o){let r=e.target,l=E(r?.getAttribute?.("tour-id"));if(!l)return;let g={tour_id:l},I=E(r.getAttribute("trigger"));I&&(g.trigger=I);for(let[S,b]of Object.entries(o))b!==void 0&&(g[S]=b);u(t,g)}function f(t){return Number.isInteger(t)&&t>=0?t:void 0}function E(t){return typeof t=="string"&&t!==""?t:void 0}var ut=Object.freeze(Object.fromEntries(Object.entries(_).map(([t,e])=>[t,(o={})=>u(e,o)])));export{U as CONSENT_CHANGE_EVENT,N as CONSENT_COOKIE_NAME,X as WORKSPACE_GROUP_TYPE,M as captureAttribution,G as channels,a as events,Y as getAttribution,j as getConsent,L as getFeatureFlag,ot as group,nt as identify,Z as initAnalytics,V as initConsent,D as isFeatureEnabled,Q as loadTags,m as onConsentChange,z as onFeatureFlags,J as registerEvents,F as requiresOptIn,rt as resetIdentity,H as resolveAiSource,q as resolveChannel,K as saveConsent,W as setConsentRegion,ut as track,u as trackEvent,B as trackSiteEvent,it as trackTours};
|
package/dist/react-native.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var o=Object.freeze({SIGNUP_STARTED:"signup_started",SIGNUP_COMPLETED:"signup_completed",LOGIN_SUCCEEDED:"login_succeeded",ONBOARDING_STARTED:"onboarding_started",ONBOARDING_STEP_COMPLETED:"onboarding_step_completed",ONBOARDING_COMPLETED:"onboarding_completed",SUBSCRIPTION_ACTIVATED:"subscription_activated",SUBSCRIPTION_CANCELLED:"subscription_cancelled",PAYMENT_SUCCEEDED:"payment_succeeded",PAYMENT_FAILED:"payment_failed",FEEDBACK_SUBMITTED:"feedback_submitted",LEAD_SUBMITTED:"lead_submitted",LEAD_QUALIFIED:"lead_qualified",LEAD_WON:"lead_won",WHATSAPP_CLICK:"whatsapp_click",CALCULATOR_USE:"calculator_use",PHONE_CLICK:"phone_click",DEMO_BOOKED:"demo_booked",CONTACT_SUBMITTED:"contact_submitted",TRIAL_START_CLICK:"trial_start_click",SAMPLE_REPORT_DOWNLOAD:"sample_report_download",REPORT_VERIFIED:"report_verified",CONTENT_ENGAGED:"content_engaged",EMAIL_CLICK:"email_click",PAGE_NOT_FOUND:"page_not_found",CHAT_OPENED:"chat_opened",TOUR_STARTED:"tour_started",TOUR_STEP_VIEWED:"tour_step_viewed",TOUR_COMPLETED:"tour_completed",TOUR_SKIPPED:"tour_skipped"}),
|
|
1
|
+
var o=Object.freeze({SIGNUP_STARTED:"signup_started",SIGNUP_COMPLETED:"signup_completed",LOGIN_SUCCEEDED:"login_succeeded",ONBOARDING_STARTED:"onboarding_started",ONBOARDING_STEP_COMPLETED:"onboarding_step_completed",ONBOARDING_COMPLETED:"onboarding_completed",SUBSCRIPTION_ACTIVATED:"subscription_activated",SUBSCRIPTION_CANCELLED:"subscription_cancelled",PAYMENT_SUCCEEDED:"payment_succeeded",PAYMENT_FAILED:"payment_failed",FEEDBACK_SUBMITTED:"feedback_submitted",LEAD_SUBMITTED:"lead_submitted",LEAD_QUALIFIED:"lead_qualified",LEAD_WON:"lead_won",WHATSAPP_CLICK:"whatsapp_click",CALCULATOR_USE:"calculator_use",PHONE_CLICK:"phone_click",DEMO_BOOKED:"demo_booked",CONTACT_SUBMITTED:"contact_submitted",TRIAL_START_CLICK:"trial_start_click",SAMPLE_REPORT_DOWNLOAD:"sample_report_download",REPORT_VERIFIED:"report_verified",CONTENT_ENGAGED:"content_engaged",EMAIL_CLICK:"email_click",PAGE_NOT_FOUND:"page_not_found",CHAT_OPENED:"chat_opened",CHAT_STARTED:"chat_started",CHAT_INPUT_SUBMITTED:"chat_input_submitted",CHAT_HANDOFF_REQUESTED:"chat_handoff_requested",CHAT_RATED:"chat_rated",CHAT_ACTION_REPEATED:"chat_action_repeated",TOUR_STARTED:"tour_started",TOUR_STEP_VIEWED:"tour_step_viewed",TOUR_COMPLETED:"tour_completed",TOUR_SKIPPED:"tour_skipped"}),B=Object.freeze({signupStarted:o.SIGNUP_STARTED,signupCompleted:o.SIGNUP_COMPLETED,loginSucceeded:o.LOGIN_SUCCEEDED,onboardingStarted:o.ONBOARDING_STARTED,onboardingStepCompleted:o.ONBOARDING_STEP_COMPLETED,onboardingCompleted:o.ONBOARDING_COMPLETED,subscriptionActivated:o.SUBSCRIPTION_ACTIVATED,subscriptionCancelled:o.SUBSCRIPTION_CANCELLED,paymentSucceeded:o.PAYMENT_SUCCEEDED,paymentFailed:o.PAYMENT_FAILED,feedbackSubmitted:o.FEEDBACK_SUBMITTED,leadSubmitted:o.LEAD_SUBMITTED,leadQualified:o.LEAD_QUALIFIED,leadWon:o.LEAD_WON,whatsappClick:o.WHATSAPP_CLICK,calculatorUse:o.CALCULATOR_USE,phoneClick:o.PHONE_CLICK,demoBooked:o.DEMO_BOOKED,contactSubmitted:o.CONTACT_SUBMITTED,trialStartClick:o.TRIAL_START_CLICK,sampleReportDownload:o.SAMPLE_REPORT_DOWNLOAD,reportVerified:o.REPORT_VERIFIED,contentEngaged:o.CONTENT_ENGAGED,emailClick:o.EMAIL_CLICK,pageNotFound:o.PAGE_NOT_FOUND,chatOpened:o.CHAT_OPENED,chatStarted:o.CHAT_STARTED,chatInputSubmitted:o.CHAT_INPUT_SUBMITTED,chatHandoffRequested:o.CHAT_HANDOFF_REQUESTED,chatRated:o.CHAT_RATED,chatActionRepeated:o.CHAT_ACTION_REPEATED,tourStarted:o.TOUR_STARTED,tourStepViewed:o.TOUR_STEP_VIEWED,tourCompleted:o.TOUR_COMPLETED,tourSkipped:o.TOUR_SKIPPED}),S=/^[a-z][a-z0-9]*(_[a-z0-9]+)*$/;var b=50;function N(){let e=new Set(Object.values(o)),t=new Set;return{warned:t,register(r){for(let i of r){if(!S.test(i))throw new Error(`@webority/analytics: invalid event name "${i}". Expected snake_case.`);e.add(i)}},accept(r,i){return e.has(r)?!0:(v(t,r,i),!1)}}}function v(e,t,r){if(e.has(t))return;e.size<b&&e.add(t);let i=`@webority/analytics: event "${t}" is not registered, so it was dropped. Call registerEvents() first.`;if(typeof r?.warn=="function"){r.warn(i);return}if(typeof r?.info=="function"){r.info(i);return}console.warn(i)}var _=null;function F(e){_=e}async function P(){if(_)return _.PostHog??null;try{let e=await import("posthog-react-native");return e.PostHog??e.default?.PostHog??e.default??null}catch{return null}}function R(e){return{host:e.host,defaultOptIn:!1,personProfiles:"identified_only",captureAppLifecycleEvents:!1,enableSessionReplay:!1,preloadFeatureFlags:!1,disableRemoteFeatureFlags:e.featureFlags!==!0,disableSurveys:!0}}var g="webority_analytics_consent",U=["eea","other"],Q="workspace",n={config:null,initPromise:null,posthog:null,requiresOptIn:!0,region:null,saved:null,pendingIdentify:null,pendingGroups:new Map,flagsLoaded:!1,failureReported:!1},T=N(),E=new Set,f=new Set;function $(e){if(n.initPromise)return n.initPromise;let t=l();return n.config={host:e?.host,clientKey:e?.clientKey,product:e?.product,surface:e?.surface,environment:e?.environment,enabled:e?.enabled??!0,logger:e?.logger??null,storage:e?.storage??null,featureFlags:e?.featureFlags===!0},n.requiresOptIn=e?.requiresOptIn!==!1,n.initPromise=M(t).catch(s),n.initPromise}async function M(e){let t=w(),r=n.saved,i=await G(t);r&&t?await a(()=>t.setItem(g,JSON.stringify(r))):!n.saved&&i&&(n.saved=i);let u=l();if((e.analytics!==u.analytics||e.decided!==u.decided)&&C(u),!d())return;let I=await P();if(!I){s(new Error("@webority/analytics: posthog-react-native is not installed, so nothing is sent."));return}let p=new I(n.config.clientKey,R(n.config));await p.ready?.(),await p.register(O()),n.posthog=p,x(p),await A(c())}function j(e){if(!U.includes(e))throw new Error('@webority/analytics: setConsentRegion needs "eea" or "other".');let t=l();n.region=e;let r=l();t.analytics!==r.analytics&&(A(r.analytics),C(r))}async function J(e){let t={analytics:e===!0,savedAtUtc:new Date().toISOString()};n.saved=t,A(t.analytics),C(l());let r=w();r&&await a(()=>r.setItem(g,JSON.stringify(t)))}function l(){return n.saved?{analytics:n.saved.analytics,decided:!0}:{analytics:!n.requiresOptIn||n.region==="other",decided:!1}}function X(e){return E.add(e),()=>E.delete(e)}function Z(e,t={}){if(n.config&&!d()){D("identify",{publicId:e,...t});return}n.pendingIdentify={publicId:e,props:t},n.posthog&&c()&&a(()=>n.posthog.identify(e,t))}function ee(e,t,r={}){if(typeof e!="string"||!e||typeof t!="string"||!t){L("@webority/analytics: group needs a type and a PublicId string, so it was dropped.");return}if(n.config&&!d()){D("group",{type:e,key:t,...r});return}n.pendingGroups.set(e,{key:t,props:r}),n.posthog&&c()&&a(()=>n.posthog.group(e,t,r))}function te(e){let t=y();if(!t)return!1;try{return t.isFeatureEnabled(e)===!0}catch(r){return s(r),!1}}function ne(e){let t=y();if(!t)return null;try{return t.getFeatureFlag(e)??null}catch(r){return s(r),null}}function re(e){return f.add(e),(!y()||n.flagsLoaded)&&queueMicrotask(()=>{f.has(e)&&m(e)}),()=>f.delete(e)}function oe(){n.pendingIdentify=null,n.pendingGroups.clear();let e=n.posthog;e&&a(async()=>{e.reset(),await e.register(O()),c()?await e.optIn():await e.optOut()})}function ie(e){T.register(e)}function ae(e,t={}){T.accept(e,n.config?.logger)&&h(e,t,(r,i)=>r.capture(e,i))}function se(e,t={}){h(e,t,(r,i)=>r.screen(e,i))}function h(e,t,r){if(!d()){D(e,t);return}if(!c())return;let i={...t,...O()};if(n.posthog){a(()=>r(n.posthog,i));return}n.initPromise?.then(()=>{n.posthog&&c()&&a(()=>r(n.posthog,i))})}function A(e){let t=n.posthog;return t?a(async()=>{if(!e){await t.optOut();return}await t.optIn(),H(t),n.config.featureFlags&&await t.reloadFeatureFlagsAsync?.()}):Promise.resolve()}function x(e){!n.config.featureFlags||typeof e.onFeatureFlags!="function"||a(()=>e.onFeatureFlags(()=>{n.flagsLoaded=!0;for(let t of[...f])m(t)}))}function y(){return!n.config?.featureFlags||!d()||!c()?null:n.posthog}function m(e){try{e()}catch(t){L(`@webority/analytics: a feature flag listener threw: ${t?.message??t}`)}}function H(e){if(!c())return;let t=n.pendingIdentify;t&&e.identify(t.publicId,t.props);for(let[r,{key:i,props:u}]of n.pendingGroups)e.group(r,i,u)}function w(){let e=n.config?.storage??null;return n.config&&!e&&s(new Error("@webority/analytics: no storage was passed to initMobileAnalytics, so the choice lasts until the app closes.")),e}async function G(e){if(!e)return null;try{let t=await e.getItem(g);if(!t)return null;let r=JSON.parse(t);return typeof r?.analytics!="boolean"?null:{analytics:r.analytics,savedAtUtc:typeof r.savedAtUtc=="string"?r.savedAtUtc:null}}catch(t){return s(t),null}}function C(e){for(let t of E)try{t(e)}catch(r){s(r)}}function d(){let e=n.config;return!!(e?.enabled&&e.clientKey&&e.host&&e.environment!=="Local")}function c(){return l().analytics}function O(){return{product:n.config.product,surface:n.config.surface,environment:n.config.environment}}function a(e){try{return Promise.resolve(e()).then(void 0,s)}catch(t){return s(t),Promise.resolve()}}function s(e){if(n.failureReported||(n.failureReported=!0,globalThis.__DEV__!==!0))return;let t=n.config?.logger,r=typeof t?.warn=="function"?t.warn:t?.info;if(typeof r=="function")try{r.call(t,`@webority/analytics: ${e?.message??e}`)}catch{}}function L(e){let t=n.config?.logger,r=typeof t?.warn=="function"?t.warn:t?.info;if(typeof r=="function")try{r.call(t,e)}catch{}}function D(e,t){n.config?.environment==="Local"&&n.config.logger?.info(e,t)}function ce(){n.config=null,n.initPromise=null,n.posthog=null,n.requiresOptIn=!0,n.region=null,n.saved=null,n.pendingIdentify=null,n.pendingGroups.clear(),n.flagsLoaded=!1,n.failureReported=!1,T.warned.clear(),E.clear(),f.clear()}export{g as CONSENT_STORAGE_KEY,Q as WORKSPACE_GROUP_TYPE,ce as __resetForTests,F as __setNativeModulesForTests,o as events,l as getAnalyticsConsent,ne as getFeatureFlag,ee as group,Z as identify,$ as initMobileAnalytics,te as isFeatureEnabled,X as onAnalyticsConsentChange,re as onFeatureFlags,ie as registerEvents,oe as resetIdentity,J as setAnalyticsConsent,j as setConsentRegion,ae as trackEvent,se as trackScreen};
|
package/dist/site.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{A as p,B as q,C as r,a,b,c,d,e,g as f,h as g,i as h,j as i,u as j,v as k,w as l,x as m,y as n,z as o}from"./chunk-
|
|
1
|
+
import{A as p,B as q,C as r,a,b,c,d,e,g as f,h as g,i as h,j as i,u as j,v as k,w as l,x as m,y as n,z as o}from"./chunk-XM2MLNVT.js";import"./chunk-JKZNJI5Q.js";import"./chunk-O2XFH626.js";export{c as CONSENT_CHANGE_EVENT,b as CONSENT_COOKIE_NAME,m as captureAttribution,j as channels,i as events,n as getAttribution,f as getConsent,d as initConsent,o as initSiteAnalytics,r as loadTags,h as onConsentChange,q as registerEvents,a as requiresOptIn,l as resolveAiSource,k as resolveChannel,g as saveConsent,e as setConsentRegion,p as trackSiteEvent};
|
|
@@ -134,6 +134,21 @@
|
|
|
134
134
|
"chat_opened": {
|
|
135
135
|
"$ref": "#/$defs/eventExtension"
|
|
136
136
|
},
|
|
137
|
+
"chat_started": {
|
|
138
|
+
"$ref": "#/$defs/eventExtension"
|
|
139
|
+
},
|
|
140
|
+
"chat_input_submitted": {
|
|
141
|
+
"$ref": "#/$defs/eventExtension"
|
|
142
|
+
},
|
|
143
|
+
"chat_handoff_requested": {
|
|
144
|
+
"$ref": "#/$defs/eventExtension"
|
|
145
|
+
},
|
|
146
|
+
"chat_rated": {
|
|
147
|
+
"$ref": "#/$defs/eventExtension"
|
|
148
|
+
},
|
|
149
|
+
"chat_action_repeated": {
|
|
150
|
+
"$ref": "#/$defs/eventExtension"
|
|
151
|
+
},
|
|
137
152
|
"tour_started": {
|
|
138
153
|
"$ref": "#/$defs/eventExtension"
|
|
139
154
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var WeborityAnalytics=(()=>{var v=Object.defineProperty;var Me=Object.getOwnPropertyDescriptor;var Fe=Object.getOwnPropertyNames;var $e=Object.prototype.hasOwnProperty;var Ve=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(o){throw n=[o],o}};var Y=(e,t)=>{for(var n in t)v(e,n,{get:t[n],enumerable:!0})},Ge=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Fe(t))!$e.call(e,r)&&r!==n&&v(e,r,{get:()=>t[r],enumerable:!(o=Me(t,r))||o.enumerable});return e};var Be=e=>Ge(v({},"__esModule",{value:!0}),e);var Ne={};Y(Ne,{default:()=>At});function Ot(){let e=[];e._i=[],e.__SV=1,e.people=[];for(let t of Oe)e[t]=(...n)=>{e.push([t,...n])};e.init=(t,n)=>{e._i.push([t,n]);let o=document.createElement("script");o.async=!0,o.crossOrigin="anonymous",o.src=`${n.api_host.replace(/\/+$/,"").replace(".i.posthog.com","-assets.i.posthog.com")}/static/array.js`,document.head.appendChild(o)},window.posthog=e}var Oe,Ae,At,Re=Ve(()=>{Oe=["capture","register","opt_in_capturing","opt_out_capturing"];Ae={init(e,t){window.posthog||Ot(),window.posthog.init(e,t)}};for(let e of Oe)Ae[e]=(...t)=>window.posthog[e](...t);At=Ae});var Ft={};Y(Ft,{CONSENT_CHANGE_EVENT:()=>P,CONSENT_COOKIE_NAME:()=>I,captureAttribution:()=>ge,channels:()=>l,events:()=>s,getAttribution:()=>R,getConsent:()=>d,initConsent:()=>ie,initSiteAnalytics:()=>De,loadTags:()=>Ue,onConsentChange:()=>_,registerEvents:()=>ve,requiresOptIn:()=>te,resolveAiSource:()=>O,resolveChannel:()=>C,saveConsent:()=>ce,setConsentRegion:()=>se,trackSiteEvent:()=>ke});var ze=["google","googleads","adwords","youtube"],Ke=["meta","facebook","fb","instagram","ig","messenger"],We=["linkedin","lnkd"],je=["bing","microsoft","microsoftads","msn"],Q=Object.freeze([["chatgpt",["chatgpt.com","chat.openai.com"]],["perplexity",["perplexity.ai"]],["gemini",["gemini.google.com"]],["copilot",["copilot.microsoft.com"]],["claude",["claude.ai"]],["you",["you.com"]],["phind",["phind.com"]],["deepseek",["deepseek.com"]],["grok",["grok.com"]],["meta_ai",["meta.ai"]],["poe",["poe.com"]]]),qe=["bing.com","duckduckgo.com","search.yahoo.com","ecosia.org","search.brave.com"],He=["google","yandex"],Ye=["facebook.com","fb.com","instagram.com","linkedin.com","lnkd.in","twitter.com","t.co","x.com","reddit.com","pinterest.com","youtube.com","youtu.be","tiktok.com","whatsapp.com","threads.net","t.me","telegram.org"],l=Object.freeze({DIRECT:"direct",GOOGLE:"google",META:"meta",LINKEDIN:"linkedin",MICROSOFT:"microsoft",OTHER:"other",AI_ASSISTANT:"ai_assistant",ORGANIC_SEARCH:"organic_search",ORGANIC_SOCIAL:"organic_social",REFERRAL:"referral"});function C(e){if(!e)return l.DIRECT;let t=p(e.utmSource);if(t){let r=b(t);if(ze.includes(r))return l.GOOGLE;if(Ke.includes(r))return l.META;if(We.includes(r))return l.LINKEDIN;if(je.includes(r))return l.MICROSOFT}if(p(e.fbclid))return l.META;if(p(e.gclid)||p(e.gbraid)||p(e.wbraid))return l.GOOGLE;if(p(e.liFatId))return l.LINKEDIN;if(p(e.msclkid))return l.MICROSOFT;if(X(t))return l.AI_ASSISTANT;if(t||p(e.utmMedium)||p(e.utmCampaign)||p(e.utmContent)||p(e.utmTerm))return l.OTHER;let o=ee(e.referrer);return o?J(o)?l.AI_ASSISTANT:Qe(o)?l.ORGANIC_SEARCH:Ye.some(r=>Z(o,r))?l.ORGANIC_SOCIAL:l.REFERRAL:l.DIRECT}function O(e){if(!e)return"";let t=X(p(e.utmSource));if(t)return t;let n=ee(e.referrer);return n?J(n):""}function X(e){if(!e)return"";let t=b(e);for(let[n,o]of Q)if(b(n)===t||o.some(r=>b(r)===t))return n;return""}function J(e){for(let[t,n]of Q)if(n.some(o=>Z(e,o)))return t;return""}function Qe(e){return qe.includes(e)?!0:He.some(t=>{if(!e.startsWith(`${t}.`))return!1;let n=e.slice(t.length+1).split(".");return n.length===1||n.length===2&&(n[0]==="co"||n[0]==="com")})}function Z(e,t){return e===t||e.endsWith(`.${t}`)}function ee(e){let t=p(e);if(!t)return"";try{let n=new URL(/^[a-z][a-z0-9+.-]*:\/\//i.test(t)?t:`https://${t}`).hostname.toLowerCase();return n.startsWith("www.")?n.slice(4):n}catch{return""}}function b(e){return String(e).toLowerCase().replace(/[^\p{L}\p{N}]/gu,"")}function p(e){return String(e??"").trim()}var x=Object.freeze(["AT","BE","BG","HR","CY","CZ","DK","EE","FI","FR","DE","GR","HU","IE","IT","LV","LT","LU","MT","NL","PL","PT","RO","SK","SI","ES","SE","IS","LI","NO","GB","CH"]);function te(e){let t=typeof e=="string"?e.trim().toUpperCase():"";return t.length!==2||t==="XX"||t==="T1"?!0:x.includes(t)}var I="webority_cookie_consent",P="webority-consent-change",oe=365,i={initialized:!1,requiresOptIn:!0,strictOptIn:!1,adStorage:!0,cookieDays:oe,cookieDomain:null,regionCookie:null,region:null,saved:null},re=["eea","other"],U=new Set;function ie(e){let t=e?.strictOptIn??!1;if(typeof t!="boolean")throw new Error("@webority/analytics: initConsent strictOptIn must be true or false, or left out.");if(t){if(e.requiresOptIn!==void 0&&e.requiresOptIn!==!0)throw new Error("@webority/analytics: initConsent strictOptIn asks every visitor to opt in, so requiresOptIn must be true or left out.")}else if(typeof e?.requiresOptIn!="boolean")throw new Error("@webority/analytics: initConsent needs requiresOptIn (true or false), decided from the visitor's country.");if(e.cookieDomain!==void 0&&(typeof e.cookieDomain!="string"||!e.cookieDomain.trim()))throw new Error('@webority/analytics: initConsent cookieDomain must be a domain such as ".example.com", or left out.');if(e.cookieDays!==void 0&&!(Number.isInteger(e.cookieDays)&&e.cookieDays>0))throw new Error("@webority/analytics: initConsent cookieDays must be a whole number of days above zero, or left out.");if(e.adStorage!==void 0&&typeof e.adStorage!="boolean")throw new Error("@webority/analytics: initConsent adStorage must be true or false, or left out.");if(e.regionCookie!==void 0&&(typeof e.regionCookie!="string"||!/^[\w.-]+$/.test(e.regionCookie)))throw new Error('@webority/analytics: initConsent regionCookie must be a cookie name such as "wui_region", or left out.');i.initialized=!0,i.strictOptIn=t,i.requiresOptIn=t||e.requiresOptIn,i.adStorage=e.adStorage??!t,i.cookieDays=e.cookieDays??oe,i.cookieDomain=e.cookieDomain?.trim()??null,i.regionCookie=e.regionCookie??null,i.region=i.regionCookie?et(i.regionCookie):null;let{saved:n,entryCount:o}=Ze();i.saved=n,i.cookieDomain&&o>1&&n&&fe(n),Xe(),Je(),i.saved?$(i.saved):le()&&de()}function se(e){if(F("setConsentRegion"),!re.includes(e))throw new Error('@webority/analytics: setConsentRegion needs "eea" or "other".');let t=d();if(i.region=e,i.saved)return;let n=d();t.analytics===n.analytics&&t.functional===n.functional&&t.marketing===n.marketing||(de(),ue(n))}function S(){return i.initialized}function ae(){return i.strictOptIn}function M(){return i.adStorage}function d(){F("getConsent");let e=i.saved;if(e)return{essential:!0,analytics:e.analytics,functional:e.functional,marketing:e.marketing,decided:!0};if(le())return{essential:!0,analytics:!0,functional:!0,marketing:!1,decided:!1};let t=!i.requiresOptIn;return{essential:!0,analytics:t,functional:t,marketing:t,decided:!1}}function ce(e){F("saveConsent");let t={essential:!0,analytics:e?.analytics===!0,functional:e?.functional===!0,marketing:e?.marketing===!0,timestamp:new Date().toISOString()};fe(t),i.saved=t,$(t),ue(d())}function _(e){return U.add(e),()=>U.delete(e)}function ue(e){for(let t of U)try{t(e)}catch(n){queueMicrotask(()=>{throw n})}typeof window?.dispatchEvent=="function"&&typeof CustomEvent=="function"&&window.dispatchEvent(new CustomEvent(P,{detail:e}))}function F(e){if(!i.initialized)throw new Error(`@webority/analytics: call initConsent before ${e}.`)}function h(){window.dataLayer=window.dataLayer||[],window.dataLayer.push(arguments)}function Xe(){if(i.strictOptIn){h("consent","default",{ad_storage:"denied",ad_user_data:"denied",ad_personalization:"denied",analytics_storage:"denied",functionality_storage:"denied",personalization_storage:"denied",security_storage:"granted",wait_for_update:500});return}h("consent","default",{ad_storage:"denied",ad_user_data:"denied",ad_personalization:"denied",analytics_storage:"denied",functionality_storage:"denied",personalization_storage:"denied",security_storage:"granted",wait_for_update:500,region:[...x]});let e=i.adStorage?"granted":"denied";h("consent","default",{ad_storage:e,ad_user_data:e,ad_personalization:e,analytics_storage:"granted",functionality_storage:"granted",personalization_storage:"granted",security_storage:"granted"})}function Je(){h("set","ads_data_redaction",!0),h("set","url_passthrough",!0)}function le(){return i.requiresOptIn&&!i.strictOptIn&&i.region==="other"}function de(){let e=d();$(e,e.analytics&&i.adStorage)}function $(e,t=e.marketing&&i.adStorage){let n=o=>o?"granted":"denied";h("consent","update",{analytics_storage:n(e.analytics),functionality_storage:n(e.functional),personalization_storage:n(e.functional),ad_storage:n(t),ad_user_data:n(t),ad_personalization:n(t)})}function Ze(){let e=`${I}=`,t=(document.cookie||"").split(";").map(o=>o.trim()).filter(o=>o.startsWith(e)),n=t.map(o=>tt(o.slice(e.length))).filter(Boolean);return{saved:nt(n),entryCount:t.length}}function et(e){let t=`${e}=`,o=(document.cookie||"").split(";").map(r=>r.trim()).find(r=>r.startsWith(t))?.slice(t.length);return re.includes(o)?o:null}function tt(e){try{let t=JSON.parse(decodeURIComponent(e));return!t||typeof t!="object"?null:{essential:!0,analytics:t.analytics===!0,functional:t.functional===!0,marketing:t.marketing===!0,timestamp:t.timestamp??null}}catch{return null}}function nt(e){if(e.length===0)return null;let t=e.map(o=>typeof o.timestamp=="string"?Date.parse(o.timestamp):Number.NaN);if(t.some(Number.isNaN))return e.at(-1);let n=0;for(let o=1;o<e.length;o++)t[o]>=t[n]&&(n=o);return e[n]}function fe(e){let t=typeof e.timestamp=="string"?Date.parse(e.timestamp):Number.NaN,n=(Number.isNaN(t)?Date.now():t)+i.cookieDays*24*60*60*1e3,o=window.location?.protocol==="https:"?";Secure":"";i.cookieDomain&&ne(`${I}=;expires=Thu, 01 Jan 1970 00:00:00 GMT;max-age=0;path=/;SameSite=Lax${o}`);let r=i.cookieDomain?`;domain=${i.cookieDomain}`:"";ne(`${I}=${encodeURIComponent(JSON.stringify(e))};expires=${new Date(n).toUTCString()};path=/${r};SameSite=Lax${o}`)}function ne(e){document.cookie=e}var N="webority_attribution",ot=2160*60*60*1e3,rt=200,V=500,it=Object.freeze({utm_source:"utmSource",utm_medium:"utmMedium",utm_campaign:"utmCampaign",utm_content:"utmContent",utm_term:"utmTerm",gclid:"gclid",gbraid:"gbraid",wbraid:"wbraid",fbclid:"fbclid",msclkid:"msclkid",li_fat_id:"liFatId"}),pe=!1;function ge(){ye("captureAttribution"),ut();let e=at();if(!e)return;let t=K(G());_e(G(),{firstTouch:t?.firstTouch??e,lastTouch:e}),st(e)}function st(e){let t={event:"acquisition_touch",acquisition_channel:C(e)};e.aiSource&&(t.ai_source=e.aiSource),window.dataLayer=window.dataLayer||[],window.dataLayer.push(t)}function R(){return ye("getAttribution"),K(G())}function at(){let e=new URLSearchParams(window.location.search),t={};for(let[r,a]of Object.entries(it)){let c=A(e.get(r),rt);c&&(t[a]=c)}let n=A(e.get("referrer"),V)||ct();if(n&&(t.referrer=n),Object.keys(t).length===0)return null;let o=O(t);return o&&(t.aiSource=o),t.landingPage=A(window.location.pathname,V),t.capturedDateTimeUtc=new Date().toISOString(),t}function ct(){let e=document.referrer;if(!e)return"";try{return new URL(e).hostname===window.location.hostname?"":A(e,V)}catch{return""}}function ut(){pe||(pe=!0,_(e=>{let t=e.marketing?z():B(),n=e.marketing?B():z(),o=K(t);lt(t),o&&_e(n,o)}))}function G(){return d().marketing?B():z()}function B(){try{return window.localStorage}catch{return null}}function z(){try{return window.sessionStorage}catch{return null}}function K(e){try{let t=e?.getItem(N);if(!t)return null;let n=JSON.parse(t),o=me(n?.firstTouch),r=me(n?.lastTouch);return!o&&!r?(e.removeItem(N),null):{firstTouch:o??r,lastTouch:r??o}}catch{return null}}function _e(e,t){try{e?.setItem(N,JSON.stringify(t))}catch{}}function lt(e){try{e?.removeItem(N)}catch{}}function me(e){if(!e||typeof e!="object")return null;let t=Date.parse(e.capturedDateTimeUtc);return Number.isFinite(t)&&Date.now()-t<=ot?e:null}function A(e,t){let n=String(e??"").trim();return n?n.slice(0,t):""}function ye(e){if(!S())throw new Error(`@webority/analytics: call initConsent before ${e}.`)}var dt="webority-analytics-web-vitals.global.js",ft=globalThis.document?.currentScript?.src||null;function Ee(e,t,{base:n=ft,doc:o=globalThis.document}={}){return!n||!o?.head?Promise.resolve():new Promise(r=>{let a=o.createElement("script");a.async=!0,a.src=new URL(dt,n).href,a.onload=()=>r(globalThis.WeborityAnalyticsWebVitals?.startWebVitals(e,t)),a.onerror=()=>r(),o.head.appendChild(a)})}var pt=["scroll","mousemove","touchstart","keydown","pointerdown"];function D(e){let t=!1,n=()=>{t||(t=!0,e())};for(let o of pt)window.addEventListener(o,n,{once:!0,passive:!0});document.readyState==="complete"?setTimeout(n,1500):window.addEventListener("load",()=>setTimeout(n,1500),{once:!0})}var s=Object.freeze({SIGNUP_STARTED:"signup_started",SIGNUP_COMPLETED:"signup_completed",LOGIN_SUCCEEDED:"login_succeeded",ONBOARDING_STARTED:"onboarding_started",ONBOARDING_STEP_COMPLETED:"onboarding_step_completed",ONBOARDING_COMPLETED:"onboarding_completed",SUBSCRIPTION_ACTIVATED:"subscription_activated",SUBSCRIPTION_CANCELLED:"subscription_cancelled",PAYMENT_SUCCEEDED:"payment_succeeded",PAYMENT_FAILED:"payment_failed",FEEDBACK_SUBMITTED:"feedback_submitted",LEAD_SUBMITTED:"lead_submitted",LEAD_QUALIFIED:"lead_qualified",LEAD_WON:"lead_won",WHATSAPP_CLICK:"whatsapp_click",CALCULATOR_USE:"calculator_use",PHONE_CLICK:"phone_click",DEMO_BOOKED:"demo_booked",CONTACT_SUBMITTED:"contact_submitted",TRIAL_START_CLICK:"trial_start_click",SAMPLE_REPORT_DOWNLOAD:"sample_report_download",REPORT_VERIFIED:"report_verified",CONTENT_ENGAGED:"content_engaged",EMAIL_CLICK:"email_click",PAGE_NOT_FOUND:"page_not_found",CHAT_OPENED:"chat_opened",TOUR_STARTED:"tour_started",TOUR_STEP_VIEWED:"tour_step_viewed",TOUR_COMPLETED:"tour_completed",TOUR_SKIPPED:"tour_skipped"}),Yt=Object.freeze({signupStarted:s.SIGNUP_STARTED,signupCompleted:s.SIGNUP_COMPLETED,loginSucceeded:s.LOGIN_SUCCEEDED,onboardingStarted:s.ONBOARDING_STARTED,onboardingStepCompleted:s.ONBOARDING_STEP_COMPLETED,onboardingCompleted:s.ONBOARDING_COMPLETED,subscriptionActivated:s.SUBSCRIPTION_ACTIVATED,subscriptionCancelled:s.SUBSCRIPTION_CANCELLED,paymentSucceeded:s.PAYMENT_SUCCEEDED,paymentFailed:s.PAYMENT_FAILED,feedbackSubmitted:s.FEEDBACK_SUBMITTED,leadSubmitted:s.LEAD_SUBMITTED,leadQualified:s.LEAD_QUALIFIED,leadWon:s.LEAD_WON,whatsappClick:s.WHATSAPP_CLICK,calculatorUse:s.CALCULATOR_USE,phoneClick:s.PHONE_CLICK,demoBooked:s.DEMO_BOOKED,contactSubmitted:s.CONTACT_SUBMITTED,trialStartClick:s.TRIAL_START_CLICK,sampleReportDownload:s.SAMPLE_REPORT_DOWNLOAD,reportVerified:s.REPORT_VERIFIED,contentEngaged:s.CONTENT_ENGAGED,emailClick:s.EMAIL_CLICK,pageNotFound:s.PAGE_NOT_FOUND,chatOpened:s.CHAT_OPENED,tourStarted:s.TOUR_STARTED,tourStepViewed:s.TOUR_STEP_VIEWED,tourCompleted:s.TOUR_COMPLETED,tourSkipped:s.TOUR_SKIPPED}),Ce=/^[a-z][a-z0-9]*(_[a-z0-9]+)*$/;var mt=50;function he(){let e=new Set(Object.values(s)),t=new Set;return{warned:t,register(n){for(let o of n){if(!Ce.test(o))throw new Error(`@webority/analytics: invalid event name "${o}". Expected snake_case.`);e.add(o)}},accept(n,o){return e.has(n)?!0:(gt(t,n,o),!1)}}}function gt(e,t,n){if(e.has(t))return;e.size<mt&&e.add(t);let o=`@webority/analytics: event "${t}" is not registered, so it was dropped. Call registerEvents() first.`;if(typeof n?.warn=="function"){n.warn(o);return}if(typeof n?.info=="function"){n.info(o);return}console.warn(o)}var L=he(),en={config:null,posthogInstance:null,posthogInitPromise:null,warnedUnregisteredEvents:L.warned,pendingIdentify:null};var _t=new Set(["token","code","email","access_token","id_token","state","session_state","password","search","q","query"]),yt=/(?:access_token|id_token|session_state|token|code|state|email|password)=/i,Et=["$current_url","$referrer","$pathname","$initial_current_url","$initial_referrer","$initial_pathname","$session_entry_url","$session_entry_referrer","$session_entry_pathname"],Ct=4,ht=5,St=6;function w(e){if(typeof e!="string")return e;let t=e.indexOf("#"),n=t===-1?e:e.slice(0,t),o=t===-1||yt.test(e.slice(t))?"":e.slice(t),r=n.indexOf("?");if(r===-1)return n+o;let a=n.slice(r+1).split("&"),c=a.filter(g=>!_t.has(bt(g))).map(It);if(c.length===a.length&&c.every((g,T)=>g===a[T]))return n+o;let f=n.slice(0,r),E=c.filter(g=>g!=="").join("&");return(E?`${f}?${E}`:f)+o}function Se(e){if(!e||typeof e!="object")return e;let t=e.properties;for(let r of[t,e.$set,e.$set_once,t?.$set,t?.$set_once])Tt(r);let n=t?.$heatmap_data;if(n&&typeof n=="object"){let r={};for(let[a,c]of Object.entries(n)){let f=w(a);r[f]=r[f]?r[f].concat(c):c}t.$heatmap_data=r}if(t&&typeof t=="object"){for(let[r,a]of Object.entries(t))if(r.startsWith("$web_vitals_")&&r.endsWith("_event")&&a&&typeof a=="object")for(let c of["$current_url","navigationURL"])typeof a[c]=="string"&&(a[c]=w(a[c]))}let o=t?.$snapshot_data;if(e.event==="$snapshot"&&o&&typeof o=="object")for(let r of Array.isArray(o)?o:[o])wt(r);return e}function wt(e){let t=e?.data;if(!(!t||typeof t!="object")){if(e.type===Ct)k(t,["href"]);else if(e.type===ht)k(t.payload,["href"]);else if(e.type===St&&Array.isArray(t.payload?.requests))for(let n of t.payload.requests)k(n,["name","url"])}}function k(e,t){if(!(!e||typeof e!="object"))for(let n of t)typeof e[n]=="string"&&(e[n]=w(e[n]))}function Tt(e){k(e,Et)}function It(e){let t=e.indexOf("=");if(t===-1)return e;let n;try{n=decodeURIComponent(e.slice(t+1).replace(/\+/g," "))}catch{return e}if(!n.startsWith("/")&&!/^https?:\/\//i.test(n))return e;let o=w(n);return o===n?e:`${e.slice(0,t)}=${encodeURIComponent(o)}`}function bt(e){let t=e.split("=",1)[0].replace(/\+/g," ");try{return decodeURIComponent(t).toLowerCase()}catch{return t.toLowerCase()}}function we(e,t,n=!1){return t?e:{...e,opt_out_capturing_by_default:!0,...n?{advanced_disable_feature_flags_on_first_load:!0}:{}}}function Te(e){let t=e.sessionRecording??{enabled:!1},n={api_host:e.host,autocapture:!1,capture_pageview:"history_change",cookieless_mode:"on_reject",person_profiles:"identified_only",persistence:"localStorage+cookie",cross_subdomain_cookie:!0,disable_session_recording:!t.enabled,enable_heatmaps:e.heatmaps===!0,capture_exceptions:e.captureExceptions===!0,capture_performance:{web_vitals:!1},disable_surveys:!0,disable_product_tours:!0,disable_conversations:!0,advanced_disable_feature_flags:!(t.enabled||e.featureFlags===!0),before_send:Se};return t.enabled&&(n.session_recording={maskAllInputs:t.maskAllInputs??!0,...t.maskTextSelector?{maskTextSelector:t.maskTextSelector}:{},maskCapturedNetworkRequestFn:o=>({...o,name:w(o.name)}),recordBody:!1,recordHeaders:!1}),n}var Ie={sampleRate:1,softNavigations:!0,deployVersion:null};function be(e){if(e==null||e===!1)return null;if(e===!0)return{...Ie};if(typeof e!="object")throw new Error("@webority/analytics: webVitals takes true or { sampleRate, softNavigations, deployVersion }.");let t=e.sampleRate??Ie.sampleRate;if(typeof t!="number"||!(t>0&&t<=1))throw new Error("@webority/analytics: webVitals.sampleRate must be a number above 0 and at most 1.");let n=e.deployVersion??null;if(n!==null&&typeof n!="string")throw new Error("@webority/analytics: webVitals.deployVersion must be a string.");return{sampleRate:t,softNavigations:e.softNavigations!==!1,deployVersion:n}}var Nt=()=>Promise.resolve().then(()=>(Re(),Ne)),Rt=100,u={config:null,posthog:null,pending:[],failed:!1,loadPosthog:Nt,startVitals:Ee,stopFollowingConsent:null};function De({host:e,clientKey:t,product:n,surface:o,environment:r,enabled:a=!0,sessionRecording:c,heatmaps:f=!1,captureExceptions:E=!1,webVitals:g=!1}={}){if(!S())throw new Error("@webority/analytics: call initConsent before initSiteAnalytics.");let T=be(g);!a||!e||!t||r==="Local"||u.config||(u.config={host:e,clientKey:t,product:n,surface:o,environment:r,sessionRecording:c,heatmaps:f,captureExceptions:E,webVitals:T},u.stopFollowingConsent=_(y=>Lt(y.analytics)),D(()=>{Promise.resolve().then(u.loadPosthog).then(y=>Dt(y.default??y)).catch(()=>{u.failed=!0,u.pending=[]})}))}function Dt(e){let t=u.config,n=d().analytics;e.init(t.clientKey,we(kt(t),n)),e.register({product:t.product,surface:t.surface,environment:t.environment}),n?e.opt_in_capturing({captureEventName:!1}):e.opt_out_capturing(),u.posthog=e;let o=u.pending;u.pending=[];for(let[r,a]of o)W(e,r,a);t.webVitals&&u.startVitals(t.webVitals,(r,a)=>W(e,r,a))}function Lt(e){u.posthog&&(e?u.posthog.opt_in_capturing():u.posthog.opt_out_capturing())}function kt(e){return{...Te({host:e.host,sessionRecording:e.sessionRecording,heatmaps:e.heatmaps,captureExceptions:e.captureExceptions,webVitals:e.webVitals}),capture_pageview:!0}}function Le(e,t){let n=u.config;if(!n)return;let o={...t,product:n.product,surface:n.surface,environment:n.environment};u.posthog?W(u.posthog,e,o):!u.failed&&u.pending.length<Rt&&u.pending.push([e,o])}function W(e,t,n){try{e.capture(t,n)}catch{}}function ke(e,t={}){if(!L.accept(e))return!1;let n=d().analytics,o=R(),r={...t};for(let[a,c]of[["first",o?.firstTouch],["last",o?.lastTouch]])c&&(r[`${a}_touch_channel`]=C(c),c.aiSource&&(r[`${a}_touch_ai_source`]=c.aiSource));return Le(e,r),n?(window.dataLayer=window.dataLayer||[],window.dataLayer.push({...r,event:e}),!0):!1}function ve(e){L.register(e)}var vt="https://www.googletagmanager.com/gtm.js",xt=3e3,Ut=100,m={loaded:!1,clarityId:null,clarityLoaded:!1,cancelClaritySchedule:null};function Ue(e={}){if(!S())throw new Error("@webority/analytics: call initConsent before loadTags.");if(m.loaded)return;m.loaded=!0;let{gtmId:t,gtmUrl:n=vt,clarityId:o,ahrefsKey:r}=e;if(typeof n!="string"||n.trim()==="")throw new Error("@webority/analytics: gtmUrl must be a non-empty string.");let a=ae();if(r){let c=()=>q("https://analytics.ahrefs.com/analytics.js",{"data-key":r});a?xe(f=>f.analytics,c):c()}if(t){let c=M(),f=H=>H.analytics||H.marketing&&c,E=()=>{window.dataLayer=window.dataLayer||[],window.dataLayer.push({"gtm.start":Date.now(),event:"gtm.js"}),q(`${n}${n.includes("?")?"&":"?"}id=${encodeURIComponent(t)}`)},g=d(),T=g.decided&&f(g)?Pt:D,y=()=>T(E);a?xe(f,y):y()}o&&(m.clarityId=o,d().analytics&&Mt(),_(c=>{c.analytics&&!m.clarityLoaded?j():m.clarityLoaded&&Pe(c)}))}function xe(e,t){if(e(d())){t();return}let n=_(o=>{e(o)&&(n(),t())})}function Pt(e){document.readyState==="loading"?document.addEventListener("DOMContentLoaded",e,{once:!0}):e()}function Mt(){let e=()=>{window.scrollY>Ut&&j()};window.addEventListener("scroll",e,{passive:!0});let t=setTimeout(j,xt);m.cancelClaritySchedule=()=>{window.removeEventListener("scroll",e),clearTimeout(t)}}function j(){m.cancelClaritySchedule?.(),m.cancelClaritySchedule=null,!(m.clarityLoaded||!m.clarityId)&&(m.clarityLoaded=!0,window.clarity=window.clarity||function(){window.clarity.q=window.clarity.q||[],window.clarity.q.push(arguments)},Pe(d()),q(`https://www.clarity.ms/tag/${encodeURIComponent(m.clarityId)}`,{crossorigin:"anonymous"}))}function Pe(e){window.clarity("consentv2",{ad_Storage:e.marketing&&M()?"granted":"denied",analytics_Storage:e.analytics?"granted":"denied"})}function q(e,t={}){let n=document.createElement("script");n.async=!0,n.src=e;for(let[o,r]of Object.entries(t))n.setAttribute(o,r);document.head.appendChild(n)}return Be(Ft);})();
|
|
1
|
+
var WeborityAnalytics=(()=>{var v=Object.defineProperty;var Me=Object.getOwnPropertyDescriptor;var Fe=Object.getOwnPropertyNames;var $e=Object.prototype.hasOwnProperty;var Ve=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(o){throw n=[o],o}};var Y=(e,t)=>{for(var n in t)v(e,n,{get:t[n],enumerable:!0})},Ge=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Fe(t))!$e.call(e,r)&&r!==n&&v(e,r,{get:()=>t[r],enumerable:!(o=Me(t,r))||o.enumerable});return e};var He=e=>Ge(v({},"__esModule",{value:!0}),e);var Re={};Y(Re,{default:()=>At});function Ot(){let e=[];e._i=[],e.__SV=1,e.people=[];for(let t of Oe)e[t]=(...n)=>{e.push([t,...n])};e.init=(t,n)=>{e._i.push([t,n]);let o=document.createElement("script");o.async=!0,o.crossOrigin="anonymous",o.src=`${n.api_host.replace(/\/+$/,"").replace(".i.posthog.com","-assets.i.posthog.com")}/static/array.js`,document.head.appendChild(o)},window.posthog=e}var Oe,Ae,At,Ne=Ve(()=>{Oe=["capture","register","opt_in_capturing","opt_out_capturing"];Ae={init(e,t){window.posthog||Ot(),window.posthog.init(e,t)}};for(let e of Oe)Ae[e]=(...t)=>window.posthog[e](...t);At=Ae});var Ft={};Y(Ft,{CONSENT_CHANGE_EVENT:()=>P,CONSENT_COOKIE_NAME:()=>I,captureAttribution:()=>_e,channels:()=>l,events:()=>i,getAttribution:()=>N,getConsent:()=>d,initConsent:()=>ie,initSiteAnalytics:()=>De,loadTags:()=>xe,onConsentChange:()=>g,registerEvents:()=>ve,requiresOptIn:()=>te,resolveAiSource:()=>O,resolveChannel:()=>C,saveConsent:()=>ce,setConsentRegion:()=>ae,trackSiteEvent:()=>ke});var Be=["google","googleads","adwords","youtube"],ze=["meta","facebook","fb","instagram","ig","messenger"],qe=["linkedin","lnkd"],Ke=["bing","microsoft","microsoftads","msn"],Q=Object.freeze([["chatgpt",["chatgpt.com","chat.openai.com"]],["perplexity",["perplexity.ai"]],["gemini",["gemini.google.com"]],["copilot",["copilot.microsoft.com"]],["claude",["claude.ai"]],["you",["you.com"]],["phind",["phind.com"]],["deepseek",["deepseek.com"]],["grok",["grok.com"]],["meta_ai",["meta.ai"]],["poe",["poe.com"]]]),We=["bing.com","duckduckgo.com","search.yahoo.com","ecosia.org","search.brave.com"],je=["google","yandex"],Ye=["facebook.com","fb.com","instagram.com","linkedin.com","lnkd.in","twitter.com","t.co","x.com","reddit.com","pinterest.com","youtube.com","youtu.be","tiktok.com","whatsapp.com","threads.net","t.me","telegram.org"],l=Object.freeze({DIRECT:"direct",GOOGLE:"google",META:"meta",LINKEDIN:"linkedin",MICROSOFT:"microsoft",OTHER:"other",AI_ASSISTANT:"ai_assistant",ORGANIC_SEARCH:"organic_search",ORGANIC_SOCIAL:"organic_social",REFERRAL:"referral"});function C(e){if(!e)return l.DIRECT;let t=p(e.utmSource);if(t){let r=b(t);if(Be.includes(r))return l.GOOGLE;if(ze.includes(r))return l.META;if(qe.includes(r))return l.LINKEDIN;if(Ke.includes(r))return l.MICROSOFT}if(p(e.fbclid))return l.META;if(p(e.gclid)||p(e.gbraid)||p(e.wbraid))return l.GOOGLE;if(p(e.liFatId))return l.LINKEDIN;if(p(e.msclkid))return l.MICROSOFT;if(X(t))return l.AI_ASSISTANT;if(t||p(e.utmMedium)||p(e.utmCampaign)||p(e.utmContent)||p(e.utmTerm))return l.OTHER;let o=ee(e.referrer);return o?J(o)?l.AI_ASSISTANT:Qe(o)?l.ORGANIC_SEARCH:Ye.some(r=>Z(o,r))?l.ORGANIC_SOCIAL:l.REFERRAL:l.DIRECT}function O(e){if(!e)return"";let t=X(p(e.utmSource));if(t)return t;let n=ee(e.referrer);return n?J(n):""}function X(e){if(!e)return"";let t=b(e);for(let[n,o]of Q)if(b(n)===t||o.some(r=>b(r)===t))return n;return""}function J(e){for(let[t,n]of Q)if(n.some(o=>Z(e,o)))return t;return""}function Qe(e){return We.includes(e)?!0:je.some(t=>{if(!e.startsWith(`${t}.`))return!1;let n=e.slice(t.length+1).split(".");return n.length===1||n.length===2&&(n[0]==="co"||n[0]==="com")})}function Z(e,t){return e===t||e.endsWith(`.${t}`)}function ee(e){let t=p(e);if(!t)return"";try{let n=new URL(/^[a-z][a-z0-9+.-]*:\/\//i.test(t)?t:`https://${t}`).hostname.toLowerCase();return n.startsWith("www.")?n.slice(4):n}catch{return""}}function b(e){return String(e).toLowerCase().replace(/[^\p{L}\p{N}]/gu,"")}function p(e){return String(e??"").trim()}var U=Object.freeze(["AT","BE","BG","HR","CY","CZ","DK","EE","FI","FR","DE","GR","HU","IE","IT","LV","LT","LU","MT","NL","PL","PT","RO","SK","SI","ES","SE","IS","LI","NO","GB","CH"]);function te(e){let t=typeof e=="string"?e.trim().toUpperCase():"";return t.length!==2||t==="XX"||t==="T1"?!0:U.includes(t)}var I="webority_cookie_consent",P="webority-consent-change",oe=365,a={initialized:!1,requiresOptIn:!0,strictOptIn:!1,adStorage:!0,cookieDays:oe,cookieDomain:null,regionCookie:null,region:null,saved:null},re=["eea","other"],x=new Set;function ie(e){let t=e?.strictOptIn??!1;if(typeof t!="boolean")throw new Error("@webority/analytics: initConsent strictOptIn must be true or false, or left out.");if(t){if(e.requiresOptIn!==void 0&&e.requiresOptIn!==!0)throw new Error("@webority/analytics: initConsent strictOptIn asks every visitor to opt in, so requiresOptIn must be true or left out.")}else if(typeof e?.requiresOptIn!="boolean")throw new Error("@webority/analytics: initConsent needs requiresOptIn (true or false), decided from the visitor's country.");if(e.cookieDomain!==void 0&&(typeof e.cookieDomain!="string"||!e.cookieDomain.trim()))throw new Error('@webority/analytics: initConsent cookieDomain must be a domain such as ".example.com", or left out.');if(e.cookieDays!==void 0&&!(Number.isInteger(e.cookieDays)&&e.cookieDays>0))throw new Error("@webority/analytics: initConsent cookieDays must be a whole number of days above zero, or left out.");if(e.adStorage!==void 0&&typeof e.adStorage!="boolean")throw new Error("@webority/analytics: initConsent adStorage must be true or false, or left out.");if(e.regionCookie!==void 0&&(typeof e.regionCookie!="string"||!/^[\w.-]+$/.test(e.regionCookie)))throw new Error('@webority/analytics: initConsent regionCookie must be a cookie name such as "wui_region", or left out.');a.initialized=!0,a.strictOptIn=t,a.requiresOptIn=t||e.requiresOptIn,a.adStorage=e.adStorage??!t,a.cookieDays=e.cookieDays??oe,a.cookieDomain=e.cookieDomain?.trim()??null,a.regionCookie=e.regionCookie??null,a.region=a.regionCookie?et(a.regionCookie):null;let{saved:n,entryCount:o}=Ze();a.saved=n,a.cookieDomain&&o>1&&n&&fe(n),Xe(),Je(),a.saved?$(a.saved):le()&&de()}function ae(e){if(F("setConsentRegion"),!re.includes(e))throw new Error('@webority/analytics: setConsentRegion needs "eea" or "other".');let t=d();if(a.region=e,a.saved)return;let n=d();t.analytics===n.analytics&&t.functional===n.functional&&t.marketing===n.marketing||(de(),ue(n))}function h(){return a.initialized}function se(){return a.strictOptIn}function M(){return a.adStorage}function d(){F("getConsent");let e=a.saved;if(e)return{essential:!0,analytics:e.analytics,functional:e.functional,marketing:e.marketing,decided:!0};if(le())return{essential:!0,analytics:!0,functional:!0,marketing:!1,decided:!1};let t=!a.requiresOptIn;return{essential:!0,analytics:t,functional:t,marketing:t,decided:!1}}function ce(e){F("saveConsent");let t={essential:!0,analytics:e?.analytics===!0,functional:e?.functional===!0,marketing:e?.marketing===!0,timestamp:new Date().toISOString()};fe(t),a.saved=t,$(t),ue(d())}function g(e){return x.add(e),()=>x.delete(e)}function ue(e){for(let t of x)try{t(e)}catch(n){queueMicrotask(()=>{throw n})}typeof window?.dispatchEvent=="function"&&typeof CustomEvent=="function"&&window.dispatchEvent(new CustomEvent(P,{detail:e}))}function F(e){if(!a.initialized)throw new Error(`@webority/analytics: call initConsent before ${e}.`)}function T(){window.dataLayer=window.dataLayer||[],window.dataLayer.push(arguments)}function Xe(){if(a.strictOptIn){T("consent","default",{ad_storage:"denied",ad_user_data:"denied",ad_personalization:"denied",analytics_storage:"denied",functionality_storage:"denied",personalization_storage:"denied",security_storage:"granted",wait_for_update:500});return}T("consent","default",{ad_storage:"denied",ad_user_data:"denied",ad_personalization:"denied",analytics_storage:"denied",functionality_storage:"denied",personalization_storage:"denied",security_storage:"granted",wait_for_update:500,region:[...U]});let e=a.adStorage?"granted":"denied";T("consent","default",{ad_storage:e,ad_user_data:e,ad_personalization:e,analytics_storage:"granted",functionality_storage:"granted",personalization_storage:"granted",security_storage:"granted"})}function Je(){T("set","ads_data_redaction",!0),T("set","url_passthrough",!0)}function le(){return a.requiresOptIn&&!a.strictOptIn&&a.region==="other"}function de(){let e=d();$(e,e.analytics&&a.adStorage)}function $(e,t=e.marketing&&a.adStorage){let n=o=>o?"granted":"denied";T("consent","update",{analytics_storage:n(e.analytics),functionality_storage:n(e.functional),personalization_storage:n(e.functional),ad_storage:n(t),ad_user_data:n(t),ad_personalization:n(t)})}function Ze(){let e=`${I}=`,t=(document.cookie||"").split(";").map(o=>o.trim()).filter(o=>o.startsWith(e)),n=t.map(o=>tt(o.slice(e.length))).filter(Boolean);return{saved:nt(n),entryCount:t.length}}function et(e){let t=`${e}=`,o=(document.cookie||"").split(";").map(r=>r.trim()).find(r=>r.startsWith(t))?.slice(t.length);return re.includes(o)?o:null}function tt(e){try{let t=JSON.parse(decodeURIComponent(e));return!t||typeof t!="object"?null:{essential:!0,analytics:t.analytics===!0,functional:t.functional===!0,marketing:t.marketing===!0,timestamp:t.timestamp??null}}catch{return null}}function nt(e){if(e.length===0)return null;let t=e.map(o=>typeof o.timestamp=="string"?Date.parse(o.timestamp):Number.NaN);if(t.some(Number.isNaN))return e.at(-1);let n=0;for(let o=1;o<e.length;o++)t[o]>=t[n]&&(n=o);return e[n]}function fe(e){let t=typeof e.timestamp=="string"?Date.parse(e.timestamp):Number.NaN,n=(Number.isNaN(t)?Date.now():t)+a.cookieDays*24*60*60*1e3,o=window.location?.protocol==="https:"?";Secure":"";a.cookieDomain&&ne(`${I}=;expires=Thu, 01 Jan 1970 00:00:00 GMT;max-age=0;path=/;SameSite=Lax${o}`);let r=a.cookieDomain?`;domain=${a.cookieDomain}`:"";ne(`${I}=${encodeURIComponent(JSON.stringify(e))};expires=${new Date(n).toUTCString()};path=/${r};SameSite=Lax${o}`)}function ne(e){document.cookie=e}var R="webority_attribution",ot=2160*60*60*1e3,rt=200,V=500,it=Object.freeze({utm_source:"utmSource",utm_medium:"utmMedium",utm_campaign:"utmCampaign",utm_content:"utmContent",utm_term:"utmTerm",gclid:"gclid",gbraid:"gbraid",wbraid:"wbraid",fbclid:"fbclid",msclkid:"msclkid",li_fat_id:"liFatId"}),pe=!1;function _e(){Ee("captureAttribution"),ut();let e=st();if(!e)return;let t=z(G());ge(G(),{firstTouch:t?.firstTouch??e,lastTouch:e}),at(e)}function at(e){let t={event:"acquisition_touch",acquisition_channel:C(e)};e.aiSource&&(t.ai_source=e.aiSource),window.dataLayer=window.dataLayer||[],window.dataLayer.push(t)}function N(){return Ee("getAttribution"),z(G())}function st(){let e=new URLSearchParams(window.location.search),t={};for(let[r,s]of Object.entries(it)){let c=A(e.get(r),rt);c&&(t[s]=c)}let n=A(e.get("referrer"),V)||ct();if(n&&(t.referrer=n),Object.keys(t).length===0)return null;let o=O(t);return o&&(t.aiSource=o),t.landingPage=A(window.location.pathname,V),t.capturedDateTimeUtc=new Date().toISOString(),t}function ct(){let e=document.referrer;if(!e)return"";try{return new URL(e).hostname===window.location.hostname?"":A(e,V)}catch{return""}}function ut(){pe||(pe=!0,g(e=>{let t=e.marketing?B():H(),n=e.marketing?H():B(),o=z(t);lt(t),o&&ge(n,o)}))}function G(){return d().marketing?H():B()}function H(){try{return window.localStorage}catch{return null}}function B(){try{return window.sessionStorage}catch{return null}}function z(e){try{let t=e?.getItem(R);if(!t)return null;let n=JSON.parse(t),o=me(n?.firstTouch),r=me(n?.lastTouch);return!o&&!r?(e.removeItem(R),null):{firstTouch:o??r,lastTouch:r??o}}catch{return null}}function ge(e,t){try{e?.setItem(R,JSON.stringify(t))}catch{}}function lt(e){try{e?.removeItem(R)}catch{}}function me(e){if(!e||typeof e!="object")return null;let t=Date.parse(e.capturedDateTimeUtc);return Number.isFinite(t)&&Date.now()-t<=ot?e:null}function A(e,t){let n=String(e??"").trim();return n?n.slice(0,t):""}function Ee(e){if(!h())throw new Error(`@webority/analytics: call initConsent before ${e}.`)}var dt="webority-analytics-web-vitals.global.js",ft=globalThis.document?.currentScript?.src||null;function ye(e,t,{base:n=ft,doc:o=globalThis.document}={}){return!n||!o?.head?Promise.resolve():new Promise(r=>{let s=o.createElement("script");s.async=!0,s.src=new URL(dt,n).href,s.onload=()=>r(globalThis.WeborityAnalyticsWebVitals?.startWebVitals(e,t)),s.onerror=()=>r(),o.head.appendChild(s)})}var pt=["scroll","mousemove","touchstart","keydown","pointerdown"];function D(e){let t=!1,n=()=>{t||(t=!0,e())};for(let o of pt)window.addEventListener(o,n,{once:!0,passive:!0});document.readyState==="complete"?setTimeout(n,1500):window.addEventListener("load",()=>setTimeout(n,1500),{once:!0})}var i=Object.freeze({SIGNUP_STARTED:"signup_started",SIGNUP_COMPLETED:"signup_completed",LOGIN_SUCCEEDED:"login_succeeded",ONBOARDING_STARTED:"onboarding_started",ONBOARDING_STEP_COMPLETED:"onboarding_step_completed",ONBOARDING_COMPLETED:"onboarding_completed",SUBSCRIPTION_ACTIVATED:"subscription_activated",SUBSCRIPTION_CANCELLED:"subscription_cancelled",PAYMENT_SUCCEEDED:"payment_succeeded",PAYMENT_FAILED:"payment_failed",FEEDBACK_SUBMITTED:"feedback_submitted",LEAD_SUBMITTED:"lead_submitted",LEAD_QUALIFIED:"lead_qualified",LEAD_WON:"lead_won",WHATSAPP_CLICK:"whatsapp_click",CALCULATOR_USE:"calculator_use",PHONE_CLICK:"phone_click",DEMO_BOOKED:"demo_booked",CONTACT_SUBMITTED:"contact_submitted",TRIAL_START_CLICK:"trial_start_click",SAMPLE_REPORT_DOWNLOAD:"sample_report_download",REPORT_VERIFIED:"report_verified",CONTENT_ENGAGED:"content_engaged",EMAIL_CLICK:"email_click",PAGE_NOT_FOUND:"page_not_found",CHAT_OPENED:"chat_opened",CHAT_STARTED:"chat_started",CHAT_INPUT_SUBMITTED:"chat_input_submitted",CHAT_HANDOFF_REQUESTED:"chat_handoff_requested",CHAT_RATED:"chat_rated",CHAT_ACTION_REPEATED:"chat_action_repeated",TOUR_STARTED:"tour_started",TOUR_STEP_VIEWED:"tour_step_viewed",TOUR_COMPLETED:"tour_completed",TOUR_SKIPPED:"tour_skipped"}),Yt=Object.freeze({signupStarted:i.SIGNUP_STARTED,signupCompleted:i.SIGNUP_COMPLETED,loginSucceeded:i.LOGIN_SUCCEEDED,onboardingStarted:i.ONBOARDING_STARTED,onboardingStepCompleted:i.ONBOARDING_STEP_COMPLETED,onboardingCompleted:i.ONBOARDING_COMPLETED,subscriptionActivated:i.SUBSCRIPTION_ACTIVATED,subscriptionCancelled:i.SUBSCRIPTION_CANCELLED,paymentSucceeded:i.PAYMENT_SUCCEEDED,paymentFailed:i.PAYMENT_FAILED,feedbackSubmitted:i.FEEDBACK_SUBMITTED,leadSubmitted:i.LEAD_SUBMITTED,leadQualified:i.LEAD_QUALIFIED,leadWon:i.LEAD_WON,whatsappClick:i.WHATSAPP_CLICK,calculatorUse:i.CALCULATOR_USE,phoneClick:i.PHONE_CLICK,demoBooked:i.DEMO_BOOKED,contactSubmitted:i.CONTACT_SUBMITTED,trialStartClick:i.TRIAL_START_CLICK,sampleReportDownload:i.SAMPLE_REPORT_DOWNLOAD,reportVerified:i.REPORT_VERIFIED,contentEngaged:i.CONTENT_ENGAGED,emailClick:i.EMAIL_CLICK,pageNotFound:i.PAGE_NOT_FOUND,chatOpened:i.CHAT_OPENED,chatStarted:i.CHAT_STARTED,chatInputSubmitted:i.CHAT_INPUT_SUBMITTED,chatHandoffRequested:i.CHAT_HANDOFF_REQUESTED,chatRated:i.CHAT_RATED,chatActionRepeated:i.CHAT_ACTION_REPEATED,tourStarted:i.TOUR_STARTED,tourStepViewed:i.TOUR_STEP_VIEWED,tourCompleted:i.TOUR_COMPLETED,tourSkipped:i.TOUR_SKIPPED}),Ce=/^[a-z][a-z0-9]*(_[a-z0-9]+)*$/;var mt=50;function Te(){let e=new Set(Object.values(i)),t=new Set;return{warned:t,register(n){for(let o of n){if(!Ce.test(o))throw new Error(`@webority/analytics: invalid event name "${o}". Expected snake_case.`);e.add(o)}},accept(n,o){return e.has(n)?!0:(_t(t,n,o),!1)}}}function _t(e,t,n){if(e.has(t))return;e.size<mt&&e.add(t);let o=`@webority/analytics: event "${t}" is not registered, so it was dropped. Call registerEvents() first.`;if(typeof n?.warn=="function"){n.warn(o);return}if(typeof n?.info=="function"){n.info(o);return}console.warn(o)}var L=Te(),en={config:null,posthogInstance:null,posthogInitPromise:null,warnedUnregisteredEvents:L.warned,pendingIdentify:null};var gt=new Set(["token","code","email","access_token","id_token","state","session_state","password","search","q","query"]),Et=/(?:access_token|id_token|session_state|token|code|state|email|password)=/i,yt=["$current_url","$referrer","$pathname","$initial_current_url","$initial_referrer","$initial_pathname","$session_entry_url","$session_entry_referrer","$session_entry_pathname"],Ct=4,Tt=5,ht=6;function S(e){if(typeof e!="string")return e;let t=e.indexOf("#"),n=t===-1?e:e.slice(0,t),o=t===-1||Et.test(e.slice(t))?"":e.slice(t),r=n.indexOf("?");if(r===-1)return n+o;let s=n.slice(r+1).split("&"),c=s.filter(_=>!gt.has(bt(_))).map(It);if(c.length===s.length&&c.every((_,w)=>_===s[w]))return n+o;let f=n.slice(0,r),y=c.filter(_=>_!=="").join("&");return(y?`${f}?${y}`:f)+o}function he(e){if(!e||typeof e!="object")return e;let t=e.properties;for(let r of[t,e.$set,e.$set_once,t?.$set,t?.$set_once])wt(r);let n=t?.$heatmap_data;if(n&&typeof n=="object"){let r={};for(let[s,c]of Object.entries(n)){let f=S(s);r[f]=r[f]?r[f].concat(c):c}t.$heatmap_data=r}if(t&&typeof t=="object"){for(let[r,s]of Object.entries(t))if(r.startsWith("$web_vitals_")&&r.endsWith("_event")&&s&&typeof s=="object")for(let c of["$current_url","navigationURL"])typeof s[c]=="string"&&(s[c]=S(s[c]))}let o=t?.$snapshot_data;if(e.event==="$snapshot"&&o&&typeof o=="object")for(let r of Array.isArray(o)?o:[o])St(r);return e}function St(e){let t=e?.data;if(!(!t||typeof t!="object")){if(e.type===Ct)k(t,["href"]);else if(e.type===Tt)k(t.payload,["href"]);else if(e.type===ht&&Array.isArray(t.payload?.requests))for(let n of t.payload.requests)k(n,["name","url"])}}function k(e,t){if(!(!e||typeof e!="object"))for(let n of t)typeof e[n]=="string"&&(e[n]=S(e[n]))}function wt(e){k(e,yt)}function It(e){let t=e.indexOf("=");if(t===-1)return e;let n;try{n=decodeURIComponent(e.slice(t+1).replace(/\+/g," "))}catch{return e}if(!n.startsWith("/")&&!/^https?:\/\//i.test(n))return e;let o=S(n);return o===n?e:`${e.slice(0,t)}=${encodeURIComponent(o)}`}function bt(e){let t=e.split("=",1)[0].replace(/\+/g," ");try{return decodeURIComponent(t).toLowerCase()}catch{return t.toLowerCase()}}function Se(e,t,n=!1){return t?e:{...e,opt_out_capturing_by_default:!0,...n?{advanced_disable_feature_flags_on_first_load:!0}:{}}}function we(e){let t=e.sessionRecording??{enabled:!1},n={api_host:e.host,autocapture:!1,capture_pageview:"history_change",cookieless_mode:"on_reject",person_profiles:"identified_only",persistence:"localStorage+cookie",cross_subdomain_cookie:!0,disable_session_recording:!t.enabled,enable_heatmaps:e.heatmaps===!0,capture_exceptions:e.captureExceptions===!0,capture_performance:{web_vitals:!1},disable_surveys:!0,disable_product_tours:!0,disable_conversations:!0,advanced_disable_feature_flags:!(t.enabled||e.featureFlags===!0),before_send:he};return t.enabled&&(n.session_recording={maskAllInputs:t.maskAllInputs??!0,...t.maskTextSelector?{maskTextSelector:t.maskTextSelector}:{},maskCapturedNetworkRequestFn:o=>({...o,name:S(o.name)}),recordBody:!1,recordHeaders:!1}),n}var Ie={sampleRate:1,softNavigations:!0,deployVersion:null};function be(e){if(e==null||e===!1)return null;if(e===!0)return{...Ie};if(typeof e!="object")throw new Error("@webority/analytics: webVitals takes true or { sampleRate, softNavigations, deployVersion }.");let t=e.sampleRate??Ie.sampleRate;if(typeof t!="number"||!(t>0&&t<=1))throw new Error("@webority/analytics: webVitals.sampleRate must be a number above 0 and at most 1.");let n=e.deployVersion??null;if(n!==null&&typeof n!="string")throw new Error("@webority/analytics: webVitals.deployVersion must be a string.");return{sampleRate:t,softNavigations:e.softNavigations!==!1,deployVersion:n}}var Rt=()=>Promise.resolve().then(()=>(Ne(),Re)),Nt=100,u={config:null,posthog:null,pending:[],failed:!1,loadPosthog:Rt,startVitals:ye,stopFollowingConsent:null};function De({host:e,clientKey:t,product:n,surface:o,environment:r,enabled:s=!0,sessionRecording:c,heatmaps:f=!1,captureExceptions:y=!1,webVitals:_=!1}={}){if(!h())throw new Error("@webority/analytics: call initConsent before initSiteAnalytics.");let w=be(_);!s||!e||!t||r==="Local"||u.config||(u.config={host:e,clientKey:t,product:n,surface:o,environment:r,sessionRecording:c,heatmaps:f,captureExceptions:y,webVitals:w},u.stopFollowingConsent=g(E=>Lt(E.analytics)),D(()=>{Promise.resolve().then(u.loadPosthog).then(E=>Dt(E.default??E)).catch(()=>{u.failed=!0,u.pending=[]})}))}function Dt(e){let t=u.config,n=d().analytics;e.init(t.clientKey,Se(kt(t),n)),e.register({product:t.product,surface:t.surface,environment:t.environment}),n?e.opt_in_capturing({captureEventName:!1}):e.opt_out_capturing(),u.posthog=e;let o=u.pending;u.pending=[];for(let[r,s]of o)q(e,r,s);t.webVitals&&u.startVitals(t.webVitals,(r,s)=>q(e,r,s))}function Lt(e){u.posthog&&(e?u.posthog.opt_in_capturing():u.posthog.opt_out_capturing())}function kt(e){return{...we({host:e.host,sessionRecording:e.sessionRecording,heatmaps:e.heatmaps,captureExceptions:e.captureExceptions,webVitals:e.webVitals}),capture_pageview:!0}}function Le(e,t){let n=u.config;if(!n)return;let o={...t,product:n.product,surface:n.surface,environment:n.environment};u.posthog?q(u.posthog,e,o):!u.failed&&u.pending.length<Nt&&u.pending.push([e,o])}function q(e,t,n){try{e.capture(t,n)}catch{}}function ke(e,t={}){if(!L.accept(e))return!1;let n=d().analytics,o=N(),r={...t};for(let[s,c]of[["first",o?.firstTouch],["last",o?.lastTouch]])c&&(r[`${s}_touch_channel`]=C(c),c.aiSource&&(r[`${s}_touch_ai_source`]=c.aiSource));return Le(e,r),n?(window.dataLayer=window.dataLayer||[],window.dataLayer.push({...r,event:e}),!0):!1}function ve(e){L.register(e)}var vt="https://www.googletagmanager.com/gtm.js",Ut=3e3,xt=100,m={loaded:!1,clarityId:null,clarityLoaded:!1,cancelClaritySchedule:null};function xe(e={}){if(!h())throw new Error("@webority/analytics: call initConsent before loadTags.");if(m.loaded)return;m.loaded=!0;let{gtmId:t,gtmUrl:n=vt,clarityId:o,ahrefsKey:r}=e;if(typeof n!="string"||n.trim()==="")throw new Error("@webority/analytics: gtmUrl must be a non-empty string.");let s=se();if(r){let c=()=>W("https://analytics.ahrefs.com/analytics.js",{"data-key":r});s?Ue(f=>f.analytics,c):c()}if(t){let c=M(),f=j=>j.analytics||j.marketing&&c,y=()=>{window.dataLayer=window.dataLayer||[],window.dataLayer.push({"gtm.start":Date.now(),event:"gtm.js"}),W(`${n}${n.includes("?")?"&":"?"}id=${encodeURIComponent(t)}`)},_=d(),w=_.decided&&f(_)?Pt:D,E=()=>w(y);s?Ue(f,E):E()}o&&(m.clarityId=o,d().analytics&&Mt(),g(c=>{c.analytics&&!m.clarityLoaded?K():m.clarityLoaded&&Pe(c)}))}function Ue(e,t){if(e(d())){t();return}let n=g(o=>{e(o)&&(n(),t())})}function Pt(e){document.readyState==="loading"?document.addEventListener("DOMContentLoaded",e,{once:!0}):e()}function Mt(){let e=()=>{window.scrollY>xt&&K()};window.addEventListener("scroll",e,{passive:!0});let t=setTimeout(K,Ut);m.cancelClaritySchedule=()=>{window.removeEventListener("scroll",e),clearTimeout(t)}}function K(){m.cancelClaritySchedule?.(),m.cancelClaritySchedule=null,!(m.clarityLoaded||!m.clarityId)&&(m.clarityLoaded=!0,window.clarity=window.clarity||function(){window.clarity.q=window.clarity.q||[],window.clarity.q.push(arguments)},Pe(d()),W(`https://www.clarity.ms/tag/${encodeURIComponent(m.clarityId)}`,{crossorigin:"anonymous"}))}function Pe(e){window.clarity("consentv2",{ad_Storage:e.marketing&&M()?"granted":"denied",analytics_Storage:e.analytics?"granted":"denied"})}function W(e,t={}){let n=document.createElement("script");n.async=!0,n.src=e;for(let[o,r]of Object.entries(t))n.setAttribute(o,r);document.head.appendChild(n)}return He(Ft);})();
|
package/package.json
CHANGED
package/dist/chunk-SR72OIQ6.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as Z}from"./chunk-JKZNJI5Q.js";var De=["google","googleads","adwords","youtube"],Le=["meta","facebook","fb","instagram","ig","messenger"],ke=["linkedin","lnkd"],ve=["bing","microsoft","microsoftads","msn"],ee=Object.freeze([["chatgpt",["chatgpt.com","chat.openai.com"]],["perplexity",["perplexity.ai"]],["gemini",["gemini.google.com"]],["copilot",["copilot.microsoft.com"]],["claude",["claude.ai"]],["you",["you.com"]],["phind",["phind.com"]],["deepseek",["deepseek.com"]],["grok",["grok.com"]],["meta_ai",["meta.ai"]],["poe",["poe.com"]]]),xe=["bing.com","duckduckgo.com","search.yahoo.com","ecosia.org","search.brave.com"],Ue=["google","yandex"],Fe=["facebook.com","fb.com","instagram.com","linkedin.com","lnkd.in","twitter.com","t.co","x.com","reddit.com","pinterest.com","youtube.com","youtu.be","tiktok.com","whatsapp.com","threads.net","t.me","telegram.org"],f=Object.freeze({DIRECT:"direct",GOOGLE:"google",META:"meta",LINKEDIN:"linkedin",MICROSOFT:"microsoft",OTHER:"other",AI_ASSISTANT:"ai_assistant",ORGANIC_SEARCH:"organic_search",ORGANIC_SOCIAL:"organic_social",REFERRAL:"referral"});function w(e){if(!e)return f.DIRECT;let t=m(e.utmSource);if(t){let r=O(t);if(De.includes(r))return f.GOOGLE;if(Le.includes(r))return f.META;if(ke.includes(r))return f.LINKEDIN;if(ve.includes(r))return f.MICROSOFT}if(m(e.fbclid))return f.META;if(m(e.gclid)||m(e.gbraid)||m(e.wbraid))return f.GOOGLE;if(m(e.liFatId))return f.LINKEDIN;if(m(e.msclkid))return f.MICROSOFT;if(te(t))return f.AI_ASSISTANT;if(t||m(e.utmMedium)||m(e.utmCampaign)||m(e.utmContent)||m(e.utmTerm))return f.OTHER;let o=re(e.referrer);return o?ne(o)?f.AI_ASSISTANT:Pe(o)?f.ORGANIC_SEARCH:Fe.some(r=>oe(o,r))?f.ORGANIC_SOCIAL:f.REFERRAL:f.DIRECT}function x(e){if(!e)return"";let t=te(m(e.utmSource));if(t)return t;let n=re(e.referrer);return n?ne(n):""}function te(e){if(!e)return"";let t=O(e);for(let[n,o]of ee)if(O(n)===t||o.some(r=>O(r)===t))return n;return""}function ne(e){for(let[t,n]of ee)if(n.some(o=>oe(e,o)))return t;return""}function Pe(e){return xe.includes(e)?!0:Ue.some(t=>{if(!e.startsWith(`${t}.`))return!1;let n=e.slice(t.length+1).split(".");return n.length===1||n.length===2&&(n[0]==="co"||n[0]==="com")})}function oe(e,t){return e===t||e.endsWith(`.${t}`)}function re(e){let t=m(e);if(!t)return"";try{let n=new URL(/^[a-z][a-z0-9+.-]*:\/\//i.test(t)?t:`https://${t}`).hostname.toLowerCase();return n.startsWith("www.")?n.slice(4):n}catch{return""}}function O(e){return String(e).toLowerCase().replace(/[^\p{L}\p{N}]/gu,"")}function m(e){return String(e??"").trim()}var U=Object.freeze(["AT","BE","BG","HR","CY","CZ","DK","EE","FI","FR","DE","GR","HU","IE","IT","LV","LT","LU","MT","NL","PL","PT","RO","SK","SI","ES","SE","IS","LI","NO","GB","CH"]);function Me(e){let t=typeof e=="string"?e.trim().toUpperCase():"";return t.length!==2||t==="XX"||t==="T1"?!0:U.includes(t)}var A="webority_cookie_consent",ae="webority-consent-change",se=365,i={initialized:!1,requiresOptIn:!0,strictOptIn:!1,adStorage:!0,cookieDays:se,cookieDomain:null,regionCookie:null,region:null,saved:null},ce=["eea","other"],F=new Set;function $e(e){let t=e?.strictOptIn??!1;if(typeof t!="boolean")throw new Error("@webority/analytics: initConsent strictOptIn must be true or false, or left out.");if(t){if(e.requiresOptIn!==void 0&&e.requiresOptIn!==!0)throw new Error("@webority/analytics: initConsent strictOptIn asks every visitor to opt in, so requiresOptIn must be true or left out.")}else if(typeof e?.requiresOptIn!="boolean")throw new Error("@webority/analytics: initConsent needs requiresOptIn (true or false), decided from the visitor's country.");if(e.cookieDomain!==void 0&&(typeof e.cookieDomain!="string"||!e.cookieDomain.trim()))throw new Error('@webority/analytics: initConsent cookieDomain must be a domain such as ".example.com", or left out.');if(e.cookieDays!==void 0&&!(Number.isInteger(e.cookieDays)&&e.cookieDays>0))throw new Error("@webority/analytics: initConsent cookieDays must be a whole number of days above zero, or left out.");if(e.adStorage!==void 0&&typeof e.adStorage!="boolean")throw new Error("@webority/analytics: initConsent adStorage must be true or false, or left out.");if(e.regionCookie!==void 0&&(typeof e.regionCookie!="string"||!/^[\w.-]+$/.test(e.regionCookie)))throw new Error('@webority/analytics: initConsent regionCookie must be a cookie name such as "wui_region", or left out.');i.initialized=!0,i.strictOptIn=t,i.requiresOptIn=t||e.requiresOptIn,i.adStorage=e.adStorage??!t,i.cookieDays=e.cookieDays??se,i.cookieDomain=e.cookieDomain?.trim()??null,i.regionCookie=e.regionCookie??null,i.region=i.regionCookie?Ve(i.regionCookie):null;let{saved:n,entryCount:o}=qe();i.saved=n,i.cookieDomain&&o>1&&n&&pe(n),Be(),Ke(),i.saved?$(i.saved):de()&&fe()}function Ge(e){if(M("setConsentRegion"),!ce.includes(e))throw new Error('@webority/analytics: setConsentRegion needs "eea" or "other".');let t=d();if(i.region=e,i.saved)return;let n=d();t.analytics===n.analytics&&t.functional===n.functional&&t.marketing===n.marketing||(fe(),le(n))}function E(){return i.initialized}function ue(){return i.strictOptIn}function P(){return i.adStorage}function d(){M("getConsent");let e=i.saved;if(e)return{essential:!0,analytics:e.analytics,functional:e.functional,marketing:e.marketing,decided:!0};if(de())return{essential:!0,analytics:!0,functional:!0,marketing:!1,decided:!1};let t=!i.requiresOptIn;return{essential:!0,analytics:t,functional:t,marketing:t,decided:!1}}function ze(e){M("saveConsent");let t={essential:!0,analytics:e?.analytics===!0,functional:e?.functional===!0,marketing:e?.marketing===!0,timestamp:new Date().toISOString()};pe(t),i.saved=t,$(t),le(d())}function y(e){return F.add(e),()=>F.delete(e)}function le(e){for(let t of F)try{t(e)}catch(n){queueMicrotask(()=>{throw n})}typeof window?.dispatchEvent=="function"&&typeof CustomEvent=="function"&&window.dispatchEvent(new CustomEvent(ae,{detail:e}))}function M(e){if(!i.initialized)throw new Error(`@webority/analytics: call initConsent before ${e}.`)}function I(){window.dataLayer=window.dataLayer||[],window.dataLayer.push(arguments)}function Be(){if(i.strictOptIn){I("consent","default",{ad_storage:"denied",ad_user_data:"denied",ad_personalization:"denied",analytics_storage:"denied",functionality_storage:"denied",personalization_storage:"denied",security_storage:"granted",wait_for_update:500});return}I("consent","default",{ad_storage:"denied",ad_user_data:"denied",ad_personalization:"denied",analytics_storage:"denied",functionality_storage:"denied",personalization_storage:"denied",security_storage:"granted",wait_for_update:500,region:[...U]});let e=i.adStorage?"granted":"denied";I("consent","default",{ad_storage:e,ad_user_data:e,ad_personalization:e,analytics_storage:"granted",functionality_storage:"granted",personalization_storage:"granted",security_storage:"granted"})}function Ke(){I("set","ads_data_redaction",!0),I("set","url_passthrough",!0)}function de(){return i.requiresOptIn&&!i.strictOptIn&&i.region==="other"}function fe(){let e=d();$(e,e.analytics&&i.adStorage)}function $(e,t=e.marketing&&i.adStorage){let n=o=>o?"granted":"denied";I("consent","update",{analytics_storage:n(e.analytics),functionality_storage:n(e.functional),personalization_storage:n(e.functional),ad_storage:n(t),ad_user_data:n(t),ad_personalization:n(t)})}function qe(){let e=`${A}=`,t=(document.cookie||"").split(";").map(o=>o.trim()).filter(o=>o.startsWith(e)),n=t.map(o=>He(o.slice(e.length))).filter(Boolean);return{saved:We(n),entryCount:t.length}}function Ve(e){let t=`${e}=`,o=(document.cookie||"").split(";").map(r=>r.trim()).find(r=>r.startsWith(t))?.slice(t.length);return ce.includes(o)?o:null}function He(e){try{let t=JSON.parse(decodeURIComponent(e));return!t||typeof t!="object"?null:{essential:!0,analytics:t.analytics===!0,functional:t.functional===!0,marketing:t.marketing===!0,timestamp:t.timestamp??null}}catch{return null}}function We(e){if(e.length===0)return null;let t=e.map(o=>typeof o.timestamp=="string"?Date.parse(o.timestamp):Number.NaN);if(t.some(Number.isNaN))return e.at(-1);let n=0;for(let o=1;o<e.length;o++)t[o]>=t[n]&&(n=o);return e[n]}function pe(e){let t=typeof e.timestamp=="string"?Date.parse(e.timestamp):Number.NaN,n=(Number.isNaN(t)?Date.now():t)+i.cookieDays*24*60*60*1e3,o=window.location?.protocol==="https:"?";Secure":"";i.cookieDomain&&ie(`${A}=;expires=Thu, 01 Jan 1970 00:00:00 GMT;max-age=0;path=/;SameSite=Lax${o}`);let r=i.cookieDomain?`;domain=${i.cookieDomain}`:"";ie(`${A}=${encodeURIComponent(JSON.stringify(e))};expires=${new Date(n).toUTCString()};path=/${r};SameSite=Lax${o}`)}function ie(e){document.cookie=e}var N="webority_attribution",je=2160*60*60*1e3,Ye=200,G=500,Xe=Object.freeze({utm_source:"utmSource",utm_medium:"utmMedium",utm_campaign:"utmCampaign",utm_content:"utmContent",utm_term:"utmTerm",gclid:"gclid",gbraid:"gbraid",wbraid:"wbraid",fbclid:"fbclid",msclkid:"msclkid",li_fat_id:"liFatId"}),me=!1;function Je(){Ee("captureAttribution"),tt();let e=Ze();if(!e)return;let t=V(z());_e(z(),{firstTouch:t?.firstTouch??e,lastTouch:e}),Qe(e)}function Qe(e){let t={event:"acquisition_touch",acquisition_channel:w(e)};e.aiSource&&(t.ai_source=e.aiSource),window.dataLayer=window.dataLayer||[],window.dataLayer.push(t)}function q(){return Ee("getAttribution"),V(z())}function Ze(){let e=new URLSearchParams(window.location.search),t={};for(let[r,c]of Object.entries(Xe)){let s=b(e.get(r),Ye);s&&(t[c]=s)}let n=b(e.get("referrer"),G)||et();if(n&&(t.referrer=n),Object.keys(t).length===0)return null;let o=x(t);return o&&(t.aiSource=o),t.landingPage=b(window.location.pathname,G),t.capturedDateTimeUtc=new Date().toISOString(),t}function et(){let e=document.referrer;if(!e)return"";try{return new URL(e).hostname===window.location.hostname?"":b(e,G)}catch{return""}}function tt(){me||(me=!0,y(e=>{let t=e.marketing?K():B(),n=e.marketing?B():K(),o=V(t);nt(t),o&&_e(n,o)}))}function z(){return d().marketing?B():K()}function B(){try{return window.localStorage}catch{return null}}function K(){try{return window.sessionStorage}catch{return null}}function V(e){try{let t=e?.getItem(N);if(!t)return null;let n=JSON.parse(t),o=ge(n?.firstTouch),r=ge(n?.lastTouch);return!o&&!r?(e.removeItem(N),null):{firstTouch:o??r,lastTouch:r??o}}catch{return null}}function _e(e,t){try{e?.setItem(N,JSON.stringify(t))}catch{}}function nt(e){try{e?.removeItem(N)}catch{}}function ge(e){if(!e||typeof e!="object")return null;let t=Date.parse(e.capturedDateTimeUtc);return Number.isFinite(t)&&Date.now()-t<=je?e:null}function b(e,t){let n=String(e??"").trim();return n?n.slice(0,t):""}function Ee(e){if(!E())throw new Error(`@webority/analytics: call initConsent before ${e}.`)}function ye(e,t){return import("./web-vitals-G2NSUBUS.js").then(n=>n.startWebVitals(e,t)).catch(()=>{})}var ot=["scroll","mousemove","touchstart","keydown","pointerdown"];function R(e){let t=!1,n=()=>{t||(t=!0,e())};for(let o of ot)window.addEventListener(o,n,{once:!0,passive:!0});document.readyState==="complete"?setTimeout(n,1500):window.addEventListener("load",()=>setTimeout(n,1500),{once:!0})}var a=Object.freeze({SIGNUP_STARTED:"signup_started",SIGNUP_COMPLETED:"signup_completed",LOGIN_SUCCEEDED:"login_succeeded",ONBOARDING_STARTED:"onboarding_started",ONBOARDING_STEP_COMPLETED:"onboarding_step_completed",ONBOARDING_COMPLETED:"onboarding_completed",SUBSCRIPTION_ACTIVATED:"subscription_activated",SUBSCRIPTION_CANCELLED:"subscription_cancelled",PAYMENT_SUCCEEDED:"payment_succeeded",PAYMENT_FAILED:"payment_failed",FEEDBACK_SUBMITTED:"feedback_submitted",LEAD_SUBMITTED:"lead_submitted",LEAD_QUALIFIED:"lead_qualified",LEAD_WON:"lead_won",WHATSAPP_CLICK:"whatsapp_click",CALCULATOR_USE:"calculator_use",PHONE_CLICK:"phone_click",DEMO_BOOKED:"demo_booked",CONTACT_SUBMITTED:"contact_submitted",TRIAL_START_CLICK:"trial_start_click",SAMPLE_REPORT_DOWNLOAD:"sample_report_download",REPORT_VERIFIED:"report_verified",CONTENT_ENGAGED:"content_engaged",EMAIL_CLICK:"email_click",PAGE_NOT_FOUND:"page_not_found",CHAT_OPENED:"chat_opened",TOUR_STARTED:"tour_started",TOUR_STEP_VIEWED:"tour_step_viewed",TOUR_COMPLETED:"tour_completed",TOUR_SKIPPED:"tour_skipped"}),Gt=Object.freeze({signupStarted:a.SIGNUP_STARTED,signupCompleted:a.SIGNUP_COMPLETED,loginSucceeded:a.LOGIN_SUCCEEDED,onboardingStarted:a.ONBOARDING_STARTED,onboardingStepCompleted:a.ONBOARDING_STEP_COMPLETED,onboardingCompleted:a.ONBOARDING_COMPLETED,subscriptionActivated:a.SUBSCRIPTION_ACTIVATED,subscriptionCancelled:a.SUBSCRIPTION_CANCELLED,paymentSucceeded:a.PAYMENT_SUCCEEDED,paymentFailed:a.PAYMENT_FAILED,feedbackSubmitted:a.FEEDBACK_SUBMITTED,leadSubmitted:a.LEAD_SUBMITTED,leadQualified:a.LEAD_QUALIFIED,leadWon:a.LEAD_WON,whatsappClick:a.WHATSAPP_CLICK,calculatorUse:a.CALCULATOR_USE,phoneClick:a.PHONE_CLICK,demoBooked:a.DEMO_BOOKED,contactSubmitted:a.CONTACT_SUBMITTED,trialStartClick:a.TRIAL_START_CLICK,sampleReportDownload:a.SAMPLE_REPORT_DOWNLOAD,reportVerified:a.REPORT_VERIFIED,contentEngaged:a.CONTENT_ENGAGED,emailClick:a.EMAIL_CLICK,pageNotFound:a.PAGE_NOT_FOUND,chatOpened:a.CHAT_OPENED,tourStarted:a.TOUR_STARTED,tourStepViewed:a.TOUR_STEP_VIEWED,tourCompleted:a.TOUR_COMPLETED,tourSkipped:a.TOUR_SKIPPED}),Ce=/^[a-z][a-z0-9]*(_[a-z0-9]+)*$/;var rt=50;function Se(){let e=new Set(Object.values(a)),t=new Set;return{warned:t,register(n){for(let o of n){if(!Ce.test(o))throw new Error(`@webority/analytics: invalid event name "${o}". Expected snake_case.`);e.add(o)}},accept(n,o){return e.has(n)?!0:(it(t,n,o),!1)}}}function it(e,t,n){if(e.has(t))return;e.size<rt&&e.add(t);let o=`@webority/analytics: event "${t}" is not registered, so it was dropped. Call registerEvents() first.`;if(typeof n?.warn=="function"){n.warn(o);return}if(typeof n?.info=="function"){n.info(o);return}console.warn(o)}var D=Se(),l={config:null,posthogInstance:null,posthogInitPromise:null,warnedUnregisteredEvents:D.warned,pendingIdentify:null};function Ht(e){l.config=e,l.posthogInstance=null,l.posthogInitPromise=null,l.pendingIdentify=null}function at(){let e=l.config;return e?!!(e.enabled&&e.clientKey&&e.environment!=="Local"):!1}function L(){return E()&&d().analytics}function Ie(){return at()&&L()}var k=new Set,he=new WeakSet,Te=null;function Yt(e){let t=H();if(!t)return!1;try{return t.isFeatureEnabled(e)===!0}catch{return!1}}function Xt(e){let t=H();if(!t)return null;try{return t.getFeatureFlag(e)??null}catch{return null}}function Jt(e){k.add(e);let t=H();return(!t||Te===t)&&queueMicrotask(()=>{k.has(e)&&Oe(e)}),()=>k.delete(e)}function we(e){l.config?.featureFlags!==!0||he.has(e)||typeof e.onFeatureFlags!="function"||(he.add(e),e.onFeatureFlags(()=>{Te=e;for(let t of[...k])Oe(t)}))}function H(){return l.config?.featureFlags!==!0||!Ie()?null:l.posthogInstance??null}function Oe(e){try{e()}catch(t){queueMicrotask(()=>{throw t})}}var st=new Set(["token","code","email","access_token","id_token","state","session_state","password","search","q","query"]),ct=/(?:access_token|id_token|session_state|token|code|state|email|password)=/i,ut=["$current_url","$referrer","$pathname","$initial_current_url","$initial_referrer","$initial_pathname","$session_entry_url","$session_entry_referrer","$session_entry_pathname"],lt=4,dt=5,ft=6;function h(e){if(typeof e!="string")return e;let t=e.indexOf("#"),n=t===-1?e:e.slice(0,t),o=t===-1||ct.test(e.slice(t))?"":e.slice(t),r=n.indexOf("?");if(r===-1)return n+o;let c=n.slice(r+1).split("&"),s=c.filter(_=>!st.has(_t(_))).map(gt);if(s.length===c.length&&s.every((_,T)=>_===c[T]))return n+o;let p=n.slice(0,r),S=s.filter(_=>_!=="").join("&");return(S?`${p}?${S}`:p)+o}function Ae(e){if(!e||typeof e!="object")return e;let t=e.properties;for(let r of[t,e.$set,e.$set_once,t?.$set,t?.$set_once])mt(r);let n=t?.$heatmap_data;if(n&&typeof n=="object"){let r={};for(let[c,s]of Object.entries(n)){let p=h(c);r[p]=r[p]?r[p].concat(s):s}t.$heatmap_data=r}if(t&&typeof t=="object"){for(let[r,c]of Object.entries(t))if(r.startsWith("$web_vitals_")&&r.endsWith("_event")&&c&&typeof c=="object")for(let s of["$current_url","navigationURL"])typeof c[s]=="string"&&(c[s]=h(c[s]))}let o=t?.$snapshot_data;if(e.event==="$snapshot"&&o&&typeof o=="object")for(let r of Array.isArray(o)?o:[o])pt(r);return e}function pt(e){let t=e?.data;if(!(!t||typeof t!="object")){if(e.type===lt)v(t,["href"]);else if(e.type===dt)v(t.payload,["href"]);else if(e.type===ft&&Array.isArray(t.payload?.requests))for(let n of t.payload.requests)v(n,["name","url"])}}function v(e,t){if(!(!e||typeof e!="object"))for(let n of t)typeof e[n]=="string"&&(e[n]=h(e[n]))}function mt(e){v(e,ut)}function gt(e){let t=e.indexOf("=");if(t===-1)return e;let n;try{n=decodeURIComponent(e.slice(t+1).replace(/\+/g," "))}catch{return e}if(!n.startsWith("/")&&!/^https?:\/\//i.test(n))return e;let o=h(n);return o===n?e:`${e.slice(0,t)}=${encodeURIComponent(o)}`}function _t(e){let t=e.split("=",1)[0].replace(/\+/g," ");try{return decodeURIComponent(t).toLowerCase()}catch{return t.toLowerCase()}}async function on(){if(l.posthogInstance)return l.posthogInstance;if(l.posthogInitPromise)return l.posthogInitPromise;let e=l.config;return l.posthogInitPromise=import("posthog-js").then(t=>{let n=t.default??t,o=W(j(e),L(),e.featureFlags===!0);return n.init(e.clientKey,o),n.register({product:e.product,surface:e.surface,environment:e.environment}),L()?n.opt_in_capturing({captureEventName:!1}):n.opt_out_capturing(),l.posthogInstance=n,we(n),n}).catch(t=>{throw l.posthogInitPromise=null,t}),l.posthogInitPromise}function W(e,t,n=!1){return t?e:{...e,opt_out_capturing_by_default:!0,...n?{advanced_disable_feature_flags_on_first_load:!0}:{}}}function j(e){let t=e.sessionRecording??{enabled:!1},n={api_host:e.host,autocapture:!1,capture_pageview:"history_change",cookieless_mode:"on_reject",person_profiles:"identified_only",persistence:"localStorage+cookie",cross_subdomain_cookie:!0,disable_session_recording:!t.enabled,enable_heatmaps:e.heatmaps===!0,capture_exceptions:e.captureExceptions===!0,capture_performance:{web_vitals:!1},disable_surveys:!0,disable_product_tours:!0,disable_conversations:!0,advanced_disable_feature_flags:!(t.enabled||e.featureFlags===!0),before_send:Ae};return t.enabled&&(n.session_recording={maskAllInputs:t.maskAllInputs??!0,...t.maskTextSelector?{maskTextSelector:t.maskTextSelector}:{},maskCapturedNetworkRequestFn:o=>({...o,name:h(o.name)}),recordBody:!1,recordHeaders:!1}),n}var Et=()=>import("posthog-js"),yt=100,u={config:null,posthog:null,pending:[],failed:!1,loadPosthog:Et,startVitals:ye,stopFollowingConsent:null};function Ct({host:e,clientKey:t,product:n,surface:o,environment:r,enabled:c=!0,sessionRecording:s,heatmaps:p=!1,captureExceptions:S=!1,webVitals:_=!1}={}){if(!E())throw new Error("@webority/analytics: call initConsent before initSiteAnalytics.");let T=Z(_);!c||!e||!t||r==="Local"||u.config||(u.config={host:e,clientKey:t,product:n,surface:o,environment:r,sessionRecording:s,heatmaps:p,captureExceptions:S,webVitals:T},u.stopFollowingConsent=y(C=>It(C.analytics)),R(()=>{Promise.resolve().then(u.loadPosthog).then(C=>St(C.default??C)).catch(()=>{u.failed=!0,u.pending=[]})}))}function St(e){let t=u.config,n=d().analytics;e.init(t.clientKey,W(ht(t),n)),e.register({product:t.product,surface:t.surface,environment:t.environment}),n?e.opt_in_capturing({captureEventName:!1}):e.opt_out_capturing(),u.posthog=e;let o=u.pending;u.pending=[];for(let[r,c]of o)Y(e,r,c);t.webVitals&&u.startVitals(t.webVitals,(r,c)=>Y(e,r,c))}function It(e){u.posthog&&(e?u.posthog.opt_in_capturing():u.posthog.opt_out_capturing())}function ht(e){return{...j({host:e.host,sessionRecording:e.sessionRecording,heatmaps:e.heatmaps,captureExceptions:e.captureExceptions,webVitals:e.webVitals}),capture_pageview:!0}}function be(e,t){let n=u.config;if(!n)return;let o={...t,product:n.product,surface:n.surface,environment:n.environment};u.posthog?Y(u.posthog,e,o):!u.failed&&u.pending.length<yt&&u.pending.push([e,o])}function Y(e,t,n){try{e.capture(t,n)}catch{}}function Tt(e,t={}){if(!D.accept(e))return!1;let n=d().analytics,o=q(),r={...t};for(let[c,s]of[["first",o?.firstTouch],["last",o?.lastTouch]])s&&(r[`${c}_touch_channel`]=w(s),s.aiSource&&(r[`${c}_touch_ai_source`]=s.aiSource));return be(e,r),n?(window.dataLayer=window.dataLayer||[],window.dataLayer.push({...r,event:e}),!0):!1}function wt(e){D.register(e)}var Ot="https://www.googletagmanager.com/gtm.js",At=3e3,bt=100,g={loaded:!1,clarityId:null,clarityLoaded:!1,cancelClaritySchedule:null};function Nt(e={}){if(!E())throw new Error("@webority/analytics: call initConsent before loadTags.");if(g.loaded)return;g.loaded=!0;let{gtmId:t,gtmUrl:n=Ot,clarityId:o,ahrefsKey:r}=e;if(typeof n!="string"||n.trim()==="")throw new Error("@webority/analytics: gtmUrl must be a non-empty string.");let c=ue();if(r){let s=()=>J("https://analytics.ahrefs.com/analytics.js",{"data-key":r});c?Ne(p=>p.analytics,s):s()}if(t){let s=P(),p=Q=>Q.analytics||Q.marketing&&s,S=()=>{window.dataLayer=window.dataLayer||[],window.dataLayer.push({"gtm.start":Date.now(),event:"gtm.js"}),J(`${n}${n.includes("?")?"&":"?"}id=${encodeURIComponent(t)}`)},_=d(),T=_.decided&&p(_)?Rt:R,C=()=>T(S);c?Ne(p,C):C()}o&&(g.clarityId=o,d().analytics&&Dt(),y(s=>{s.analytics&&!g.clarityLoaded?X():g.clarityLoaded&&Re(s)}))}function Ne(e,t){if(e(d())){t();return}let n=y(o=>{e(o)&&(n(),t())})}function Rt(e){document.readyState==="loading"?document.addEventListener("DOMContentLoaded",e,{once:!0}):e()}function Dt(){let e=()=>{window.scrollY>bt&&X()};window.addEventListener("scroll",e,{passive:!0});let t=setTimeout(X,At);g.cancelClaritySchedule=()=>{window.removeEventListener("scroll",e),clearTimeout(t)}}function X(){g.cancelClaritySchedule?.(),g.cancelClaritySchedule=null,!(g.clarityLoaded||!g.clarityId)&&(g.clarityLoaded=!0,window.clarity=window.clarity||function(){window.clarity.q=window.clarity.q||[],window.clarity.q.push(arguments)},Re(d()),J(`https://www.clarity.ms/tag/${encodeURIComponent(g.clarityId)}`,{crossorigin:"anonymous"}))}function Re(e){window.clarity("consentv2",{ad_Storage:e.marketing&&P()?"granted":"denied",analytics_Storage:e.analytics?"granted":"denied"})}function J(e,t={}){let n=document.createElement("script");n.async=!0,n.src=e;for(let[o,r]of Object.entries(t))n.setAttribute(o,r);document.head.appendChild(n)}export{Me as a,A as b,ae as c,$e as d,Ge as e,E as f,d as g,ze as h,y as i,a as j,Gt as k,D as l,l as m,Ht as n,at as o,L as p,Yt as q,Xt as r,Jt as s,on as t,f as u,w as v,x as w,Je as x,q as y,Ct as z,Tt as A,wt as B,Nt as C};
|