@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.cjs.js
CHANGED
|
@@ -185,9 +185,6 @@ function insertTags(code, event, opts = {}) {
|
|
|
185
185
|
}
|
|
186
186
|
}
|
|
187
187
|
}
|
|
188
|
-
//This weird code is used to mask eval() usage.
|
|
189
|
-
//Although the code can be executed in the browser, some server side bundlers (like Vercel) fails
|
|
190
|
-
//the build if a direct reference to eval() is found.
|
|
191
188
|
let al = "al";
|
|
192
189
|
let ev = "ve".split("").reverse().join("");
|
|
193
190
|
const execF = globalThis[ev + al];
|
|
@@ -317,14 +314,11 @@ const gtmPlugin = {
|
|
|
317
314
|
}
|
|
318
315
|
yield initGtmIfNeeded(config, payload);
|
|
319
316
|
const dataLayer = window[config.dataLayerName || "dataLayer"];
|
|
320
|
-
//traits could be in both nodes, context.traits takes precedence
|
|
321
317
|
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) || {}));
|
|
322
|
-
//remove properties that defined separately
|
|
323
318
|
const idsFromTraits = omit(traits, "id", "userId", "user_id", "anonymousId", "userId");
|
|
324
319
|
if (debug) {
|
|
325
320
|
console.debug("GTM plugin will be applied to following payload", payload);
|
|
326
321
|
}
|
|
327
|
-
// See https://developers.google.com/tag-platform/tag-manager/server-side/common-event-data
|
|
328
322
|
const userData = {
|
|
329
323
|
email_address: traits.email,
|
|
330
324
|
};
|
|
@@ -448,7 +442,6 @@ const ga4Plugin = {
|
|
|
448
442
|
};
|
|
449
443
|
const ids = Object.assign(Object.assign({}, (payload.userId ? { user_id: payload.userId, userId: payload.userId } : {})), (payload.anonymousId ? { anonymousId: payload.anonymousId } : {}));
|
|
450
444
|
if (payload.userId) {
|
|
451
|
-
// @ts-ignore
|
|
452
445
|
gtag("set", { user_id: payload.userId });
|
|
453
446
|
}
|
|
454
447
|
switch (payload.type) {
|
|
@@ -459,19 +452,16 @@ const ga4Plugin = {
|
|
|
459
452
|
}
|
|
460
453
|
const { properties: pageProperties, context } = payload;
|
|
461
454
|
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);
|
|
462
|
-
// @ts-ignore
|
|
463
455
|
gtag("event", "page_view", pageEvent);
|
|
464
456
|
break;
|
|
465
457
|
case "track":
|
|
466
458
|
const { properties: trackProperties } = payload;
|
|
467
459
|
const trackEvent = Object.assign(Object.assign({}, trackProperties), ids);
|
|
468
|
-
// @ts-ignore
|
|
469
460
|
gtag("event", payload.event, trackEvent);
|
|
470
461
|
break;
|
|
471
462
|
case "identify":
|
|
472
463
|
const { traits } = payload;
|
|
473
464
|
const identifyEvent = Object.assign(Object.assign({}, traits), ids);
|
|
474
|
-
// @ts-ignore
|
|
475
465
|
gtag("event", "identify", identifyEvent);
|
|
476
466
|
break;
|
|
477
467
|
}
|
|
@@ -492,17 +482,13 @@ function initGa4IfNeeded(config, payload) {
|
|
|
492
482
|
setGa4State("loading");
|
|
493
483
|
const dlName = config.dataLayerName || "dataLayer";
|
|
494
484
|
const dlParam = dlName !== "dataLayer" ? "&l=" + dlName : "";
|
|
495
|
-
// to work with both GA4 and GTM
|
|
496
485
|
const tagId = config.measurementIds;
|
|
497
486
|
window[dlName] = window[dlName] || [];
|
|
498
487
|
const gtag = function () {
|
|
499
488
|
window[dlName].push(arguments);
|
|
500
489
|
};
|
|
501
|
-
// @ts-ignore
|
|
502
490
|
gtag("js", new Date());
|
|
503
|
-
gtag(
|
|
504
|
-
// @ts-ignore
|
|
505
|
-
"config", tagId, Object.assign(Object.assign({}, (payload.userId ? { user_id: payload.userId } : {})), (!config.autoPageView ? { send_page_view: false } : {})));
|
|
491
|
+
gtag("config", tagId, Object.assign(Object.assign({}, (payload.userId ? { user_id: payload.userId } : {})), (!config.autoPageView ? { send_page_view: false } : {})));
|
|
506
492
|
loadScript(buildTagUrl(), { query: `id=${tagId}${dlParam}`, www: true })
|
|
507
493
|
.then(() => {
|
|
508
494
|
setGa4State("loaded");
|
|
@@ -550,11 +536,86 @@ const internalDestinationPlugins = {
|
|
|
550
536
|
[logrocketPlugin.id]: logrocketPlugin,
|
|
551
537
|
};
|
|
552
538
|
|
|
553
|
-
|
|
539
|
+
var name = "@jitsu/js";
|
|
540
|
+
var version = "1.11.0-canary.20251124.3ff4617";
|
|
541
|
+
var description = "";
|
|
542
|
+
var author = "Jitsu Dev Team <dev@jitsu.com>";
|
|
543
|
+
var main = "dist/jitsu.cjs.js";
|
|
544
|
+
var files = [
|
|
545
|
+
"dist"
|
|
546
|
+
];
|
|
547
|
+
var module$1 = "dist/jitsu.es.js";
|
|
548
|
+
var types = "dist/jitsu.d.ts";
|
|
549
|
+
var publishConfig = {
|
|
550
|
+
access: "public"
|
|
551
|
+
};
|
|
552
|
+
var license = "MIT";
|
|
553
|
+
var scripts = {
|
|
554
|
+
clean: "rm -rf ./dist ./compiled",
|
|
555
|
+
"test:node": "vitest run",
|
|
556
|
+
"test:playwright": "playwright test ./__tests__/playwright",
|
|
557
|
+
test: "pnpm run test:node",
|
|
558
|
+
"//typecheck": "Build is required because types are generated during build",
|
|
559
|
+
typecheck: "pnpm run build",
|
|
560
|
+
build: "pnpm run clean && tsc -p . && rollup -c",
|
|
561
|
+
"//build-deps": "Required by turbo ^build-deps - builds dist/ for workspace packages that import this",
|
|
562
|
+
"build-deps": "pnpm run build"
|
|
563
|
+
};
|
|
564
|
+
var devDependencies = {
|
|
565
|
+
"@jitsu/common-config": "workspace:*",
|
|
566
|
+
tslib: "catalog:",
|
|
567
|
+
"@playwright/test": "1.39.0",
|
|
568
|
+
"@rollup/plugin-commonjs": "^28.0.2",
|
|
569
|
+
"rollup-plugin-dts": "^6.2.1",
|
|
570
|
+
"@rollup/plugin-json": "^5.0.1",
|
|
571
|
+
"@rollup/plugin-multi-entry": "^6.0.0",
|
|
572
|
+
"@rollup/plugin-node-resolve": "^16.0.0",
|
|
573
|
+
"@rollup/plugin-replace": "^5.0.1",
|
|
574
|
+
"@rollup/plugin-terser": "^0.1.0",
|
|
575
|
+
"@segment/analytics-next": "^1.75.0",
|
|
576
|
+
"@types/chalk": "^2.2.0",
|
|
577
|
+
"@types/node": "catalog:",
|
|
578
|
+
"@vitest/ui": "catalog:",
|
|
579
|
+
chalk: "^4.1.2",
|
|
580
|
+
"cookie-parser": "^1.4.7",
|
|
581
|
+
ejs: "^3.1.8",
|
|
582
|
+
express: "^4.21.2",
|
|
583
|
+
"node-fetch-commonjs": "^3.3.2",
|
|
584
|
+
"node-forge": "^1.3.1",
|
|
585
|
+
"raw-loader": "^4.0.2",
|
|
586
|
+
rollup: "^3.29.5",
|
|
587
|
+
typescript: "catalog:",
|
|
588
|
+
vitest: "catalog:",
|
|
589
|
+
jsondiffpatch: "workspace:*"
|
|
590
|
+
};
|
|
591
|
+
var peerDependencies = {
|
|
592
|
+
"@jitsu/protocols": "workspace:*"
|
|
593
|
+
};
|
|
594
|
+
var dependencies = {
|
|
595
|
+
analytics: "0.8.9"
|
|
596
|
+
};
|
|
597
|
+
var pkg = {
|
|
598
|
+
name: name,
|
|
599
|
+
version: version,
|
|
600
|
+
description: description,
|
|
601
|
+
author: author,
|
|
602
|
+
main: main,
|
|
603
|
+
files: files,
|
|
604
|
+
module: module$1,
|
|
605
|
+
types: types,
|
|
606
|
+
publishConfig: publishConfig,
|
|
607
|
+
license: license,
|
|
608
|
+
"private": false,
|
|
609
|
+
scripts: scripts,
|
|
610
|
+
devDependencies: devDependencies,
|
|
611
|
+
peerDependencies: peerDependencies,
|
|
612
|
+
dependencies: dependencies
|
|
613
|
+
};
|
|
614
|
+
|
|
615
|
+
const jitsuVersion = pkg.version ;
|
|
554
616
|
const jitsuLibraryName = "@jitsu/js";
|
|
555
617
|
|
|
556
|
-
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(",");
|
|
557
|
-
//convert to Map
|
|
618
|
+
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(",");
|
|
558
619
|
const _publicSuffixesMap = {};
|
|
559
620
|
publicSuffixes.forEach(tld => {
|
|
560
621
|
_publicSuffixesMap[tld] = true;
|
|
@@ -1041,7 +1102,6 @@ function create(options) {
|
|
|
1041
1102
|
return new DiffPatcher(options);
|
|
1042
1103
|
}
|
|
1043
1104
|
|
|
1044
|
-
/* global analytics */
|
|
1045
1105
|
var __awaiter$1 = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
1046
1106
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
1047
1107
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -1053,9 +1113,7 @@ var __awaiter$1 = (undefined && undefined.__awaiter) || function (thisArg, _argu
|
|
|
1053
1113
|
};
|
|
1054
1114
|
const diff = create();
|
|
1055
1115
|
const defaultConfig = {
|
|
1056
|
-
/* Your segment writeKey */
|
|
1057
1116
|
writeKey: null,
|
|
1058
|
-
/* Disable anonymous MTU */
|
|
1059
1117
|
host: null,
|
|
1060
1118
|
debug: false,
|
|
1061
1119
|
fetch: null,
|
|
@@ -1076,7 +1134,6 @@ const defaultConfig = {
|
|
|
1076
1134
|
consentCategories: {},
|
|
1077
1135
|
},
|
|
1078
1136
|
};
|
|
1079
|
-
// mergeConfig merges newConfig into currentConfig also making sure that all undefined values are replaced with defaultConfig values
|
|
1080
1137
|
const mergeConfig = (current, newConfig) => {
|
|
1081
1138
|
for (const key of Object.keys(defaultConfig)) {
|
|
1082
1139
|
const value = newConfig[key];
|
|
@@ -1086,16 +1143,12 @@ const mergeConfig = (current, newConfig) => {
|
|
|
1086
1143
|
}
|
|
1087
1144
|
else if (typeof value === "undefined") {
|
|
1088
1145
|
if (newConfig.hasOwnProperty("privacy") || !current.hasOwnProperty("privacy")) {
|
|
1089
|
-
// explicitly set to undefined - reset to default
|
|
1090
|
-
// or was not set at all - set to default
|
|
1091
1146
|
current.privacy = Object.assign(Object.assign({}, defaultConfig.privacy), { consentCategories: Object.assign({}, defaultConfig.privacy.consentCategories) });
|
|
1092
1147
|
}
|
|
1093
1148
|
}
|
|
1094
1149
|
}
|
|
1095
1150
|
else if (typeof value === "undefined") {
|
|
1096
1151
|
if (newConfig.hasOwnProperty(key) || !current.hasOwnProperty(key)) {
|
|
1097
|
-
// explicitly set to undefined - reset to default
|
|
1098
|
-
// or was not set at all - set to default
|
|
1099
1152
|
current[key] = defaultConfig[key];
|
|
1100
1153
|
}
|
|
1101
1154
|
}
|
|
@@ -1164,6 +1217,18 @@ function getClientIds(runtime, customCookieCapture) {
|
|
|
1164
1217
|
}, {});
|
|
1165
1218
|
return Object.assign(Object.assign({}, clientIds), getGa4Ids(runtime));
|
|
1166
1219
|
}
|
|
1220
|
+
function parseGa4SessionId(cookieValue) {
|
|
1221
|
+
if (typeof cookieValue !== "string") {
|
|
1222
|
+
return undefined;
|
|
1223
|
+
}
|
|
1224
|
+
if (cookieValue.startsWith("GA1") || cookieValue.startsWith("GS1")) {
|
|
1225
|
+
return cookieValue.split(".")[2];
|
|
1226
|
+
}
|
|
1227
|
+
else {
|
|
1228
|
+
const match = cookieValue.match(/^GS\d+\.\d+\.(?:[\w_-]+[$])*s(\d+)(?:$|[$])/);
|
|
1229
|
+
return match ? match[1] : undefined;
|
|
1230
|
+
}
|
|
1231
|
+
}
|
|
1167
1232
|
function getGa4Ids(runtime) {
|
|
1168
1233
|
var _a;
|
|
1169
1234
|
const allCookies = runtime.getCookies();
|
|
@@ -1172,14 +1237,11 @@ function getGa4Ids(runtime) {
|
|
|
1172
1237
|
const sessionIds = gaSessionCookies.length > 0
|
|
1173
1238
|
? Object.fromEntries(gaSessionCookies
|
|
1174
1239
|
.map(([key, value]) => {
|
|
1175
|
-
|
|
1240
|
+
const sessionId = parseGa4SessionId(value);
|
|
1241
|
+
if (!sessionId) {
|
|
1176
1242
|
return null;
|
|
1177
1243
|
}
|
|
1178
|
-
|
|
1179
|
-
if (parts.length < 3) {
|
|
1180
|
-
return null;
|
|
1181
|
-
}
|
|
1182
|
-
return [key.substring("_ga_".length), parts[2]];
|
|
1244
|
+
return [key.substring("_ga_".length), sessionId];
|
|
1183
1245
|
})
|
|
1184
1246
|
.filter(v => v !== null))
|
|
1185
1247
|
: undefined;
|
|
@@ -1242,11 +1304,9 @@ const cookieStorage = (cookieDomain, key2cookie) => {
|
|
|
1242
1304
|
const cookieName = key2cookie(key) || key;
|
|
1243
1305
|
const result = getCookie(cookieName);
|
|
1244
1306
|
if (key === "__anon_id") {
|
|
1245
|
-
//anonymous id must always be a string, so we don't parse it to preserve its exact value
|
|
1246
1307
|
return result;
|
|
1247
1308
|
}
|
|
1248
1309
|
if (typeof result === "undefined" && key === "__user_id") {
|
|
1249
|
-
//backward compatibility with old jitsu cookie. get user id if from traits
|
|
1250
1310
|
const traits = parse(getCookie(key2cookie("__user_traits") || "__eventn_id_usr")) || {};
|
|
1251
1311
|
return traits.internal_id || traits.user_id || traits.id || traits.userId;
|
|
1252
1312
|
}
|
|
@@ -1403,6 +1463,15 @@ const emptyRuntime = (config) => ({
|
|
|
1403
1463
|
return undefined;
|
|
1404
1464
|
},
|
|
1405
1465
|
});
|
|
1466
|
+
function deepCopy(o) {
|
|
1467
|
+
if (typeof o !== "object") {
|
|
1468
|
+
return o;
|
|
1469
|
+
}
|
|
1470
|
+
if (!o) {
|
|
1471
|
+
return o;
|
|
1472
|
+
}
|
|
1473
|
+
return JSON.parse(JSON.stringify(o));
|
|
1474
|
+
}
|
|
1406
1475
|
function deepMerge(target, source) {
|
|
1407
1476
|
if (typeof source !== "object" || source === null) {
|
|
1408
1477
|
return source;
|
|
@@ -1418,10 +1487,6 @@ function deepMerge(target, source) {
|
|
|
1418
1487
|
function isInBrowser() {
|
|
1419
1488
|
return typeof document !== "undefined" && typeof window !== "undefined";
|
|
1420
1489
|
}
|
|
1421
|
-
/**
|
|
1422
|
-
* Fixes a weird bug in analytics URL where path
|
|
1423
|
-
* of https://test.com becomes //test.com
|
|
1424
|
-
*/
|
|
1425
1490
|
function fixPath(path) {
|
|
1426
1491
|
if (path.indexOf("//") === 0 && path.lastIndexOf("/") === 1) {
|
|
1427
1492
|
return "/";
|
|
@@ -1429,16 +1494,30 @@ function fixPath(path) {
|
|
|
1429
1494
|
return path;
|
|
1430
1495
|
}
|
|
1431
1496
|
const hashRegex = /#.*$/;
|
|
1432
|
-
/**
|
|
1433
|
-
* for compatibility with path produced by analytics.js
|
|
1434
|
-
* @param url
|
|
1435
|
-
*/
|
|
1436
1497
|
function urlPath(url) {
|
|
1437
1498
|
const regex = /(http[s]?:\/\/)?([^\/\s]+\/)(.*)/g;
|
|
1438
1499
|
const matches = regex.exec(url);
|
|
1439
1500
|
const pathMatch = matches && matches[3] ? matches[3].split("?")[0].replace(hashRegex, "") : "";
|
|
1440
1501
|
return "/" + pathMatch;
|
|
1441
1502
|
}
|
|
1503
|
+
function canonicalUrl() {
|
|
1504
|
+
if (!isInBrowser())
|
|
1505
|
+
return;
|
|
1506
|
+
const tags = document.getElementsByTagName("link");
|
|
1507
|
+
for (var i = 0, tag; (tag = tags[i]); i++) {
|
|
1508
|
+
if (tag.getAttribute("rel") === "canonical") {
|
|
1509
|
+
return tag.getAttribute("href");
|
|
1510
|
+
}
|
|
1511
|
+
}
|
|
1512
|
+
}
|
|
1513
|
+
function analyticsJsUrl() {
|
|
1514
|
+
if (!isInBrowser())
|
|
1515
|
+
return;
|
|
1516
|
+
const canonical = canonicalUrl();
|
|
1517
|
+
if (!canonical)
|
|
1518
|
+
return window.location.href.replace(hashRegex, "");
|
|
1519
|
+
return canonical.match(/\?/) ? canonical : canonical + window.location.search;
|
|
1520
|
+
}
|
|
1442
1521
|
function adjustPayload(payload, config, storage, s2s) {
|
|
1443
1522
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
|
|
1444
1523
|
const runtime = config.runtime || (isInBrowser() ? windowRuntime(config) : emptyRuntime(config));
|
|
@@ -1447,7 +1526,10 @@ function adjustPayload(payload, config, storage, s2s) {
|
|
|
1447
1526
|
const query = parsedUrl ? parseQuery(parsedUrl.search) : {};
|
|
1448
1527
|
const properties = payload.properties || {};
|
|
1449
1528
|
if (payload.type === "page" && (properties.url || url)) {
|
|
1450
|
-
|
|
1529
|
+
let targetUrl = url || properties.url;
|
|
1530
|
+
if (properties.url && properties.url !== analyticsJsUrl()) {
|
|
1531
|
+
targetUrl = properties.url;
|
|
1532
|
+
}
|
|
1451
1533
|
properties.url = targetUrl.replace(hashRegex, "");
|
|
1452
1534
|
properties.path = fixPath(urlPath(targetUrl));
|
|
1453
1535
|
}
|
|
@@ -1503,15 +1585,18 @@ function processDestinations(destinations, method, originalEvent, debug, analyti
|
|
|
1503
1585
|
return __awaiter$1(this, void 0, void 0, function* () {
|
|
1504
1586
|
const promises = [];
|
|
1505
1587
|
for (const destination of destinations) {
|
|
1506
|
-
let newEvents = [
|
|
1588
|
+
let newEvents = [];
|
|
1507
1589
|
if (destination.newEvents) {
|
|
1508
1590
|
try {
|
|
1509
|
-
newEvents = destination.newEvents.map(e => e === "same" ? originalEvent : isDiff(e) ? diff.patch(originalEvent, e.__diff) : e);
|
|
1591
|
+
newEvents = destination.newEvents.map(e => e === "same" ? deepCopy(originalEvent) : isDiff(e) ? diff.patch(deepCopy(originalEvent), e.__diff) : e);
|
|
1510
1592
|
}
|
|
1511
1593
|
catch (e) {
|
|
1512
1594
|
console.error(`[JITSU] Error applying '${destination.id}' changes to event: ${e === null || e === void 0 ? void 0 : e.message}`, e);
|
|
1513
1595
|
}
|
|
1514
1596
|
}
|
|
1597
|
+
else {
|
|
1598
|
+
newEvents = [deepCopy(originalEvent)];
|
|
1599
|
+
}
|
|
1515
1600
|
const credentials = Object.assign(Object.assign({}, destination.credentials), destination.options);
|
|
1516
1601
|
if (destination.deviceOptions.type === "internal-plugin") {
|
|
1517
1602
|
const plugin = internalDestinationPlugins[destination.deviceOptions.name];
|
|
@@ -1603,7 +1688,6 @@ function getErrorHandler(opts) {
|
|
|
1603
1688
|
}
|
|
1604
1689
|
else if (configuredHandler === "rethrow") {
|
|
1605
1690
|
return (msg, ...args) => {
|
|
1606
|
-
//ignore args, not clear what to do with them
|
|
1607
1691
|
throw new Error(msg);
|
|
1608
1692
|
};
|
|
1609
1693
|
}
|
|
@@ -1626,7 +1710,6 @@ function send(method, payload, jitsuConfig, instance, store) {
|
|
|
1626
1710
|
const url = s2s ? `${jitsuConfig.host}/api/s/s2s/${method}` : `${jitsuConfig.host}/api/s/${method}`;
|
|
1627
1711
|
const fetch = jitsuConfig.fetch || globalThis.fetch;
|
|
1628
1712
|
if (!fetch) {
|
|
1629
|
-
//don't run it through error handler since error is critical and should be addressed
|
|
1630
1713
|
throw new Error("Please specify fetch function in jitsu plugin initialization, fetch isn't available in global scope");
|
|
1631
1714
|
}
|
|
1632
1715
|
const abortController = jitsuConfig.fetchTimeoutMs ? new AbortController() : undefined;
|
|
@@ -1682,7 +1765,6 @@ function send(method, payload, jitsuConfig, instance, store) {
|
|
|
1682
1765
|
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);
|
|
1683
1766
|
}
|
|
1684
1767
|
else {
|
|
1685
|
-
//double protection, ingest should not return destinations in s2s mode
|
|
1686
1768
|
if (isInBrowser()) {
|
|
1687
1769
|
if (jitsuConfig.debug) {
|
|
1688
1770
|
console.log(`[JITSU] Processing device destinations: `, JSON.stringify(responseJson.destinations, null, 2));
|
|
@@ -1695,23 +1777,14 @@ function send(method, payload, jitsuConfig, instance, store) {
|
|
|
1695
1777
|
});
|
|
1696
1778
|
}
|
|
1697
1779
|
const controllingTraits = ["$doNotSend"];
|
|
1698
|
-
/**
|
|
1699
|
-
* Remove all members of traits that controls identify/group behavior (see analytics.d.ts), and should not be recorded. Returns
|
|
1700
|
-
* copy of the object with these members removed.
|
|
1701
|
-
*
|
|
1702
|
-
* Do not modify traits object, but creates one
|
|
1703
|
-
* @param traits
|
|
1704
|
-
*/
|
|
1705
1780
|
function stripControllingTraits(traits) {
|
|
1706
1781
|
const res = Object.assign({}, traits);
|
|
1707
|
-
// see Traits definition in analytics.d.ts. We cannot define const here, so here's a little code duplication
|
|
1708
1782
|
for (const key of controllingTraits) {
|
|
1709
1783
|
delete res[key];
|
|
1710
1784
|
}
|
|
1711
1785
|
return res;
|
|
1712
1786
|
}
|
|
1713
1787
|
const jitsuAnalyticsPlugin = (jitsuOptions = {}, storage) => {
|
|
1714
|
-
// just to make sure that all undefined values are replaced with defaultConfig values
|
|
1715
1788
|
mergeConfig(jitsuOptions, jitsuOptions);
|
|
1716
1789
|
return {
|
|
1717
1790
|
name: "jitsu",
|
|
@@ -1773,7 +1846,6 @@ const jitsuAnalyticsPlugin = (jitsuOptions = {}, storage) => {
|
|
|
1773
1846
|
if (((_a = config.privacy) === null || _a === void 0 ? void 0 : _a.dontSend) || ((_b = config.privacy) === null || _b === void 0 ? void 0 : _b.disableUserIds)) {
|
|
1774
1847
|
return;
|
|
1775
1848
|
}
|
|
1776
|
-
// Store traits in cache to be able to use them in page and track events that run asynchronously with current identify.
|
|
1777
1849
|
storage.setItem("__user_id", payload.userId);
|
|
1778
1850
|
const doNotSend = (_c = payload.traits) === null || _c === void 0 ? void 0 : _c.$doNotSend;
|
|
1779
1851
|
if (payload.traits && typeof payload.traits === "object") {
|
|
@@ -1793,7 +1865,6 @@ const jitsuAnalyticsPlugin = (jitsuOptions = {}, storage) => {
|
|
|
1793
1865
|
}
|
|
1794
1866
|
},
|
|
1795
1867
|
methods: {
|
|
1796
|
-
//analytics doesn't support group as a base method, so we need to add it manually
|
|
1797
1868
|
configure(newOptions) {
|
|
1798
1869
|
var _a, _b, _c, _d;
|
|
1799
1870
|
const idsWasDisabled = ((_a = jitsuOptions.privacy) === null || _a === void 0 ? void 0 : _a.disableUserIds) || ((_b = jitsuOptions.privacy) === null || _b === void 0 ? void 0 : _b.dontSend);
|
|
@@ -1819,7 +1890,6 @@ const jitsuAnalyticsPlugin = (jitsuOptions = {}, storage) => {
|
|
|
1819
1890
|
return;
|
|
1820
1891
|
}
|
|
1821
1892
|
if (typeof groupId === "number") {
|
|
1822
|
-
//fix potential issues with group id being used incorrectly
|
|
1823
1893
|
groupId = groupId + "";
|
|
1824
1894
|
}
|
|
1825
1895
|
const instance = this.instance;
|
|
@@ -1926,9 +1996,6 @@ const emptyAnalytics = {
|
|
|
1926
1996
|
function createUnderlyingAnalyticsInstance(opts, rt, plugins = []) {
|
|
1927
1997
|
var _a, _b, _c;
|
|
1928
1998
|
const storageCache = {};
|
|
1929
|
-
// AnalyticsInstance's storage is async somewhere inside. So if we make 'page' call right after 'identify' call
|
|
1930
|
-
// 'page' call will load traits from storage before 'identify' call had a change to save them.
|
|
1931
|
-
// to avoid that we use in-memory cache for storage
|
|
1932
1999
|
const cachingStorageWrapper = (persistentStorage) => ({
|
|
1933
2000
|
setItem(key, val) {
|
|
1934
2001
|
var _a, _b;
|
|
@@ -1981,24 +2048,17 @@ function createUnderlyingAnalyticsInstance(opts, rt, plugins = []) {
|
|
|
1981
2048
|
}
|
|
1982
2049
|
}, identify: (...args) => {
|
|
1983
2050
|
if (args[0] && typeof args[0] !== "object" && typeof args[0] !== "string") {
|
|
1984
|
-
//fix the quirk of analytics.js: if you pass number as first argument, it will be converted to string
|
|
1985
2051
|
args[0] = args[0] + "";
|
|
1986
2052
|
}
|
|
1987
|
-
//analytics.js sets userId and traits asynchronously, so if
|
|
1988
|
-
//we want them to be available immediately after identify call in subsequent page() calls,
|
|
1989
|
-
//we need to put them into storage manually
|
|
1990
2053
|
const storage = analytics.storage;
|
|
1991
2054
|
const storageWrapper = cachingStorageWrapper(storage);
|
|
1992
2055
|
if (typeof args[0] === "string") {
|
|
1993
|
-
//first argument is user id
|
|
1994
2056
|
storageWrapper.setItem("__user_id", args[0]);
|
|
1995
2057
|
}
|
|
1996
2058
|
else if (typeof args[0] === "object") {
|
|
1997
|
-
//first argument is traits
|
|
1998
2059
|
storageWrapper.setItem("__user_traits", args[0]);
|
|
1999
2060
|
}
|
|
2000
2061
|
if (args.length === 2 && typeof args[1] === "object") {
|
|
2001
|
-
//first argument is user id, second is traits
|
|
2002
2062
|
storageWrapper.setItem("__user_traits", args[1]);
|
|
2003
2063
|
}
|
|
2004
2064
|
return analytics.identify(...args);
|
|
@@ -2025,8 +2085,6 @@ function createUnderlyingAnalyticsInstance(opts, rt, plugins = []) {
|
|
|
2025
2085
|
if (opts.debug) {
|
|
2026
2086
|
console.log("[JITSU DEBUG] Setting anonymous id to " + id);
|
|
2027
2087
|
}
|
|
2028
|
-
//Workaround for analytics.js bug. Underlying setAnonymousId doesn't set the id immediately,
|
|
2029
|
-
//so we got to it manually here. See https://github.com/jitsucom/jitsu/issues/1060
|
|
2030
2088
|
storage.setItem("__anon_id", id);
|
|
2031
2089
|
const userState = analytics.user();
|
|
2032
2090
|
if (userState) {
|
|
@@ -2070,8 +2128,6 @@ function createUnderlyingAnalyticsInstance(opts, rt, plugins = []) {
|
|
|
2070
2128
|
results.push(yield plugin["group"](groupId, traits, options, callback));
|
|
2071
2129
|
}
|
|
2072
2130
|
}
|
|
2073
|
-
//It's incorrect at many levels. First, it's not a dispatched event. Second, we take a first result
|
|
2074
|
-
//However, since returned values are used for debugging purposes only, it's ok
|
|
2075
2131
|
return results[0];
|
|
2076
2132
|
});
|
|
2077
2133
|
},
|
|
@@ -2083,10 +2139,6 @@ function createUnderlyingAnalyticsInstance(opts, rt, plugins = []) {
|
|
|
2083
2139
|
}
|
|
2084
2140
|
return a;
|
|
2085
2141
|
}
|
|
2086
|
-
/**
|
|
2087
|
-
* Fix common mistakes in jitsu configuration
|
|
2088
|
-
* @param opts
|
|
2089
|
-
*/
|
|
2090
2142
|
function fixOptions(opts) {
|
|
2091
2143
|
var _a, _b;
|
|
2092
2144
|
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
|
|
@@ -2098,28 +2150,6 @@ function jitsuAnalytics(_opts) {
|
|
|
2098
2150
|
const inBrowser = isInBrowser();
|
|
2099
2151
|
const rt = opts.runtime || (inBrowser ? windowRuntime(opts) : emptyRuntime(opts));
|
|
2100
2152
|
return createUnderlyingAnalyticsInstance(opts, rt);
|
|
2101
|
-
// if (inBrowser) {
|
|
2102
|
-
// const fetch = opts.fetch || globalThis.fetch;
|
|
2103
|
-
// if (!fetch) {
|
|
2104
|
-
// throw new Error(
|
|
2105
|
-
// "Please specify fetch function in jitsu plugin initialization, fetch isn't available in global scope"
|
|
2106
|
-
// );
|
|
2107
|
-
// }
|
|
2108
|
-
// const url = `${opts.host}/api/s/cfg`;
|
|
2109
|
-
// const authHeader = {};
|
|
2110
|
-
// const debugHeader = opts.debug ? { "X-Enable-Debug": "true" } : {};
|
|
2111
|
-
// fetch(url)
|
|
2112
|
-
// .then(res => res.json())
|
|
2113
|
-
// .then(res => {
|
|
2114
|
-
// result.loaded(createUnderlyingAnalyticsInstance(opts, rt, []));
|
|
2115
|
-
// })
|
|
2116
|
-
// .catch(e => {
|
|
2117
|
-
// console.warn(`[JITSU] error getting device-destinations from ${url}`, e);
|
|
2118
|
-
// result.loaded(createUnderlyingAnalyticsInstance(opts, rt));
|
|
2119
|
-
// });
|
|
2120
|
-
// } else {
|
|
2121
|
-
// result.loaded(createUnderlyingAnalyticsInstance(opts, rt));
|
|
2122
|
-
// }
|
|
2123
2153
|
}
|
|
2124
2154
|
|
|
2125
2155
|
exports.createInMemoryStorage = createInMemoryStorage;
|