@miradorlabs/parallax-web 1.0.3 → 1.0.6

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/index.umd.js CHANGED
@@ -6,67 +6,6 @@
6
6
 
7
7
  var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
8
8
 
9
- var grpcWeb = {};
10
-
11
- /*
12
-
13
- Copyright The Closure Library Authors.
14
- SPDX-License-Identifier: Apache-2.0
15
- */
16
-
17
- var hasRequiredGrpcWeb;
18
-
19
- function requireGrpcWeb () {
20
- if (hasRequiredGrpcWeb) return grpcWeb;
21
- hasRequiredGrpcWeb = 1;
22
- var n,p=p||{},q=grpcWeb||self;function r(a,b){a=a.split(".");b=b||q;for(var c=0;c<a.length;c++)if(b=b[a[c]],b==null)return null;return b}function t(a){var b=typeof a;return b=="object"&&a!=null||b=="function"}function ca(a,b,c){return a.call.apply(a.bind,arguments)}
23
- function da(a,b,c){if(!a)throw Error();if(arguments.length>2){var d=Array.prototype.slice.call(arguments,2);return function(){var e=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(e,d);return a.apply(b,e)}}return function(){return a.apply(b,arguments)}}function w(a,b,c){w=Function.prototype.bind&&Function.prototype.bind.toString().indexOf("native code")!=-1?ca:da;return w.apply(null,arguments)}
24
- function x(a,b){function c(){}c.prototype=b.prototype;a.N=b.prototype;a.prototype=new c;a.prototype.constructor=a;a.aa=function(d,e,g){for(var f=Array(arguments.length-2),h=2;h<arguments.length;h++)f[h-2]=arguments[h];return b.prototype[e].apply(d,f)};}class ea{constructor(a){this.g=a||{};}get(a){return this.g[a]}}class fa{constructor(a,b,c){var d=new ea;this.j=a;this.h=b;this.g=c;this.i=d;}getRequestMessage(){return this.j}getMethodDescriptor(){return this.h}getMetadata(){return this.g}getCallOptions(){return this.i}}class ha{constructor(a,b,c={},d=null){this.i=a;this.g=c;this.h=b;this.j=d;}getResponseMessage(){return this.i}getMetadata(){return this.g}getMethodDescriptor(){return this.h}getStatus(){return this.j}}function ia(a,b,c={}){return new fa(b,a,c)}function ja(a,b,c={},d=null){return new ha(b,a,c,d)}const ka=class{constructor(a,b,c,d,e,g){this.name=a;this.g=e;this.h=g;}getName(){return this.name}};ka.prototype.getName=ka.prototype.getName;class la{constructor(a){this.g=a;}on(a,b){return a=="data"||a=="error"?this:this.g.on(a,b)}removeListener(a,b){return this.g.removeListener(a,b)}cancel(){this.g.cancel();}}function ma(a){switch(a){case 0:return "No Error";case 1:return "Access denied to content document";case 2:return "File not found";case 3:return "Firefox silently errored";case 4:return "Application custom error";case 5:return "An exception occurred";case 6:return "Http response at 400 or 500 level";case 7:return "Request was aborted";case 8:return "Request timed out";case 9:return "The resource is not available offline";default:return "Unrecognized error code"}}function y(a,b){if(Error.captureStackTrace)Error.captureStackTrace(this,y);else {const c=Error().stack;c&&(this.stack=c);}a&&(this.message=String(a));b!==void 0&&(this.cause=b);}x(y,Error);y.prototype.name="CustomError";function na(a,b){a=a.split("%s");let c="";const d=a.length-1;for(let e=0;e<d;e++)c+=a[e]+(e<b.length?b[e]:"%s");y.call(this,c+a[d]);}x(na,y);na.prototype.name="AssertionError";function oa(a,b){throw new na("Failure"+(": "+a),Array.prototype.slice.call(arguments,1));}function pa(a,b){function c(l){l==qa?f.o=l:l==B?f.o=l:ra(f,h,k,"invalid frame byte");f.h=sa;f.g=0;f.l=0;}function d(l){f.l++;f.g=(f.g<<8)+l;f.l==4&&(f.h=ta,f.m=0,typeof Uint8Array!=="undefined"?f.i=new Uint8Array(f.g):f.i=Array(f.g),f.g==0&&g());}function e(l){f.i[f.m++]=l;f.m==f.g&&g();}function g(){var l={};l[f.o]=f.i;f.j.push(l);f.h=ua;}var f=a,h,k=0;for(b instanceof Uint8Array||b instanceof Array?h=b:h=new Uint8Array(b);k<h.length;){switch(f.h){case va:ra(f,h,k,"stream already broken");break;case ua:c(h[k]);
25
- break;case sa:d(h[k]);break;case ta:e(h[k]);break;default:throw Error("unexpected parser state: "+f.h);}f.v++;k++;}a=f.j;f.j=[];return a.length>0?a:null}class wa{constructor(){this.u=null;this.j=[];this.v=0;this.h=ua;this.l=this.g=this.o=0;this.i=null;this.m=0;}}var ua=0,sa=1,ta=2,va=3,qa=0,B=128;function ra(a,b,c,d){a.h=va;a.u="The stream is broken @"+a.v+"/"+c+". Error: "+d+". With input:\n"+b;throw Error(a.u);}function xa(a){switch(a){case 200:return 0;case 400:return 3;case 401:return 16;case 403:return 7;case 404:return 5;case 409:return 10;case 412:return 9;case 429:return 8;case 499:return 1;case 500:return 2;case 501:return 12;case 503:return 14;case 504:return 4;default:return 2}}
26
- function ya(a){switch(a){case 0:return "OK";case 1:return "CANCELLED";case 2:return "UNKNOWN";case 3:return "INVALID_ARGUMENT";case 4:return "DEADLINE_EXCEEDED";case 5:return "NOT_FOUND";case 6:return "ALREADY_EXISTS";case 7:return "PERMISSION_DENIED";case 16:return "UNAUTHENTICATED";case 8:return "RESOURCE_EXHAUSTED";case 9:return "FAILED_PRECONDITION";case 10:return "ABORTED";case 11:return "OUT_OF_RANGE";case 12:return "UNIMPLEMENTED";case 13:return "INTERNAL";case 14:return "UNAVAILABLE";case 15:return "DATA_LOSS";
27
- default:return ""}}class C extends Error{constructor(a,b,c={}){super(b);this.code=a;this.metadata=c;}toString(){let a=`RpcError(${ya(this.code)||String(this.code)})`;this.message&&(a+=": "+this.message);return a}}C.prototype.name="RpcError";const za=Array.prototype.indexOf?function(a,b){return Array.prototype.indexOf.call(a,b,void 0)}:function(a,b){if(typeof a==="string")return typeof b!=="string"||b.length!=1?-1:a.indexOf(b,0);for(let c=0;c<a.length;c++)if(c in a&&a[c]===b)return c;return -1};function Aa(){var a=q.navigator;return a&&(a=a.userAgent)?a:""}function D(a){return Aa().indexOf(a)!=-1}function Ba(a){Ba[" "](a);return a}Ba[" "]=function(){};var Ca=D("Trident")||D("MSIE"),Da=D("Gecko")&&!(Aa().toLowerCase().indexOf("webkit")!=-1&&!D("Edge"))&&!(D("Trident")||D("MSIE"))&&!D("Edge");var Fa=class{constructor(a){if(Ea!==Ea)throw Error("SafeUrl is not meant to be built directly");this.g=a;}toString(){return this.g.toString()}},Ea={};new Fa("about:invalid#zClosurez");new Fa("about:blank");const Ga={};class Ha{constructor(){if(Ga!==Ga)throw Error("SafeStyle is not meant to be built directly");}toString(){return "".toString()}}new Ha;function Ia(a,b){for(const c in a)b.call(void 0,a[c],c,a);}function Ja(a,b){const c={};for(const d in a)c[d]=b.call(void 0,a[d],d,a);return c}const Ka="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" ");function La(a,b){let c,d;for(let e=1;e<arguments.length;e++){d=arguments[e];for(c in d)a[c]=d[c];for(let g=0;g<Ka.length;g++)c=Ka[g],Object.prototype.hasOwnProperty.call(d,c)&&(a[c]=d[c]);}}const Ma={};class Na{constructor(){if(Ma!==Ma)throw Error("SafeStyleSheet is not meant to be built directly");}toString(){return "".toString()}}new Na;const Oa={};class Pa{constructor(){var a=q.trustedTypes&&q.trustedTypes.emptyHTML||"";if(Oa!==Oa)throw Error("SafeHtml is not meant to be built directly");this.g=a;}toString(){return this.g.toString()}}new Pa;function Qa(a){var b=1;a=a.split(":");const c=[];for(;b>0&&a.length;)c.push(a.shift()),b--;a.length&&c.push(a.join(":"));return c}function E(){this.v=this.v;this.o=this.o;}var Ra=0;E.prototype.v=false;E.prototype.dispose=function(){if(!this.v&&(this.v=true,this.C(),0!=Ra));};E.prototype.C=function(){if(this.o)for(;this.o.length;)this.o.shift()();};var Ta=Object.freeze||function(a){return a};function F(a,b){this.type=a;this.g=this.target=b;this.defaultPrevented=false;}F.prototype.h=function(){this.defaultPrevented=true;};var Ua=function(){if(!q.addEventListener||!Object.defineProperty)return false;var a=false,b=Object.defineProperty({},"passive",{get:function(){a=true;}});try{const c=()=>{};q.addEventListener("test",c,b);q.removeEventListener("test",c,b);}catch(c){}return a}();function G(a,b){F.call(this,a?a.type:"");this.relatedTarget=this.g=this.target=null;this.button=this.screenY=this.screenX=this.clientY=this.clientX=0;this.key="";this.metaKey=this.shiftKey=this.altKey=this.ctrlKey=false;this.state=null;this.pointerId=0;this.pointerType="";this.i=null;a&&this.init(a,b);}x(G,F);var Va=Ta({2:"touch",3:"pen",4:"mouse"});
28
- G.prototype.init=function(a,b){var c=this.type=a.type,d=a.changedTouches&&a.changedTouches.length?a.changedTouches[0]:null;this.target=a.target||a.srcElement;this.g=b;if(b=a.relatedTarget){if(Da){a:{try{Ba(b.nodeName);var e=!0;break a}catch(g){}e=false;}e||(b=null);}}else c=="mouseover"?b=a.fromElement:c=="mouseout"&&(b=a.toElement);this.relatedTarget=b;d?(this.clientX=d.clientX!==void 0?d.clientX:d.pageX,this.clientY=d.clientY!==void 0?d.clientY:d.pageY,this.screenX=d.screenX||0,this.screenY=d.screenY||
29
- 0):(this.clientX=a.clientX!==void 0?a.clientX:a.pageX,this.clientY=a.clientY!==void 0?a.clientY:a.pageY,this.screenX=a.screenX||0,this.screenY=a.screenY||0);this.button=a.button;this.key=a.key||"";this.ctrlKey=a.ctrlKey;this.altKey=a.altKey;this.shiftKey=a.shiftKey;this.metaKey=a.metaKey;this.pointerId=a.pointerId||0;this.pointerType=typeof a.pointerType==="string"?a.pointerType:Va[a.pointerType]||"";this.state=a.state;this.i=a;a.defaultPrevented&&G.N.h.call(this);};
30
- G.prototype.h=function(){G.N.h.call(this);var a=this.i;a.preventDefault?a.preventDefault():a.returnValue=false;};var H="closure_listenable_"+(Math.random()*1E6|0);var Wa=0;function Xa(a,b,c,d,e){this.listener=a;this.proxy=null;this.src=b;this.type=c;this.capture=!!d;this.M=e;this.key=++Wa;this.D=this.L=false;}function I(a){a.D=true;a.listener=null;a.proxy=null;a.src=null;a.M=null;}function J(a){this.src=a;this.g={};this.h=0;}J.prototype.add=function(a,b,c,d,e){var g=a.toString();a=this.g[g];a||(a=this.g[g]=[],this.h++);var f=Ya(a,b,d,e);f>-1?(b=a[f],c||(b.L=false)):(b=new Xa(b,this.src,g,!!d,e),b.L=c,a.push(b));return b};function Za(a,b){var c=b.type;if(c in a.g){var d=a.g[c],e=za(d,b),g;(g=e>=0)&&Array.prototype.splice.call(d,e,1);g&&(I(b),a.g[c].length==0&&(delete a.g[c],a.h--));}}
31
- function Ya(a,b,c,d){for(var e=0;e<a.length;++e){var g=a[e];if(!g.D&&g.listener==b&&g.capture==!!c&&g.M==d)return e}return -1}var $a="closure_lm_"+(Math.random()*1E6|0),ab={};function cb(a,b,c,d,e){if(Array.isArray(b))for(var g=0;g<b.length;g++)cb(a,b[g],c,d,e);else c=eb(c),a&&a[H]?a.j.add(String(b),c,false,t(d)?!!d.capture:false,e):fb(a,b,c,false,d,e);}
32
- function fb(a,b,c,d,e,g){if(!b)throw Error("Invalid event type");var f=t(e)?!!e.capture:!!e,h=gb(a);h||(a[$a]=h=new J(a));c=h.add(b,c,d,f,g);if(!c.proxy){d=hb();c.proxy=d;d.src=a;d.listener=c;if(a.addEventListener)Ua||(e=f),e===void 0&&(e=false),a.addEventListener(b.toString(),d,e);else if(a.attachEvent)a.attachEvent(mb(b.toString()),d);else if(a.addListener&&a.removeListener)a.addListener(d);else throw Error("addEventListener and attachEvent are unavailable.");}}
33
- function hb(){function a(c){return b.call(a.src,a.listener,c)}const b=nb;return a} function ob(a,b,c,d,e){if(Array.isArray(b))for(var g=0;g<b.length;g++)ob(a,b[g],c,d,e);else (d=t(d)?!!d.capture:!!d,c=eb(c),a&&a[H])?(a=a.j,b=String(b).toString(),b in a.g&&(g=a.g[b],c=Ya(g,c,d,e),c>-1&&(I(g[c]),Array.prototype.splice.call(g,c,1),g.length==0&&(delete a.g[b],a.h--)))):a&&(a=gb(a))&&(b=a.g[b.toString()],a=-1,b&&(a=Ya(b,c,d,e)),(c=a>-1?b[a]:null)&&pb(c));}
34
- function pb(a){if(typeof a!=="number"&&a&&!a.D){var b=a.src;if(b&&b[H])Za(b.j,a);else {var c=a.type,d=a.proxy;b.removeEventListener?b.removeEventListener(c,d,a.capture):b.detachEvent?b.detachEvent(mb(c),d):b.addListener&&b.removeListener&&b.removeListener(d);(c=gb(b))?(Za(c,a),c.h==0&&(c.src=null,b[$a]=null)):I(a);}}}function mb(a){return a in ab?ab[a]:ab[a]="on"+a}function nb(a,b){if(a.D)a=true;else {b=new G(b,this);var c=a.listener,d=a.M||a.src;a.L&&pb(a);a=c.call(d,b);}return a}
35
- function gb(a){a=a[$a];return a instanceof J?a:null}var qb="__closure_events_fn_"+(Math.random()*1E9>>>0);function eb(a){if(typeof a==="function")return a;a[qb]||(a[qb]=function(b){return a.handleEvent(b)});return a[qb]}function K(){E.call(this);this.j=new J(this);this.W=this;this.S=null;}x(K,E);K.prototype[H]=true;K.prototype.removeEventListener=function(a,b,c,d){ob(this,a,b,c,d);};
36
- function L(a,b){var c,d=a.S;if(d)for(c=[];d;d=d.S)c.push(d);a=a.W;d=b.type||b;if(typeof b==="string")b=new F(b,a);else if(b instanceof F)b.target=b.target||a;else {var e=b;b=new F(d,a);La(b,e);}e=true;if(c)for(var g=c.length-1;g>=0;g--){var f=b.g=c[g];e=M(f,d,true,b)&&e;}f=b.g=a;e=M(f,d,true,b)&&e;e=M(f,d,false,b)&&e;if(c)for(g=0;g<c.length;g++)f=b.g=c[g],e=M(f,d,false,b)&&e;}
37
- K.prototype.C=function(){K.N.C.call(this);if(this.j){var a=this.j,c;for(c in a.g){for(var d=a.g[c],e=0;e<d.length;e++)I(d[e]);delete a.g[c];a.h--;}}this.S=null;};function M(a,b,c,d){b=a.j.g[String(b)];if(!b)return true;b=b.concat();for(var e=true,g=0;g<b.length;++g){var f=b[g];if(f&&!f.D&&f.capture==c){var h=f.listener,k=f.M||f.src;f.L&&Za(a.j,f);e=h.call(k,d)!==false&&e;}}return e&&!d.defaultPrevented}var rb=q;function sb(a,b,c){if(typeof a==="function")c&&(a=w(a,c));else if(a&&typeof a.handleEvent=="function")a=w(a.handleEvent,a);else throw Error("Invalid listener argument");return Number(b)>2147483647?-1:rb.setTimeout(a,b||0)}var N=class{constructor(a,b){this.name=a;this.value=b;}toString(){return this.name}},O=new N("OFF",Infinity),tb=new N("SEVERE",1E3),ub=new N("CONFIG",700),vb=new N("FINE",500),yb=class{constructor(a,b,c){this.reset(a||O,b,c,void 0,void 0);}reset(){}};function zb(a){if(a.g)return a.g;if(a.h)return zb(a.h);oa("Root logger has no level set.");return O}function Ab(a,b){for(;a;)a.j.forEach(c=>{c(b);}),a=a.h;}
38
- var Bb=class{constructor(a,b=null){this.g=null;this.j=[];this.h=b||null;this.i=[];this.l={getName:()=>a};}};function P(a,b){var c=a.entries[b];if(c)return c;c=P(a,b.slice(0,Math.max(b.lastIndexOf("."),0)));const d=new Bb(b,c);a.entries[b]=d;c.i.push(d);return d}var Cb=class{constructor(){this.entries={};const a=new Bb("");a.g=ub;this.entries[""]=a;}},Db;function Eb(){Db||=new Cb;return Db}
39
- function Fb(a,b,c){var d;if(d=a)if(d=a&&b){d=b.value;var e=a?zb(P(Eb(),a.getName())):O;d=d>=e.value;}d&&(b=b||O,d=P(Eb(),a.getName()),typeof c==="function"&&(c=c()),a=a.getName(),a=new yb(b,c,a),Ab(d,a));}function Gb(a,b){a&&Fb(a,tb,b);}function Q(a,b){a&&Fb(a,vb,b);}function Hb(){}Hb.prototype.g=null;function Ib(a){var b;(b=a.g)||(b={},Jb(a)&&(b[0]=true,b[1]=true),b=a.g=b);return b}var Kb;function Lb(){}x(Lb,Hb);function Mb(a){return (a=Jb(a))?new ActiveXObject(a):new XMLHttpRequest}function Jb(a){if(!a.h&&typeof XMLHttpRequest=="undefined"&&typeof ActiveXObject!="undefined"){const b=["MSXML2.XMLHTTP.6.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"];for(let c=0;c<b.length;c++){const d=b[c];try{return new ActiveXObject(d),a.h=d}catch(e){}}throw Error("Could not create ActiveXObject. ActiveX might be disabled, or MSXML might not be installed");}return a.h}Kb=new Lb;var Nb=RegExp("^(?:([^:/?#.]+):)?(?://(?:([^\\\\/?#]*)@)?([^\\\\/?#]*?)(?::([0-9]+))?(?=[\\\\/?#]|$))?([^?#]+)?(?:\\?([^#]*))?(?:#([\\s\\S]*))?$");function R(a){K.call(this);this.headers=new Map;this.K=a||null;this.i=false;this.J=this.g=null;this.T=this.G="";this.m=0;this.A="";this.l=this.R=this.F=this.P=false;this.u=0;this.H=null;this.B=Ob;this.I=this.O=false;}x(R,K);var Ob="";R.prototype.h=P(Eb(),"goog.net.XhrIo").l;var Pb=/^https?$/i,Qb=["POST","PUT"];
40
- function Rb(a,b,c){if(a.g)throw Error("[goog.net.XhrIo] Object is active with another request="+a.G+"; newUri="+b);a.G=b;a.A="";a.m=0;a.T="POST";a.P=false;a.i=true;a.g=a.K?Mb(a.K):Mb(Kb);a.J=a.K?Ib(a.K):Ib(Kb);a.g.onreadystatechange=w(a.U,a);try{Q(a.h,S(a,"Opening Xhr")),a.R=!0,a.g.open("POST",String(b),!0),a.R=!1;}catch(g){Q(a.h,S(a,"Error opening Xhr: "+g.message));Sb(a,g);return}b=c||"";c=new Map(a.headers);const d=Array.from(c.keys()).find(g=>"content-type"==g.toLowerCase()),e=q.FormData&&b instanceof
41
- q.FormData;!(za(Qb,"POST")>=0)||d||e||c.set("Content-Type","application/x-www-form-urlencoded;charset=utf-8");for(const [g,f]of c)a.g.setRequestHeader(g,f);a.B&&(a.g.responseType=a.B);"withCredentials"in a.g&&a.g.withCredentials!==a.O&&(a.g.withCredentials=a.O);try{Tb(a),a.u>0&&(a.I=Ub(a.g),Q(a.h,S(a,"Will abort after "+a.u+"ms if incomplete, xhr2 "+a.I)),a.I?(a.g.timeout=a.u,a.g.ontimeout=w(a.V,a)):a.H=sb(a.V,a.u,a)),Q(a.h,S(a,"Sending request")),a.F=!0,a.g.send(b),a.F=!1;}catch(g){Q(a.h,S(a,"Send error: "+
42
- g.message)),Sb(a,g);}}function Ub(a){return Ca&&typeof a.timeout==="number"&&a.ontimeout!==void 0}n=R.prototype;n.V=function(){typeof p!="undefined"&&this.g&&(this.A="Timed out after "+this.u+"ms, aborting",this.m=8,Q(this.h,S(this,this.A)),L(this,"timeout"),this.abort(8));};function Sb(a,b){a.i=false;a.g&&(a.l=true,a.g.abort(),a.l=false);a.A=b;a.m=5;Vb(a);T(a);}function Vb(a){a.P||(a.P=true,L(a,"complete"),L(a,"error"));}
43
- n.abort=function(a){this.g&&this.i&&(Q(this.h,S(this,"Aborting")),this.i=false,this.l=true,this.g.abort(),this.l=false,this.m=a||7,L(this,"complete"),L(this,"abort"),T(this));};n.C=function(){this.g&&(this.i&&(this.i=false,this.l=true,this.g.abort(),this.l=false),T(this,true));R.N.C.call(this);};n.U=function(){this.v||(this.R||this.F||this.l?Wb(this):this.X());};n.X=function(){Wb(this);};
44
- function Wb(a){if(a.i&&typeof p!="undefined")if(a.J[1]&&U(a)==4&&a.getStatus()==2)Q(a.h,S(a,"Local request error detected and ignored"));else if(a.F&&U(a)==4)sb(a.U,0,a);else if(L(a,"readystatechange"),U(a)==4){Q(a.h,S(a,"Request complete"));a.i=false;try{const f=a.getStatus();a:switch(f){case 200:case 201:case 202:case 204:case 206:case 304:case 1223:var b=!0;break a;default:b=!1;}var c;if(!(c=b)){var d;if(d=f===0){var e=String(a.G).match(Nb)[1]||null;!e&&q.self&&q.self.location&&(e=q.self.location.protocol.slice(0,
45
- -1));d=!Pb.test(e?e.toLowerCase():"");}c=d;}if(c)L(a,"complete"),L(a,"success");else {a.m=6;try{var g=U(a)>2?a.g.statusText:"";}catch(h){Q(a.h,"Can not get status: "+h.message),g="";}a.A=g+" ["+a.getStatus()+"]";Vb(a);}}finally{T(a);}}}function T(a,b){if(a.g){Tb(a);const c=a.g,d=a.J[0]?()=>{}:null;a.g=null;a.J=null;b||L(a,"ready");try{c.onreadystatechange=d;}catch(e){Gb(a.h,"Problem encountered resetting onreadystatechange: "+e.message);}}}
46
- function Tb(a){a.g&&a.I&&(a.g.ontimeout=null);a.H&&(rb.clearTimeout(a.H),a.H=null);}n.isActive=function(){return !!this.g};function U(a){return a.g?a.g.readyState:0}n.getStatus=function(){try{return U(this)>2?this.g.status:-1}catch(a){return -1}};
47
- function Xb(a){try{if(!a.g)return null;if("response"in a.g)return a.g.response;switch(a.B){case Ob:case "text":return a.g.responseText;case "arraybuffer":if("mozResponseArrayBuffer"in a.g)return a.g.mozResponseArrayBuffer}Gb(a.h,"Response type "+a.B+" is not supported on this browser");return null}catch(b){return Q(a.h,"Can not get response: "+b.message),null}}
48
- function Yb(a){const b={};a=(a.g&&U(a)>=2?a.g.getAllResponseHeaders()||"":"").split("\r\n");for(let d=0;d<a.length;d++){if(/^[\s\xa0]*$/.test(a[d]))continue;var c=Qa(a[d]);const e=c[0];c=c[1];if(typeof c!=="string")continue;c=c.trim();const g=b[e]||[];b[e]=g;g.push(c);}return Ja(b,function(d){return d.join(", ")})}function S(a,b){return b+" ["+a.T+" "+a.G+" "+a.getStatus()+"]"}var Zb={},V=null;function $b(a){var b=a.length,c=b*3/4;c%3?c=Math.floor(c):"=.".indexOf(a[b-1])!=-1&&(c="=.".indexOf(a[b-2])!=-1?c-2:c-1);var d=new Uint8Array(c),e=0;ac(a,function(g){d[e++]=g;});return e!==c?d.subarray(0,e):d}
49
- function ac(a,b){function c(k){for(;d<a.length;){var l=a.charAt(d++),m=V[l];if(m!=null)return m;if(!/^[\s\xa0]*$/.test(l))throw Error("Unknown base64 encoding at char: "+l);}return k}bc();for(var d=0;;){var e=c(-1),g=c(0),f=c(64),h=c(64);if(h===64&&e===-1)break;b(e<<2|g>>4);f!=64&&(b(g<<4&240|f>>2),h!=64&&b(f<<6&192|h));}}
50
- function bc(){if(!V){V={};for(var a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),b=["+/=","+/","-_=","-_.","-_"],c=0;c<5;c++){var d=a.concat(b[c].split(""));Zb[c]=d;for(var e=0;e<d.length;e++){var g=d[e];V[g]===void 0&&(V[g]=e);}}}}const cc=["content-type","grpc-status","grpc-message"];function W(a,b){if(b.code!=0){var c=new C(b.code,decodeURIComponent(b.message||""),b.metadata);for(let d=0;d<a.j.length;d++)a.j[d](c);}b={code:b.code,details:decodeURIComponent(b.message||""),metadata:b.metadata};for(c=0;c<a.m.length;c++)a.m[c](b);}function dc(a,b){for(let c=0;c<a.l.length;c++)a.l[c](b);}function ec(a){for(let b=0;b<a.i.length;b++)a.i[b]();}function X(a,b){b=a.indexOf(b);b>-1&&a.splice(b,1);}
51
- class Y{constructor(a){this.g=a.$;this.v=null;this.h=[];this.m=[];this.l=[];this.j=[];this.i=[];this.u=false;this.o=0;this.A=new wa;const b=this;cb(this.g,"readystatechange",function(){var c=b.g;if(c=c.g?c.g.getResponseHeader("Content-Type"):null){c=c.toLowerCase();if(c.lastIndexOf("application/grpc-web-text",0)==0){c=b.g;try{var d=c.g?c.g.responseText:"";}catch(h){Q(c.h,"Can not get responseText: "+h.message),d="";}c=d||"";d=c.length-c.length%4;c=c.substr(b.o,d-b.o);if(c.length==0)return;b.o=d;c=$b(c);}else if(c.lastIndexOf("application/grpc",
52
- 0)==0)c=new Uint8Array(Xb(b.g));else {W(b,new C(2,"Unknown Content-type received."));return}d=null;try{d=pa(b.A,c);}catch(h){W(b,new C(2,"Error in parsing response body"));}if(d)for(c=0;c<d.length;c++){if(qa in d[c]){var e=d[c][qa];if(e){var g=false;let h;try{h=b.v(e),g=!0;}catch(k){W(b,new C(13,`Error when deserializing response data; error: ${k}`+`, response: ${h}`));}if(g){e=b;g=h;for(var f=0;f<e.h.length;f++)e.h[f](g);}}}if(B in d[c]&&d[c][B].length>0){e="";for(g=0;g<d[c][B].length;g++)e+=String.fromCharCode(d[c][B][g]);
53
- e=e.trim().split("\r\n");g={};for(f=0;f<e.length;f++){const h=e[f].indexOf(":");g[e[f].substring(0,h).trim()]=e[f].substring(h+1).trim();}e=g;g=0;f="";"grpc-status"in e&&(g=Number(e["grpc-status"]),delete e["grpc-status"]);"grpc-message"in e&&(f=e["grpc-message"],delete e["grpc-message"]);W(b,new C(g,f,e));}}}});cb(this.g,"complete",function(){var c=b.g.m,d=2,e="";const g={};d=Yb(b.g);const f={};for(var h in d)d.hasOwnProperty(h)&&(f[h.toLowerCase()]=d[h]);Object.keys(f).forEach(k=>{cc.includes(k)||
54
- (g[k]=f[k]);});dc(b,g);h=-1;if(c!=0){switch(c){case 7:d=10;break;case 8:d=4;break;case 6:h=b.g.getStatus();d=xa(h);break;default:d=14;}d==10&&b.u||(e=ma(c),h!=-1&&(e+=", http status code: "+h),W(b,new C(d,e)));}else c=false,"grpc-status"in f&&(d=Number(f["grpc-status"]),"grpc-message"in f&&(e=f["grpc-message"]),d!=0&&(W(b,new C(d,e||"",f)),c=true)),c||ec(b);});}on(a,b){a=="data"?this.h.push(b):a=="status"?this.m.push(b):a=="metadata"?this.l.push(b):a=="end"?this.i.push(b):a=="error"&&this.j.push(b);return this}removeListener(a,
55
- b){a=="data"?X(this.h,b):a=="status"?X(this.m,b):a=="metadata"?X(this.l,b):a=="end"?X(this.i,b):a=="error"&&X(this.j,b);return this}cancel(){this.u=true;this.g.abort();}}Y.prototype.cancel=Y.prototype.cancel;Y.prototype.removeListener=Y.prototype.removeListener;Y.prototype.on=Y.prototype.on;function fc(a){let b="";Ia(a,function(c,d){b+=d;b+=":";b+=c;b+="\r\n";});return b}function hc(a,b){return b.reduce((c,d)=>e=>d.intercept(e,c),a)}
56
- function ic(a,b,c){let d=false,e=null,g=false;a.on("data",function(f){d=true;e=f;});a.on("error",function(f){f.code==0||g||(g=true,b(f,null));});a.on("status",function(f){f.code==0||g?c&&b(null,null,f):(g=true,b({code:f.code,message:f.details,metadata:f.metadata},null));});if(c)a.on("metadata",function(f){b(null,null,null,f);});a.on("end",function(){g||(d?c?b(null,e,null,null,true):b(null,e):b({code:2,message:"Incomplete response"}));c&&b(null,null);});}
57
- function jc(a,b,c){var d=b.getMethodDescriptor(),e=c+d.getName();c=a.i?a.i:new R;c.O=a.j;const g=new Y({$:c});g.v=d.h;var f=b.getMetadata();for(var h in f)c.headers.set(h,f[h]);a.g=="text"?(c.headers.set("Content-Type","application/grpc-web-text"),c.headers.set("Accept","application/grpc-web-text")):c.headers.set("Content-Type","application/grpc-web+proto");c.headers.set("X-User-Agent","grpc-web-javascript/0.1");c.headers.set("X-Grpc-Web","1");c.headers.has("deadline")&&(h=Number(c.headers.get("deadline")),
58
- h=Math.ceil(h-(new Date).getTime()),c.headers.delete("deadline"),h===Infinity&&(h=0),h>0&&(c.headers.set("grpc-timeout",h+"m"),c.u=Math.max(0,Math.max(1E3,Math.ceil(h*1.1)))));if(a.l){h=c.headers;f={};for(k of h.keys())f[k]=h.get(k);var k=f;c.headers.clear();b:{for(l in k){var l=false;break b}l=true;}if(!l)if(k=fc(k),typeof e==="string"){if(l=encodeURIComponent("$httpHeaders"),k=k!=null?"="+encodeURIComponent(String(k)):"",l+=k)k=e.indexOf("#"),k<0&&(k=e.length),h=e.indexOf("?"),h<0||h>k?(h=k,f=""):f=e.substring(h+
59
- 1,k),e=[e.slice(0,h),f,e.slice(k)],k=e[1],e[1]=l?k?k+"&"+l:l:k,e=e[0]+(e[1]?"?"+e[1]:"")+e[2];}else e.g("$httpHeaders",k);}b=(0, d.g)(b.getRequestMessage());d=b.length;l=[0,0,0,0];k=new Uint8Array(5+d);for(h=3;h>=0;h--)l[h]=d%256,d>>>=8;k.set(new Uint8Array(l),1);k.set(b,5);b=k;if(a.g=="text"){a=b;var m;m===void 0&&(m=0);bc();m=Zb[m];b=Array(Math.floor(a.length/3));d=m[64]||"";for(l=k=0;k<a.length-2;k+=3){var z=a[k],A=a[k+1];f=a[k+2];h=m[z>>2];z=m[(z&3)<<4|A>>4];A=m[(A&15)<<2|f>>6];f=m[f&63];b[l++]=
60
- h+z+A+f;}h=0;f=d;switch(a.length-k){case 2:h=a[k+1],f=m[(h&15)<<2]||d;case 1:a=a[k],b[l]=m[a>>2]+m[(a&3)<<4|h>>4]+f+d;}b=b.join("");}else a.g=="binary"&&(c.B="arraybuffer");Rb(c,e,b);return g}
61
- function kc(a,b,c,d,e,g={}){const f=b.substr(0,b.length-e.name.length),h=g&&g.signal;return hc(k=>new Promise((l,m)=>{if(h&&h.aborted){const v=new C(1,"Aborted");v.cause=h.reason;m(v);}else {var z=jc(a,k,f),A,ib,jb;ic(z,(v,lc,kb,lb,mc)=>{v?m(v):mc?jb=lc:kb?ib=kb:lb?A=lb:l(ja(k.getMethodDescriptor(),jb,A,ib));},true);h&&h.addEventListener("abort",()=>{z.cancel();const v=new C(1,"Aborted");v.cause=h.reason;m(v);});}}),a.m).call(a,ia(e,c,d)).then(k=>k.getResponseMessage())}
62
- class Z{constructor(a={},b){this.g=a.format||r("format",a)||"text";this.l=a.ca||r("suppressCorsPreflight",a)||false;this.j=a.withCredentials||r("withCredentials",a)||false;this.h=a.ba||r("streamInterceptors",a)||[];this.m=a.da||r("unaryInterceptors",a)||[];this.i=b||null;}Y(a,b,c,d,e){const g=a.substr(0,a.length-d.name.length);a=hc(f=>jc(this,f,g),this.h).call(this,ia(d,b,c));ic(a,e,false);return new la(a)}unaryCall(a,b,c,d,e={}){return kc(this,a,b,c,d,e)}Z(a,b,c,d){const e=a.substr(0,a.length-d.name.length);
63
- return hc(g=>jc(this,g,e),this.h).call(this,ia(d,b,c))}}Z.prototype.serverStreaming=Z.prototype.Z;Z.prototype.unaryCall=Z.prototype.unaryCall;Z.prototype.rpcCall=Z.prototype.Y;grpcWeb.CallOptions=ea;grpcWeb.MethodDescriptor=ka;grpcWeb.GrpcWebClientBase=Z;grpcWeb.RpcError=C;grpcWeb.StatusCode={OK:0,CANCELLED:1,UNKNOWN:2,INVALID_ARGUMENT:3,DEADLINE_EXCEEDED:4,NOT_FOUND:5,ALREADY_EXISTS:6,PERMISSION_DENIED:7,UNAUTHENTICATED:16,RESOURCE_EXHAUSTED:8,FAILED_PRECONDITION:9,ABORTED:10,OUT_OF_RANGE:11,UNIMPLEMENTED:12,INTERNAL:13,UNAVAILABLE:14,DATA_LOSS:15};grpcWeb.MethodType={UNARY:"unary",SERVER_STREAMING:"server_streaming",BIDI_STREAMING:"bidi_streaming"};
64
- rb=typeof globalThis!=="undefined"&&globalThis||self;
65
- return grpcWeb;
66
- }
67
-
68
- var grpcWebExports = requireGrpcWeb();
69
-
70
9
  var parallax_gateway_pb = {};
71
10
 
72
11
  var googleProtobuf = {};
@@ -1118,7 +1057,8 @@
1118
1057
  var f, obj = {
1119
1058
  name: jspb.Message.getFieldWithDefault(msg, 1, ""),
1120
1059
  attributesMap: (f = msg.getAttributesMap()) ? f.toObject(includeInstance, undefined) : [],
1121
- tagsList: (f = jspb.Message.getRepeatedField(msg, 3)) == null ? undefined : f
1060
+ tagsList: (f = jspb.Message.getRepeatedField(msg, 3)) == null ? undefined : f,
1061
+ startTime: (f = msg.getStartTime()) && google_protobuf_timestamp_pb.Timestamp.toObject(includeInstance, f)
1122
1062
  };
1123
1063
 
1124
1064
  if (includeInstance) {
@@ -1169,6 +1109,11 @@
1169
1109
  var value = /** @type {string} */ (reader.readString());
1170
1110
  msg.addTags(value);
1171
1111
  break;
1112
+ case 4:
1113
+ var value = new google_protobuf_timestamp_pb.Timestamp;
1114
+ reader.readMessage(value,google_protobuf_timestamp_pb.Timestamp.deserializeBinaryFromReader);
1115
+ msg.setStartTime(value);
1116
+ break;
1172
1117
  default:
1173
1118
  reader.skipField();
1174
1119
  break;
@@ -1216,6 +1161,14 @@
1216
1161
  f
1217
1162
  );
1218
1163
  }
1164
+ f = message.getStartTime();
1165
+ if (f != null) {
1166
+ writer.writeMessage(
1167
+ 4,
1168
+ f,
1169
+ google_protobuf_timestamp_pb.Timestamp.serializeBinaryToWriter
1170
+ );
1171
+ }
1219
1172
  };
1220
1173
 
1221
1174
 
@@ -1297,6 +1250,43 @@
1297
1250
  };
1298
1251
 
1299
1252
 
1253
+ /**
1254
+ * optional google.protobuf.Timestamp start_time = 4;
1255
+ * @return {?proto.google.protobuf.Timestamp}
1256
+ */
1257
+ proto.gateway.parallax.v1.CreateTraceRequest.prototype.getStartTime = function() {
1258
+ return /** @type{?proto.google.protobuf.Timestamp} */ (
1259
+ jspb.Message.getWrapperField(this, google_protobuf_timestamp_pb.Timestamp, 4));
1260
+ };
1261
+
1262
+
1263
+ /**
1264
+ * @param {?proto.google.protobuf.Timestamp|undefined} value
1265
+ * @return {!proto.gateway.parallax.v1.CreateTraceRequest} returns this
1266
+ */
1267
+ proto.gateway.parallax.v1.CreateTraceRequest.prototype.setStartTime = function(value) {
1268
+ return jspb.Message.setWrapperField(this, 4, value);
1269
+ };
1270
+
1271
+
1272
+ /**
1273
+ * Clears the message field making it undefined.
1274
+ * @return {!proto.gateway.parallax.v1.CreateTraceRequest} returns this
1275
+ */
1276
+ proto.gateway.parallax.v1.CreateTraceRequest.prototype.clearStartTime = function() {
1277
+ return this.setStartTime(undefined);
1278
+ };
1279
+
1280
+
1281
+ /**
1282
+ * Returns whether this field is set.
1283
+ * @return {boolean}
1284
+ */
1285
+ proto.gateway.parallax.v1.CreateTraceRequest.prototype.hasStartTime = function() {
1286
+ return jspb.Message.getField(this, 4) != null;
1287
+ };
1288
+
1289
+
1300
1290
 
1301
1291
 
1302
1292
 
@@ -1330,7 +1320,8 @@
1330
1320
  proto.gateway.parallax.v1.CreateTraceResponse.toObject = function(includeInstance, msg) {
1331
1321
  var f, obj = {
1332
1322
  status: (f = msg.getStatus()) && proto_common_v1_status_pb.ResponseStatus.toObject(includeInstance, f),
1333
- traceId: jspb.Message.getFieldWithDefault(msg, 2, "")
1323
+ traceId: jspb.Message.getFieldWithDefault(msg, 2, ""),
1324
+ rootSpanId: jspb.Message.getFieldWithDefault(msg, 3, "")
1334
1325
  };
1335
1326
 
1336
1327
  if (includeInstance) {
@@ -1376,6 +1367,10 @@
1376
1367
  var value = /** @type {string} */ (reader.readString());
1377
1368
  msg.setTraceId(value);
1378
1369
  break;
1370
+ case 3:
1371
+ var value = /** @type {string} */ (reader.readString());
1372
+ msg.setRootSpanId(value);
1373
+ break;
1379
1374
  default:
1380
1375
  reader.skipField();
1381
1376
  break;
@@ -1420,6 +1415,13 @@
1420
1415
  f
1421
1416
  );
1422
1417
  }
1418
+ f = message.getRootSpanId();
1419
+ if (f.length > 0) {
1420
+ writer.writeString(
1421
+ 3,
1422
+ f
1423
+ );
1424
+ }
1423
1425
  };
1424
1426
 
1425
1427
 
@@ -1478,6 +1480,24 @@
1478
1480
  };
1479
1481
 
1480
1482
 
1483
+ /**
1484
+ * optional string root_span_id = 3;
1485
+ * @return {string}
1486
+ */
1487
+ proto.gateway.parallax.v1.CreateTraceResponse.prototype.getRootSpanId = function() {
1488
+ return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, ""));
1489
+ };
1490
+
1491
+
1492
+ /**
1493
+ * @param {string} value
1494
+ * @return {!proto.gateway.parallax.v1.CreateTraceResponse} returns this
1495
+ */
1496
+ proto.gateway.parallax.v1.CreateTraceResponse.prototype.setRootSpanId = function(value) {
1497
+ return jspb.Message.setProto3StringField(this, 3, value);
1498
+ };
1499
+
1500
+
1481
1501
 
1482
1502
 
1483
1503
 
@@ -1512,7 +1532,7 @@
1512
1532
  var f, obj = {
1513
1533
  name: jspb.Message.getFieldWithDefault(msg, 1, ""),
1514
1534
  traceId: jspb.Message.getFieldWithDefault(msg, 2, ""),
1515
- parentSpanId: (f = jspb.Message.getField(msg, 3)) == null ? undefined : f,
1535
+ parentSpanId: jspb.Message.getFieldWithDefault(msg, 3, ""),
1516
1536
  attributesMap: (f = msg.getAttributesMap()) ? f.toObject(includeInstance, undefined) : [],
1517
1537
  startTime: (f = msg.getStartTime()) && google_protobuf_timestamp_pb.Timestamp.toObject(includeInstance, f)
1518
1538
  };
@@ -1617,8 +1637,8 @@
1617
1637
  f
1618
1638
  );
1619
1639
  }
1620
- f = /** @type {string} */ (jspb.Message.getField(message, 3));
1621
- if (f != null) {
1640
+ f = message.getParentSpanId();
1641
+ if (f.length > 0) {
1622
1642
  writer.writeString(
1623
1643
  3,
1624
1644
  f
@@ -1689,25 +1709,7 @@
1689
1709
  * @return {!proto.gateway.parallax.v1.StartSpanRequest} returns this
1690
1710
  */
1691
1711
  proto.gateway.parallax.v1.StartSpanRequest.prototype.setParentSpanId = function(value) {
1692
- return jspb.Message.setField(this, 3, value);
1693
- };
1694
-
1695
-
1696
- /**
1697
- * Clears the field making it undefined.
1698
- * @return {!proto.gateway.parallax.v1.StartSpanRequest} returns this
1699
- */
1700
- proto.gateway.parallax.v1.StartSpanRequest.prototype.clearParentSpanId = function() {
1701
- return jspb.Message.setField(this, 3, undefined);
1702
- };
1703
-
1704
-
1705
- /**
1706
- * Returns whether this field is set.
1707
- * @return {boolean}
1708
- */
1709
- proto.gateway.parallax.v1.StartSpanRequest.prototype.hasParentSpanId = function() {
1710
- return jspb.Message.getField(this, 3) != null;
1712
+ return jspb.Message.setProto3StringField(this, 3, value);
1711
1713
  };
1712
1714
 
1713
1715
 
@@ -4087,6 +4089,67 @@
4087
4089
 
4088
4090
  var parallax_gateway_pbExports = requireParallax_gateway_pb();
4089
4091
 
4092
+ var grpcWeb = {};
4093
+
4094
+ /*
4095
+
4096
+ Copyright The Closure Library Authors.
4097
+ SPDX-License-Identifier: Apache-2.0
4098
+ */
4099
+
4100
+ var hasRequiredGrpcWeb;
4101
+
4102
+ function requireGrpcWeb () {
4103
+ if (hasRequiredGrpcWeb) return grpcWeb;
4104
+ hasRequiredGrpcWeb = 1;
4105
+ var n,p=p||{},q=grpcWeb||self;function r(a,b){a=a.split(".");b=b||q;for(var c=0;c<a.length;c++)if(b=b[a[c]],b==null)return null;return b}function t(a){var b=typeof a;return b=="object"&&a!=null||b=="function"}function ca(a,b,c){return a.call.apply(a.bind,arguments)}
4106
+ function da(a,b,c){if(!a)throw Error();if(arguments.length>2){var d=Array.prototype.slice.call(arguments,2);return function(){var e=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(e,d);return a.apply(b,e)}}return function(){return a.apply(b,arguments)}}function w(a,b,c){w=Function.prototype.bind&&Function.prototype.bind.toString().indexOf("native code")!=-1?ca:da;return w.apply(null,arguments)}
4107
+ function x(a,b){function c(){}c.prototype=b.prototype;a.N=b.prototype;a.prototype=new c;a.prototype.constructor=a;a.aa=function(d,e,g){for(var f=Array(arguments.length-2),h=2;h<arguments.length;h++)f[h-2]=arguments[h];return b.prototype[e].apply(d,f)};}class ea{constructor(a){this.g=a||{};}get(a){return this.g[a]}}class fa{constructor(a,b,c){var d=new ea;this.j=a;this.h=b;this.g=c;this.i=d;}getRequestMessage(){return this.j}getMethodDescriptor(){return this.h}getMetadata(){return this.g}getCallOptions(){return this.i}}class ha{constructor(a,b,c={},d=null){this.i=a;this.g=c;this.h=b;this.j=d;}getResponseMessage(){return this.i}getMetadata(){return this.g}getMethodDescriptor(){return this.h}getStatus(){return this.j}}function ia(a,b,c={}){return new fa(b,a,c)}function ja(a,b,c={},d=null){return new ha(b,a,c,d)}const ka=class{constructor(a,b,c,d,e,g){this.name=a;this.g=e;this.h=g;}getName(){return this.name}};ka.prototype.getName=ka.prototype.getName;class la{constructor(a){this.g=a;}on(a,b){return a=="data"||a=="error"?this:this.g.on(a,b)}removeListener(a,b){return this.g.removeListener(a,b)}cancel(){this.g.cancel();}}function ma(a){switch(a){case 0:return "No Error";case 1:return "Access denied to content document";case 2:return "File not found";case 3:return "Firefox silently errored";case 4:return "Application custom error";case 5:return "An exception occurred";case 6:return "Http response at 400 or 500 level";case 7:return "Request was aborted";case 8:return "Request timed out";case 9:return "The resource is not available offline";default:return "Unrecognized error code"}}function y(a,b){if(Error.captureStackTrace)Error.captureStackTrace(this,y);else {const c=Error().stack;c&&(this.stack=c);}a&&(this.message=String(a));b!==void 0&&(this.cause=b);}x(y,Error);y.prototype.name="CustomError";function na(a,b){a=a.split("%s");let c="";const d=a.length-1;for(let e=0;e<d;e++)c+=a[e]+(e<b.length?b[e]:"%s");y.call(this,c+a[d]);}x(na,y);na.prototype.name="AssertionError";function oa(a,b){throw new na("Failure"+(": "+a),Array.prototype.slice.call(arguments,1));}function pa(a,b){function c(l){l==qa?f.o=l:l==B?f.o=l:ra(f,h,k,"invalid frame byte");f.h=sa;f.g=0;f.l=0;}function d(l){f.l++;f.g=(f.g<<8)+l;f.l==4&&(f.h=ta,f.m=0,typeof Uint8Array!=="undefined"?f.i=new Uint8Array(f.g):f.i=Array(f.g),f.g==0&&g());}function e(l){f.i[f.m++]=l;f.m==f.g&&g();}function g(){var l={};l[f.o]=f.i;f.j.push(l);f.h=ua;}var f=a,h,k=0;for(b instanceof Uint8Array||b instanceof Array?h=b:h=new Uint8Array(b);k<h.length;){switch(f.h){case va:ra(f,h,k,"stream already broken");break;case ua:c(h[k]);
4108
+ break;case sa:d(h[k]);break;case ta:e(h[k]);break;default:throw Error("unexpected parser state: "+f.h);}f.v++;k++;}a=f.j;f.j=[];return a.length>0?a:null}class wa{constructor(){this.u=null;this.j=[];this.v=0;this.h=ua;this.l=this.g=this.o=0;this.i=null;this.m=0;}}var ua=0,sa=1,ta=2,va=3,qa=0,B=128;function ra(a,b,c,d){a.h=va;a.u="The stream is broken @"+a.v+"/"+c+". Error: "+d+". With input:\n"+b;throw Error(a.u);}function xa(a){switch(a){case 200:return 0;case 400:return 3;case 401:return 16;case 403:return 7;case 404:return 5;case 409:return 10;case 412:return 9;case 429:return 8;case 499:return 1;case 500:return 2;case 501:return 12;case 503:return 14;case 504:return 4;default:return 2}}
4109
+ function ya(a){switch(a){case 0:return "OK";case 1:return "CANCELLED";case 2:return "UNKNOWN";case 3:return "INVALID_ARGUMENT";case 4:return "DEADLINE_EXCEEDED";case 5:return "NOT_FOUND";case 6:return "ALREADY_EXISTS";case 7:return "PERMISSION_DENIED";case 16:return "UNAUTHENTICATED";case 8:return "RESOURCE_EXHAUSTED";case 9:return "FAILED_PRECONDITION";case 10:return "ABORTED";case 11:return "OUT_OF_RANGE";case 12:return "UNIMPLEMENTED";case 13:return "INTERNAL";case 14:return "UNAVAILABLE";case 15:return "DATA_LOSS";
4110
+ default:return ""}}class C extends Error{constructor(a,b,c={}){super(b);this.code=a;this.metadata=c;}toString(){let a=`RpcError(${ya(this.code)||String(this.code)})`;this.message&&(a+=": "+this.message);return a}}C.prototype.name="RpcError";const za=Array.prototype.indexOf?function(a,b){return Array.prototype.indexOf.call(a,b,void 0)}:function(a,b){if(typeof a==="string")return typeof b!=="string"||b.length!=1?-1:a.indexOf(b,0);for(let c=0;c<a.length;c++)if(c in a&&a[c]===b)return c;return -1};function Aa(){var a=q.navigator;return a&&(a=a.userAgent)?a:""}function D(a){return Aa().indexOf(a)!=-1}function Ba(a){Ba[" "](a);return a}Ba[" "]=function(){};var Ca=D("Trident")||D("MSIE"),Da=D("Gecko")&&!(Aa().toLowerCase().indexOf("webkit")!=-1&&!D("Edge"))&&!(D("Trident")||D("MSIE"))&&!D("Edge");var Fa=class{constructor(a){if(Ea!==Ea)throw Error("SafeUrl is not meant to be built directly");this.g=a;}toString(){return this.g.toString()}},Ea={};new Fa("about:invalid#zClosurez");new Fa("about:blank");const Ga={};class Ha{constructor(){if(Ga!==Ga)throw Error("SafeStyle is not meant to be built directly");}toString(){return "".toString()}}new Ha;function Ia(a,b){for(const c in a)b.call(void 0,a[c],c,a);}function Ja(a,b){const c={};for(const d in a)c[d]=b.call(void 0,a[d],d,a);return c}const Ka="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" ");function La(a,b){let c,d;for(let e=1;e<arguments.length;e++){d=arguments[e];for(c in d)a[c]=d[c];for(let g=0;g<Ka.length;g++)c=Ka[g],Object.prototype.hasOwnProperty.call(d,c)&&(a[c]=d[c]);}}const Ma={};class Na{constructor(){if(Ma!==Ma)throw Error("SafeStyleSheet is not meant to be built directly");}toString(){return "".toString()}}new Na;const Oa={};class Pa{constructor(){var a=q.trustedTypes&&q.trustedTypes.emptyHTML||"";if(Oa!==Oa)throw Error("SafeHtml is not meant to be built directly");this.g=a;}toString(){return this.g.toString()}}new Pa;function Qa(a){var b=1;a=a.split(":");const c=[];for(;b>0&&a.length;)c.push(a.shift()),b--;a.length&&c.push(a.join(":"));return c}function E(){this.v=this.v;this.o=this.o;}var Ra=0;E.prototype.v=false;E.prototype.dispose=function(){if(!this.v&&(this.v=true,this.C(),0!=Ra));};E.prototype.C=function(){if(this.o)for(;this.o.length;)this.o.shift()();};var Ta=Object.freeze||function(a){return a};function F(a,b){this.type=a;this.g=this.target=b;this.defaultPrevented=false;}F.prototype.h=function(){this.defaultPrevented=true;};var Ua=function(){if(!q.addEventListener||!Object.defineProperty)return false;var a=false,b=Object.defineProperty({},"passive",{get:function(){a=true;}});try{const c=()=>{};q.addEventListener("test",c,b);q.removeEventListener("test",c,b);}catch(c){}return a}();function G(a,b){F.call(this,a?a.type:"");this.relatedTarget=this.g=this.target=null;this.button=this.screenY=this.screenX=this.clientY=this.clientX=0;this.key="";this.metaKey=this.shiftKey=this.altKey=this.ctrlKey=false;this.state=null;this.pointerId=0;this.pointerType="";this.i=null;a&&this.init(a,b);}x(G,F);var Va=Ta({2:"touch",3:"pen",4:"mouse"});
4111
+ G.prototype.init=function(a,b){var c=this.type=a.type,d=a.changedTouches&&a.changedTouches.length?a.changedTouches[0]:null;this.target=a.target||a.srcElement;this.g=b;if(b=a.relatedTarget){if(Da){a:{try{Ba(b.nodeName);var e=!0;break a}catch(g){}e=false;}e||(b=null);}}else c=="mouseover"?b=a.fromElement:c=="mouseout"&&(b=a.toElement);this.relatedTarget=b;d?(this.clientX=d.clientX!==void 0?d.clientX:d.pageX,this.clientY=d.clientY!==void 0?d.clientY:d.pageY,this.screenX=d.screenX||0,this.screenY=d.screenY||
4112
+ 0):(this.clientX=a.clientX!==void 0?a.clientX:a.pageX,this.clientY=a.clientY!==void 0?a.clientY:a.pageY,this.screenX=a.screenX||0,this.screenY=a.screenY||0);this.button=a.button;this.key=a.key||"";this.ctrlKey=a.ctrlKey;this.altKey=a.altKey;this.shiftKey=a.shiftKey;this.metaKey=a.metaKey;this.pointerId=a.pointerId||0;this.pointerType=typeof a.pointerType==="string"?a.pointerType:Va[a.pointerType]||"";this.state=a.state;this.i=a;a.defaultPrevented&&G.N.h.call(this);};
4113
+ G.prototype.h=function(){G.N.h.call(this);var a=this.i;a.preventDefault?a.preventDefault():a.returnValue=false;};var H="closure_listenable_"+(Math.random()*1E6|0);var Wa=0;function Xa(a,b,c,d,e){this.listener=a;this.proxy=null;this.src=b;this.type=c;this.capture=!!d;this.M=e;this.key=++Wa;this.D=this.L=false;}function I(a){a.D=true;a.listener=null;a.proxy=null;a.src=null;a.M=null;}function J(a){this.src=a;this.g={};this.h=0;}J.prototype.add=function(a,b,c,d,e){var g=a.toString();a=this.g[g];a||(a=this.g[g]=[],this.h++);var f=Ya(a,b,d,e);f>-1?(b=a[f],c||(b.L=false)):(b=new Xa(b,this.src,g,!!d,e),b.L=c,a.push(b));return b};function Za(a,b){var c=b.type;if(c in a.g){var d=a.g[c],e=za(d,b),g;(g=e>=0)&&Array.prototype.splice.call(d,e,1);g&&(I(b),a.g[c].length==0&&(delete a.g[c],a.h--));}}
4114
+ function Ya(a,b,c,d){for(var e=0;e<a.length;++e){var g=a[e];if(!g.D&&g.listener==b&&g.capture==!!c&&g.M==d)return e}return -1}var $a="closure_lm_"+(Math.random()*1E6|0),ab={};function cb(a,b,c,d,e){if(Array.isArray(b))for(var g=0;g<b.length;g++)cb(a,b[g],c,d,e);else c=eb(c),a&&a[H]?a.j.add(String(b),c,false,t(d)?!!d.capture:false,e):fb(a,b,c,false,d,e);}
4115
+ function fb(a,b,c,d,e,g){if(!b)throw Error("Invalid event type");var f=t(e)?!!e.capture:!!e,h=gb(a);h||(a[$a]=h=new J(a));c=h.add(b,c,d,f,g);if(!c.proxy){d=hb();c.proxy=d;d.src=a;d.listener=c;if(a.addEventListener)Ua||(e=f),e===void 0&&(e=false),a.addEventListener(b.toString(),d,e);else if(a.attachEvent)a.attachEvent(mb(b.toString()),d);else if(a.addListener&&a.removeListener)a.addListener(d);else throw Error("addEventListener and attachEvent are unavailable.");}}
4116
+ function hb(){function a(c){return b.call(a.src,a.listener,c)}const b=nb;return a} function ob(a,b,c,d,e){if(Array.isArray(b))for(var g=0;g<b.length;g++)ob(a,b[g],c,d,e);else (d=t(d)?!!d.capture:!!d,c=eb(c),a&&a[H])?(a=a.j,b=String(b).toString(),b in a.g&&(g=a.g[b],c=Ya(g,c,d,e),c>-1&&(I(g[c]),Array.prototype.splice.call(g,c,1),g.length==0&&(delete a.g[b],a.h--)))):a&&(a=gb(a))&&(b=a.g[b.toString()],a=-1,b&&(a=Ya(b,c,d,e)),(c=a>-1?b[a]:null)&&pb(c));}
4117
+ function pb(a){if(typeof a!=="number"&&a&&!a.D){var b=a.src;if(b&&b[H])Za(b.j,a);else {var c=a.type,d=a.proxy;b.removeEventListener?b.removeEventListener(c,d,a.capture):b.detachEvent?b.detachEvent(mb(c),d):b.addListener&&b.removeListener&&b.removeListener(d);(c=gb(b))?(Za(c,a),c.h==0&&(c.src=null,b[$a]=null)):I(a);}}}function mb(a){return a in ab?ab[a]:ab[a]="on"+a}function nb(a,b){if(a.D)a=true;else {b=new G(b,this);var c=a.listener,d=a.M||a.src;a.L&&pb(a);a=c.call(d,b);}return a}
4118
+ function gb(a){a=a[$a];return a instanceof J?a:null}var qb="__closure_events_fn_"+(Math.random()*1E9>>>0);function eb(a){if(typeof a==="function")return a;a[qb]||(a[qb]=function(b){return a.handleEvent(b)});return a[qb]}function K(){E.call(this);this.j=new J(this);this.W=this;this.S=null;}x(K,E);K.prototype[H]=true;K.prototype.removeEventListener=function(a,b,c,d){ob(this,a,b,c,d);};
4119
+ function L(a,b){var c,d=a.S;if(d)for(c=[];d;d=d.S)c.push(d);a=a.W;d=b.type||b;if(typeof b==="string")b=new F(b,a);else if(b instanceof F)b.target=b.target||a;else {var e=b;b=new F(d,a);La(b,e);}e=true;if(c)for(var g=c.length-1;g>=0;g--){var f=b.g=c[g];e=M(f,d,true,b)&&e;}f=b.g=a;e=M(f,d,true,b)&&e;e=M(f,d,false,b)&&e;if(c)for(g=0;g<c.length;g++)f=b.g=c[g],e=M(f,d,false,b)&&e;}
4120
+ K.prototype.C=function(){K.N.C.call(this);if(this.j){var a=this.j,c;for(c in a.g){for(var d=a.g[c],e=0;e<d.length;e++)I(d[e]);delete a.g[c];a.h--;}}this.S=null;};function M(a,b,c,d){b=a.j.g[String(b)];if(!b)return true;b=b.concat();for(var e=true,g=0;g<b.length;++g){var f=b[g];if(f&&!f.D&&f.capture==c){var h=f.listener,k=f.M||f.src;f.L&&Za(a.j,f);e=h.call(k,d)!==false&&e;}}return e&&!d.defaultPrevented}var rb=q;function sb(a,b,c){if(typeof a==="function")c&&(a=w(a,c));else if(a&&typeof a.handleEvent=="function")a=w(a.handleEvent,a);else throw Error("Invalid listener argument");return Number(b)>2147483647?-1:rb.setTimeout(a,b||0)}var N=class{constructor(a,b){this.name=a;this.value=b;}toString(){return this.name}},O=new N("OFF",Infinity),tb=new N("SEVERE",1E3),ub=new N("CONFIG",700),vb=new N("FINE",500),yb=class{constructor(a,b,c){this.reset(a||O,b,c,void 0,void 0);}reset(){}};function zb(a){if(a.g)return a.g;if(a.h)return zb(a.h);oa("Root logger has no level set.");return O}function Ab(a,b){for(;a;)a.j.forEach(c=>{c(b);}),a=a.h;}
4121
+ var Bb=class{constructor(a,b=null){this.g=null;this.j=[];this.h=b||null;this.i=[];this.l={getName:()=>a};}};function P(a,b){var c=a.entries[b];if(c)return c;c=P(a,b.slice(0,Math.max(b.lastIndexOf("."),0)));const d=new Bb(b,c);a.entries[b]=d;c.i.push(d);return d}var Cb=class{constructor(){this.entries={};const a=new Bb("");a.g=ub;this.entries[""]=a;}},Db;function Eb(){Db||=new Cb;return Db}
4122
+ function Fb(a,b,c){var d;if(d=a)if(d=a&&b){d=b.value;var e=a?zb(P(Eb(),a.getName())):O;d=d>=e.value;}d&&(b=b||O,d=P(Eb(),a.getName()),typeof c==="function"&&(c=c()),a=a.getName(),a=new yb(b,c,a),Ab(d,a));}function Gb(a,b){a&&Fb(a,tb,b);}function Q(a,b){a&&Fb(a,vb,b);}function Hb(){}Hb.prototype.g=null;function Ib(a){var b;(b=a.g)||(b={},Jb(a)&&(b[0]=true,b[1]=true),b=a.g=b);return b}var Kb;function Lb(){}x(Lb,Hb);function Mb(a){return (a=Jb(a))?new ActiveXObject(a):new XMLHttpRequest}function Jb(a){if(!a.h&&typeof XMLHttpRequest=="undefined"&&typeof ActiveXObject!="undefined"){const b=["MSXML2.XMLHTTP.6.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"];for(let c=0;c<b.length;c++){const d=b[c];try{return new ActiveXObject(d),a.h=d}catch(e){}}throw Error("Could not create ActiveXObject. ActiveX might be disabled, or MSXML might not be installed");}return a.h}Kb=new Lb;var Nb=RegExp("^(?:([^:/?#.]+):)?(?://(?:([^\\\\/?#]*)@)?([^\\\\/?#]*?)(?::([0-9]+))?(?=[\\\\/?#]|$))?([^?#]+)?(?:\\?([^#]*))?(?:#([\\s\\S]*))?$");function R(a){K.call(this);this.headers=new Map;this.K=a||null;this.i=false;this.J=this.g=null;this.T=this.G="";this.m=0;this.A="";this.l=this.R=this.F=this.P=false;this.u=0;this.H=null;this.B=Ob;this.I=this.O=false;}x(R,K);var Ob="";R.prototype.h=P(Eb(),"goog.net.XhrIo").l;var Pb=/^https?$/i,Qb=["POST","PUT"];
4123
+ function Rb(a,b,c){if(a.g)throw Error("[goog.net.XhrIo] Object is active with another request="+a.G+"; newUri="+b);a.G=b;a.A="";a.m=0;a.T="POST";a.P=false;a.i=true;a.g=a.K?Mb(a.K):Mb(Kb);a.J=a.K?Ib(a.K):Ib(Kb);a.g.onreadystatechange=w(a.U,a);try{Q(a.h,S(a,"Opening Xhr")),a.R=!0,a.g.open("POST",String(b),!0),a.R=!1;}catch(g){Q(a.h,S(a,"Error opening Xhr: "+g.message));Sb(a,g);return}b=c||"";c=new Map(a.headers);const d=Array.from(c.keys()).find(g=>"content-type"==g.toLowerCase()),e=q.FormData&&b instanceof
4124
+ q.FormData;!(za(Qb,"POST")>=0)||d||e||c.set("Content-Type","application/x-www-form-urlencoded;charset=utf-8");for(const [g,f]of c)a.g.setRequestHeader(g,f);a.B&&(a.g.responseType=a.B);"withCredentials"in a.g&&a.g.withCredentials!==a.O&&(a.g.withCredentials=a.O);try{Tb(a),a.u>0&&(a.I=Ub(a.g),Q(a.h,S(a,"Will abort after "+a.u+"ms if incomplete, xhr2 "+a.I)),a.I?(a.g.timeout=a.u,a.g.ontimeout=w(a.V,a)):a.H=sb(a.V,a.u,a)),Q(a.h,S(a,"Sending request")),a.F=!0,a.g.send(b),a.F=!1;}catch(g){Q(a.h,S(a,"Send error: "+
4125
+ g.message)),Sb(a,g);}}function Ub(a){return Ca&&typeof a.timeout==="number"&&a.ontimeout!==void 0}n=R.prototype;n.V=function(){typeof p!="undefined"&&this.g&&(this.A="Timed out after "+this.u+"ms, aborting",this.m=8,Q(this.h,S(this,this.A)),L(this,"timeout"),this.abort(8));};function Sb(a,b){a.i=false;a.g&&(a.l=true,a.g.abort(),a.l=false);a.A=b;a.m=5;Vb(a);T(a);}function Vb(a){a.P||(a.P=true,L(a,"complete"),L(a,"error"));}
4126
+ n.abort=function(a){this.g&&this.i&&(Q(this.h,S(this,"Aborting")),this.i=false,this.l=true,this.g.abort(),this.l=false,this.m=a||7,L(this,"complete"),L(this,"abort"),T(this));};n.C=function(){this.g&&(this.i&&(this.i=false,this.l=true,this.g.abort(),this.l=false),T(this,true));R.N.C.call(this);};n.U=function(){this.v||(this.R||this.F||this.l?Wb(this):this.X());};n.X=function(){Wb(this);};
4127
+ function Wb(a){if(a.i&&typeof p!="undefined")if(a.J[1]&&U(a)==4&&a.getStatus()==2)Q(a.h,S(a,"Local request error detected and ignored"));else if(a.F&&U(a)==4)sb(a.U,0,a);else if(L(a,"readystatechange"),U(a)==4){Q(a.h,S(a,"Request complete"));a.i=false;try{const f=a.getStatus();a:switch(f){case 200:case 201:case 202:case 204:case 206:case 304:case 1223:var b=!0;break a;default:b=!1;}var c;if(!(c=b)){var d;if(d=f===0){var e=String(a.G).match(Nb)[1]||null;!e&&q.self&&q.self.location&&(e=q.self.location.protocol.slice(0,
4128
+ -1));d=!Pb.test(e?e.toLowerCase():"");}c=d;}if(c)L(a,"complete"),L(a,"success");else {a.m=6;try{var g=U(a)>2?a.g.statusText:"";}catch(h){Q(a.h,"Can not get status: "+h.message),g="";}a.A=g+" ["+a.getStatus()+"]";Vb(a);}}finally{T(a);}}}function T(a,b){if(a.g){Tb(a);const c=a.g,d=a.J[0]?()=>{}:null;a.g=null;a.J=null;b||L(a,"ready");try{c.onreadystatechange=d;}catch(e){Gb(a.h,"Problem encountered resetting onreadystatechange: "+e.message);}}}
4129
+ function Tb(a){a.g&&a.I&&(a.g.ontimeout=null);a.H&&(rb.clearTimeout(a.H),a.H=null);}n.isActive=function(){return !!this.g};function U(a){return a.g?a.g.readyState:0}n.getStatus=function(){try{return U(this)>2?this.g.status:-1}catch(a){return -1}};
4130
+ function Xb(a){try{if(!a.g)return null;if("response"in a.g)return a.g.response;switch(a.B){case Ob:case "text":return a.g.responseText;case "arraybuffer":if("mozResponseArrayBuffer"in a.g)return a.g.mozResponseArrayBuffer}Gb(a.h,"Response type "+a.B+" is not supported on this browser");return null}catch(b){return Q(a.h,"Can not get response: "+b.message),null}}
4131
+ function Yb(a){const b={};a=(a.g&&U(a)>=2?a.g.getAllResponseHeaders()||"":"").split("\r\n");for(let d=0;d<a.length;d++){if(/^[\s\xa0]*$/.test(a[d]))continue;var c=Qa(a[d]);const e=c[0];c=c[1];if(typeof c!=="string")continue;c=c.trim();const g=b[e]||[];b[e]=g;g.push(c);}return Ja(b,function(d){return d.join(", ")})}function S(a,b){return b+" ["+a.T+" "+a.G+" "+a.getStatus()+"]"}var Zb={},V=null;function $b(a){var b=a.length,c=b*3/4;c%3?c=Math.floor(c):"=.".indexOf(a[b-1])!=-1&&(c="=.".indexOf(a[b-2])!=-1?c-2:c-1);var d=new Uint8Array(c),e=0;ac(a,function(g){d[e++]=g;});return e!==c?d.subarray(0,e):d}
4132
+ function ac(a,b){function c(k){for(;d<a.length;){var l=a.charAt(d++),m=V[l];if(m!=null)return m;if(!/^[\s\xa0]*$/.test(l))throw Error("Unknown base64 encoding at char: "+l);}return k}bc();for(var d=0;;){var e=c(-1),g=c(0),f=c(64),h=c(64);if(h===64&&e===-1)break;b(e<<2|g>>4);f!=64&&(b(g<<4&240|f>>2),h!=64&&b(f<<6&192|h));}}
4133
+ function bc(){if(!V){V={};for(var a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),b=["+/=","+/","-_=","-_.","-_"],c=0;c<5;c++){var d=a.concat(b[c].split(""));Zb[c]=d;for(var e=0;e<d.length;e++){var g=d[e];V[g]===void 0&&(V[g]=e);}}}}const cc=["content-type","grpc-status","grpc-message"];function W(a,b){if(b.code!=0){var c=new C(b.code,decodeURIComponent(b.message||""),b.metadata);for(let d=0;d<a.j.length;d++)a.j[d](c);}b={code:b.code,details:decodeURIComponent(b.message||""),metadata:b.metadata};for(c=0;c<a.m.length;c++)a.m[c](b);}function dc(a,b){for(let c=0;c<a.l.length;c++)a.l[c](b);}function ec(a){for(let b=0;b<a.i.length;b++)a.i[b]();}function X(a,b){b=a.indexOf(b);b>-1&&a.splice(b,1);}
4134
+ class Y{constructor(a){this.g=a.$;this.v=null;this.h=[];this.m=[];this.l=[];this.j=[];this.i=[];this.u=false;this.o=0;this.A=new wa;const b=this;cb(this.g,"readystatechange",function(){var c=b.g;if(c=c.g?c.g.getResponseHeader("Content-Type"):null){c=c.toLowerCase();if(c.lastIndexOf("application/grpc-web-text",0)==0){c=b.g;try{var d=c.g?c.g.responseText:"";}catch(h){Q(c.h,"Can not get responseText: "+h.message),d="";}c=d||"";d=c.length-c.length%4;c=c.substr(b.o,d-b.o);if(c.length==0)return;b.o=d;c=$b(c);}else if(c.lastIndexOf("application/grpc",
4135
+ 0)==0)c=new Uint8Array(Xb(b.g));else {W(b,new C(2,"Unknown Content-type received."));return}d=null;try{d=pa(b.A,c);}catch(h){W(b,new C(2,"Error in parsing response body"));}if(d)for(c=0;c<d.length;c++){if(qa in d[c]){var e=d[c][qa];if(e){var g=false;let h;try{h=b.v(e),g=!0;}catch(k){W(b,new C(13,`Error when deserializing response data; error: ${k}`+`, response: ${h}`));}if(g){e=b;g=h;for(var f=0;f<e.h.length;f++)e.h[f](g);}}}if(B in d[c]&&d[c][B].length>0){e="";for(g=0;g<d[c][B].length;g++)e+=String.fromCharCode(d[c][B][g]);
4136
+ e=e.trim().split("\r\n");g={};for(f=0;f<e.length;f++){const h=e[f].indexOf(":");g[e[f].substring(0,h).trim()]=e[f].substring(h+1).trim();}e=g;g=0;f="";"grpc-status"in e&&(g=Number(e["grpc-status"]),delete e["grpc-status"]);"grpc-message"in e&&(f=e["grpc-message"],delete e["grpc-message"]);W(b,new C(g,f,e));}}}});cb(this.g,"complete",function(){var c=b.g.m,d=2,e="";const g={};d=Yb(b.g);const f={};for(var h in d)d.hasOwnProperty(h)&&(f[h.toLowerCase()]=d[h]);Object.keys(f).forEach(k=>{cc.includes(k)||
4137
+ (g[k]=f[k]);});dc(b,g);h=-1;if(c!=0){switch(c){case 7:d=10;break;case 8:d=4;break;case 6:h=b.g.getStatus();d=xa(h);break;default:d=14;}d==10&&b.u||(e=ma(c),h!=-1&&(e+=", http status code: "+h),W(b,new C(d,e)));}else c=false,"grpc-status"in f&&(d=Number(f["grpc-status"]),"grpc-message"in f&&(e=f["grpc-message"]),d!=0&&(W(b,new C(d,e||"",f)),c=true)),c||ec(b);});}on(a,b){a=="data"?this.h.push(b):a=="status"?this.m.push(b):a=="metadata"?this.l.push(b):a=="end"?this.i.push(b):a=="error"&&this.j.push(b);return this}removeListener(a,
4138
+ b){a=="data"?X(this.h,b):a=="status"?X(this.m,b):a=="metadata"?X(this.l,b):a=="end"?X(this.i,b):a=="error"&&X(this.j,b);return this}cancel(){this.u=true;this.g.abort();}}Y.prototype.cancel=Y.prototype.cancel;Y.prototype.removeListener=Y.prototype.removeListener;Y.prototype.on=Y.prototype.on;function fc(a){let b="";Ia(a,function(c,d){b+=d;b+=":";b+=c;b+="\r\n";});return b}function hc(a,b){return b.reduce((c,d)=>e=>d.intercept(e,c),a)}
4139
+ function ic(a,b,c){let d=false,e=null,g=false;a.on("data",function(f){d=true;e=f;});a.on("error",function(f){f.code==0||g||(g=true,b(f,null));});a.on("status",function(f){f.code==0||g?c&&b(null,null,f):(g=true,b({code:f.code,message:f.details,metadata:f.metadata},null));});if(c)a.on("metadata",function(f){b(null,null,null,f);});a.on("end",function(){g||(d?c?b(null,e,null,null,true):b(null,e):b({code:2,message:"Incomplete response"}));c&&b(null,null);});}
4140
+ function jc(a,b,c){var d=b.getMethodDescriptor(),e=c+d.getName();c=a.i?a.i:new R;c.O=a.j;const g=new Y({$:c});g.v=d.h;var f=b.getMetadata();for(var h in f)c.headers.set(h,f[h]);a.g=="text"?(c.headers.set("Content-Type","application/grpc-web-text"),c.headers.set("Accept","application/grpc-web-text")):c.headers.set("Content-Type","application/grpc-web+proto");c.headers.set("X-User-Agent","grpc-web-javascript/0.1");c.headers.set("X-Grpc-Web","1");c.headers.has("deadline")&&(h=Number(c.headers.get("deadline")),
4141
+ h=Math.ceil(h-(new Date).getTime()),c.headers.delete("deadline"),h===Infinity&&(h=0),h>0&&(c.headers.set("grpc-timeout",h+"m"),c.u=Math.max(0,Math.max(1E3,Math.ceil(h*1.1)))));if(a.l){h=c.headers;f={};for(k of h.keys())f[k]=h.get(k);var k=f;c.headers.clear();b:{for(l in k){var l=false;break b}l=true;}if(!l)if(k=fc(k),typeof e==="string"){if(l=encodeURIComponent("$httpHeaders"),k=k!=null?"="+encodeURIComponent(String(k)):"",l+=k)k=e.indexOf("#"),k<0&&(k=e.length),h=e.indexOf("?"),h<0||h>k?(h=k,f=""):f=e.substring(h+
4142
+ 1,k),e=[e.slice(0,h),f,e.slice(k)],k=e[1],e[1]=l?k?k+"&"+l:l:k,e=e[0]+(e[1]?"?"+e[1]:"")+e[2];}else e.g("$httpHeaders",k);}b=(0, d.g)(b.getRequestMessage());d=b.length;l=[0,0,0,0];k=new Uint8Array(5+d);for(h=3;h>=0;h--)l[h]=d%256,d>>>=8;k.set(new Uint8Array(l),1);k.set(b,5);b=k;if(a.g=="text"){a=b;var m;m===void 0&&(m=0);bc();m=Zb[m];b=Array(Math.floor(a.length/3));d=m[64]||"";for(l=k=0;k<a.length-2;k+=3){var z=a[k],A=a[k+1];f=a[k+2];h=m[z>>2];z=m[(z&3)<<4|A>>4];A=m[(A&15)<<2|f>>6];f=m[f&63];b[l++]=
4143
+ h+z+A+f;}h=0;f=d;switch(a.length-k){case 2:h=a[k+1],f=m[(h&15)<<2]||d;case 1:a=a[k],b[l]=m[a>>2]+m[(a&3)<<4|h>>4]+f+d;}b=b.join("");}else a.g=="binary"&&(c.B="arraybuffer");Rb(c,e,b);return g}
4144
+ function kc(a,b,c,d,e,g={}){const f=b.substr(0,b.length-e.name.length),h=g&&g.signal;return hc(k=>new Promise((l,m)=>{if(h&&h.aborted){const v=new C(1,"Aborted");v.cause=h.reason;m(v);}else {var z=jc(a,k,f),A,ib,jb;ic(z,(v,lc,kb,lb,mc)=>{v?m(v):mc?jb=lc:kb?ib=kb:lb?A=lb:l(ja(k.getMethodDescriptor(),jb,A,ib));},true);h&&h.addEventListener("abort",()=>{z.cancel();const v=new C(1,"Aborted");v.cause=h.reason;m(v);});}}),a.m).call(a,ia(e,c,d)).then(k=>k.getResponseMessage())}
4145
+ class Z{constructor(a={},b){this.g=a.format||r("format",a)||"text";this.l=a.ca||r("suppressCorsPreflight",a)||false;this.j=a.withCredentials||r("withCredentials",a)||false;this.h=a.ba||r("streamInterceptors",a)||[];this.m=a.da||r("unaryInterceptors",a)||[];this.i=b||null;}Y(a,b,c,d,e){const g=a.substr(0,a.length-d.name.length);a=hc(f=>jc(this,f,g),this.h).call(this,ia(d,b,c));ic(a,e,false);return new la(a)}unaryCall(a,b,c,d,e={}){return kc(this,a,b,c,d,e)}Z(a,b,c,d){const e=a.substr(0,a.length-d.name.length);
4146
+ return hc(g=>jc(this,g,e),this.h).call(this,ia(d,b,c))}}Z.prototype.serverStreaming=Z.prototype.Z;Z.prototype.unaryCall=Z.prototype.unaryCall;Z.prototype.rpcCall=Z.prototype.Y;grpcWeb.CallOptions=ea;grpcWeb.MethodDescriptor=ka;grpcWeb.GrpcWebClientBase=Z;grpcWeb.RpcError=C;grpcWeb.StatusCode={OK:0,CANCELLED:1,UNKNOWN:2,INVALID_ARGUMENT:3,DEADLINE_EXCEEDED:4,NOT_FOUND:5,ALREADY_EXISTS:6,PERMISSION_DENIED:7,UNAUTHENTICATED:16,RESOURCE_EXHAUSTED:8,FAILED_PRECONDITION:9,ABORTED:10,OUT_OF_RANGE:11,UNIMPLEMENTED:12,INTERNAL:13,UNAVAILABLE:14,DATA_LOSS:15};grpcWeb.MethodType={UNARY:"unary",SERVER_STREAMING:"server_streaming",BIDI_STREAMING:"bidi_streaming"};
4147
+ rb=typeof globalThis!=="undefined"&&globalThis||self;
4148
+ return grpcWeb;
4149
+ }
4150
+
4151
+ var grpcWebExports = requireGrpcWeb();
4152
+
4090
4153
  /**
4091
4154
  * @fileoverview gRPC-Web generated client stub for gateway.parallax.v1
4092
4155
  * @enhanceable
@@ -4233,6 +4296,7 @@
4233
4296
  }
4234
4297
  }
4235
4298
 
4299
+ // Parallax SDK Web Client
4236
4300
  const GRPC_GATEWAY_API_URL = "https://gateway-parallax-dev.platform.svc.cluster.local:50053";
4237
4301
  const debugIssue = (trace, error) => {
4238
4302
  // Handle our own debugging / logging here
@@ -4266,6 +4330,131 @@
4266
4330
  // Initialize the gRPC-Web client
4267
4331
  this.client = new ParallaxGatewayServiceClient(this.apiUrl, credentials);
4268
4332
  }
4333
+ /**
4334
+ * Gather client metadata for traces/spans
4335
+ * Returns a metadata object with client environment details
4336
+ * This includes browser, OS, screen size, IP address, and more
4337
+ * @returns metadata
4338
+ */
4339
+ async getClientMetadata() {
4340
+ const metadata = {};
4341
+ // Browser info
4342
+ metadata.userAgent = navigator.userAgent;
4343
+ metadata.platform = navigator.platform;
4344
+ metadata.language = navigator.language;
4345
+ // Screen info
4346
+ metadata.screenWidth = window.screen.width.toString();
4347
+ metadata.screenHeight = window.screen.height.toString();
4348
+ metadata.viewportWidth = window.innerWidth.toString();
4349
+ metadata.viewportHeight = window.innerHeight.toString();
4350
+ // Try to get IP address (non-blocking)
4351
+ // Note: This may be blocked by Content Security Policy (CSP)
4352
+ // If blocked, the backend should capture IP from request headers instead
4353
+ try {
4354
+ // Use ipify API (simple and fast JSON response)
4355
+ const ipResponse = await fetch('https://api.ipify.org?format=json');
4356
+ if (ipResponse && ipResponse.ok) {
4357
+ const data = await ipResponse.json();
4358
+ if (data && data.ip) {
4359
+ metadata.ip = data.ip;
4360
+ }
4361
+ else {
4362
+ metadata.ip = 'client_unavailable';
4363
+ }
4364
+ }
4365
+ else {
4366
+ metadata.ip = 'client_unavailable';
4367
+ }
4368
+ }
4369
+ catch (error) {
4370
+ // IP lookup failed (CSP block, timeout, or network error)
4371
+ // This is expected if CSP blocks external requests
4372
+ // Backend should capture IP from request headers instead
4373
+ if (error instanceof Error && error.message.includes('Content Security Policy')) {
4374
+ console.debug('IP fetch blocked by CSP - backend will capture from headers');
4375
+ }
4376
+ else {
4377
+ console.debug('Could not fetch IP address');
4378
+ }
4379
+ metadata.ip = 'client_unavailable';
4380
+ }
4381
+ // Browser details (parse from user agent)
4382
+ const ua = navigator.userAgent;
4383
+ if (ua.includes('Chrome')) {
4384
+ metadata.browser = 'Chrome';
4385
+ }
4386
+ else if (ua.includes('Firefox')) {
4387
+ metadata.browser = 'Firefox';
4388
+ }
4389
+ else if (ua.includes('Safari')) {
4390
+ metadata.browser = 'Safari';
4391
+ }
4392
+ else if (ua.includes('Edge')) {
4393
+ metadata.browser = 'Edge';
4394
+ }
4395
+ else {
4396
+ metadata.browser = 'Unknown';
4397
+ }
4398
+ // OS detection
4399
+ if (ua.includes('Windows')) {
4400
+ metadata.os = 'Windows';
4401
+ }
4402
+ else if (ua.includes('Mac')) {
4403
+ metadata.os = 'macOS';
4404
+ }
4405
+ else if (ua.includes('Linux')) {
4406
+ metadata.os = 'Linux';
4407
+ }
4408
+ else if (ua.includes('Android')) {
4409
+ metadata.os = 'Android';
4410
+ }
4411
+ else if (ua.includes('iOS')) {
4412
+ metadata.os = 'iOS';
4413
+ }
4414
+ else {
4415
+ metadata.os = 'Unknown';
4416
+ }
4417
+ // Timezone
4418
+ metadata.timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
4419
+ metadata.timezoneOffset = new Date().getTimezoneOffset().toString();
4420
+ // Page info
4421
+ metadata.url = window.location.href;
4422
+ metadata.referrer = document.referrer || 'direct';
4423
+ return metadata;
4424
+ }
4425
+ /**
4426
+ * Creates a CreateTraceRequest with optional attributes and client metadata
4427
+ * @param name name of the trace
4428
+ * @param tags optional tags for trace
4429
+ * @param attr optional attributes for trace
4430
+ * @param includeClientMeta optional flag to include client metadata (ip, browser, os, etc)
4431
+ * @returns a CreateTraceRequest object to be used for the createTrace request
4432
+ */
4433
+ async createTraceRequest({ name, tags, attr, includeClientMeta = false }) {
4434
+ const createTraceReq = new parallax_gateway_pbExports.CreateTraceRequest();
4435
+ createTraceReq.setName(name);
4436
+ if (tags) {
4437
+ createTraceReq.setTagsList(tags);
4438
+ }
4439
+ const traceAttrs = createTraceReq.getAttributesMap();
4440
+ if (attr) {
4441
+ Object.entries(attr).forEach(([key, value]) => {
4442
+ if (key.includes('client.')) {
4443
+ console.warn(`Attribute key "${key}" is reserved for client metadata. It will be prefixed with "custom."`);
4444
+ }
4445
+ else {
4446
+ traceAttrs.set(key, typeof value === 'object' ? JSON.stringify(value) : String(value));
4447
+ }
4448
+ });
4449
+ }
4450
+ if (includeClientMeta) {
4451
+ const clientMetadata = await this.getClientMetadata();
4452
+ Object.entries(clientMetadata).forEach(([key, value]) => {
4453
+ traceAttrs.set(`client.${key}`, value);
4454
+ });
4455
+ }
4456
+ return createTraceReq;
4457
+ }
4269
4458
  /**
4270
4459
  * Create a new trace
4271
4460
  * @param params Parameters to create a new trace
@@ -4280,6 +4469,46 @@
4280
4469
  throw _error;
4281
4470
  }
4282
4471
  }
4472
+ /**
4473
+ * Create a StartSpanRequest with optional attributes and client metadata
4474
+ * @param traceId trace id to associate the span with
4475
+ * @param name name of the span
4476
+ * @param parentSpanId (optional) create a span off a parent span id
4477
+ * @param attr (optional) attributes to add to the span
4478
+ * @param includeClientMeta (optional) flag to include client metadata (ip, browser, os, etc)
4479
+ * @returns
4480
+ */
4481
+ async createStartSpanRequest({ traceId, name, parentSpanId, attr, includeClientMeta = false }) {
4482
+ const startSpanReq = new parallax_gateway_pbExports.StartSpanRequest();
4483
+ startSpanReq.setTraceId(traceId);
4484
+ startSpanReq.setName(name);
4485
+ if (parentSpanId) {
4486
+ startSpanReq.setParentSpanId(parentSpanId);
4487
+ }
4488
+ const spanAttrs = startSpanReq.getAttributesMap();
4489
+ if (attr) {
4490
+ Object.entries(attr).forEach(([key, value]) => {
4491
+ if (key.includes('client.')) {
4492
+ console.warn(`Attribute key "${key}" is reserved for client metadata. It will be prefixed with "custom."`);
4493
+ }
4494
+ else {
4495
+ spanAttrs.set(key, typeof value === 'object' ? JSON.stringify(value) : String(value));
4496
+ }
4497
+ });
4498
+ }
4499
+ try {
4500
+ if (includeClientMeta) {
4501
+ const clientMetadata = await this.getClientMetadata();
4502
+ Object.entries(clientMetadata).forEach(([key, value]) => {
4503
+ spanAttrs.set(`client.${key}`, value);
4504
+ });
4505
+ }
4506
+ }
4507
+ catch (error) {
4508
+ console.error('Error gathering client metadata for span:', error);
4509
+ }
4510
+ return startSpanReq;
4511
+ }
4283
4512
  /**
4284
4513
  * Start a new span within a trace
4285
4514
  * @param params Parameters to start a new span
@@ -4293,6 +4522,25 @@
4293
4522
  throw _error;
4294
4523
  }
4295
4524
  }
4525
+ /**
4526
+ * Create a FinishSpanRequest
4527
+ * @param params Parameters to finish a span - traceId, spanId, status (optional) (success, errorMessage)
4528
+ * @returns FinishSpanRequest
4529
+ */
4530
+ createFinishSpanRequest({ traceId, spanId, status }) {
4531
+ const request = new parallax_gateway_pbExports.FinishSpanRequest();
4532
+ request.setTraceId(traceId);
4533
+ request.setSpanId(spanId);
4534
+ if (status !== undefined) {
4535
+ const spanStatus = new parallax_gateway_pbExports.FinishSpanRequest.SpanStatus();
4536
+ spanStatus.setCode(status.success ? parallax_gateway_pbExports.FinishSpanRequest.SpanStatus.StatusCode.STATUS_CODE_OK : parallax_gateway_pbExports.FinishSpanRequest.SpanStatus.StatusCode.STATUS_CODE_ERROR);
4537
+ if (status.errorMessage) {
4538
+ spanStatus.setMessage(status.errorMessage);
4539
+ }
4540
+ request.setStatus(spanStatus);
4541
+ }
4542
+ return request;
4543
+ }
4296
4544
  /**
4297
4545
  * Finish a span within a trace
4298
4546
  * @param params Parameters to finish a span
@@ -4306,6 +4554,25 @@
4306
4554
  throw _error;
4307
4555
  }
4308
4556
  }
4557
+ /**
4558
+ * Creates the add span event request
4559
+ * @param params - Parameters to create an AddSpanEventRequest - traceId, spanId, eventName, attr (optional)
4560
+ * @returns AddSpanEventRequest
4561
+ */
4562
+ createAddSpanEventRequest({ traceId, spanId, eventName, attr }) {
4563
+ const request = new parallax_gateway_pbExports.AddSpanEventRequest();
4564
+ request.setTraceId(traceId);
4565
+ request.setSpanId(spanId);
4566
+ request.setEventName(eventName);
4567
+ const eventAttrs = request.getAttributesMap();
4568
+ if (attr) {
4569
+ Object.entries(attr).forEach(([key, value]) => {
4570
+ eventAttrs.set(key, typeof value === 'object' ? JSON.stringify(value) : String(value));
4571
+ });
4572
+ }
4573
+ eventAttrs.set('timestamp', new Date().toISOString());
4574
+ return request;
4575
+ }
4309
4576
  /**
4310
4577
  * Add an event to a span
4311
4578
  * @param params Parameters to add an event to a span
@@ -4319,6 +4586,24 @@
4319
4586
  throw _error;
4320
4587
  }
4321
4588
  }
4589
+ /**
4590
+ * Creates the add span error request
4591
+ * @param params - params used to generate the error request ( traceid, span id, error message, error type, stack trace)
4592
+ * @returns AddSpanErrorRequest
4593
+ */
4594
+ createAddSpanErrorRequest({ traceId, spanId, errorMessage, errorType, stackTrace }) {
4595
+ const request = new parallax_gateway_pbExports.AddSpanErrorRequest();
4596
+ request.setTraceId(traceId);
4597
+ request.setSpanId(spanId);
4598
+ request.setMessage(errorMessage);
4599
+ if (errorType) {
4600
+ request.setErrorType(errorType);
4601
+ }
4602
+ if (stackTrace) {
4603
+ request.setStackTrace(stackTrace);
4604
+ }
4605
+ return request;
4606
+ }
4322
4607
  /**
4323
4608
  * Add an error to a span
4324
4609
  * @param params Parameters to add an error to a span
@@ -4332,6 +4617,23 @@
4332
4617
  throw _error;
4333
4618
  }
4334
4619
  }
4620
+ /**
4621
+ * Creates the add span hint request
4622
+ * @param params - params used to generate the span hint (trace id, parentSpanId, txHash and chainId)
4623
+ * @returns AddSpanHintRequest
4624
+ */
4625
+ createAddSpanHintRequest({ traceId, parentSpanId, txHash, chainId }) {
4626
+ const hintReq = new parallax_gateway_pbExports.AddSpanHintRequest();
4627
+ hintReq.setTraceId(traceId);
4628
+ hintReq.setParentSpanId(parentSpanId);
4629
+ if (txHash && chainId !== undefined) {
4630
+ const chainTxReq = new parallax_gateway_pbExports.AddSpanHintRequest.ChainTransaction();
4631
+ chainTxReq.setTxHash(txHash);
4632
+ chainTxReq.setChainId(chainId);
4633
+ hintReq.setChainTransaction(chainTxReq);
4634
+ }
4635
+ return hintReq;
4636
+ }
4335
4637
  /**
4336
4638
  * Add a hint to a span
4337
4639
  * @param params Parameters to add a hint to a span
@@ -4454,6 +4756,339 @@
4454
4756
  }
4455
4757
  }
4456
4758
 
4759
+ /**
4760
+ * Parallax Service - Transaction Tracing for Web Applications
4761
+ * Creates individual traces for each transaction and tracks them through their lifecycle
4762
+ *
4763
+ * This service provides a simplified interface for tracking transactions with automatic
4764
+ * client metadata collection and lifecycle management.
4765
+ */
4766
+ class ParallaxService {
4767
+ constructor() {
4768
+ Object.defineProperty(this, "client", {
4769
+ enumerable: true,
4770
+ configurable: true,
4771
+ writable: true,
4772
+ value: null
4773
+ });
4774
+ Object.defineProperty(this, "activeTransactions", {
4775
+ enumerable: true,
4776
+ configurable: true,
4777
+ writable: true,
4778
+ value: new Map()
4779
+ });
4780
+ // Client will be initialized lazily
4781
+ }
4782
+ /**
4783
+ * Initialize the Parallax client (lazy initialization)
4784
+ * @param apiKey - Optional API key for authentication
4785
+ * @param gatewayUrl - Optional custom gateway URL
4786
+ */
4787
+ _ensureClient(apiKey, gatewayUrl) {
4788
+ if (this.client)
4789
+ return;
4790
+ // Determine gateway URL based on environment if not provided
4791
+ let url = gatewayUrl;
4792
+ if (!url && typeof window !== 'undefined') {
4793
+ const isDevelopment = window.location.hostname === 'localhost' ||
4794
+ window.location.hostname === '127.0.0.1';
4795
+ url = isDevelopment
4796
+ ? `${window.location.protocol}//${window.location.host}/parallax-gateway`
4797
+ : 'https://gateway-parallax-dev.mirador.org';
4798
+ }
4799
+ this.client = new ParallaxClient(apiKey || '', url);
4800
+ console.log('[ParallaxService] Client initialized with URL:', url);
4801
+ }
4802
+ /**
4803
+ * Start a new transaction trace
4804
+ * Called when user initiates a transaction
4805
+ *
4806
+ * Note: Since createTrace now automatically creates a root span, we don't need
4807
+ * to call startSpan separately. The rootSpanId from the response is the parent span.
4808
+ *
4809
+ * @param txData - Transaction data
4810
+ * @param name - Name for the trace (e.g., 'SendingTrace', 'SwappingTrace')
4811
+ * @param options - Optional configuration (apiKey, gatewayUrl, includeClientMeta)
4812
+ * @returns Promise with traceId, rootSpanId, and txId
4813
+ */
4814
+ async startTransactionTrace(txData, name = 'WalletTransaction', options) {
4815
+ this._ensureClient(options?.apiKey, options?.gatewayUrl);
4816
+ if (!this.client) {
4817
+ throw new Error('Failed to initialize Parallax client');
4818
+ }
4819
+ try {
4820
+ const txId = `tx_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
4821
+ const timestamp = new Date().toISOString();
4822
+ // Create trace attributes
4823
+ const traceAttributes = {
4824
+ transactionId: txId,
4825
+ walletAddress: txData.walletAddress || txData.from,
4826
+ network: txData.network || 'Unknown',
4827
+ transactionStart: timestamp,
4828
+ from: txData.from,
4829
+ to: txData.to,
4830
+ value: txData.value,
4831
+ };
4832
+ // Add any additional transaction data
4833
+ if (txData.additionalData) {
4834
+ Object.entries(txData.additionalData).forEach(([key, value]) => {
4835
+ traceAttributes[key] = typeof value === 'object' ? JSON.stringify(value) : String(value);
4836
+ });
4837
+ }
4838
+ // Create a trace for this transaction
4839
+ const createTraceReq = await this.client.createTraceRequest({
4840
+ name: name,
4841
+ attr: traceAttributes,
4842
+ tags: ['transaction', 'wallet', txData.network || 'unknown'],
4843
+ includeClientMeta: options?.includeClientMeta ?? true,
4844
+ });
4845
+ const traceResponse = await this.client.createTrace(createTraceReq);
4846
+ const traceId = traceResponse.getTraceId();
4847
+ const rootSpanId = traceResponse.getRootSpanId();
4848
+ // Store transaction info
4849
+ this.activeTransactions.set(txId, {
4850
+ traceId,
4851
+ rootSpanId,
4852
+ spanId: rootSpanId, // Use rootSpanId as the main span for this transaction
4853
+ timestamp,
4854
+ txHash: null,
4855
+ from: txData.from,
4856
+ to: txData.to,
4857
+ network: txData.network,
4858
+ });
4859
+ console.log('[ParallaxService] Transaction trace started:', {
4860
+ txId,
4861
+ traceId,
4862
+ rootSpanId,
4863
+ from: txData.from,
4864
+ to: txData.to,
4865
+ });
4866
+ // Add initial event to the root span
4867
+ await this.addTransactionEvent(txId, 'transaction_initiated', {
4868
+ from: txData.from,
4869
+ to: txData.to,
4870
+ value: txData.value,
4871
+ timestamp,
4872
+ });
4873
+ return { traceId, rootSpanId, txId };
4874
+ }
4875
+ catch (error) {
4876
+ console.error('[ParallaxService] Failed to start transaction trace:', error);
4877
+ throw error;
4878
+ }
4879
+ }
4880
+ /**
4881
+ * Associate a transaction hash with an existing trace
4882
+ * Called when the transaction hash is available after signing/sending
4883
+ *
4884
+ * @param txId - Transaction identifier returned from startTransactionTrace
4885
+ * @param txHash - Blockchain transaction hash
4886
+ * @param chainId - Chain ID
4887
+ */
4888
+ async associateTransactionHash(txId, txHash, chainId) {
4889
+ const txInfo = this.activeTransactions.get(txId);
4890
+ if (!txInfo) {
4891
+ console.warn(`[ParallaxService] Transaction ${txId} not found in active transactions`);
4892
+ return;
4893
+ }
4894
+ if (!this.client) {
4895
+ console.warn('[ParallaxService] Client not initialized');
4896
+ return;
4897
+ }
4898
+ try {
4899
+ // Update stored tx info
4900
+ txInfo.txHash = txHash;
4901
+ this.activeTransactions.set(txId, txInfo);
4902
+ // Add chain hint to correlate with blockchain events
4903
+ const hintReq = this.client.createAddSpanHintRequest({
4904
+ traceId: txInfo.traceId,
4905
+ parentSpanId: txInfo.rootSpanId,
4906
+ txHash: txHash,
4907
+ chainId: chainId,
4908
+ });
4909
+ await this.client.addSpanHint(hintReq);
4910
+ // Add event for transaction sent
4911
+ await this.addTransactionEvent(txId, 'transaction_hash_available', {
4912
+ txHash,
4913
+ chainId: chainId.toString(),
4914
+ timestamp: new Date().toISOString(),
4915
+ });
4916
+ console.log('[ParallaxService] Transaction hash associated with trace:', {
4917
+ txId,
4918
+ txHash,
4919
+ traceId: txInfo.traceId,
4920
+ });
4921
+ }
4922
+ catch (error) {
4923
+ console.error('[ParallaxService] Failed to associate transaction hash:', error);
4924
+ }
4925
+ }
4926
+ /**
4927
+ * Add an event to a transaction trace
4928
+ *
4929
+ * @param txId - Transaction identifier
4930
+ * @param eventName - Event name
4931
+ * @param attributes - Event attributes
4932
+ */
4933
+ async addTransactionEvent(txId, eventName, attributes = {}) {
4934
+ const txInfo = this.activeTransactions.get(txId);
4935
+ if (!txInfo) {
4936
+ console.warn(`[ParallaxService] Transaction ${txId} not found. Cannot add event '${eventName}'`);
4937
+ return;
4938
+ }
4939
+ if (!this.client || !txInfo.spanId) {
4940
+ console.warn('[ParallaxService] Client not initialized or span not available');
4941
+ return;
4942
+ }
4943
+ try {
4944
+ // Convert attributes to plain object with string values
4945
+ const eventAttributes = {};
4946
+ Object.entries(attributes).forEach(([key, value]) => {
4947
+ eventAttributes[key] = typeof value === 'object' ? JSON.stringify(value) : String(value);
4948
+ });
4949
+ const request = this.client.createAddSpanEventRequest({
4950
+ traceId: txInfo.traceId,
4951
+ spanId: txInfo.spanId,
4952
+ eventName: eventName,
4953
+ attr: eventAttributes,
4954
+ });
4955
+ await this.client.addSpanEvent(request);
4956
+ }
4957
+ catch (error) {
4958
+ console.error(`[ParallaxService] Failed to add transaction event '${eventName}':`, error);
4959
+ }
4960
+ }
4961
+ /**
4962
+ * Add an error to a transaction trace
4963
+ * Creates a proper span error event in Parallax
4964
+ *
4965
+ * @param txId - Transaction identifier
4966
+ * @param error - Error object or message
4967
+ * @param errorType - Type/category of error (e.g., 'TransactionError', 'NetworkError', 'UserRejection')
4968
+ */
4969
+ async addTransactionError(txId, error, errorType = 'TransactionError') {
4970
+ const txInfo = this.activeTransactions.get(txId);
4971
+ if (!txInfo) {
4972
+ console.warn(`[ParallaxService] Transaction ${txId} not found. Cannot add error.`);
4973
+ return;
4974
+ }
4975
+ if (!this.client || !txInfo.spanId) {
4976
+ console.warn('[ParallaxService] Client not initialized or span not available');
4977
+ return;
4978
+ }
4979
+ try {
4980
+ // Extract error message and stack trace
4981
+ let errorMessage = '';
4982
+ let stackTrace;
4983
+ if (error instanceof Error) {
4984
+ errorMessage = error.message;
4985
+ stackTrace = error.stack;
4986
+ }
4987
+ else {
4988
+ errorMessage = String(error);
4989
+ }
4990
+ const request = this.client.createAddSpanErrorRequest({
4991
+ traceId: txInfo.traceId,
4992
+ spanId: txInfo.spanId,
4993
+ errorMessage: errorMessage,
4994
+ errorType: errorType,
4995
+ stackTrace: stackTrace,
4996
+ });
4997
+ await this.client.addSpanError(request);
4998
+ console.log('[ParallaxService] Transaction error added to trace:', {
4999
+ txId,
5000
+ errorType,
5001
+ message: error instanceof Error ? error.message : String(error),
5002
+ });
5003
+ }
5004
+ catch (err) {
5005
+ console.error('[ParallaxService] Failed to add transaction error:', err);
5006
+ }
5007
+ }
5008
+ /**
5009
+ * Finish a transaction trace
5010
+ * Called when transaction is confirmed or permanently failed
5011
+ *
5012
+ * @param txId - Transaction identifier
5013
+ * @param options - Finish options (success, error message)
5014
+ */
5015
+ async finishTransactionTrace(txId, options = { success: true }) {
5016
+ const txInfo = this.activeTransactions.get(txId);
5017
+ if (!txInfo) {
5018
+ console.warn(`[ParallaxService] Transaction ${txId} not found. Cannot finish.`);
5019
+ return;
5020
+ }
5021
+ if (!this.client || !txInfo.spanId) {
5022
+ console.warn('[ParallaxService] Client not initialized or span not available');
5023
+ return;
5024
+ }
5025
+ try {
5026
+ // Add final event
5027
+ await this.addTransactionEvent(txId, options.success ? 'transaction_completed' : 'transaction_failed', {
5028
+ success: options.success.toString(),
5029
+ error: options.error || '',
5030
+ duration: (Date.now() - new Date(txInfo.timestamp).getTime()).toString(),
5031
+ timestamp: new Date().toISOString(),
5032
+ });
5033
+ // Finish the span
5034
+ const request = this.client.createFinishSpanRequest({
5035
+ traceId: txInfo.traceId,
5036
+ spanId: txInfo.spanId,
5037
+ status: {
5038
+ success: options.success,
5039
+ errorMessage: options.error || '',
5040
+ },
5041
+ });
5042
+ await this.client.finishSpan(request);
5043
+ console.log('[ParallaxService] Transaction trace finished:', {
5044
+ txId,
5045
+ traceId: txInfo.traceId,
5046
+ success: options.success,
5047
+ txHash: txInfo.txHash,
5048
+ });
5049
+ // Remove from active transactions
5050
+ this.activeTransactions.delete(txId);
5051
+ }
5052
+ catch (error) {
5053
+ console.error('[ParallaxService] Failed to finish transaction trace:', error);
5054
+ }
5055
+ }
5056
+ /**
5057
+ * Get info about an active transaction
5058
+ *
5059
+ * @param txId - Transaction identifier
5060
+ * @returns Transaction info or null if not found
5061
+ */
5062
+ getTransactionInfo(txId) {
5063
+ return this.activeTransactions.get(txId) || null;
5064
+ }
5065
+ /**
5066
+ * Get all active transactions
5067
+ *
5068
+ * @returns Array of active transaction info
5069
+ */
5070
+ getAllActiveTransactions() {
5071
+ return Array.from(this.activeTransactions.entries()).map(([txId, info]) => ({
5072
+ txId,
5073
+ ...info,
5074
+ }));
5075
+ }
5076
+ /**
5077
+ * Get the ParallaxClient instance for advanced usage
5078
+ * @param apiKey - Optional API key
5079
+ * @param gatewayUrl - Optional gateway URL
5080
+ */
5081
+ getClient(apiKey, gatewayUrl) {
5082
+ this._ensureClient(apiKey, gatewayUrl);
5083
+ if (!this.client) {
5084
+ throw new Error('Failed to initialize Parallax client');
5085
+ }
5086
+ return this.client;
5087
+ }
5088
+ }
5089
+ // Export singleton instance
5090
+ const parallaxService = new ParallaxService();
5091
+
4457
5092
  exports.AddSpanErrorRequest = parallax_gateway_pbExports.AddSpanErrorRequest;
4458
5093
  exports.AddSpanErrorResponse = parallax_gateway_pbExports.AddSpanErrorResponse;
4459
5094
  exports.AddSpanEventRequest = parallax_gateway_pbExports.AddSpanEventRequest;
@@ -4466,8 +5101,10 @@
4466
5101
  exports.FinishSpanResponse = parallax_gateway_pbExports.FinishSpanResponse;
4467
5102
  exports.GrpcWebRpc = GrpcWebRpc;
4468
5103
  exports.ParallaxClient = ParallaxClient;
5104
+ exports.ParallaxService = ParallaxService;
4469
5105
  exports.StartSpanRequest = parallax_gateway_pbExports.StartSpanRequest;
4470
5106
  exports.StartSpanResponse = parallax_gateway_pbExports.StartSpanResponse;
5107
+ exports.parallaxService = parallaxService;
4471
5108
 
4472
5109
  }));
4473
5110
  //# sourceMappingURL=index.umd.js.map