@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/web/p.js.txt
CHANGED
|
@@ -186,9 +186,6 @@
|
|
|
186
186
|
}
|
|
187
187
|
}
|
|
188
188
|
}
|
|
189
|
-
//This weird code is used to mask eval() usage.
|
|
190
|
-
//Although the code can be executed in the browser, some server side bundlers (like Vercel) fails
|
|
191
|
-
//the build if a direct reference to eval() is found.
|
|
192
189
|
let al = "al";
|
|
193
190
|
let ev = "ve".split("").reverse().join("");
|
|
194
191
|
const execF = globalThis[ev + al];
|
|
@@ -318,14 +315,11 @@
|
|
|
318
315
|
}
|
|
319
316
|
yield initGtmIfNeeded(config, payload);
|
|
320
317
|
const dataLayer = window[config.dataLayerName || "dataLayer"];
|
|
321
|
-
//traits could be in both nodes, context.traits takes precedence
|
|
322
318
|
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) || {}));
|
|
323
|
-
//remove properties that defined separately
|
|
324
319
|
const idsFromTraits = omit(traits, "id", "userId", "user_id", "anonymousId", "userId");
|
|
325
320
|
if (debug) {
|
|
326
321
|
console.debug("GTM plugin will be applied to following payload", payload);
|
|
327
322
|
}
|
|
328
|
-
// See https://developers.google.com/tag-platform/tag-manager/server-side/common-event-data
|
|
329
323
|
const userData = {
|
|
330
324
|
email_address: traits.email,
|
|
331
325
|
};
|
|
@@ -449,7 +443,6 @@
|
|
|
449
443
|
};
|
|
450
444
|
const ids = Object.assign(Object.assign({}, (payload.userId ? { user_id: payload.userId, userId: payload.userId } : {})), (payload.anonymousId ? { anonymousId: payload.anonymousId } : {}));
|
|
451
445
|
if (payload.userId) {
|
|
452
|
-
// @ts-ignore
|
|
453
446
|
gtag("set", { user_id: payload.userId });
|
|
454
447
|
}
|
|
455
448
|
switch (payload.type) {
|
|
@@ -460,19 +453,16 @@
|
|
|
460
453
|
}
|
|
461
454
|
const { properties: pageProperties, context } = payload;
|
|
462
455
|
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);
|
|
463
|
-
// @ts-ignore
|
|
464
456
|
gtag("event", "page_view", pageEvent);
|
|
465
457
|
break;
|
|
466
458
|
case "track":
|
|
467
459
|
const { properties: trackProperties } = payload;
|
|
468
460
|
const trackEvent = Object.assign(Object.assign({}, trackProperties), ids);
|
|
469
|
-
// @ts-ignore
|
|
470
461
|
gtag("event", payload.event, trackEvent);
|
|
471
462
|
break;
|
|
472
463
|
case "identify":
|
|
473
464
|
const { traits } = payload;
|
|
474
465
|
const identifyEvent = Object.assign(Object.assign({}, traits), ids);
|
|
475
|
-
// @ts-ignore
|
|
476
466
|
gtag("event", "identify", identifyEvent);
|
|
477
467
|
break;
|
|
478
468
|
}
|
|
@@ -493,17 +483,13 @@
|
|
|
493
483
|
setGa4State("loading");
|
|
494
484
|
const dlName = config.dataLayerName || "dataLayer";
|
|
495
485
|
const dlParam = dlName !== "dataLayer" ? "&l=" + dlName : "";
|
|
496
|
-
// to work with both GA4 and GTM
|
|
497
486
|
const tagId = config.measurementIds;
|
|
498
487
|
window[dlName] = window[dlName] || [];
|
|
499
488
|
const gtag = function () {
|
|
500
489
|
window[dlName].push(arguments);
|
|
501
490
|
};
|
|
502
|
-
// @ts-ignore
|
|
503
491
|
gtag("js", new Date());
|
|
504
|
-
gtag(
|
|
505
|
-
// @ts-ignore
|
|
506
|
-
"config", tagId, Object.assign(Object.assign({}, (payload.userId ? { user_id: payload.userId } : {})), (!config.autoPageView ? { send_page_view: false } : {})));
|
|
492
|
+
gtag("config", tagId, Object.assign(Object.assign({}, (payload.userId ? { user_id: payload.userId } : {})), (!config.autoPageView ? { send_page_view: false } : {})));
|
|
507
493
|
loadScript(buildTagUrl(), { query: `id=${tagId}${dlParam}`, www: true })
|
|
508
494
|
.then(() => {
|
|
509
495
|
setGa4State("loaded");
|
|
@@ -551,11 +537,86 @@
|
|
|
551
537
|
[logrocketPlugin.id]: logrocketPlugin,
|
|
552
538
|
};
|
|
553
539
|
|
|
554
|
-
|
|
540
|
+
var name = "@jitsu/js";
|
|
541
|
+
var version = "1.11.0-canary.20251124.3ff4617";
|
|
542
|
+
var description = "";
|
|
543
|
+
var author = "Jitsu Dev Team <dev@jitsu.com>";
|
|
544
|
+
var main = "dist/jitsu.cjs.js";
|
|
545
|
+
var files = [
|
|
546
|
+
"dist"
|
|
547
|
+
];
|
|
548
|
+
var module = "dist/jitsu.es.js";
|
|
549
|
+
var types = "dist/jitsu.d.ts";
|
|
550
|
+
var publishConfig = {
|
|
551
|
+
access: "public"
|
|
552
|
+
};
|
|
553
|
+
var license = "MIT";
|
|
554
|
+
var scripts = {
|
|
555
|
+
clean: "rm -rf ./dist ./compiled",
|
|
556
|
+
"test:node": "vitest run",
|
|
557
|
+
"test:playwright": "playwright test ./__tests__/playwright",
|
|
558
|
+
test: "pnpm run test:node",
|
|
559
|
+
"//typecheck": "Build is required because types are generated during build",
|
|
560
|
+
typecheck: "pnpm run build",
|
|
561
|
+
build: "pnpm run clean && tsc -p . && rollup -c",
|
|
562
|
+
"//build-deps": "Required by turbo ^build-deps - builds dist/ for workspace packages that import this",
|
|
563
|
+
"build-deps": "pnpm run build"
|
|
564
|
+
};
|
|
565
|
+
var devDependencies = {
|
|
566
|
+
"@jitsu/common-config": "workspace:*",
|
|
567
|
+
tslib: "catalog:",
|
|
568
|
+
"@playwright/test": "1.39.0",
|
|
569
|
+
"@rollup/plugin-commonjs": "^28.0.2",
|
|
570
|
+
"rollup-plugin-dts": "^6.2.1",
|
|
571
|
+
"@rollup/plugin-json": "^5.0.1",
|
|
572
|
+
"@rollup/plugin-multi-entry": "^6.0.0",
|
|
573
|
+
"@rollup/plugin-node-resolve": "^16.0.0",
|
|
574
|
+
"@rollup/plugin-replace": "^5.0.1",
|
|
575
|
+
"@rollup/plugin-terser": "^0.1.0",
|
|
576
|
+
"@segment/analytics-next": "^1.75.0",
|
|
577
|
+
"@types/chalk": "^2.2.0",
|
|
578
|
+
"@types/node": "catalog:",
|
|
579
|
+
"@vitest/ui": "catalog:",
|
|
580
|
+
chalk: "^4.1.2",
|
|
581
|
+
"cookie-parser": "^1.4.7",
|
|
582
|
+
ejs: "^3.1.8",
|
|
583
|
+
express: "^4.21.2",
|
|
584
|
+
"node-fetch-commonjs": "^3.3.2",
|
|
585
|
+
"node-forge": "^1.3.1",
|
|
586
|
+
"raw-loader": "^4.0.2",
|
|
587
|
+
rollup: "^3.29.5",
|
|
588
|
+
typescript: "catalog:",
|
|
589
|
+
vitest: "catalog:",
|
|
590
|
+
jsondiffpatch: "workspace:*"
|
|
591
|
+
};
|
|
592
|
+
var peerDependencies = {
|
|
593
|
+
"@jitsu/protocols": "workspace:*"
|
|
594
|
+
};
|
|
595
|
+
var dependencies = {
|
|
596
|
+
analytics: "0.8.9"
|
|
597
|
+
};
|
|
598
|
+
var pkg = {
|
|
599
|
+
name: name,
|
|
600
|
+
version: version,
|
|
601
|
+
description: description,
|
|
602
|
+
author: author,
|
|
603
|
+
main: main,
|
|
604
|
+
files: files,
|
|
605
|
+
module: module,
|
|
606
|
+
types: types,
|
|
607
|
+
publishConfig: publishConfig,
|
|
608
|
+
license: license,
|
|
609
|
+
"private": false,
|
|
610
|
+
scripts: scripts,
|
|
611
|
+
devDependencies: devDependencies,
|
|
612
|
+
peerDependencies: peerDependencies,
|
|
613
|
+
dependencies: dependencies
|
|
614
|
+
};
|
|
615
|
+
|
|
616
|
+
const jitsuVersion = pkg.version ;
|
|
555
617
|
const jitsuLibraryName = "@jitsu/js";
|
|
556
618
|
|
|
557
|
-
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(",");
|
|
558
|
-
//convert to Map
|
|
619
|
+
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(",");
|
|
559
620
|
const _publicSuffixesMap = {};
|
|
560
621
|
publicSuffixes.forEach(tld => {
|
|
561
622
|
_publicSuffixesMap[tld] = true;
|
|
@@ -1042,7 +1103,6 @@
|
|
|
1042
1103
|
return new DiffPatcher(options);
|
|
1043
1104
|
}
|
|
1044
1105
|
|
|
1045
|
-
/* global analytics */
|
|
1046
1106
|
var __awaiter$1 = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
1047
1107
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
1048
1108
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -1054,9 +1114,7 @@
|
|
|
1054
1114
|
};
|
|
1055
1115
|
const diff = create();
|
|
1056
1116
|
const defaultConfig = {
|
|
1057
|
-
/* Your segment writeKey */
|
|
1058
1117
|
writeKey: null,
|
|
1059
|
-
/* Disable anonymous MTU */
|
|
1060
1118
|
host: null,
|
|
1061
1119
|
debug: false,
|
|
1062
1120
|
fetch: null,
|
|
@@ -1077,7 +1135,6 @@
|
|
|
1077
1135
|
consentCategories: {},
|
|
1078
1136
|
},
|
|
1079
1137
|
};
|
|
1080
|
-
// mergeConfig merges newConfig into currentConfig also making sure that all undefined values are replaced with defaultConfig values
|
|
1081
1138
|
const mergeConfig = (current, newConfig) => {
|
|
1082
1139
|
for (const key of Object.keys(defaultConfig)) {
|
|
1083
1140
|
const value = newConfig[key];
|
|
@@ -1087,16 +1144,12 @@
|
|
|
1087
1144
|
}
|
|
1088
1145
|
else if (typeof value === "undefined") {
|
|
1089
1146
|
if (newConfig.hasOwnProperty("privacy") || !current.hasOwnProperty("privacy")) {
|
|
1090
|
-
// explicitly set to undefined - reset to default
|
|
1091
|
-
// or was not set at all - set to default
|
|
1092
1147
|
current.privacy = Object.assign(Object.assign({}, defaultConfig.privacy), { consentCategories: Object.assign({}, defaultConfig.privacy.consentCategories) });
|
|
1093
1148
|
}
|
|
1094
1149
|
}
|
|
1095
1150
|
}
|
|
1096
1151
|
else if (typeof value === "undefined") {
|
|
1097
1152
|
if (newConfig.hasOwnProperty(key) || !current.hasOwnProperty(key)) {
|
|
1098
|
-
// explicitly set to undefined - reset to default
|
|
1099
|
-
// or was not set at all - set to default
|
|
1100
1153
|
current[key] = defaultConfig[key];
|
|
1101
1154
|
}
|
|
1102
1155
|
}
|
|
@@ -1165,6 +1218,18 @@
|
|
|
1165
1218
|
}, {});
|
|
1166
1219
|
return Object.assign(Object.assign({}, clientIds), getGa4Ids(runtime));
|
|
1167
1220
|
}
|
|
1221
|
+
function parseGa4SessionId(cookieValue) {
|
|
1222
|
+
if (typeof cookieValue !== "string") {
|
|
1223
|
+
return undefined;
|
|
1224
|
+
}
|
|
1225
|
+
if (cookieValue.startsWith("GA1") || cookieValue.startsWith("GS1")) {
|
|
1226
|
+
return cookieValue.split(".")[2];
|
|
1227
|
+
}
|
|
1228
|
+
else {
|
|
1229
|
+
const match = cookieValue.match(/^GS\d+\.\d+\.(?:[\w_-]+[$])*s(\d+)(?:$|[$])/);
|
|
1230
|
+
return match ? match[1] : undefined;
|
|
1231
|
+
}
|
|
1232
|
+
}
|
|
1168
1233
|
function getGa4Ids(runtime) {
|
|
1169
1234
|
var _a;
|
|
1170
1235
|
const allCookies = runtime.getCookies();
|
|
@@ -1173,14 +1238,11 @@
|
|
|
1173
1238
|
const sessionIds = gaSessionCookies.length > 0
|
|
1174
1239
|
? Object.fromEntries(gaSessionCookies
|
|
1175
1240
|
.map(([key, value]) => {
|
|
1176
|
-
|
|
1241
|
+
const sessionId = parseGa4SessionId(value);
|
|
1242
|
+
if (!sessionId) {
|
|
1177
1243
|
return null;
|
|
1178
1244
|
}
|
|
1179
|
-
|
|
1180
|
-
if (parts.length < 3) {
|
|
1181
|
-
return null;
|
|
1182
|
-
}
|
|
1183
|
-
return [key.substring("_ga_".length), parts[2]];
|
|
1245
|
+
return [key.substring("_ga_".length), sessionId];
|
|
1184
1246
|
})
|
|
1185
1247
|
.filter(v => v !== null))
|
|
1186
1248
|
: undefined;
|
|
@@ -1243,11 +1305,9 @@
|
|
|
1243
1305
|
const cookieName = key2cookie(key) || key;
|
|
1244
1306
|
const result = getCookie(cookieName);
|
|
1245
1307
|
if (key === "__anon_id") {
|
|
1246
|
-
//anonymous id must always be a string, so we don't parse it to preserve its exact value
|
|
1247
1308
|
return result;
|
|
1248
1309
|
}
|
|
1249
1310
|
if (typeof result === "undefined" && key === "__user_id") {
|
|
1250
|
-
//backward compatibility with old jitsu cookie. get user id if from traits
|
|
1251
1311
|
const traits = parse(getCookie(key2cookie("__user_traits") || "__eventn_id_usr")) || {};
|
|
1252
1312
|
return traits.internal_id || traits.user_id || traits.id || traits.userId;
|
|
1253
1313
|
}
|
|
@@ -1404,6 +1464,15 @@
|
|
|
1404
1464
|
return undefined;
|
|
1405
1465
|
},
|
|
1406
1466
|
});
|
|
1467
|
+
function deepCopy(o) {
|
|
1468
|
+
if (typeof o !== "object") {
|
|
1469
|
+
return o;
|
|
1470
|
+
}
|
|
1471
|
+
if (!o) {
|
|
1472
|
+
return o;
|
|
1473
|
+
}
|
|
1474
|
+
return JSON.parse(JSON.stringify(o));
|
|
1475
|
+
}
|
|
1407
1476
|
function deepMerge(target, source) {
|
|
1408
1477
|
if (typeof source !== "object" || source === null) {
|
|
1409
1478
|
return source;
|
|
@@ -1419,10 +1488,6 @@
|
|
|
1419
1488
|
function isInBrowser() {
|
|
1420
1489
|
return typeof document !== "undefined" && typeof window !== "undefined";
|
|
1421
1490
|
}
|
|
1422
|
-
/**
|
|
1423
|
-
* Fixes a weird bug in analytics URL where path
|
|
1424
|
-
* of https://test.com becomes //test.com
|
|
1425
|
-
*/
|
|
1426
1491
|
function fixPath(path) {
|
|
1427
1492
|
if (path.indexOf("//") === 0 && path.lastIndexOf("/") === 1) {
|
|
1428
1493
|
return "/";
|
|
@@ -1430,16 +1495,30 @@
|
|
|
1430
1495
|
return path;
|
|
1431
1496
|
}
|
|
1432
1497
|
const hashRegex = /#.*$/;
|
|
1433
|
-
/**
|
|
1434
|
-
* for compatibility with path produced by analytics.js
|
|
1435
|
-
* @param url
|
|
1436
|
-
*/
|
|
1437
1498
|
function urlPath(url) {
|
|
1438
1499
|
const regex = /(http[s]?:\/\/)?([^\/\s]+\/)(.*)/g;
|
|
1439
1500
|
const matches = regex.exec(url);
|
|
1440
1501
|
const pathMatch = matches && matches[3] ? matches[3].split("?")[0].replace(hashRegex, "") : "";
|
|
1441
1502
|
return "/" + pathMatch;
|
|
1442
1503
|
}
|
|
1504
|
+
function canonicalUrl() {
|
|
1505
|
+
if (!isInBrowser())
|
|
1506
|
+
return;
|
|
1507
|
+
const tags = document.getElementsByTagName("link");
|
|
1508
|
+
for (var i = 0, tag; (tag = tags[i]); i++) {
|
|
1509
|
+
if (tag.getAttribute("rel") === "canonical") {
|
|
1510
|
+
return tag.getAttribute("href");
|
|
1511
|
+
}
|
|
1512
|
+
}
|
|
1513
|
+
}
|
|
1514
|
+
function analyticsJsUrl() {
|
|
1515
|
+
if (!isInBrowser())
|
|
1516
|
+
return;
|
|
1517
|
+
const canonical = canonicalUrl();
|
|
1518
|
+
if (!canonical)
|
|
1519
|
+
return window.location.href.replace(hashRegex, "");
|
|
1520
|
+
return canonical.match(/\?/) ? canonical : canonical + window.location.search;
|
|
1521
|
+
}
|
|
1443
1522
|
function adjustPayload(payload, config, storage, s2s) {
|
|
1444
1523
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
|
|
1445
1524
|
const runtime = config.runtime || (isInBrowser() ? windowRuntime(config) : emptyRuntime(config));
|
|
@@ -1448,7 +1527,10 @@
|
|
|
1448
1527
|
const query = parsedUrl ? parseQuery(parsedUrl.search) : {};
|
|
1449
1528
|
const properties = payload.properties || {};
|
|
1450
1529
|
if (payload.type === "page" && (properties.url || url)) {
|
|
1451
|
-
|
|
1530
|
+
let targetUrl = url || properties.url;
|
|
1531
|
+
if (properties.url && properties.url !== analyticsJsUrl()) {
|
|
1532
|
+
targetUrl = properties.url;
|
|
1533
|
+
}
|
|
1452
1534
|
properties.url = targetUrl.replace(hashRegex, "");
|
|
1453
1535
|
properties.path = fixPath(urlPath(targetUrl));
|
|
1454
1536
|
}
|
|
@@ -1504,15 +1586,18 @@
|
|
|
1504
1586
|
return __awaiter$1(this, void 0, void 0, function* () {
|
|
1505
1587
|
const promises = [];
|
|
1506
1588
|
for (const destination of destinations) {
|
|
1507
|
-
let newEvents = [
|
|
1589
|
+
let newEvents = [];
|
|
1508
1590
|
if (destination.newEvents) {
|
|
1509
1591
|
try {
|
|
1510
|
-
newEvents = destination.newEvents.map(e => e === "same" ? originalEvent : isDiff(e) ? diff.patch(originalEvent, e.__diff) : e);
|
|
1592
|
+
newEvents = destination.newEvents.map(e => e === "same" ? deepCopy(originalEvent) : isDiff(e) ? diff.patch(deepCopy(originalEvent), e.__diff) : e);
|
|
1511
1593
|
}
|
|
1512
1594
|
catch (e) {
|
|
1513
1595
|
console.error(`[JITSU] Error applying '${destination.id}' changes to event: ${e === null || e === void 0 ? void 0 : e.message}`, e);
|
|
1514
1596
|
}
|
|
1515
1597
|
}
|
|
1598
|
+
else {
|
|
1599
|
+
newEvents = [deepCopy(originalEvent)];
|
|
1600
|
+
}
|
|
1516
1601
|
const credentials = Object.assign(Object.assign({}, destination.credentials), destination.options);
|
|
1517
1602
|
if (destination.deviceOptions.type === "internal-plugin") {
|
|
1518
1603
|
const plugin = internalDestinationPlugins[destination.deviceOptions.name];
|
|
@@ -1604,7 +1689,6 @@
|
|
|
1604
1689
|
}
|
|
1605
1690
|
else if (configuredHandler === "rethrow") {
|
|
1606
1691
|
return (msg, ...args) => {
|
|
1607
|
-
//ignore args, not clear what to do with them
|
|
1608
1692
|
throw new Error(msg);
|
|
1609
1693
|
};
|
|
1610
1694
|
}
|
|
@@ -1627,7 +1711,6 @@
|
|
|
1627
1711
|
const url = s2s ? `${jitsuConfig.host}/api/s/s2s/${method}` : `${jitsuConfig.host}/api/s/${method}`;
|
|
1628
1712
|
const fetch = jitsuConfig.fetch || globalThis.fetch;
|
|
1629
1713
|
if (!fetch) {
|
|
1630
|
-
//don't run it through error handler since error is critical and should be addressed
|
|
1631
1714
|
throw new Error("Please specify fetch function in jitsu plugin initialization, fetch isn't available in global scope");
|
|
1632
1715
|
}
|
|
1633
1716
|
const abortController = jitsuConfig.fetchTimeoutMs ? new AbortController() : undefined;
|
|
@@ -1683,7 +1766,6 @@
|
|
|
1683
1766
|
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);
|
|
1684
1767
|
}
|
|
1685
1768
|
else {
|
|
1686
|
-
//double protection, ingest should not return destinations in s2s mode
|
|
1687
1769
|
if (isInBrowser()) {
|
|
1688
1770
|
if (jitsuConfig.debug) {
|
|
1689
1771
|
console.log(`[JITSU] Processing device destinations: `, JSON.stringify(responseJson.destinations, null, 2));
|
|
@@ -1696,23 +1778,14 @@
|
|
|
1696
1778
|
});
|
|
1697
1779
|
}
|
|
1698
1780
|
const controllingTraits = ["$doNotSend"];
|
|
1699
|
-
/**
|
|
1700
|
-
* Remove all members of traits that controls identify/group behavior (see analytics.d.ts), and should not be recorded. Returns
|
|
1701
|
-
* copy of the object with these members removed.
|
|
1702
|
-
*
|
|
1703
|
-
* Do not modify traits object, but creates one
|
|
1704
|
-
* @param traits
|
|
1705
|
-
*/
|
|
1706
1781
|
function stripControllingTraits(traits) {
|
|
1707
1782
|
const res = Object.assign({}, traits);
|
|
1708
|
-
// see Traits definition in analytics.d.ts. We cannot define const here, so here's a little code duplication
|
|
1709
1783
|
for (const key of controllingTraits) {
|
|
1710
1784
|
delete res[key];
|
|
1711
1785
|
}
|
|
1712
1786
|
return res;
|
|
1713
1787
|
}
|
|
1714
1788
|
const jitsuAnalyticsPlugin = (jitsuOptions = {}, storage) => {
|
|
1715
|
-
// just to make sure that all undefined values are replaced with defaultConfig values
|
|
1716
1789
|
mergeConfig(jitsuOptions, jitsuOptions);
|
|
1717
1790
|
return {
|
|
1718
1791
|
name: "jitsu",
|
|
@@ -1774,7 +1847,6 @@
|
|
|
1774
1847
|
if (((_a = config.privacy) === null || _a === void 0 ? void 0 : _a.dontSend) || ((_b = config.privacy) === null || _b === void 0 ? void 0 : _b.disableUserIds)) {
|
|
1775
1848
|
return;
|
|
1776
1849
|
}
|
|
1777
|
-
// Store traits in cache to be able to use them in page and track events that run asynchronously with current identify.
|
|
1778
1850
|
storage.setItem("__user_id", payload.userId);
|
|
1779
1851
|
const doNotSend = (_c = payload.traits) === null || _c === void 0 ? void 0 : _c.$doNotSend;
|
|
1780
1852
|
if (payload.traits && typeof payload.traits === "object") {
|
|
@@ -1794,7 +1866,6 @@
|
|
|
1794
1866
|
}
|
|
1795
1867
|
},
|
|
1796
1868
|
methods: {
|
|
1797
|
-
//analytics doesn't support group as a base method, so we need to add it manually
|
|
1798
1869
|
configure(newOptions) {
|
|
1799
1870
|
var _a, _b, _c, _d;
|
|
1800
1871
|
const idsWasDisabled = ((_a = jitsuOptions.privacy) === null || _a === void 0 ? void 0 : _a.disableUserIds) || ((_b = jitsuOptions.privacy) === null || _b === void 0 ? void 0 : _b.dontSend);
|
|
@@ -1820,7 +1891,6 @@
|
|
|
1820
1891
|
return;
|
|
1821
1892
|
}
|
|
1822
1893
|
if (typeof groupId === "number") {
|
|
1823
|
-
//fix potential issues with group id being used incorrectly
|
|
1824
1894
|
groupId = groupId + "";
|
|
1825
1895
|
}
|
|
1826
1896
|
const instance = this.instance;
|
|
@@ -1910,9 +1980,6 @@
|
|
|
1910
1980
|
function createUnderlyingAnalyticsInstance(opts, rt, plugins = []) {
|
|
1911
1981
|
var _a, _b, _c;
|
|
1912
1982
|
const storageCache = {};
|
|
1913
|
-
// AnalyticsInstance's storage is async somewhere inside. So if we make 'page' call right after 'identify' call
|
|
1914
|
-
// 'page' call will load traits from storage before 'identify' call had a change to save them.
|
|
1915
|
-
// to avoid that we use in-memory cache for storage
|
|
1916
1983
|
const cachingStorageWrapper = (persistentStorage) => ({
|
|
1917
1984
|
setItem(key, val) {
|
|
1918
1985
|
var _a, _b;
|
|
@@ -1965,24 +2032,17 @@
|
|
|
1965
2032
|
}
|
|
1966
2033
|
}, identify: (...args) => {
|
|
1967
2034
|
if (args[0] && typeof args[0] !== "object" && typeof args[0] !== "string") {
|
|
1968
|
-
//fix the quirk of analytics.js: if you pass number as first argument, it will be converted to string
|
|
1969
2035
|
args[0] = args[0] + "";
|
|
1970
2036
|
}
|
|
1971
|
-
//analytics.js sets userId and traits asynchronously, so if
|
|
1972
|
-
//we want them to be available immediately after identify call in subsequent page() calls,
|
|
1973
|
-
//we need to put them into storage manually
|
|
1974
2037
|
const storage = analytics.storage;
|
|
1975
2038
|
const storageWrapper = cachingStorageWrapper(storage);
|
|
1976
2039
|
if (typeof args[0] === "string") {
|
|
1977
|
-
//first argument is user id
|
|
1978
2040
|
storageWrapper.setItem("__user_id", args[0]);
|
|
1979
2041
|
}
|
|
1980
2042
|
else if (typeof args[0] === "object") {
|
|
1981
|
-
//first argument is traits
|
|
1982
2043
|
storageWrapper.setItem("__user_traits", args[0]);
|
|
1983
2044
|
}
|
|
1984
2045
|
if (args.length === 2 && typeof args[1] === "object") {
|
|
1985
|
-
//first argument is user id, second is traits
|
|
1986
2046
|
storageWrapper.setItem("__user_traits", args[1]);
|
|
1987
2047
|
}
|
|
1988
2048
|
return analytics.identify(...args);
|
|
@@ -2009,8 +2069,6 @@
|
|
|
2009
2069
|
if (opts.debug) {
|
|
2010
2070
|
console.log("[JITSU DEBUG] Setting anonymous id to " + id);
|
|
2011
2071
|
}
|
|
2012
|
-
//Workaround for analytics.js bug. Underlying setAnonymousId doesn't set the id immediately,
|
|
2013
|
-
//so we got to it manually here. See https://github.com/jitsucom/jitsu/issues/1060
|
|
2014
2072
|
storage.setItem("__anon_id", id);
|
|
2015
2073
|
const userState = analytics.user();
|
|
2016
2074
|
if (userState) {
|
|
@@ -2054,8 +2112,6 @@
|
|
|
2054
2112
|
results.push(yield plugin["group"](groupId, traits, options, callback));
|
|
2055
2113
|
}
|
|
2056
2114
|
}
|
|
2057
|
-
//It's incorrect at many levels. First, it's not a dispatched event. Second, we take a first result
|
|
2058
|
-
//However, since returned values are used for debugging purposes only, it's ok
|
|
2059
2115
|
return results[0];
|
|
2060
2116
|
});
|
|
2061
2117
|
},
|
|
@@ -2067,10 +2123,6 @@
|
|
|
2067
2123
|
}
|
|
2068
2124
|
return a;
|
|
2069
2125
|
}
|
|
2070
|
-
/**
|
|
2071
|
-
* Fix common mistakes in jitsu configuration
|
|
2072
|
-
* @param opts
|
|
2073
|
-
*/
|
|
2074
2126
|
function fixOptions(opts) {
|
|
2075
2127
|
var _a, _b;
|
|
2076
2128
|
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
|
|
@@ -2082,28 +2134,6 @@
|
|
|
2082
2134
|
const inBrowser = isInBrowser();
|
|
2083
2135
|
const rt = opts.runtime || (inBrowser ? windowRuntime(opts) : emptyRuntime(opts));
|
|
2084
2136
|
return createUnderlyingAnalyticsInstance(opts, rt);
|
|
2085
|
-
// if (inBrowser) {
|
|
2086
|
-
// const fetch = opts.fetch || globalThis.fetch;
|
|
2087
|
-
// if (!fetch) {
|
|
2088
|
-
// throw new Error(
|
|
2089
|
-
// "Please specify fetch function in jitsu plugin initialization, fetch isn't available in global scope"
|
|
2090
|
-
// );
|
|
2091
|
-
// }
|
|
2092
|
-
// const url = `${opts.host}/api/s/cfg`;
|
|
2093
|
-
// const authHeader = {};
|
|
2094
|
-
// const debugHeader = opts.debug ? { "X-Enable-Debug": "true" } : {};
|
|
2095
|
-
// fetch(url)
|
|
2096
|
-
// .then(res => res.json())
|
|
2097
|
-
// .then(res => {
|
|
2098
|
-
// result.loaded(createUnderlyingAnalyticsInstance(opts, rt, []));
|
|
2099
|
-
// })
|
|
2100
|
-
// .catch(e => {
|
|
2101
|
-
// console.warn(`[JITSU] error getting device-destinations from ${url}`, e);
|
|
2102
|
-
// result.loaded(createUnderlyingAnalyticsInstance(opts, rt));
|
|
2103
|
-
// });
|
|
2104
|
-
// } else {
|
|
2105
|
-
// result.loaded(createUnderlyingAnalyticsInstance(opts, rt));
|
|
2106
|
-
// }
|
|
2107
2137
|
}
|
|
2108
2138
|
|
|
2109
2139
|
function snakeToCamel(s) {
|
|
@@ -2210,12 +2240,7 @@
|
|
|
2210
2240
|
}
|
|
2211
2241
|
}
|
|
2212
2242
|
window[JITSU_V2_ID] = jitsu;
|
|
2213
|
-
/**
|
|
2214
|
-
* New callback based queue, see below
|
|
2215
|
-
*/
|
|
2216
|
-
//make a copy of the queue
|
|
2217
2243
|
const callbackQueue = window[JITSU_V2_ID + "Q"] && window[JITSU_V2_ID + "Q"].length ? [...window[JITSU_V2_ID + "Q"]] : [];
|
|
2218
|
-
//replace push with a function that calls callback immediately
|
|
2219
2244
|
window[JITSU_V2_ID + "Q"] = {
|
|
2220
2245
|
push: (callback) => {
|
|
2221
2246
|
if (typeof callback === "function") {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jitsu/js",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.11.0-canary.20251124.3ff4617",
|
|
4
4
|
"description": "",
|
|
5
5
|
"author": "Jitsu Dev Team <dev@jitsu.com>",
|
|
6
6
|
"main": "dist/jitsu.cjs.js",
|
|
@@ -14,8 +14,20 @@
|
|
|
14
14
|
},
|
|
15
15
|
"license": "MIT",
|
|
16
16
|
"private": false,
|
|
17
|
+
"scripts": {
|
|
18
|
+
"clean": "rm -rf ./dist ./compiled",
|
|
19
|
+
"test:node": "vitest run",
|
|
20
|
+
"test:playwright": "playwright test ./__tests__/playwright",
|
|
21
|
+
"test": "pnpm run test:node",
|
|
22
|
+
"//typecheck": "Build is required because types are generated during build",
|
|
23
|
+
"typecheck": "pnpm run build",
|
|
24
|
+
"build": "pnpm run clean && tsc -p . && rollup -c",
|
|
25
|
+
"//build-deps": "Required by turbo ^build-deps - builds dist/ for workspace packages that import this",
|
|
26
|
+
"build-deps": "pnpm run build"
|
|
27
|
+
},
|
|
17
28
|
"devDependencies": {
|
|
18
|
-
"
|
|
29
|
+
"@jitsu/common-config": "workspace:*",
|
|
30
|
+
"tslib": "catalog:",
|
|
19
31
|
"@playwright/test": "1.39.0",
|
|
20
32
|
"@rollup/plugin-commonjs": "^28.0.2",
|
|
21
33
|
"rollup-plugin-dts": "^6.2.1",
|
|
@@ -26,33 +38,24 @@
|
|
|
26
38
|
"@rollup/plugin-terser": "^0.1.0",
|
|
27
39
|
"@segment/analytics-next": "^1.75.0",
|
|
28
40
|
"@types/chalk": "^2.2.0",
|
|
29
|
-
"@types/
|
|
30
|
-
"@
|
|
41
|
+
"@types/node": "catalog:",
|
|
42
|
+
"@vitest/ui": "catalog:",
|
|
31
43
|
"chalk": "^4.1.2",
|
|
32
44
|
"cookie-parser": "^1.4.7",
|
|
33
45
|
"ejs": "^3.1.8",
|
|
34
46
|
"express": "^4.21.2",
|
|
35
|
-
"jest": "^29.2.2",
|
|
36
47
|
"node-fetch-commonjs": "^3.3.2",
|
|
37
48
|
"node-forge": "^1.3.1",
|
|
38
49
|
"raw-loader": "^4.0.2",
|
|
39
50
|
"rollup": "^3.29.5",
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"jsondiffpatch": "
|
|
51
|
+
"typescript": "catalog:",
|
|
52
|
+
"vitest": "catalog:",
|
|
53
|
+
"jsondiffpatch": "workspace:*"
|
|
43
54
|
},
|
|
44
55
|
"peerDependencies": {
|
|
45
|
-
"@jitsu/protocols": "
|
|
56
|
+
"@jitsu/protocols": "workspace:*"
|
|
46
57
|
},
|
|
47
58
|
"dependencies": {
|
|
48
59
|
"analytics": "0.8.9"
|
|
49
|
-
},
|
|
50
|
-
"scripts": {
|
|
51
|
-
"clean": "rm -rf ./dist ./compiled",
|
|
52
|
-
"test:node": "jest",
|
|
53
|
-
"test:playwright": "playwright test ./__tests__/playwright",
|
|
54
|
-
"test": "pnpm run test:node && pnpm run test:playwright",
|
|
55
|
-
"compile": "tsc -p .",
|
|
56
|
-
"build": "pnpm run clean && pnpm run compile && rollup -c"
|
|
57
60
|
}
|
|
58
|
-
}
|
|
61
|
+
}
|
package/LICENSE
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2021 Jitsu Labs, Inc
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|