@jitsu/js 1.9.0-canary.581.20240115194116 → 1.9.0

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.cjs.js CHANGED
@@ -280,7 +280,6 @@ var __awaiter$3 = (undefined && undefined.__awaiter) || function (thisArg, _argu
280
280
  step((generator = generator.apply(thisArg, _arguments || [])).next());
281
281
  });
282
282
  };
283
- const defaultScriptSrc$1 = "https://www.googletagmanager.com/gtag/js";
284
283
  const gtmPlugin = {
285
284
  id: "gtm",
286
285
  handle(config, payload) {
@@ -328,31 +327,27 @@ function initGtmIfNeeded(config, payload) {
328
327
  }
329
328
  setGtmState("loading");
330
329
  const dlName = config.dataLayerName || "dataLayer";
331
- const dlParam = dlName !== "dataLayer" ? "&l=" + dlName : "";
332
- const previewParams = config.preview
333
- ? `&gtm_preview=${config.preview}&gtm_auth=${config.auth}&gtm_cookies_win=x`
334
- : "";
335
330
  const tagId = config.containerId;
336
- const scriptSrc = `${config.customScriptSrc || defaultScriptSrc$1}?id=${tagId}${dlParam}${previewParams}`;
337
- window[dlName] = window[dlName] || [];
338
- const gtag = function () {
339
- window[dlName].push(arguments);
340
- };
341
- window[dlName].push({
342
- user_id: payload.userId,
343
- });
344
- // @ts-ignore
345
- gtag("js", new Date());
346
- // @ts-ignore
347
- gtag("config", tagId);
348
- loadScript(scriptSrc)
349
- .then(() => {
350
- setGtmState("loaded");
351
- })
352
- .catch(e => {
353
- console.warn(`GTM (containerId=${tagId}) init failed: ${e.message}`, e);
354
- setGtmState("failed");
355
- });
331
+ (function (w, l, i) {
332
+ w[l] = w[l] || [];
333
+ w[l].push({
334
+ user_id: payload.userId,
335
+ });
336
+ w[l].push({
337
+ "gtm.start": new Date().getTime(),
338
+ event: "gtm.js",
339
+ });
340
+ const dl = l != "dataLayer" ? "&l=" + l : "";
341
+ const scriptSrc = "https://www.googletagmanager.com/gtm.js?id=" + i + dl;
342
+ loadScript(scriptSrc)
343
+ .then(() => {
344
+ setGtmState("loaded");
345
+ })
346
+ .catch(e => {
347
+ console.warn(`GTM (containerId=${tagId}) init failed: ${e.message}`, e);
348
+ setGtmState("failed");
349
+ });
350
+ })(window, dlName, tagId);
356
351
  });
357
352
  }
358
353
 
@@ -484,8 +479,7 @@ const internalDestinationPlugins = {
484
479
  [logrocketPlugin.id]: logrocketPlugin,
485
480
  };
486
481
 
487
- //import pkg from "../package.json";
488
- const jitsuVersion = "0.0.0";
482
+ const jitsuVersion = "2.0.0";
489
483
  const jitsuLibraryName = "@jitsu/js";
490
484
 
491
485
  const publicSuffixes = "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(",");
@@ -512,6 +506,469 @@ function getTopLevelDomain(hostname) {
512
506
  }
513
507
  }
514
508
 
509
+ class Processor {
510
+ constructor(options) {
511
+ this.selfOptions = options || {};
512
+ this.pipes = {};
513
+ }
514
+ options(options) {
515
+ if (options) {
516
+ this.selfOptions = options;
517
+ }
518
+ return this.selfOptions;
519
+ }
520
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
521
+ pipe(name, pipeArg) {
522
+ let pipe = pipeArg;
523
+ if (typeof name === "string") {
524
+ if (typeof pipe === "undefined") {
525
+ return this.pipes[name];
526
+ }
527
+ else {
528
+ this.pipes[name] = pipe;
529
+ }
530
+ }
531
+ if (name && name.name) {
532
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
533
+ pipe = name;
534
+ if (pipe.processor === this) {
535
+ return pipe;
536
+ }
537
+ this.pipes[pipe.name] = pipe;
538
+ }
539
+ pipe.processor = this;
540
+ return pipe;
541
+ }
542
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
543
+ process(input, pipe) {
544
+ let context = input;
545
+ context.options = this.options();
546
+ let nextPipe = pipe || input.pipe || "default";
547
+ let lastPipe;
548
+ while (nextPipe) {
549
+ if (typeof context.nextAfterChildren !== "undefined") {
550
+ // children processed and coming back to parent
551
+ context.next = context.nextAfterChildren;
552
+ context.nextAfterChildren = null;
553
+ }
554
+ if (typeof nextPipe === "string") {
555
+ nextPipe = this.pipe(nextPipe);
556
+ }
557
+ nextPipe.process(context);
558
+ lastPipe = nextPipe;
559
+ nextPipe = null;
560
+ if (context) {
561
+ if (context.next) {
562
+ context = context.next;
563
+ nextPipe = context.pipe || lastPipe;
564
+ }
565
+ }
566
+ }
567
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
568
+ return context.hasResult ? context.result : undefined;
569
+ }
570
+ }
571
+
572
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
573
+ class Pipe {
574
+ constructor(name) {
575
+ this.name = name;
576
+ this.filters = [];
577
+ }
578
+ process(input) {
579
+ if (!this.processor) {
580
+ throw new Error("add this pipe to a processor before using it");
581
+ }
582
+ const debug = this.debug;
583
+ const length = this.filters.length;
584
+ const context = input;
585
+ for (let index = 0; index < length; index++) {
586
+ const filter = this.filters[index];
587
+ if (debug) {
588
+ this.log(`filter: ${filter.filterName}`);
589
+ }
590
+ filter(context);
591
+ if (typeof context === "object" && context.exiting) {
592
+ context.exiting = false;
593
+ break;
594
+ }
595
+ }
596
+ if (!context.next && this.resultCheck) {
597
+ this.resultCheck(context);
598
+ }
599
+ }
600
+ log(msg) {
601
+ console.log(`[jsondiffpatch] ${this.name} pipe, ${msg}`);
602
+ }
603
+ append(...args) {
604
+ this.filters.push(...args);
605
+ return this;
606
+ }
607
+ prepend(...args) {
608
+ this.filters.unshift(...args);
609
+ return this;
610
+ }
611
+ indexOf(filterName) {
612
+ if (!filterName) {
613
+ throw new Error("a filter name is required");
614
+ }
615
+ for (let index = 0; index < this.filters.length; index++) {
616
+ const filter = this.filters[index];
617
+ if (filter.filterName === filterName) {
618
+ return index;
619
+ }
620
+ }
621
+ throw new Error(`filter not found: ${filterName}`);
622
+ }
623
+ list() {
624
+ return this.filters.map(f => f.filterName);
625
+ }
626
+ after(filterName, ...params) {
627
+ const index = this.indexOf(filterName);
628
+ this.filters.splice(index + 1, 0, ...params);
629
+ return this;
630
+ }
631
+ before(filterName, ...params) {
632
+ const index = this.indexOf(filterName);
633
+ this.filters.splice(index, 0, ...params);
634
+ return this;
635
+ }
636
+ replace(filterName, ...params) {
637
+ const index = this.indexOf(filterName);
638
+ this.filters.splice(index, 1, ...params);
639
+ return this;
640
+ }
641
+ remove(filterName) {
642
+ const index = this.indexOf(filterName);
643
+ this.filters.splice(index, 1);
644
+ return this;
645
+ }
646
+ clear() {
647
+ this.filters.length = 0;
648
+ return this;
649
+ }
650
+ shouldHaveResult(should) {
651
+ if (should === false) {
652
+ this.resultCheck = null;
653
+ return;
654
+ }
655
+ if (this.resultCheck) {
656
+ return;
657
+ }
658
+ this.resultCheck = context => {
659
+ if (!context.hasResult) {
660
+ console.log(context);
661
+ const error = new Error(`${this.name} failed`);
662
+ error.noResult = true;
663
+ throw error;
664
+ }
665
+ };
666
+ return this;
667
+ }
668
+ }
669
+
670
+ class Context {
671
+ setResult(result) {
672
+ this.result = result;
673
+ this.hasResult = true;
674
+ return this;
675
+ }
676
+ exit() {
677
+ this.exiting = true;
678
+ return this;
679
+ }
680
+ push(child, name) {
681
+ child.parent = this;
682
+ if (typeof name !== "undefined") {
683
+ child.childName = name;
684
+ }
685
+ child.root = this.root || this;
686
+ child.options = child.options || this.options;
687
+ if (!this.children) {
688
+ this.children = [child];
689
+ this.nextAfterChildren = this.next || null;
690
+ this.next = child;
691
+ }
692
+ else {
693
+ this.children[this.children.length - 1].next = child;
694
+ this.children.push(child);
695
+ }
696
+ child.next = this;
697
+ return this;
698
+ }
699
+ }
700
+
701
+ class DiffContext extends Context {
702
+ constructor(left, right) {
703
+ super();
704
+ this.left = left;
705
+ this.right = right;
706
+ this.pipe = "diff";
707
+ }
708
+ setResult(result) {
709
+ return super.setResult(result);
710
+ }
711
+ }
712
+
713
+ class PatchContext extends Context {
714
+ constructor(left, delta) {
715
+ super();
716
+ this.left = left;
717
+ this.delta = delta;
718
+ this.pipe = "patch";
719
+ }
720
+ }
721
+
722
+ function arrayEquals(a, b) {
723
+ if (a.length !== b.length) {
724
+ return false;
725
+ }
726
+ for (let i = 0; i < a.length; i++) {
727
+ if (a[i] !== b[i]) {
728
+ return false;
729
+ }
730
+ }
731
+ return true;
732
+ }
733
+ const diffFilter$1 = function trivialMatchesDiffFilter(context) {
734
+ if (context.left === context.right) {
735
+ context.setResult(undefined).exit();
736
+ return;
737
+ }
738
+ if (typeof context.left === "undefined") {
739
+ if (typeof context.right === "function") {
740
+ throw new Error("functions are not supported");
741
+ }
742
+ context.setResult([context.right]).exit();
743
+ return;
744
+ }
745
+ if (typeof context.right === "undefined") {
746
+ context.setResult([context.left, 0, 0]).exit();
747
+ return;
748
+ }
749
+ if (typeof context.left === "function" || typeof context.right === "function") {
750
+ throw new Error("functions are not supported");
751
+ }
752
+ context.leftType = context.left === null ? "null" : typeof context.left;
753
+ context.rightType = context.right === null ? "null" : typeof context.right;
754
+ if (context.leftType !== context.rightType) {
755
+ context.setResult([context.left, context.right]).exit();
756
+ return;
757
+ }
758
+ if (context.leftType === "boolean" || context.leftType === "number" || context.leftType === "string") {
759
+ context.setResult([context.left, context.right]).exit();
760
+ return;
761
+ }
762
+ if (context.leftType === "object") {
763
+ context.leftIsArray = Array.isArray(context.left);
764
+ }
765
+ if (context.rightType === "object") {
766
+ context.rightIsArray = Array.isArray(context.right);
767
+ }
768
+ if (context.leftIsArray !== context.rightIsArray) {
769
+ context.setResult([context.left, context.right]).exit();
770
+ return;
771
+ }
772
+ if (context.leftIsArray && context.rightIsArray) {
773
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-call
774
+ if (arrayEquals(context.left, context.right)) {
775
+ context.setResult(undefined).exit();
776
+ return;
777
+ }
778
+ else {
779
+ context.setResult([context.left, context.right]).exit();
780
+ return;
781
+ }
782
+ }
783
+ if (context.left instanceof RegExp) {
784
+ if (context.right instanceof RegExp) {
785
+ context.setResult([context.left.toString(), context.right.toString()]).exit();
786
+ }
787
+ else {
788
+ context.setResult([context.left, context.right]).exit();
789
+ }
790
+ }
791
+ };
792
+ diffFilter$1.filterName = "trivial";
793
+ const patchFilter$1 = function trivialMatchesPatchFilter(context) {
794
+ if (typeof context.delta === "undefined") {
795
+ context.setResult(context.left).exit();
796
+ return;
797
+ }
798
+ context.nested = !Array.isArray(context.delta);
799
+ if (context.nested) {
800
+ return;
801
+ }
802
+ const nonNestedDelta = context.delta;
803
+ if (nonNestedDelta.length === 1) {
804
+ context.setResult(nonNestedDelta[0]).exit();
805
+ return;
806
+ }
807
+ if (nonNestedDelta.length === 2) {
808
+ if (context.left instanceof RegExp) {
809
+ const regexArgs = /^\/(.*)\/([gimyu]+)$/.exec(nonNestedDelta[1]);
810
+ if (regexArgs) {
811
+ context.setResult(new RegExp(regexArgs[1], regexArgs[2])).exit();
812
+ return;
813
+ }
814
+ }
815
+ context.setResult(nonNestedDelta[1]).exit();
816
+ return;
817
+ }
818
+ if (nonNestedDelta.length === 3 && nonNestedDelta[2] === 0) {
819
+ context.setResult(undefined).exit();
820
+ }
821
+ };
822
+ patchFilter$1.filterName = "trivial";
823
+
824
+ const collectChildrenDiffFilter = context => {
825
+ if (!context || !context.children) {
826
+ return;
827
+ }
828
+ const length = context.children.length;
829
+ let child;
830
+ let result = context.result;
831
+ for (let index = 0; index < length; index++) {
832
+ child = context.children[index];
833
+ if (typeof child.result === "undefined") {
834
+ continue;
835
+ }
836
+ result = result || {};
837
+ result[child.childName] = child.result;
838
+ }
839
+ if (result && context.leftIsArray) {
840
+ result._t = "a";
841
+ }
842
+ context.setResult(result).exit();
843
+ };
844
+ collectChildrenDiffFilter.filterName = "collectChildren";
845
+ const objectsDiffFilter = context => {
846
+ if (context.leftIsArray || context.leftType !== "object") {
847
+ return;
848
+ }
849
+ const left = context.left;
850
+ const right = context.right;
851
+ let name;
852
+ let child;
853
+ const propertyFilter = context.options.propertyFilter;
854
+ for (name in left) {
855
+ if (!Object.prototype.hasOwnProperty.call(left, name)) {
856
+ continue;
857
+ }
858
+ if (propertyFilter && !propertyFilter(name, context)) {
859
+ continue;
860
+ }
861
+ child = new DiffContext(left[name], right[name]);
862
+ context.push(child, name);
863
+ }
864
+ for (name in right) {
865
+ if (!Object.prototype.hasOwnProperty.call(right, name)) {
866
+ continue;
867
+ }
868
+ if (propertyFilter && !propertyFilter(name, context)) {
869
+ continue;
870
+ }
871
+ if (typeof left[name] === "undefined") {
872
+ child = new DiffContext(undefined, right[name]);
873
+ context.push(child, name);
874
+ }
875
+ }
876
+ if (!context.children || context.children.length === 0) {
877
+ context.setResult(undefined).exit();
878
+ return;
879
+ }
880
+ context.exit();
881
+ };
882
+ objectsDiffFilter.filterName = "objects";
883
+ const patchFilter = function nestedPatchFilter(context) {
884
+ if (!context.nested) {
885
+ return;
886
+ }
887
+ const nestedDelta = context.delta;
888
+ if (nestedDelta._t) {
889
+ return;
890
+ }
891
+ const objectDelta = nestedDelta;
892
+ let name;
893
+ let child;
894
+ for (name in objectDelta) {
895
+ child = new PatchContext(context.left[name], objectDelta[name]);
896
+ context.push(child, name);
897
+ }
898
+ context.exit();
899
+ };
900
+ patchFilter.filterName = "objects";
901
+ const collectChildrenPatchFilter = function collectChildrenPatchFilter(context) {
902
+ if (!context || !context.children) {
903
+ return;
904
+ }
905
+ const deltaWithChildren = context.delta;
906
+ if (deltaWithChildren._t) {
907
+ return;
908
+ }
909
+ const object = context.left;
910
+ const length = context.children.length;
911
+ let child;
912
+ for (let index = 0; index < length; index++) {
913
+ child = context.children[index];
914
+ const property = child.childName;
915
+ if (Object.prototype.hasOwnProperty.call(context.left, property) && child.result === undefined) {
916
+ delete object[property];
917
+ }
918
+ else if (object[property] !== child.result) {
919
+ object[property] = child.result;
920
+ }
921
+ }
922
+ context.setResult(object).exit();
923
+ };
924
+ collectChildrenPatchFilter.filterName = "collectChildren";
925
+
926
+ const diffFilter = function datesDiffFilter(context) {
927
+ if (context.left instanceof Date) {
928
+ if (context.right instanceof Date) {
929
+ if (context.left.getTime() !== context.right.getTime()) {
930
+ context.setResult([context.left, context.right]);
931
+ }
932
+ else {
933
+ context.setResult(undefined);
934
+ }
935
+ }
936
+ else {
937
+ context.setResult([context.left, context.right]);
938
+ }
939
+ context.exit();
940
+ }
941
+ else if (context.right instanceof Date) {
942
+ context.setResult([context.left, context.right]).exit();
943
+ }
944
+ };
945
+ diffFilter.filterName = "dates";
946
+
947
+ class DiffPatcher {
948
+ constructor(options) {
949
+ this.processor = new Processor(options);
950
+ this.processor.pipe(new Pipe("diff")
951
+ .append(collectChildrenDiffFilter, diffFilter$1, diffFilter, objectsDiffFilter)
952
+ .shouldHaveResult());
953
+ this.processor.pipe(new Pipe("patch")
954
+ .append(collectChildrenPatchFilter, patchFilter$1, patchFilter)
955
+ .shouldHaveResult());
956
+ }
957
+ options(options) {
958
+ return this.processor.options(options);
959
+ }
960
+ diff(left, right) {
961
+ return this.processor.process(new DiffContext(left, right));
962
+ }
963
+ patch(left, delta) {
964
+ return this.processor.process(new PatchContext(left, delta));
965
+ }
966
+ }
967
+
968
+ function create(options) {
969
+ return new DiffPatcher(options);
970
+ }
971
+
515
972
  /* global analytics */
516
973
  var __awaiter$1 = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
517
974
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
@@ -522,6 +979,7 @@ var __awaiter$1 = (undefined && undefined.__awaiter) || function (thisArg, _argu
522
979
  step((generator = generator.apply(thisArg, _arguments || [])).next());
523
980
  });
524
981
  };
982
+ const diff = create();
525
983
  const defaultConfig = {
526
984
  /* Your segment writeKey */
527
985
  writeKey: null,
@@ -532,6 +990,7 @@ const defaultConfig = {
532
990
  echoEvents: false,
533
991
  cookieDomain: undefined,
534
992
  runtime: undefined,
993
+ fetchTimeoutMs: undefined,
535
994
  s2s: undefined,
536
995
  };
537
996
  const parseQuery = (qs) => {
@@ -832,13 +1291,22 @@ function adjustPayload(payload, config, storage, s2s) {
832
1291
  delete withContext.options;
833
1292
  return withContext;
834
1293
  }
1294
+ function isDiff(obj) {
1295
+ const keys = Object.keys(obj);
1296
+ return keys.length === 1 && keys[0] === "__diff";
1297
+ }
835
1298
  function processDestinations(destinations, method, originalEvent, debug, analyticsInstance) {
836
1299
  return __awaiter$1(this, void 0, void 0, function* () {
837
1300
  const promises = [];
838
1301
  for (const destination of destinations) {
839
1302
  let newEvents = [originalEvent];
840
1303
  if (destination.newEvents) {
841
- newEvents = destination.newEvents.map(e => (e === "same" ? originalEvent : e));
1304
+ try {
1305
+ newEvents = destination.newEvents.map(e => e === "same" ? originalEvent : isDiff(e) ? diff.patch(originalEvent, e.__diff) : e);
1306
+ }
1307
+ catch (e) {
1308
+ console.error(`[JITSU] Error applying '${destination.id}' changes to event: ${e === null || e === void 0 ? void 0 : e.message}`, e);
1309
+ }
842
1310
  }
843
1311
  const credentials = Object.assign(Object.assign({}, destination.credentials), destination.options);
844
1312
  if (destination.deviceOptions.type === "internal-plugin") {
@@ -941,6 +1409,12 @@ function send(method, payload, jitsuConfig, instance, store) {
941
1409
  // console.log(`[JITSU] Sending event to ${url}: `, JSON.stringify(payload, null, 2));
942
1410
  // }
943
1411
  const adjustedPayload = adjustPayload(payload, jitsuConfig, store, s2s);
1412
+ const abortController = jitsuConfig.fetchTimeoutMs ? new AbortController() : undefined;
1413
+ const abortTimeout = jitsuConfig.fetchTimeoutMs
1414
+ ? setTimeout(() => {
1415
+ abortController.abort();
1416
+ }, jitsuConfig.fetchTimeoutMs)
1417
+ : undefined;
944
1418
  const authHeader = jitsuConfig.writeKey ? { "X-Write-Key": jitsuConfig.writeKey } : {};
945
1419
  let fetchResult;
946
1420
  try {
@@ -948,7 +1422,11 @@ function send(method, payload, jitsuConfig, instance, store) {
948
1422
  method: "POST",
949
1423
  headers: Object.assign(Object.assign({ "Content-Type": "application/json" }, authHeader), debugHeader),
950
1424
  body: JSON.stringify(adjustedPayload),
1425
+ signal: abortController === null || abortController === void 0 ? void 0 : abortController.signal,
951
1426
  });
1427
+ if (abortTimeout) {
1428
+ clearTimeout(abortTimeout);
1429
+ }
952
1430
  }
953
1431
  catch (e) {
954
1432
  throw new Error(`Calling ${url} failed: ${e.message}`);
@@ -1185,15 +1663,15 @@ function createUnderlyingAnalyticsInstance(opts, rt, plugins = []) {
1185
1663
  }, setAnonymousId: (id) => {
1186
1664
  if (opts.debug) {
1187
1665
  console.log("[JITSU DEBUG] Setting anonymous id to " + id);
1188
- //Workaround for analytics.js bug. Underlying setAnonymousId doesn't work set the id immediately,
1189
- //so we got to it manually here. See https://github.com/jitsucom/jitsu/issues/1060
1190
- storage.setItem("__anon_id", id);
1191
- const userState = analytics.user();
1192
- if (userState) {
1193
- userState.anonymousId = id;
1194
- }
1195
- analytics.setAnonymousId(id);
1196
1666
  }
1667
+ //Workaround for analytics.js bug. Underlying setAnonymousId doesn't work set the id immediately,
1668
+ //so we got to it manually here. See https://github.com/jitsucom/jitsu/issues/1060
1669
+ storage.setItem("__anon_id", id);
1670
+ const userState = analytics.user();
1671
+ if (userState) {
1672
+ userState.anonymousId = id;
1673
+ }
1674
+ analytics.setAnonymousId(id);
1197
1675
  }, group(groupId, traits, options, callback) {
1198
1676
  return __awaiter(this, void 0, void 0, function* () {
1199
1677
  const results = [];
package/dist/jitsu.d.ts CHANGED
@@ -43,6 +43,10 @@ type JitsuOptions = {
43
43
  * If not set at all, it will be detected automatically by presence of `window` object
44
44
  */
45
45
  s2s?: boolean;
46
+ /**
47
+ * Timeout for fetch requests. Default value: 5000
48
+ */
49
+ fetchTimeoutMs?: number;
46
50
  };
47
51
  type PersistentStorage = {
48
52
  getItem: (key: string, options?: any) => any;