@jitsu/js 1.10.3 → 1.11.0-canary.20251124.3ff4617
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/jitsu-no-ext.cjs.js +129 -85
- package/dist/jitsu-no-ext.es.js +129 -85
- package/dist/jitsu.cjs.js +130 -100
- package/dist/jitsu.es.js +130 -100
- package/dist/web/p.js.txt +130 -105
- package/package.json +21 -18
- package/LICENSE +0 -21
package/dist/jitsu.es.js
CHANGED
|
@@ -183,9 +183,6 @@ function insertTags(code, event, opts = {}) {
|
|
|
183
183
|
}
|
|
184
184
|
}
|
|
185
185
|
}
|
|
186
|
-
//This weird code is used to mask eval() usage.
|
|
187
|
-
//Although the code can be executed in the browser, some server side bundlers (like Vercel) fails
|
|
188
|
-
//the build if a direct reference to eval() is found.
|
|
189
186
|
let al = "al";
|
|
190
187
|
let ev = "ve".split("").reverse().join("");
|
|
191
188
|
const execF = globalThis[ev + al];
|
|
@@ -315,14 +312,11 @@ const gtmPlugin = {
|
|
|
315
312
|
}
|
|
316
313
|
yield initGtmIfNeeded(config, payload);
|
|
317
314
|
const dataLayer = window[config.dataLayerName || "dataLayer"];
|
|
318
|
-
//traits could be in both nodes, context.traits takes precedence
|
|
319
315
|
const traits = Object.assign(Object.assign({}, ((payload === null || payload === void 0 ? void 0 : payload.traits) || {})), (((_a = payload === null || payload === void 0 ? void 0 : payload.context) === null || _a === void 0 ? void 0 : _a.traits) || {}));
|
|
320
|
-
//remove properties that defined separately
|
|
321
316
|
const idsFromTraits = omit(traits, "id", "userId", "user_id", "anonymousId", "userId");
|
|
322
317
|
if (debug) {
|
|
323
318
|
console.debug("GTM plugin will be applied to following payload", payload);
|
|
324
319
|
}
|
|
325
|
-
// See https://developers.google.com/tag-platform/tag-manager/server-side/common-event-data
|
|
326
320
|
const userData = {
|
|
327
321
|
email_address: traits.email,
|
|
328
322
|
};
|
|
@@ -446,7 +440,6 @@ const ga4Plugin = {
|
|
|
446
440
|
};
|
|
447
441
|
const ids = Object.assign(Object.assign({}, (payload.userId ? { user_id: payload.userId, userId: payload.userId } : {})), (payload.anonymousId ? { anonymousId: payload.anonymousId } : {}));
|
|
448
442
|
if (payload.userId) {
|
|
449
|
-
// @ts-ignore
|
|
450
443
|
gtag("set", { user_id: payload.userId });
|
|
451
444
|
}
|
|
452
445
|
switch (payload.type) {
|
|
@@ -457,19 +450,16 @@ const ga4Plugin = {
|
|
|
457
450
|
}
|
|
458
451
|
const { properties: pageProperties, context } = payload;
|
|
459
452
|
const pageEvent = Object.assign({ page_location: pageProperties.url, page_title: pageProperties.title, page_path: pageProperties.path, page_hash: pageProperties.hash, page_search: pageProperties.search, page_referrer: (_b = (_a = context === null || context === void 0 ? void 0 : context.page) === null || _a === void 0 ? void 0 : _a.referrer) !== null && _b !== void 0 ? _b : "" }, ids);
|
|
460
|
-
// @ts-ignore
|
|
461
453
|
gtag("event", "page_view", pageEvent);
|
|
462
454
|
break;
|
|
463
455
|
case "track":
|
|
464
456
|
const { properties: trackProperties } = payload;
|
|
465
457
|
const trackEvent = Object.assign(Object.assign({}, trackProperties), ids);
|
|
466
|
-
// @ts-ignore
|
|
467
458
|
gtag("event", payload.event, trackEvent);
|
|
468
459
|
break;
|
|
469
460
|
case "identify":
|
|
470
461
|
const { traits } = payload;
|
|
471
462
|
const identifyEvent = Object.assign(Object.assign({}, traits), ids);
|
|
472
|
-
// @ts-ignore
|
|
473
463
|
gtag("event", "identify", identifyEvent);
|
|
474
464
|
break;
|
|
475
465
|
}
|
|
@@ -490,17 +480,13 @@ function initGa4IfNeeded(config, payload) {
|
|
|
490
480
|
setGa4State("loading");
|
|
491
481
|
const dlName = config.dataLayerName || "dataLayer";
|
|
492
482
|
const dlParam = dlName !== "dataLayer" ? "&l=" + dlName : "";
|
|
493
|
-
// to work with both GA4 and GTM
|
|
494
483
|
const tagId = config.measurementIds;
|
|
495
484
|
window[dlName] = window[dlName] || [];
|
|
496
485
|
const gtag = function () {
|
|
497
486
|
window[dlName].push(arguments);
|
|
498
487
|
};
|
|
499
|
-
// @ts-ignore
|
|
500
488
|
gtag("js", new Date());
|
|
501
|
-
gtag(
|
|
502
|
-
// @ts-ignore
|
|
503
|
-
"config", tagId, Object.assign(Object.assign({}, (payload.userId ? { user_id: payload.userId } : {})), (!config.autoPageView ? { send_page_view: false } : {})));
|
|
489
|
+
gtag("config", tagId, Object.assign(Object.assign({}, (payload.userId ? { user_id: payload.userId } : {})), (!config.autoPageView ? { send_page_view: false } : {})));
|
|
504
490
|
loadScript(buildTagUrl(), { query: `id=${tagId}${dlParam}`, www: true })
|
|
505
491
|
.then(() => {
|
|
506
492
|
setGa4State("loaded");
|
|
@@ -548,11 +534,86 @@ const internalDestinationPlugins = {
|
|
|
548
534
|
[logrocketPlugin.id]: logrocketPlugin,
|
|
549
535
|
};
|
|
550
536
|
|
|
551
|
-
|
|
537
|
+
var name = "@jitsu/js";
|
|
538
|
+
var version = "1.11.0-canary.20251124.3ff4617";
|
|
539
|
+
var description = "";
|
|
540
|
+
var author = "Jitsu Dev Team <dev@jitsu.com>";
|
|
541
|
+
var main = "dist/jitsu.cjs.js";
|
|
542
|
+
var files = [
|
|
543
|
+
"dist"
|
|
544
|
+
];
|
|
545
|
+
var module = "dist/jitsu.es.js";
|
|
546
|
+
var types = "dist/jitsu.d.ts";
|
|
547
|
+
var publishConfig = {
|
|
548
|
+
access: "public"
|
|
549
|
+
};
|
|
550
|
+
var license = "MIT";
|
|
551
|
+
var scripts = {
|
|
552
|
+
clean: "rm -rf ./dist ./compiled",
|
|
553
|
+
"test:node": "vitest run",
|
|
554
|
+
"test:playwright": "playwright test ./__tests__/playwright",
|
|
555
|
+
test: "pnpm run test:node",
|
|
556
|
+
"//typecheck": "Build is required because types are generated during build",
|
|
557
|
+
typecheck: "pnpm run build",
|
|
558
|
+
build: "pnpm run clean && tsc -p . && rollup -c",
|
|
559
|
+
"//build-deps": "Required by turbo ^build-deps - builds dist/ for workspace packages that import this",
|
|
560
|
+
"build-deps": "pnpm run build"
|
|
561
|
+
};
|
|
562
|
+
var devDependencies = {
|
|
563
|
+
"@jitsu/common-config": "workspace:*",
|
|
564
|
+
tslib: "catalog:",
|
|
565
|
+
"@playwright/test": "1.39.0",
|
|
566
|
+
"@rollup/plugin-commonjs": "^28.0.2",
|
|
567
|
+
"rollup-plugin-dts": "^6.2.1",
|
|
568
|
+
"@rollup/plugin-json": "^5.0.1",
|
|
569
|
+
"@rollup/plugin-multi-entry": "^6.0.0",
|
|
570
|
+
"@rollup/plugin-node-resolve": "^16.0.0",
|
|
571
|
+
"@rollup/plugin-replace": "^5.0.1",
|
|
572
|
+
"@rollup/plugin-terser": "^0.1.0",
|
|
573
|
+
"@segment/analytics-next": "^1.75.0",
|
|
574
|
+
"@types/chalk": "^2.2.0",
|
|
575
|
+
"@types/node": "catalog:",
|
|
576
|
+
"@vitest/ui": "catalog:",
|
|
577
|
+
chalk: "^4.1.2",
|
|
578
|
+
"cookie-parser": "^1.4.7",
|
|
579
|
+
ejs: "^3.1.8",
|
|
580
|
+
express: "^4.21.2",
|
|
581
|
+
"node-fetch-commonjs": "^3.3.2",
|
|
582
|
+
"node-forge": "^1.3.1",
|
|
583
|
+
"raw-loader": "^4.0.2",
|
|
584
|
+
rollup: "^3.29.5",
|
|
585
|
+
typescript: "catalog:",
|
|
586
|
+
vitest: "catalog:",
|
|
587
|
+
jsondiffpatch: "workspace:*"
|
|
588
|
+
};
|
|
589
|
+
var peerDependencies = {
|
|
590
|
+
"@jitsu/protocols": "workspace:*"
|
|
591
|
+
};
|
|
592
|
+
var dependencies = {
|
|
593
|
+
analytics: "0.8.9"
|
|
594
|
+
};
|
|
595
|
+
var pkg = {
|
|
596
|
+
name: name,
|
|
597
|
+
version: version,
|
|
598
|
+
description: description,
|
|
599
|
+
author: author,
|
|
600
|
+
main: main,
|
|
601
|
+
files: files,
|
|
602
|
+
module: module,
|
|
603
|
+
types: types,
|
|
604
|
+
publishConfig: publishConfig,
|
|
605
|
+
license: license,
|
|
606
|
+
"private": false,
|
|
607
|
+
scripts: scripts,
|
|
608
|
+
devDependencies: devDependencies,
|
|
609
|
+
peerDependencies: peerDependencies,
|
|
610
|
+
dependencies: dependencies
|
|
611
|
+
};
|
|
612
|
+
|
|
613
|
+
const jitsuVersion = pkg.version ;
|
|
552
614
|
const jitsuLibraryName = "@jitsu/js";
|
|
553
615
|
|
|
554
|
-
const publicSuffixes = "myshopify.com,ac,com.ac,edu.ac,gov.ac,net.ac,mil.ac,org.ac,ad,nom.ad,ae,co.ae,net.ae,org.ae,sch.ae,ac.ae,gov.ae,mil.ae,aero,af,gov.af,com.af,org.af,net.af,edu.af,ag,com.ag,org.ag,net.ag,co.ag,nom.ag,ai,off.ai,com.ai,net.ai,org.ai,al,com.al,edu.al,gov.al,mil.al,net.al,org.al,am,co.am,com.am,commune.am,net.am,org.am,ao,ed.ao,gv.ao,og.ao,co.ao,pb.ao,it.ao,aq,ar,bet.ar,com.ar,coop.ar,edu.ar,gob.ar,gov.ar,int.ar,mil.ar,musica.ar,mutual.ar,net.ar,org.ar,senasa.ar,tur.ar,arpa,e164.arpa,in-addr.arpa,ip6.arpa,iris.arpa,uri.arpa,urn.arpa,as,gov.as,asia,at,ac.at,co.at,gv.at,or.at,sth.ac.at,au,com.au,net.au,org.au,edu.au,gov.au,asn.au,id.au,act.au,nsw.au,nt.au,qld.au,sa.au,tas.au,vic.au,wa.au,aw,com.aw,ax,az,com.az,net.az,int.az,gov.az,org.az,edu.az,info.az,pp.az,mil.az,name.az,pro.az,biz.az,ba,com.ba,edu.ba,gov.ba,mil.ba,net.ba,org.ba,bb,biz.bb,co.bb,com.bb,edu.bb,gov.bb,info.bb,net.bb,org.bb,store.bb,tv.bb,bd,be,ac.be,bf,gov.bf,bg,a.bg,b.bg,c.bg,d.bg,e.bg,f.bg,g.bg,h.bg,i.bg,j.bg,k.bg,l.bg,m.bg,n.bg,o.bg,p.bg,q.bg,r.bg,s.bg,t.bg,u.bg,v.bg,w.bg,x.bg,y.bg,z.bg,0.bg,1.bg,2.bg,3.bg,4.bg,5.bg,6.bg,7.bg,8.bg,9.bg,bh,com.bh,edu.bh,net.bh,org.bh,gov.bh,bi,co.bi,com.bi,edu.bi,or.bi,org.bi,biz,bj,africa.bj,agro.bj,architectes.bj,assur.bj,avocats.bj,co.bj,com.bj,eco.bj,econo.bj,edu.bj,info.bj,loisirs.bj,money.bj,net.bj,org.bj,ote.bj,resto.bj,restaurant.bj,tourism.bj,univ.bj,bm,com.bm,edu.bm,gov.bm,net.bm,org.bm,bn,com.bn,edu.bn,gov.bn,net.bn,org.bn,bo,com.bo,edu.bo,gob.bo,int.bo,org.bo,net.bo,mil.bo,tv.bo,web.bo,br,9guacu.br,abc.br,adm.br,adv.br,agr.br,aju.br,am.br,anani.br,aparecida.br,app.br,arq.br,art.br,ato.br,b.br,barueri.br,belem.br,bhz.br,bib.br,bio.br,blog.br,bmd.br,boavista.br,bsb.br,campinagrande.br,campinas.br,caxias.br,cim.br,cng.br,cnt.br,com.br,contagem.br,coop.br,coz.br,cri.br,cuiaba.br,curitiba.br,def.br,des.br,det.br,dev.br,ecn.br,eco.br,edu.br,emp.br,enf.br,eng.br,esp.br,etc.br,eti.br,far.br,feira.br,flog.br,floripa.br,fm.br,fnd.br,fortal.br,fot.br,foz.br,fst.br,g12.br,geo.br,ggf.br,goiania.br,gov.br,gru.br,imb.br,ind.br,inf.br,jab.br,jampa.br,jdf.br,joinville.br,jor.br,jus.br,leg.br,lel.br,log.br,londrina.br,macapa.br,maceio.br,manaus.br,maringa.br,mat.br,med.br,mil.br,morena.br,mp.br,mus.br,natal.br,net.br,niteroi.br,nom.br,not.br,ntr.br,odo.br,ong.br,org.br,osasco.br,palmas.br,poa.br,ppg.br,pro.br,psc.br,psi.br,pvh.br,qsl.br,radio.br,rec.br,recife.br,rep.br,ribeirao.br,rio.br,riobranco.br,riopreto.br,salvador.br,sampa.br,santamaria.br,santoandre.br,saobernardo.br,saogonca.br,seg.br,sjc.br,slg.br,slz.br,sorocaba.br,srv.br,taxi.br,tc.br,tec.br,teo.br,the.br,tmp.br,trd.br,tur.br,tv.br,udi.br,vet.br,vix.br,vlog.br,wiki.br,zlg.br,bs,com.bs,net.bs,org.bs,edu.bs,gov.bs,bt,com.bt,edu.bt,gov.bt,net.bt,org.bt,bv,bw,co.bw,org.bw,by,gov.by,mil.by,com.by,of.by,bz,com.bz,net.bz,org.bz,edu.bz,gov.bz,ca,ab.ca,bc.ca,mb.ca,nb.ca,nf.ca,nl.ca,ns.ca,nt.ca,nu.ca,on.ca,pe.ca,qc.ca,sk.ca,yk.ca,gc.ca,cat,cc,cd,gov.cd,cf,cg,ch,ci,org.ci,or.ci,com.ci,co.ci,edu.ci,ed.ci,ac.ci,net.ci,go.ci,asso.ci,aéroport.ci,int.ci,presse.ci,md.ci,gouv.ci,ck,cl,co.cl,gob.cl,gov.cl,mil.cl,cm,co.cm,com.cm,gov.cm,net.cm,cn,ac.cn,com.cn,edu.cn,gov.cn,net.cn,org.cn,mil.cn,co,arts.co,com.co,edu.co,firm.co,gov.co,info.co,int.co,mil.co,net.co,nom.co,org.co,rec.co,web.co,com,coop,cr,ac.cr,co.cr,ed.cr,fi.cr,go.cr,or.cr,sa.cr,cu,com.cu,edu.cu,org.cu,net.cu,gov.cu,inf.cu,cv,com.cv,edu.cv,int.cv,nome.cv,org.cv,cw,com.cw,edu.cw,net.cw,org.cw,cx,gov.cx,cy,ac.cy,biz.cy,com.cy,ekloges.cy,gov.cy,ltd.cy,mil.cy,net.cy,org.cy,press.cy,pro.cy,tm.cy,cz,de,dj,dk,dm,com.dm,net.dm,org.dm,edu.dm,gov.dm,do,art.do,com.do,edu.do,gob.do,gov.do,mil.do,net.do,org.do,sld.do,web.do,dz,art.dz,asso.dz,com.dz,edu.dz,gov.dz,org.dz,net.dz,pol.dz,soc.dz,tm.dz,ec,com.ec,info.ec,net.ec,fin.ec,k12.ec,med.ec,pro.ec,org.ec,edu.ec,gov.ec,gob.ec,mil.ec,edu,ee,edu.ee,gov.ee,riik.ee,lib.ee,med.ee,com.ee,pri.ee,aip.ee,org.ee,fie.ee,eg,com.eg,edu.eg,eun.eg,gov.eg,mil.eg,name.eg,net.eg,org.eg,sci.eg,er,es,com.es,nom.es,org.es,gob.es,edu.es,et,com.et,gov.et,org.et,edu.et,biz.et,name.et,info.et,net.et,eu,fi,aland.fi,fj,ac.fj,biz.fj,com.fj,gov.fj,info.fj,mil.fj,name.fj,net.fj,org.fj,pro.fj,fk,com.fm,edu.fm,net.fm,org.fm,fm,fo,fr,asso.fr,com.fr,gouv.fr,nom.fr,prd.fr,tm.fr,aeroport.fr,avocat.fr,avoues.fr,cci.fr,chambagri.fr,chirurgiens-dentistes.fr,experts-comptables.fr,geometre-expert.fr,greta.fr,huissier-justice.fr,medecin.fr,notaires.fr,pharmacien.fr,port.fr,veterinaire.fr,ga,gb,edu.gd,gov.gd,gd,ge,com.ge,edu.ge,gov.ge,org.ge,mil.ge,net.ge,pvt.ge,gf,gg,co.gg,net.gg,org.gg,gh,com.gh,edu.gh,gov.gh,org.gh,mil.gh,gi,com.gi,ltd.gi,gov.gi,mod.gi,edu.gi,org.gi,gl,co.gl,com.gl,edu.gl,net.gl,org.gl,gm,gn,ac.gn,com.gn,edu.gn,gov.gn,org.gn,net.gn,gov,gp,com.gp,net.gp,mobi.gp,edu.gp,org.gp,asso.gp,gq,gr,com.gr,edu.gr,net.gr,org.gr,gov.gr,gs,gt,com.gt,edu.gt,gob.gt,ind.gt,mil.gt,net.gt,org.gt,gu,com.gu,edu.gu,gov.gu,guam.gu,info.gu,net.gu,org.gu,web.gu,gw,gy,co.gy,com.gy,edu.gy,gov.gy,net.gy,org.gy,hk,com.hk,edu.hk,gov.hk,idv.hk,net.hk,org.hk,hm,hn,com.hn,edu.hn,org.hn,net.hn,mil.hn,gob.hn,hr,iz.hr,from.hr,name.hr,com.hr,ht,com.ht,shop.ht,firm.ht,info.ht,adult.ht,net.ht,pro.ht,org.ht,med.ht,art.ht,coop.ht,pol.ht,asso.ht,edu.ht,rel.ht,gouv.ht,perso.ht,hu,co.hu,info.hu,org.hu,priv.hu,sport.hu,tm.hu,2000.hu,agrar.hu,bolt.hu,casino.hu,city.hu,erotica.hu,erotika.hu,film.hu,forum.hu,games.hu,hotel.hu,ingatlan.hu,jogasz.hu,konyvelo.hu,lakas.hu,media.hu,news.hu,reklam.hu,sex.hu,shop.hu,suli.hu,szex.hu,tozsde.hu,utazas.hu,video.hu,id,ac.id,biz.id,co.id,desa.id,go.id,mil.id,my.id,net.id,or.id,ponpes.id,sch.id,web.id,ie,gov.ie,il,ac.il,co.il,gov.il,idf.il,k12.il,muni.il,net.il,org.il,im,ac.im,co.im,com.im,ltd.co.im,net.im,org.im,plc.co.im,tt.im,tv.im,in,5g.in,6g.in,ac.in,ai.in,am.in,bihar.in,biz.in,business.in,ca.in,cn.in,co.in,com.in,coop.in,cs.in,delhi.in,dr.in,edu.in,er.in,firm.in,gen.in,gov.in,gujarat.in,ind.in,info.in,int.in,internet.in,io.in,me.in,mil.in,net.in,nic.in,org.in,pg.in,post.in,pro.in,res.in,travel.in,tv.in,uk.in,up.in,us.in,info,int,eu.int,io,com.io,iq,gov.iq,edu.iq,mil.iq,com.iq,org.iq,net.iq,ir,ac.ir,co.ir,gov.ir,id.ir,net.ir,org.ir,sch.ir,is,net.is,com.is,edu.is,gov.is,org.is,int.is,it,gov.it,edu.it,je,co.je,net.je,org.je,jm,jo,com.jo,org.jo,net.jo,edu.jo,sch.jo,gov.jo,mil.jo,name.jo,jobs,jp,ac.jp,ad.jp,co.jp,ed.jp,go.jp,gr.jp,lg.jp,ne.jp,or.jp,ke,ac.ke,co.ke,go.ke,info.ke,me.ke,mobi.ke,ne.ke,or.ke,sc.ke,kg,org.kg,net.kg,com.kg,edu.kg,gov.kg,mil.kg,kh,ki,edu.ki,biz.ki,net.ki,org.ki,gov.ki,info.ki,com.ki,km,org.km,nom.km,gov.km,prd.km,tm.km,edu.km,mil.km,ass.km,com.km,kn,net.kn,org.kn,edu.kn,gov.kn,kp,com.kp,edu.kp,gov.kp,org.kp,rep.kp,tra.kp,kr,ac.kr,co.kr,es.kr,go.kr,hs.kr,kg.kr,mil.kr,ms.kr,ne.kr,or.kr,pe.kr,re.kr,sc.kr,kw,com.kw,edu.kw,emb.kw,gov.kw,ind.kw,net.kw,org.kw,ky,com.ky,edu.ky,net.ky,org.ky,kz,org.kz,edu.kz,net.kz,gov.kz,mil.kz,com.kz,la,int.la,net.la,info.la,edu.la,gov.la,per.la,com.la,org.la,lb,com.lb,edu.lb,gov.lb,net.lb,org.lb,lc,com.lc,net.lc,co.lc,org.lc,edu.lc,gov.lc,li,lk,gov.lk,sch.lk,net.lk,int.lk,com.lk,org.lk,edu.lk,ngo.lk,soc.lk,web.lk,ltd.lk,assn.lk,grp.lk,hotel.lk,ac.lk,lr,com.lr,edu.lr,gov.lr,org.lr,net.lr,ls,ac.ls,biz.ls,co.ls,edu.ls,gov.ls,info.ls,net.ls,org.ls,sc.ls,lt,gov.lt,lu,lv,com.lv,edu.lv,gov.lv,org.lv,mil.lv,id.lv,net.lv,asn.lv,conf.lv,ly,com.ly,net.ly,gov.ly,plc.ly,edu.ly,sch.ly,med.ly,org.ly,id.ly,ma,co.ma,net.ma,gov.ma,org.ma,ac.ma,press.ma,mc,tm.mc,asso.mc,md,me,co.me,net.me,org.me,edu.me,ac.me,gov.me,its.me,priv.me,mg,org.mg,nom.mg,gov.mg,prd.mg,tm.mg,edu.mg,mil.mg,com.mg,co.mg,mh,mil,mk,com.mk,org.mk,net.mk,edu.mk,gov.mk,inf.mk,name.mk,ml,com.ml,edu.ml,gouv.ml,gov.ml,net.ml,org.ml,presse.ml,mm,mn,gov.mn,edu.mn,org.mn,mo,com.mo,net.mo,org.mo,edu.mo,gov.mo,mobi,mp,mq,mr,gov.mr,ms,com.ms,edu.ms,gov.ms,net.ms,org.ms,mt,com.mt,edu.mt,net.mt,org.mt,mu,com.mu,net.mu,org.mu,gov.mu,ac.mu,co.mu,or.mu,museum,mv,aero.mv,biz.mv,com.mv,coop.mv,edu.mv,gov.mv,info.mv,int.mv,mil.mv,museum.mv,name.mv,net.mv,org.mv,pro.mv,mw,ac.mw,biz.mw,co.mw,com.mw,coop.mw,edu.mw,gov.mw,int.mw,museum.mw,net.mw,org.mw,mx,com.mx,org.mx,gob.mx,edu.mx,net.mx,my,biz.my,com.my,edu.my,gov.my,mil.my,name.my,net.my,org.my,mz,ac.mz,adv.mz,co.mz,edu.mz,gov.mz,mil.mz,net.mz,org.mz,na,info.na,pro.na,name.na,school.na,or.na,dr.na,us.na,mx.na,ca.na,in.na,cc.na,tv.na,ws.na,mobi.na,co.na,com.na,org.na,name,nc,asso.nc,nom.nc,ne,net,nf,com.nf,net.nf,per.nf,rec.nf,web.nf,arts.nf,firm.nf,info.nf,other.nf,store.nf,ng,com.ng,edu.ng,gov.ng,i.ng,mil.ng,mobi.ng,name.ng,net.ng,org.ng,sch.ng,ni,ac.ni,biz.ni,co.ni,com.ni,edu.ni,gob.ni,in.ni,info.ni,int.ni,mil.ni,net.ni,nom.ni,org.ni,web.ni,nl,no,fhs.no,vgs.no,fylkesbibl.no,folkebibl.no,museum.no,idrett.no,priv.no,mil.no,stat.no,dep.no,kommune.no,herad.no,np,nr,biz.nr,info.nr,gov.nr,edu.nr,org.nr,net.nr,com.nr,nu,nz,ac.nz,co.nz,cri.nz,geek.nz,gen.nz,govt.nz,health.nz,iwi.nz,kiwi.nz,maori.nz,mil.nz,māori.nz,net.nz,org.nz,parliament.nz,school.nz,om,co.om,com.om,edu.om,gov.om,med.om,museum.om,net.om,org.om,pro.om,onion,org,pa,ac.pa,gob.pa,com.pa,org.pa,sld.pa,edu.pa,net.pa,ing.pa,abo.pa,med.pa,nom.pa,pe,edu.pe,gob.pe,nom.pe,mil.pe,org.pe,com.pe,net.pe,pf,com.pf,org.pf,edu.pf,pg,ph,com.ph,net.ph,org.ph,gov.ph,edu.ph,ngo.ph,mil.ph,i.ph,pk,com.pk,net.pk,edu.pk,org.pk,fam.pk,biz.pk,web.pk,gov.pk,gob.pk,gok.pk,gon.pk,gop.pk,gos.pk,info.pk,pl,com.pl,net.pl,org.pl,aid.pl,agro.pl,atm.pl,auto.pl,biz.pl,edu.pl,gmina.pl,gsm.pl,info.pl,mail.pl,miasta.pl,media.pl,mil.pl,nieruchomosci.pl,nom.pl,pc.pl,powiat.pl,priv.pl,realestate.pl,rel.pl,sex.pl,shop.pl,sklep.pl,sos.pl,szkola.pl,targi.pl,tm.pl,tourism.pl,travel.pl,turystyka.pl,pm,pn,gov.pn,co.pn,org.pn,edu.pn,net.pn,post,pr,com.pr,net.pr,org.pr,gov.pr,edu.pr,isla.pr,pro.pr,biz.pr,info.pr,name.pr,est.pr,prof.pr,ac.pr,pro,aaa.pro,aca.pro,acct.pro,avocat.pro,bar.pro,cpa.pro,eng.pro,jur.pro,law.pro,med.pro,recht.pro,ps,edu.ps,gov.ps,sec.ps,plo.ps,com.ps,org.ps,net.ps,pt,net.pt,gov.pt,org.pt,edu.pt,int.pt,publ.pt,com.pt,nome.pt,pw,co.pw,ne.pw,or.pw,ed.pw,go.pw,belau.pw,py,com.py,coop.py,edu.py,gov.py,mil.py,net.py,org.py,qa,com.qa,edu.qa,gov.qa,mil.qa,name.qa,net.qa,org.qa,sch.qa,re,asso.re,com.re,nom.re,ro,arts.ro,com.ro,firm.ro,info.ro,nom.ro,nt.ro,org.ro,rec.ro,store.ro,tm.ro,www.ro,rs,ac.rs,co.rs,edu.rs,gov.rs,in.rs,org.rs,ru,rw,ac.rw,co.rw,coop.rw,gov.rw,mil.rw,net.rw,org.rw,sa,com.sa,net.sa,org.sa,gov.sa,med.sa,pub.sa,edu.sa,sch.sa,sb,com.sb,edu.sb,gov.sb,net.sb,org.sb,sc,com.sc,gov.sc,net.sc,org.sc,edu.sc,sd,com.sd,net.sd,org.sd,edu.sd,med.sd,tv.sd,gov.sd,info.sd,se,a.se,ac.se,b.se,bd.se,brand.se,c.se,d.se,e.se,f.se,fh.se,fhsk.se,fhv.se,g.se,h.se,i.se,k.se,komforb.se,kommunalforbund.se,komvux.se,l.se,lanbib.se,m.se,n.se,naturbruksgymn.se,o.se,org.se,p.se,parti.se,pp.se,press.se,r.se,s.se,t.se,tm.se,u.se,w.se,x.se,y.se,z.se,sg,com.sg,net.sg,org.sg,gov.sg,edu.sg,per.sg,sh,com.sh,net.sh,gov.sh,org.sh,mil.sh,si,sj,sk,sl,com.sl,net.sl,edu.sl,gov.sl,org.sl,sm,sn,art.sn,com.sn,edu.sn,gouv.sn,org.sn,perso.sn,univ.sn,so,com.so,edu.so,gov.so,me.so,net.so,org.so,sr,ss,biz.ss,com.ss,edu.ss,gov.ss,me.ss,net.ss,org.ss,sch.ss,st,co.st,com.st,consulado.st,edu.st,embaixada.st,mil.st,net.st,org.st,principe.st,saotome.st,store.st,su,sv,com.sv,edu.sv,gob.sv,org.sv,red.sv,sx,gov.sx,sy,edu.sy,gov.sy,net.sy,mil.sy,com.sy,org.sy,sz,co.sz,ac.sz,org.sz,tc,td,tel,tf,tg,th,ac.th,co.th,go.th,in.th,mi.th,net.th,or.th,tj,ac.tj,biz.tj,co.tj,com.tj,edu.tj,go.tj,gov.tj,int.tj,mil.tj,name.tj,net.tj,nic.tj,org.tj,test.tj,web.tj,tk,tl,gov.tl,tm,com.tm,co.tm,org.tm,net.tm,nom.tm,gov.tm,mil.tm,edu.tm,tn,com.tn,ens.tn,fin.tn,gov.tn,ind.tn,info.tn,intl.tn,mincom.tn,nat.tn,net.tn,org.tn,perso.tn,tourism.tn,to,com.to,gov.to,net.to,org.to,edu.to,mil.to,tr,av.tr,bbs.tr,bel.tr,biz.tr,com.tr,dr.tr,edu.tr,gen.tr,gov.tr,info.tr,mil.tr,k12.tr,kep.tr,name.tr,net.tr,org.tr,pol.tr,tel.tr,tsk.tr,tv.tr,web.tr,nc.tr,tt,co.tt,com.tt,org.tt,net.tt,biz.tt,info.tt,pro.tt,int.tt,coop.tt,jobs.tt,mobi.tt,travel.tt,museum.tt,aero.tt,name.tt,gov.tt,edu.tt,tv,tw,edu.tw,gov.tw,mil.tw,com.tw,net.tw,org.tw,idv.tw,game.tw,ebiz.tw,club.tw,tz,ac.tz,co.tz,go.tz,hotel.tz,info.tz,me.tz,mil.tz,mobi.tz,ne.tz,or.tz,sc.tz,tv.tz,ua,com.ua,edu.ua,gov.ua,in.ua,net.ua,org.ua,ug,co.ug,or.ug,ac.ug,sc.ug,go.ug,ne.ug,com.ug,org.ug,uk,ac.uk,co.uk,gov.uk,ltd.uk,me.uk,net.uk,nhs.uk,org.uk,plc.uk,police.uk,us,dni.us,fed.us,isa.us,kids.us,nsn.us,ak.us,al.us,ar.us,as.us,az.us,ca.us,co.us,ct.us,dc.us,de.us,fl.us,ga.us,gu.us,hi.us,ia.us,id.us,il.us,in.us,ks.us,ky.us,la.us,ma.us,md.us,me.us,mi.us,mn.us,mo.us,ms.us,mt.us,nc.us,nd.us,ne.us,nh.us,nj.us,nm.us,nv.us,ny.us,oh.us,ok.us,or.us,pa.us,pr.us,ri.us,sc.us,sd.us,tn.us,tx.us,ut.us,vi.us,vt.us,va.us,wa.us,wi.us,wv.us,wy.us,uy,com.uy,edu.uy,gub.uy,mil.uy,net.uy,org.uy,uz,co.uz,com.uz,net.uz,org.uz,va,vc,com.vc,net.vc,org.vc,gov.vc,mil.vc,edu.vc,ve,arts.ve,bib.ve,co.ve,com.ve,e12.ve,edu.ve,firm.ve,gob.ve,gov.ve,info.ve,int.ve,mil.ve,net.ve,nom.ve,org.ve,rar.ve,rec.ve,store.ve,tec.ve,web.ve,vg,vi,co.vi,com.vi,k12.vi,net.vi,org.vi,vn,ac.vn,ai.vn,biz.vn,com.vn,edu.vn,gov.vn,health.vn,id.vn,info.vn,int.vn,io.vn,name.vn,net.vn,org.vn,pro.vn,vu,com.vu,edu.vu,net.vu,org.vu,wf,ws,com.ws,net.ws,org.ws,gov.ws,edu.ws,yt,ye,com.ye,edu.ye,gov.ye,net.ye,mil.ye,org.ye,ac.za,agric.za,alt.za,co.za,edu.za,gov.za,grondar.za,law.za,mil.za,net.za,ngo.za,nic.za,nis.za,nom.za,org.za,school.za,tm.za,web.za,zm,ac.zm,biz.zm,co.zm,com.zm,edu.zm,gov.zm,info.zm,mil.zm,net.zm,org.zm,sch.zm,zw,ac.zw,co.zw,gov.zw,mil.zw,org.zw".split(",");
|
|
555
|
-
//convert to Map
|
|
616
|
+
const publicSuffixes = "webflow.io,vercel.app,myshopify.com,ac,com.ac,edu.ac,gov.ac,net.ac,mil.ac,org.ac,ad,nom.ad,ae,co.ae,net.ae,org.ae,sch.ae,ac.ae,gov.ae,mil.ae,aero,af,gov.af,com.af,org.af,net.af,edu.af,ag,com.ag,org.ag,net.ag,co.ag,nom.ag,ai,off.ai,com.ai,net.ai,org.ai,al,com.al,edu.al,gov.al,mil.al,net.al,org.al,am,co.am,com.am,commune.am,net.am,org.am,ao,ed.ao,gv.ao,og.ao,co.ao,pb.ao,it.ao,aq,ar,bet.ar,com.ar,coop.ar,edu.ar,gob.ar,gov.ar,int.ar,mil.ar,musica.ar,mutual.ar,net.ar,org.ar,senasa.ar,tur.ar,arpa,e164.arpa,in-addr.arpa,ip6.arpa,iris.arpa,uri.arpa,urn.arpa,as,gov.as,asia,at,ac.at,co.at,gv.at,or.at,sth.ac.at,au,com.au,net.au,org.au,edu.au,gov.au,asn.au,id.au,act.au,nsw.au,nt.au,qld.au,sa.au,tas.au,vic.au,wa.au,aw,com.aw,ax,az,com.az,net.az,int.az,gov.az,org.az,edu.az,info.az,pp.az,mil.az,name.az,pro.az,biz.az,ba,com.ba,edu.ba,gov.ba,mil.ba,net.ba,org.ba,bb,biz.bb,co.bb,com.bb,edu.bb,gov.bb,info.bb,net.bb,org.bb,store.bb,tv.bb,bd,be,ac.be,bf,gov.bf,bg,a.bg,b.bg,c.bg,d.bg,e.bg,f.bg,g.bg,h.bg,i.bg,j.bg,k.bg,l.bg,m.bg,n.bg,o.bg,p.bg,q.bg,r.bg,s.bg,t.bg,u.bg,v.bg,w.bg,x.bg,y.bg,z.bg,0.bg,1.bg,2.bg,3.bg,4.bg,5.bg,6.bg,7.bg,8.bg,9.bg,bh,com.bh,edu.bh,net.bh,org.bh,gov.bh,bi,co.bi,com.bi,edu.bi,or.bi,org.bi,biz,bj,africa.bj,agro.bj,architectes.bj,assur.bj,avocats.bj,co.bj,com.bj,eco.bj,econo.bj,edu.bj,info.bj,loisirs.bj,money.bj,net.bj,org.bj,ote.bj,resto.bj,restaurant.bj,tourism.bj,univ.bj,bm,com.bm,edu.bm,gov.bm,net.bm,org.bm,bn,com.bn,edu.bn,gov.bn,net.bn,org.bn,bo,com.bo,edu.bo,gob.bo,int.bo,org.bo,net.bo,mil.bo,tv.bo,web.bo,br,9guacu.br,abc.br,adm.br,adv.br,agr.br,aju.br,am.br,anani.br,aparecida.br,app.br,arq.br,art.br,ato.br,b.br,barueri.br,belem.br,bhz.br,bib.br,bio.br,blog.br,bmd.br,boavista.br,bsb.br,campinagrande.br,campinas.br,caxias.br,cim.br,cng.br,cnt.br,com.br,contagem.br,coop.br,coz.br,cri.br,cuiaba.br,curitiba.br,def.br,des.br,det.br,dev.br,ecn.br,eco.br,edu.br,emp.br,enf.br,eng.br,esp.br,etc.br,eti.br,far.br,feira.br,flog.br,floripa.br,fm.br,fnd.br,fortal.br,fot.br,foz.br,fst.br,g12.br,geo.br,ggf.br,goiania.br,gov.br,gru.br,imb.br,ind.br,inf.br,jab.br,jampa.br,jdf.br,joinville.br,jor.br,jus.br,leg.br,lel.br,log.br,londrina.br,macapa.br,maceio.br,manaus.br,maringa.br,mat.br,med.br,mil.br,morena.br,mp.br,mus.br,natal.br,net.br,niteroi.br,nom.br,not.br,ntr.br,odo.br,ong.br,org.br,osasco.br,palmas.br,poa.br,ppg.br,pro.br,psc.br,psi.br,pvh.br,qsl.br,radio.br,rec.br,recife.br,rep.br,ribeirao.br,rio.br,riobranco.br,riopreto.br,salvador.br,sampa.br,santamaria.br,santoandre.br,saobernardo.br,saogonca.br,seg.br,sjc.br,slg.br,slz.br,sorocaba.br,srv.br,taxi.br,tc.br,tec.br,teo.br,the.br,tmp.br,trd.br,tur.br,tv.br,udi.br,vet.br,vix.br,vlog.br,wiki.br,zlg.br,bs,com.bs,net.bs,org.bs,edu.bs,gov.bs,bt,com.bt,edu.bt,gov.bt,net.bt,org.bt,bv,bw,co.bw,org.bw,by,gov.by,mil.by,com.by,of.by,bz,com.bz,net.bz,org.bz,edu.bz,gov.bz,ca,ab.ca,bc.ca,mb.ca,nb.ca,nf.ca,nl.ca,ns.ca,nt.ca,nu.ca,on.ca,pe.ca,qc.ca,sk.ca,yk.ca,gc.ca,cat,cc,cd,gov.cd,cf,cg,ch,ci,org.ci,or.ci,com.ci,co.ci,edu.ci,ed.ci,ac.ci,net.ci,go.ci,asso.ci,aéroport.ci,int.ci,presse.ci,md.ci,gouv.ci,ck,cl,co.cl,gob.cl,gov.cl,mil.cl,cm,co.cm,com.cm,gov.cm,net.cm,cn,ac.cn,com.cn,edu.cn,gov.cn,net.cn,org.cn,mil.cn,co,arts.co,com.co,edu.co,firm.co,gov.co,info.co,int.co,mil.co,net.co,nom.co,org.co,rec.co,web.co,com,coop,cr,ac.cr,co.cr,ed.cr,fi.cr,go.cr,or.cr,sa.cr,cu,com.cu,edu.cu,org.cu,net.cu,gov.cu,inf.cu,cv,com.cv,edu.cv,int.cv,nome.cv,org.cv,cw,com.cw,edu.cw,net.cw,org.cw,cx,gov.cx,cy,ac.cy,biz.cy,com.cy,ekloges.cy,gov.cy,ltd.cy,mil.cy,net.cy,org.cy,press.cy,pro.cy,tm.cy,cz,de,dj,dk,dm,com.dm,net.dm,org.dm,edu.dm,gov.dm,do,art.do,com.do,edu.do,gob.do,gov.do,mil.do,net.do,org.do,sld.do,web.do,dz,art.dz,asso.dz,com.dz,edu.dz,gov.dz,org.dz,net.dz,pol.dz,soc.dz,tm.dz,ec,com.ec,info.ec,net.ec,fin.ec,k12.ec,med.ec,pro.ec,org.ec,edu.ec,gov.ec,gob.ec,mil.ec,edu,ee,edu.ee,gov.ee,riik.ee,lib.ee,med.ee,com.ee,pri.ee,aip.ee,org.ee,fie.ee,eg,com.eg,edu.eg,eun.eg,gov.eg,mil.eg,name.eg,net.eg,org.eg,sci.eg,er,es,com.es,nom.es,org.es,gob.es,edu.es,et,com.et,gov.et,org.et,edu.et,biz.et,name.et,info.et,net.et,eu,fi,aland.fi,fj,ac.fj,biz.fj,com.fj,gov.fj,info.fj,mil.fj,name.fj,net.fj,org.fj,pro.fj,fk,com.fm,edu.fm,net.fm,org.fm,fm,fo,fr,asso.fr,com.fr,gouv.fr,nom.fr,prd.fr,tm.fr,aeroport.fr,avocat.fr,avoues.fr,cci.fr,chambagri.fr,chirurgiens-dentistes.fr,experts-comptables.fr,geometre-expert.fr,greta.fr,huissier-justice.fr,medecin.fr,notaires.fr,pharmacien.fr,port.fr,veterinaire.fr,ga,gb,edu.gd,gov.gd,gd,ge,com.ge,edu.ge,gov.ge,org.ge,mil.ge,net.ge,pvt.ge,gf,gg,co.gg,net.gg,org.gg,gh,com.gh,edu.gh,gov.gh,org.gh,mil.gh,gi,com.gi,ltd.gi,gov.gi,mod.gi,edu.gi,org.gi,gl,co.gl,com.gl,edu.gl,net.gl,org.gl,gm,gn,ac.gn,com.gn,edu.gn,gov.gn,org.gn,net.gn,gov,gp,com.gp,net.gp,mobi.gp,edu.gp,org.gp,asso.gp,gq,gr,com.gr,edu.gr,net.gr,org.gr,gov.gr,gs,gt,com.gt,edu.gt,gob.gt,ind.gt,mil.gt,net.gt,org.gt,gu,com.gu,edu.gu,gov.gu,guam.gu,info.gu,net.gu,org.gu,web.gu,gw,gy,co.gy,com.gy,edu.gy,gov.gy,net.gy,org.gy,hk,com.hk,edu.hk,gov.hk,idv.hk,net.hk,org.hk,hm,hn,com.hn,edu.hn,org.hn,net.hn,mil.hn,gob.hn,hr,iz.hr,from.hr,name.hr,com.hr,ht,com.ht,shop.ht,firm.ht,info.ht,adult.ht,net.ht,pro.ht,org.ht,med.ht,art.ht,coop.ht,pol.ht,asso.ht,edu.ht,rel.ht,gouv.ht,perso.ht,hu,co.hu,info.hu,org.hu,priv.hu,sport.hu,tm.hu,2000.hu,agrar.hu,bolt.hu,casino.hu,city.hu,erotica.hu,erotika.hu,film.hu,forum.hu,games.hu,hotel.hu,ingatlan.hu,jogasz.hu,konyvelo.hu,lakas.hu,media.hu,news.hu,reklam.hu,sex.hu,shop.hu,suli.hu,szex.hu,tozsde.hu,utazas.hu,video.hu,id,ac.id,biz.id,co.id,desa.id,go.id,mil.id,my.id,net.id,or.id,ponpes.id,sch.id,web.id,ie,gov.ie,il,ac.il,co.il,gov.il,idf.il,k12.il,muni.il,net.il,org.il,im,ac.im,co.im,com.im,ltd.co.im,net.im,org.im,plc.co.im,tt.im,tv.im,in,5g.in,6g.in,ac.in,ai.in,am.in,bihar.in,biz.in,business.in,ca.in,cn.in,co.in,com.in,coop.in,cs.in,delhi.in,dr.in,edu.in,er.in,firm.in,gen.in,gov.in,gujarat.in,ind.in,info.in,int.in,internet.in,io.in,me.in,mil.in,net.in,nic.in,org.in,pg.in,post.in,pro.in,res.in,travel.in,tv.in,uk.in,up.in,us.in,info,int,eu.int,io,com.io,iq,gov.iq,edu.iq,mil.iq,com.iq,org.iq,net.iq,ir,ac.ir,co.ir,gov.ir,id.ir,net.ir,org.ir,sch.ir,is,net.is,com.is,edu.is,gov.is,org.is,int.is,it,gov.it,edu.it,je,co.je,net.je,org.je,jm,jo,com.jo,org.jo,net.jo,edu.jo,sch.jo,gov.jo,mil.jo,name.jo,jobs,jp,ac.jp,ad.jp,co.jp,ed.jp,go.jp,gr.jp,lg.jp,ne.jp,or.jp,ke,ac.ke,co.ke,go.ke,info.ke,me.ke,mobi.ke,ne.ke,or.ke,sc.ke,kg,org.kg,net.kg,com.kg,edu.kg,gov.kg,mil.kg,kh,ki,edu.ki,biz.ki,net.ki,org.ki,gov.ki,info.ki,com.ki,km,org.km,nom.km,gov.km,prd.km,tm.km,edu.km,mil.km,ass.km,com.km,kn,net.kn,org.kn,edu.kn,gov.kn,kp,com.kp,edu.kp,gov.kp,org.kp,rep.kp,tra.kp,kr,ac.kr,co.kr,es.kr,go.kr,hs.kr,kg.kr,mil.kr,ms.kr,ne.kr,or.kr,pe.kr,re.kr,sc.kr,kw,com.kw,edu.kw,emb.kw,gov.kw,ind.kw,net.kw,org.kw,ky,com.ky,edu.ky,net.ky,org.ky,kz,org.kz,edu.kz,net.kz,gov.kz,mil.kz,com.kz,la,int.la,net.la,info.la,edu.la,gov.la,per.la,com.la,org.la,lb,com.lb,edu.lb,gov.lb,net.lb,org.lb,lc,com.lc,net.lc,co.lc,org.lc,edu.lc,gov.lc,li,lk,gov.lk,sch.lk,net.lk,int.lk,com.lk,org.lk,edu.lk,ngo.lk,soc.lk,web.lk,ltd.lk,assn.lk,grp.lk,hotel.lk,ac.lk,lr,com.lr,edu.lr,gov.lr,org.lr,net.lr,ls,ac.ls,biz.ls,co.ls,edu.ls,gov.ls,info.ls,net.ls,org.ls,sc.ls,lt,gov.lt,lu,lv,com.lv,edu.lv,gov.lv,org.lv,mil.lv,id.lv,net.lv,asn.lv,conf.lv,ly,com.ly,net.ly,gov.ly,plc.ly,edu.ly,sch.ly,med.ly,org.ly,id.ly,ma,co.ma,net.ma,gov.ma,org.ma,ac.ma,press.ma,mc,tm.mc,asso.mc,md,me,co.me,net.me,org.me,edu.me,ac.me,gov.me,its.me,priv.me,mg,org.mg,nom.mg,gov.mg,prd.mg,tm.mg,edu.mg,mil.mg,com.mg,co.mg,mh,mil,mk,com.mk,org.mk,net.mk,edu.mk,gov.mk,inf.mk,name.mk,ml,com.ml,edu.ml,gouv.ml,gov.ml,net.ml,org.ml,presse.ml,mm,mn,gov.mn,edu.mn,org.mn,mo,com.mo,net.mo,org.mo,edu.mo,gov.mo,mobi,mp,mq,mr,gov.mr,ms,com.ms,edu.ms,gov.ms,net.ms,org.ms,mt,com.mt,edu.mt,net.mt,org.mt,mu,com.mu,net.mu,org.mu,gov.mu,ac.mu,co.mu,or.mu,museum,mv,aero.mv,biz.mv,com.mv,coop.mv,edu.mv,gov.mv,info.mv,int.mv,mil.mv,museum.mv,name.mv,net.mv,org.mv,pro.mv,mw,ac.mw,biz.mw,co.mw,com.mw,coop.mw,edu.mw,gov.mw,int.mw,museum.mw,net.mw,org.mw,mx,com.mx,org.mx,gob.mx,edu.mx,net.mx,my,biz.my,com.my,edu.my,gov.my,mil.my,name.my,net.my,org.my,mz,ac.mz,adv.mz,co.mz,edu.mz,gov.mz,mil.mz,net.mz,org.mz,na,info.na,pro.na,name.na,school.na,or.na,dr.na,us.na,mx.na,ca.na,in.na,cc.na,tv.na,ws.na,mobi.na,co.na,com.na,org.na,name,nc,asso.nc,nom.nc,ne,net,nf,com.nf,net.nf,per.nf,rec.nf,web.nf,arts.nf,firm.nf,info.nf,other.nf,store.nf,ng,com.ng,edu.ng,gov.ng,i.ng,mil.ng,mobi.ng,name.ng,net.ng,org.ng,sch.ng,ni,ac.ni,biz.ni,co.ni,com.ni,edu.ni,gob.ni,in.ni,info.ni,int.ni,mil.ni,net.ni,nom.ni,org.ni,web.ni,nl,no,fhs.no,vgs.no,fylkesbibl.no,folkebibl.no,museum.no,idrett.no,priv.no,mil.no,stat.no,dep.no,kommune.no,herad.no,np,nr,biz.nr,info.nr,gov.nr,edu.nr,org.nr,net.nr,com.nr,nu,nz,ac.nz,co.nz,cri.nz,geek.nz,gen.nz,govt.nz,health.nz,iwi.nz,kiwi.nz,maori.nz,mil.nz,māori.nz,net.nz,org.nz,parliament.nz,school.nz,om,co.om,com.om,edu.om,gov.om,med.om,museum.om,net.om,org.om,pro.om,onion,org,pa,ac.pa,gob.pa,com.pa,org.pa,sld.pa,edu.pa,net.pa,ing.pa,abo.pa,med.pa,nom.pa,pe,edu.pe,gob.pe,nom.pe,mil.pe,org.pe,com.pe,net.pe,pf,com.pf,org.pf,edu.pf,pg,ph,com.ph,net.ph,org.ph,gov.ph,edu.ph,ngo.ph,mil.ph,i.ph,pk,com.pk,net.pk,edu.pk,org.pk,fam.pk,biz.pk,web.pk,gov.pk,gob.pk,gok.pk,gon.pk,gop.pk,gos.pk,info.pk,pl,com.pl,net.pl,org.pl,aid.pl,agro.pl,atm.pl,auto.pl,biz.pl,edu.pl,gmina.pl,gsm.pl,info.pl,mail.pl,miasta.pl,media.pl,mil.pl,nieruchomosci.pl,nom.pl,pc.pl,powiat.pl,priv.pl,realestate.pl,rel.pl,sex.pl,shop.pl,sklep.pl,sos.pl,szkola.pl,targi.pl,tm.pl,tourism.pl,travel.pl,turystyka.pl,pm,pn,gov.pn,co.pn,org.pn,edu.pn,net.pn,post,pr,com.pr,net.pr,org.pr,gov.pr,edu.pr,isla.pr,pro.pr,biz.pr,info.pr,name.pr,est.pr,prof.pr,ac.pr,pro,aaa.pro,aca.pro,acct.pro,avocat.pro,bar.pro,cpa.pro,eng.pro,jur.pro,law.pro,med.pro,recht.pro,ps,edu.ps,gov.ps,sec.ps,plo.ps,com.ps,org.ps,net.ps,pt,net.pt,gov.pt,org.pt,edu.pt,int.pt,publ.pt,com.pt,nome.pt,pw,co.pw,ne.pw,or.pw,ed.pw,go.pw,belau.pw,py,com.py,coop.py,edu.py,gov.py,mil.py,net.py,org.py,qa,com.qa,edu.qa,gov.qa,mil.qa,name.qa,net.qa,org.qa,sch.qa,re,asso.re,com.re,nom.re,ro,arts.ro,com.ro,firm.ro,info.ro,nom.ro,nt.ro,org.ro,rec.ro,store.ro,tm.ro,www.ro,rs,ac.rs,co.rs,edu.rs,gov.rs,in.rs,org.rs,ru,rw,ac.rw,co.rw,coop.rw,gov.rw,mil.rw,net.rw,org.rw,sa,com.sa,net.sa,org.sa,gov.sa,med.sa,pub.sa,edu.sa,sch.sa,sb,com.sb,edu.sb,gov.sb,net.sb,org.sb,sc,com.sc,gov.sc,net.sc,org.sc,edu.sc,sd,com.sd,net.sd,org.sd,edu.sd,med.sd,tv.sd,gov.sd,info.sd,se,a.se,ac.se,b.se,bd.se,brand.se,c.se,d.se,e.se,f.se,fh.se,fhsk.se,fhv.se,g.se,h.se,i.se,k.se,komforb.se,kommunalforbund.se,komvux.se,l.se,lanbib.se,m.se,n.se,naturbruksgymn.se,o.se,org.se,p.se,parti.se,pp.se,press.se,r.se,s.se,t.se,tm.se,u.se,w.se,x.se,y.se,z.se,sg,com.sg,net.sg,org.sg,gov.sg,edu.sg,per.sg,sh,com.sh,net.sh,gov.sh,org.sh,mil.sh,si,sj,sk,sl,com.sl,net.sl,edu.sl,gov.sl,org.sl,sm,sn,art.sn,com.sn,edu.sn,gouv.sn,org.sn,perso.sn,univ.sn,so,com.so,edu.so,gov.so,me.so,net.so,org.so,sr,ss,biz.ss,com.ss,edu.ss,gov.ss,me.ss,net.ss,org.ss,sch.ss,st,co.st,com.st,consulado.st,edu.st,embaixada.st,mil.st,net.st,org.st,principe.st,saotome.st,store.st,su,sv,com.sv,edu.sv,gob.sv,org.sv,red.sv,sx,gov.sx,sy,edu.sy,gov.sy,net.sy,mil.sy,com.sy,org.sy,sz,co.sz,ac.sz,org.sz,tc,td,tel,tf,tg,th,ac.th,co.th,go.th,in.th,mi.th,net.th,or.th,tj,ac.tj,biz.tj,co.tj,com.tj,edu.tj,go.tj,gov.tj,int.tj,mil.tj,name.tj,net.tj,nic.tj,org.tj,test.tj,web.tj,tk,tl,gov.tl,tm,com.tm,co.tm,org.tm,net.tm,nom.tm,gov.tm,mil.tm,edu.tm,tn,com.tn,ens.tn,fin.tn,gov.tn,ind.tn,info.tn,intl.tn,mincom.tn,nat.tn,net.tn,org.tn,perso.tn,tourism.tn,to,com.to,gov.to,net.to,org.to,edu.to,mil.to,tr,av.tr,bbs.tr,bel.tr,biz.tr,com.tr,dr.tr,edu.tr,gen.tr,gov.tr,info.tr,mil.tr,k12.tr,kep.tr,name.tr,net.tr,org.tr,pol.tr,tel.tr,tsk.tr,tv.tr,web.tr,nc.tr,tt,co.tt,com.tt,org.tt,net.tt,biz.tt,info.tt,pro.tt,int.tt,coop.tt,jobs.tt,mobi.tt,travel.tt,museum.tt,aero.tt,name.tt,gov.tt,edu.tt,tv,tw,edu.tw,gov.tw,mil.tw,com.tw,net.tw,org.tw,idv.tw,game.tw,ebiz.tw,club.tw,tz,ac.tz,co.tz,go.tz,hotel.tz,info.tz,me.tz,mil.tz,mobi.tz,ne.tz,or.tz,sc.tz,tv.tz,ua,com.ua,edu.ua,gov.ua,in.ua,net.ua,org.ua,ug,co.ug,or.ug,ac.ug,sc.ug,go.ug,ne.ug,com.ug,org.ug,uk,ac.uk,co.uk,gov.uk,ltd.uk,me.uk,net.uk,nhs.uk,org.uk,plc.uk,police.uk,us,dni.us,fed.us,isa.us,kids.us,nsn.us,ak.us,al.us,ar.us,as.us,az.us,ca.us,co.us,ct.us,dc.us,de.us,fl.us,ga.us,gu.us,hi.us,ia.us,id.us,il.us,in.us,ks.us,ky.us,la.us,ma.us,md.us,me.us,mi.us,mn.us,mo.us,ms.us,mt.us,nc.us,nd.us,ne.us,nh.us,nj.us,nm.us,nv.us,ny.us,oh.us,ok.us,or.us,pa.us,pr.us,ri.us,sc.us,sd.us,tn.us,tx.us,ut.us,vi.us,vt.us,va.us,wa.us,wi.us,wv.us,wy.us,uy,com.uy,edu.uy,gub.uy,mil.uy,net.uy,org.uy,uz,co.uz,com.uz,net.uz,org.uz,va,vc,com.vc,net.vc,org.vc,gov.vc,mil.vc,edu.vc,ve,arts.ve,bib.ve,co.ve,com.ve,e12.ve,edu.ve,firm.ve,gob.ve,gov.ve,info.ve,int.ve,mil.ve,net.ve,nom.ve,org.ve,rar.ve,rec.ve,store.ve,tec.ve,web.ve,vg,vi,co.vi,com.vi,k12.vi,net.vi,org.vi,vn,ac.vn,ai.vn,biz.vn,com.vn,edu.vn,gov.vn,health.vn,id.vn,info.vn,int.vn,io.vn,name.vn,net.vn,org.vn,pro.vn,vu,com.vu,edu.vu,net.vu,org.vu,wf,ws,com.ws,net.ws,org.ws,gov.ws,edu.ws,yt,ye,com.ye,edu.ye,gov.ye,net.ye,mil.ye,org.ye,ac.za,agric.za,alt.za,co.za,edu.za,gov.za,grondar.za,law.za,mil.za,net.za,ngo.za,nic.za,nis.za,nom.za,org.za,school.za,tm.za,web.za,zm,ac.zm,biz.zm,co.zm,com.zm,edu.zm,gov.zm,info.zm,mil.zm,net.zm,org.zm,sch.zm,zw,ac.zw,co.zw,gov.zw,mil.zw,org.zw".split(",");
|
|
556
617
|
const _publicSuffixesMap = {};
|
|
557
618
|
publicSuffixes.forEach(tld => {
|
|
558
619
|
_publicSuffixesMap[tld] = true;
|
|
@@ -1039,7 +1100,6 @@ function create(options) {
|
|
|
1039
1100
|
return new DiffPatcher(options);
|
|
1040
1101
|
}
|
|
1041
1102
|
|
|
1042
|
-
/* global analytics */
|
|
1043
1103
|
var __awaiter$1 = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
1044
1104
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
1045
1105
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -1051,9 +1111,7 @@ var __awaiter$1 = (undefined && undefined.__awaiter) || function (thisArg, _argu
|
|
|
1051
1111
|
};
|
|
1052
1112
|
const diff = create();
|
|
1053
1113
|
const defaultConfig = {
|
|
1054
|
-
/* Your segment writeKey */
|
|
1055
1114
|
writeKey: null,
|
|
1056
|
-
/* Disable anonymous MTU */
|
|
1057
1115
|
host: null,
|
|
1058
1116
|
debug: false,
|
|
1059
1117
|
fetch: null,
|
|
@@ -1074,7 +1132,6 @@ const defaultConfig = {
|
|
|
1074
1132
|
consentCategories: {},
|
|
1075
1133
|
},
|
|
1076
1134
|
};
|
|
1077
|
-
// mergeConfig merges newConfig into currentConfig also making sure that all undefined values are replaced with defaultConfig values
|
|
1078
1135
|
const mergeConfig = (current, newConfig) => {
|
|
1079
1136
|
for (const key of Object.keys(defaultConfig)) {
|
|
1080
1137
|
const value = newConfig[key];
|
|
@@ -1084,16 +1141,12 @@ const mergeConfig = (current, newConfig) => {
|
|
|
1084
1141
|
}
|
|
1085
1142
|
else if (typeof value === "undefined") {
|
|
1086
1143
|
if (newConfig.hasOwnProperty("privacy") || !current.hasOwnProperty("privacy")) {
|
|
1087
|
-
// explicitly set to undefined - reset to default
|
|
1088
|
-
// or was not set at all - set to default
|
|
1089
1144
|
current.privacy = Object.assign(Object.assign({}, defaultConfig.privacy), { consentCategories: Object.assign({}, defaultConfig.privacy.consentCategories) });
|
|
1090
1145
|
}
|
|
1091
1146
|
}
|
|
1092
1147
|
}
|
|
1093
1148
|
else if (typeof value === "undefined") {
|
|
1094
1149
|
if (newConfig.hasOwnProperty(key) || !current.hasOwnProperty(key)) {
|
|
1095
|
-
// explicitly set to undefined - reset to default
|
|
1096
|
-
// or was not set at all - set to default
|
|
1097
1150
|
current[key] = defaultConfig[key];
|
|
1098
1151
|
}
|
|
1099
1152
|
}
|
|
@@ -1162,6 +1215,18 @@ function getClientIds(runtime, customCookieCapture) {
|
|
|
1162
1215
|
}, {});
|
|
1163
1216
|
return Object.assign(Object.assign({}, clientIds), getGa4Ids(runtime));
|
|
1164
1217
|
}
|
|
1218
|
+
function parseGa4SessionId(cookieValue) {
|
|
1219
|
+
if (typeof cookieValue !== "string") {
|
|
1220
|
+
return undefined;
|
|
1221
|
+
}
|
|
1222
|
+
if (cookieValue.startsWith("GA1") || cookieValue.startsWith("GS1")) {
|
|
1223
|
+
return cookieValue.split(".")[2];
|
|
1224
|
+
}
|
|
1225
|
+
else {
|
|
1226
|
+
const match = cookieValue.match(/^GS\d+\.\d+\.(?:[\w_-]+[$])*s(\d+)(?:$|[$])/);
|
|
1227
|
+
return match ? match[1] : undefined;
|
|
1228
|
+
}
|
|
1229
|
+
}
|
|
1165
1230
|
function getGa4Ids(runtime) {
|
|
1166
1231
|
var _a;
|
|
1167
1232
|
const allCookies = runtime.getCookies();
|
|
@@ -1170,14 +1235,11 @@ function getGa4Ids(runtime) {
|
|
|
1170
1235
|
const sessionIds = gaSessionCookies.length > 0
|
|
1171
1236
|
? Object.fromEntries(gaSessionCookies
|
|
1172
1237
|
.map(([key, value]) => {
|
|
1173
|
-
|
|
1238
|
+
const sessionId = parseGa4SessionId(value);
|
|
1239
|
+
if (!sessionId) {
|
|
1174
1240
|
return null;
|
|
1175
1241
|
}
|
|
1176
|
-
|
|
1177
|
-
if (parts.length < 3) {
|
|
1178
|
-
return null;
|
|
1179
|
-
}
|
|
1180
|
-
return [key.substring("_ga_".length), parts[2]];
|
|
1242
|
+
return [key.substring("_ga_".length), sessionId];
|
|
1181
1243
|
})
|
|
1182
1244
|
.filter(v => v !== null))
|
|
1183
1245
|
: undefined;
|
|
@@ -1240,11 +1302,9 @@ const cookieStorage = (cookieDomain, key2cookie) => {
|
|
|
1240
1302
|
const cookieName = key2cookie(key) || key;
|
|
1241
1303
|
const result = getCookie(cookieName);
|
|
1242
1304
|
if (key === "__anon_id") {
|
|
1243
|
-
//anonymous id must always be a string, so we don't parse it to preserve its exact value
|
|
1244
1305
|
return result;
|
|
1245
1306
|
}
|
|
1246
1307
|
if (typeof result === "undefined" && key === "__user_id") {
|
|
1247
|
-
//backward compatibility with old jitsu cookie. get user id if from traits
|
|
1248
1308
|
const traits = parse(getCookie(key2cookie("__user_traits") || "__eventn_id_usr")) || {};
|
|
1249
1309
|
return traits.internal_id || traits.user_id || traits.id || traits.userId;
|
|
1250
1310
|
}
|
|
@@ -1401,6 +1461,15 @@ const emptyRuntime = (config) => ({
|
|
|
1401
1461
|
return undefined;
|
|
1402
1462
|
},
|
|
1403
1463
|
});
|
|
1464
|
+
function deepCopy(o) {
|
|
1465
|
+
if (typeof o !== "object") {
|
|
1466
|
+
return o;
|
|
1467
|
+
}
|
|
1468
|
+
if (!o) {
|
|
1469
|
+
return o;
|
|
1470
|
+
}
|
|
1471
|
+
return JSON.parse(JSON.stringify(o));
|
|
1472
|
+
}
|
|
1404
1473
|
function deepMerge(target, source) {
|
|
1405
1474
|
if (typeof source !== "object" || source === null) {
|
|
1406
1475
|
return source;
|
|
@@ -1416,10 +1485,6 @@ function deepMerge(target, source) {
|
|
|
1416
1485
|
function isInBrowser() {
|
|
1417
1486
|
return typeof document !== "undefined" && typeof window !== "undefined";
|
|
1418
1487
|
}
|
|
1419
|
-
/**
|
|
1420
|
-
* Fixes a weird bug in analytics URL where path
|
|
1421
|
-
* of https://test.com becomes //test.com
|
|
1422
|
-
*/
|
|
1423
1488
|
function fixPath(path) {
|
|
1424
1489
|
if (path.indexOf("//") === 0 && path.lastIndexOf("/") === 1) {
|
|
1425
1490
|
return "/";
|
|
@@ -1427,16 +1492,30 @@ function fixPath(path) {
|
|
|
1427
1492
|
return path;
|
|
1428
1493
|
}
|
|
1429
1494
|
const hashRegex = /#.*$/;
|
|
1430
|
-
/**
|
|
1431
|
-
* for compatibility with path produced by analytics.js
|
|
1432
|
-
* @param url
|
|
1433
|
-
*/
|
|
1434
1495
|
function urlPath(url) {
|
|
1435
1496
|
const regex = /(http[s]?:\/\/)?([^\/\s]+\/)(.*)/g;
|
|
1436
1497
|
const matches = regex.exec(url);
|
|
1437
1498
|
const pathMatch = matches && matches[3] ? matches[3].split("?")[0].replace(hashRegex, "") : "";
|
|
1438
1499
|
return "/" + pathMatch;
|
|
1439
1500
|
}
|
|
1501
|
+
function canonicalUrl() {
|
|
1502
|
+
if (!isInBrowser())
|
|
1503
|
+
return;
|
|
1504
|
+
const tags = document.getElementsByTagName("link");
|
|
1505
|
+
for (var i = 0, tag; (tag = tags[i]); i++) {
|
|
1506
|
+
if (tag.getAttribute("rel") === "canonical") {
|
|
1507
|
+
return tag.getAttribute("href");
|
|
1508
|
+
}
|
|
1509
|
+
}
|
|
1510
|
+
}
|
|
1511
|
+
function analyticsJsUrl() {
|
|
1512
|
+
if (!isInBrowser())
|
|
1513
|
+
return;
|
|
1514
|
+
const canonical = canonicalUrl();
|
|
1515
|
+
if (!canonical)
|
|
1516
|
+
return window.location.href.replace(hashRegex, "");
|
|
1517
|
+
return canonical.match(/\?/) ? canonical : canonical + window.location.search;
|
|
1518
|
+
}
|
|
1440
1519
|
function adjustPayload(payload, config, storage, s2s) {
|
|
1441
1520
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
|
|
1442
1521
|
const runtime = config.runtime || (isInBrowser() ? windowRuntime(config) : emptyRuntime(config));
|
|
@@ -1445,7 +1524,10 @@ function adjustPayload(payload, config, storage, s2s) {
|
|
|
1445
1524
|
const query = parsedUrl ? parseQuery(parsedUrl.search) : {};
|
|
1446
1525
|
const properties = payload.properties || {};
|
|
1447
1526
|
if (payload.type === "page" && (properties.url || url)) {
|
|
1448
|
-
|
|
1527
|
+
let targetUrl = url || properties.url;
|
|
1528
|
+
if (properties.url && properties.url !== analyticsJsUrl()) {
|
|
1529
|
+
targetUrl = properties.url;
|
|
1530
|
+
}
|
|
1449
1531
|
properties.url = targetUrl.replace(hashRegex, "");
|
|
1450
1532
|
properties.path = fixPath(urlPath(targetUrl));
|
|
1451
1533
|
}
|
|
@@ -1501,15 +1583,18 @@ function processDestinations(destinations, method, originalEvent, debug, analyti
|
|
|
1501
1583
|
return __awaiter$1(this, void 0, void 0, function* () {
|
|
1502
1584
|
const promises = [];
|
|
1503
1585
|
for (const destination of destinations) {
|
|
1504
|
-
let newEvents = [
|
|
1586
|
+
let newEvents = [];
|
|
1505
1587
|
if (destination.newEvents) {
|
|
1506
1588
|
try {
|
|
1507
|
-
newEvents = destination.newEvents.map(e => e === "same" ? originalEvent : isDiff(e) ? diff.patch(originalEvent, e.__diff) : e);
|
|
1589
|
+
newEvents = destination.newEvents.map(e => e === "same" ? deepCopy(originalEvent) : isDiff(e) ? diff.patch(deepCopy(originalEvent), e.__diff) : e);
|
|
1508
1590
|
}
|
|
1509
1591
|
catch (e) {
|
|
1510
1592
|
console.error(`[JITSU] Error applying '${destination.id}' changes to event: ${e === null || e === void 0 ? void 0 : e.message}`, e);
|
|
1511
1593
|
}
|
|
1512
1594
|
}
|
|
1595
|
+
else {
|
|
1596
|
+
newEvents = [deepCopy(originalEvent)];
|
|
1597
|
+
}
|
|
1513
1598
|
const credentials = Object.assign(Object.assign({}, destination.credentials), destination.options);
|
|
1514
1599
|
if (destination.deviceOptions.type === "internal-plugin") {
|
|
1515
1600
|
const plugin = internalDestinationPlugins[destination.deviceOptions.name];
|
|
@@ -1601,7 +1686,6 @@ function getErrorHandler(opts) {
|
|
|
1601
1686
|
}
|
|
1602
1687
|
else if (configuredHandler === "rethrow") {
|
|
1603
1688
|
return (msg, ...args) => {
|
|
1604
|
-
//ignore args, not clear what to do with them
|
|
1605
1689
|
throw new Error(msg);
|
|
1606
1690
|
};
|
|
1607
1691
|
}
|
|
@@ -1624,7 +1708,6 @@ function send(method, payload, jitsuConfig, instance, store) {
|
|
|
1624
1708
|
const url = s2s ? `${jitsuConfig.host}/api/s/s2s/${method}` : `${jitsuConfig.host}/api/s/${method}`;
|
|
1625
1709
|
const fetch = jitsuConfig.fetch || globalThis.fetch;
|
|
1626
1710
|
if (!fetch) {
|
|
1627
|
-
//don't run it through error handler since error is critical and should be addressed
|
|
1628
1711
|
throw new Error("Please specify fetch function in jitsu plugin initialization, fetch isn't available in global scope");
|
|
1629
1712
|
}
|
|
1630
1713
|
const abortController = jitsuConfig.fetchTimeoutMs ? new AbortController() : undefined;
|
|
@@ -1680,7 +1763,6 @@ function send(method, payload, jitsuConfig, instance, store) {
|
|
|
1680
1763
|
console.warn(`[JITSU] ${payload.type} responded with list of ${responseJson.destinations.length} destinations. However, this code is running in server-to-server mode, so destinations will be ignored`, jitsuConfig.debug ? JSON.stringify(responseJson.destinations, null, 2) : undefined);
|
|
1681
1764
|
}
|
|
1682
1765
|
else {
|
|
1683
|
-
//double protection, ingest should not return destinations in s2s mode
|
|
1684
1766
|
if (isInBrowser()) {
|
|
1685
1767
|
if (jitsuConfig.debug) {
|
|
1686
1768
|
console.log(`[JITSU] Processing device destinations: `, JSON.stringify(responseJson.destinations, null, 2));
|
|
@@ -1693,23 +1775,14 @@ function send(method, payload, jitsuConfig, instance, store) {
|
|
|
1693
1775
|
});
|
|
1694
1776
|
}
|
|
1695
1777
|
const controllingTraits = ["$doNotSend"];
|
|
1696
|
-
/**
|
|
1697
|
-
* Remove all members of traits that controls identify/group behavior (see analytics.d.ts), and should not be recorded. Returns
|
|
1698
|
-
* copy of the object with these members removed.
|
|
1699
|
-
*
|
|
1700
|
-
* Do not modify traits object, but creates one
|
|
1701
|
-
* @param traits
|
|
1702
|
-
*/
|
|
1703
1778
|
function stripControllingTraits(traits) {
|
|
1704
1779
|
const res = Object.assign({}, traits);
|
|
1705
|
-
// see Traits definition in analytics.d.ts. We cannot define const here, so here's a little code duplication
|
|
1706
1780
|
for (const key of controllingTraits) {
|
|
1707
1781
|
delete res[key];
|
|
1708
1782
|
}
|
|
1709
1783
|
return res;
|
|
1710
1784
|
}
|
|
1711
1785
|
const jitsuAnalyticsPlugin = (jitsuOptions = {}, storage) => {
|
|
1712
|
-
// just to make sure that all undefined values are replaced with defaultConfig values
|
|
1713
1786
|
mergeConfig(jitsuOptions, jitsuOptions);
|
|
1714
1787
|
return {
|
|
1715
1788
|
name: "jitsu",
|
|
@@ -1771,7 +1844,6 @@ const jitsuAnalyticsPlugin = (jitsuOptions = {}, storage) => {
|
|
|
1771
1844
|
if (((_a = config.privacy) === null || _a === void 0 ? void 0 : _a.dontSend) || ((_b = config.privacy) === null || _b === void 0 ? void 0 : _b.disableUserIds)) {
|
|
1772
1845
|
return;
|
|
1773
1846
|
}
|
|
1774
|
-
// Store traits in cache to be able to use them in page and track events that run asynchronously with current identify.
|
|
1775
1847
|
storage.setItem("__user_id", payload.userId);
|
|
1776
1848
|
const doNotSend = (_c = payload.traits) === null || _c === void 0 ? void 0 : _c.$doNotSend;
|
|
1777
1849
|
if (payload.traits && typeof payload.traits === "object") {
|
|
@@ -1791,7 +1863,6 @@ const jitsuAnalyticsPlugin = (jitsuOptions = {}, storage) => {
|
|
|
1791
1863
|
}
|
|
1792
1864
|
},
|
|
1793
1865
|
methods: {
|
|
1794
|
-
//analytics doesn't support group as a base method, so we need to add it manually
|
|
1795
1866
|
configure(newOptions) {
|
|
1796
1867
|
var _a, _b, _c, _d;
|
|
1797
1868
|
const idsWasDisabled = ((_a = jitsuOptions.privacy) === null || _a === void 0 ? void 0 : _a.disableUserIds) || ((_b = jitsuOptions.privacy) === null || _b === void 0 ? void 0 : _b.dontSend);
|
|
@@ -1817,7 +1888,6 @@ const jitsuAnalyticsPlugin = (jitsuOptions = {}, storage) => {
|
|
|
1817
1888
|
return;
|
|
1818
1889
|
}
|
|
1819
1890
|
if (typeof groupId === "number") {
|
|
1820
|
-
//fix potential issues with group id being used incorrectly
|
|
1821
1891
|
groupId = groupId + "";
|
|
1822
1892
|
}
|
|
1823
1893
|
const instance = this.instance;
|
|
@@ -1924,9 +1994,6 @@ const emptyAnalytics = {
|
|
|
1924
1994
|
function createUnderlyingAnalyticsInstance(opts, rt, plugins = []) {
|
|
1925
1995
|
var _a, _b, _c;
|
|
1926
1996
|
const storageCache = {};
|
|
1927
|
-
// AnalyticsInstance's storage is async somewhere inside. So if we make 'page' call right after 'identify' call
|
|
1928
|
-
// 'page' call will load traits from storage before 'identify' call had a change to save them.
|
|
1929
|
-
// to avoid that we use in-memory cache for storage
|
|
1930
1997
|
const cachingStorageWrapper = (persistentStorage) => ({
|
|
1931
1998
|
setItem(key, val) {
|
|
1932
1999
|
var _a, _b;
|
|
@@ -1979,24 +2046,17 @@ function createUnderlyingAnalyticsInstance(opts, rt, plugins = []) {
|
|
|
1979
2046
|
}
|
|
1980
2047
|
}, identify: (...args) => {
|
|
1981
2048
|
if (args[0] && typeof args[0] !== "object" && typeof args[0] !== "string") {
|
|
1982
|
-
//fix the quirk of analytics.js: if you pass number as first argument, it will be converted to string
|
|
1983
2049
|
args[0] = args[0] + "";
|
|
1984
2050
|
}
|
|
1985
|
-
//analytics.js sets userId and traits asynchronously, so if
|
|
1986
|
-
//we want them to be available immediately after identify call in subsequent page() calls,
|
|
1987
|
-
//we need to put them into storage manually
|
|
1988
2051
|
const storage = analytics.storage;
|
|
1989
2052
|
const storageWrapper = cachingStorageWrapper(storage);
|
|
1990
2053
|
if (typeof args[0] === "string") {
|
|
1991
|
-
//first argument is user id
|
|
1992
2054
|
storageWrapper.setItem("__user_id", args[0]);
|
|
1993
2055
|
}
|
|
1994
2056
|
else if (typeof args[0] === "object") {
|
|
1995
|
-
//first argument is traits
|
|
1996
2057
|
storageWrapper.setItem("__user_traits", args[0]);
|
|
1997
2058
|
}
|
|
1998
2059
|
if (args.length === 2 && typeof args[1] === "object") {
|
|
1999
|
-
//first argument is user id, second is traits
|
|
2000
2060
|
storageWrapper.setItem("__user_traits", args[1]);
|
|
2001
2061
|
}
|
|
2002
2062
|
return analytics.identify(...args);
|
|
@@ -2023,8 +2083,6 @@ function createUnderlyingAnalyticsInstance(opts, rt, plugins = []) {
|
|
|
2023
2083
|
if (opts.debug) {
|
|
2024
2084
|
console.log("[JITSU DEBUG] Setting anonymous id to " + id);
|
|
2025
2085
|
}
|
|
2026
|
-
//Workaround for analytics.js bug. Underlying setAnonymousId doesn't set the id immediately,
|
|
2027
|
-
//so we got to it manually here. See https://github.com/jitsucom/jitsu/issues/1060
|
|
2028
2086
|
storage.setItem("__anon_id", id);
|
|
2029
2087
|
const userState = analytics.user();
|
|
2030
2088
|
if (userState) {
|
|
@@ -2068,8 +2126,6 @@ function createUnderlyingAnalyticsInstance(opts, rt, plugins = []) {
|
|
|
2068
2126
|
results.push(yield plugin["group"](groupId, traits, options, callback));
|
|
2069
2127
|
}
|
|
2070
2128
|
}
|
|
2071
|
-
//It's incorrect at many levels. First, it's not a dispatched event. Second, we take a first result
|
|
2072
|
-
//However, since returned values are used for debugging purposes only, it's ok
|
|
2073
2129
|
return results[0];
|
|
2074
2130
|
});
|
|
2075
2131
|
},
|
|
@@ -2081,10 +2137,6 @@ function createUnderlyingAnalyticsInstance(opts, rt, plugins = []) {
|
|
|
2081
2137
|
}
|
|
2082
2138
|
return a;
|
|
2083
2139
|
}
|
|
2084
|
-
/**
|
|
2085
|
-
* Fix common mistakes in jitsu configuration
|
|
2086
|
-
* @param opts
|
|
2087
|
-
*/
|
|
2088
2140
|
function fixOptions(opts) {
|
|
2089
2141
|
var _a, _b;
|
|
2090
2142
|
return Object.assign(Object.assign({}, opts), { host: ((_a = opts.host) !== null && _a !== void 0 ? _a : "").indexOf("https://") !== 0 && ((_b = opts.host) !== null && _b !== void 0 ? _b : "").indexOf("http://") !== 0
|
|
@@ -2096,28 +2148,6 @@ function jitsuAnalytics(_opts) {
|
|
|
2096
2148
|
const inBrowser = isInBrowser();
|
|
2097
2149
|
const rt = opts.runtime || (inBrowser ? windowRuntime(opts) : emptyRuntime(opts));
|
|
2098
2150
|
return createUnderlyingAnalyticsInstance(opts, rt);
|
|
2099
|
-
// if (inBrowser) {
|
|
2100
|
-
// const fetch = opts.fetch || globalThis.fetch;
|
|
2101
|
-
// if (!fetch) {
|
|
2102
|
-
// throw new Error(
|
|
2103
|
-
// "Please specify fetch function in jitsu plugin initialization, fetch isn't available in global scope"
|
|
2104
|
-
// );
|
|
2105
|
-
// }
|
|
2106
|
-
// const url = `${opts.host}/api/s/cfg`;
|
|
2107
|
-
// const authHeader = {};
|
|
2108
|
-
// const debugHeader = opts.debug ? { "X-Enable-Debug": "true" } : {};
|
|
2109
|
-
// fetch(url)
|
|
2110
|
-
// .then(res => res.json())
|
|
2111
|
-
// .then(res => {
|
|
2112
|
-
// result.loaded(createUnderlyingAnalyticsInstance(opts, rt, []));
|
|
2113
|
-
// })
|
|
2114
|
-
// .catch(e => {
|
|
2115
|
-
// console.warn(`[JITSU] error getting device-destinations from ${url}`, e);
|
|
2116
|
-
// result.loaded(createUnderlyingAnalyticsInstance(opts, rt));
|
|
2117
|
-
// });
|
|
2118
|
-
// } else {
|
|
2119
|
-
// result.loaded(createUnderlyingAnalyticsInstance(opts, rt));
|
|
2120
|
-
// }
|
|
2121
2151
|
}
|
|
2122
2152
|
|
|
2123
2153
|
export { createInMemoryStorage, emptyAnalytics, emptyRuntime, isInBrowser, jitsuAnalytics, jitsuAnalyticsPlugin, parseQuery, randomId, uuid, windowRuntime };
|