@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.esm.js CHANGED
@@ -2,67 +2,6 @@ import { Observable } from 'rxjs';
2
2
 
3
3
  var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
4
4
 
5
- var grpcWeb = {};
6
-
7
- /*
8
-
9
- Copyright The Closure Library Authors.
10
- SPDX-License-Identifier: Apache-2.0
11
- */
12
-
13
- var hasRequiredGrpcWeb;
14
-
15
- function requireGrpcWeb () {
16
- if (hasRequiredGrpcWeb) return grpcWeb;
17
- hasRequiredGrpcWeb = 1;
18
- 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)}
19
- 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)}
20
- 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]);
21
- 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}}
22
- 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";
23
- 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"});
24
- 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||
25
- 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);};
26
- 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--));}}
27
- 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);}
28
- 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.");}}
29
- 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));}
30
- 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}
31
- 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);};
32
- 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;}
33
- 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;}
34
- 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}
35
- 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"];
36
- 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
37
- 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: "+
38
- 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"));}
39
- 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);};
40
- 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,
41
- -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);}}}
42
- 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}};
43
- 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}}
44
- 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}
45
- 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));}}
46
- 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);}
47
- 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",
48
- 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]);
49
- 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)||
50
- (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,
51
- 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)}
52
- 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);});}
53
- 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")),
54
- 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+
55
- 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++]=
56
- 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}
57
- 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())}
58
- 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);
59
- 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"};
60
- rb=typeof globalThis!=="undefined"&&globalThis||self;
61
- return grpcWeb;
62
- }
63
-
64
- var grpcWebExports = requireGrpcWeb();
65
-
66
5
  var parallax_gateway_pb = {};
67
6
 
68
7
  var googleProtobuf = {};
@@ -1114,7 +1053,8 @@ function requireParallax_gateway_pb () {
1114
1053
  var f, obj = {
1115
1054
  name: jspb.Message.getFieldWithDefault(msg, 1, ""),
1116
1055
  attributesMap: (f = msg.getAttributesMap()) ? f.toObject(includeInstance, undefined) : [],
1117
- tagsList: (f = jspb.Message.getRepeatedField(msg, 3)) == null ? undefined : f
1056
+ tagsList: (f = jspb.Message.getRepeatedField(msg, 3)) == null ? undefined : f,
1057
+ startTime: (f = msg.getStartTime()) && google_protobuf_timestamp_pb.Timestamp.toObject(includeInstance, f)
1118
1058
  };
1119
1059
 
1120
1060
  if (includeInstance) {
@@ -1165,6 +1105,11 @@ function requireParallax_gateway_pb () {
1165
1105
  var value = /** @type {string} */ (reader.readString());
1166
1106
  msg.addTags(value);
1167
1107
  break;
1108
+ case 4:
1109
+ var value = new google_protobuf_timestamp_pb.Timestamp;
1110
+ reader.readMessage(value,google_protobuf_timestamp_pb.Timestamp.deserializeBinaryFromReader);
1111
+ msg.setStartTime(value);
1112
+ break;
1168
1113
  default:
1169
1114
  reader.skipField();
1170
1115
  break;
@@ -1212,6 +1157,14 @@ function requireParallax_gateway_pb () {
1212
1157
  f
1213
1158
  );
1214
1159
  }
1160
+ f = message.getStartTime();
1161
+ if (f != null) {
1162
+ writer.writeMessage(
1163
+ 4,
1164
+ f,
1165
+ google_protobuf_timestamp_pb.Timestamp.serializeBinaryToWriter
1166
+ );
1167
+ }
1215
1168
  };
1216
1169
 
1217
1170
 
@@ -1293,6 +1246,43 @@ function requireParallax_gateway_pb () {
1293
1246
  };
1294
1247
 
1295
1248
 
1249
+ /**
1250
+ * optional google.protobuf.Timestamp start_time = 4;
1251
+ * @return {?proto.google.protobuf.Timestamp}
1252
+ */
1253
+ proto.gateway.parallax.v1.CreateTraceRequest.prototype.getStartTime = function() {
1254
+ return /** @type{?proto.google.protobuf.Timestamp} */ (
1255
+ jspb.Message.getWrapperField(this, google_protobuf_timestamp_pb.Timestamp, 4));
1256
+ };
1257
+
1258
+
1259
+ /**
1260
+ * @param {?proto.google.protobuf.Timestamp|undefined} value
1261
+ * @return {!proto.gateway.parallax.v1.CreateTraceRequest} returns this
1262
+ */
1263
+ proto.gateway.parallax.v1.CreateTraceRequest.prototype.setStartTime = function(value) {
1264
+ return jspb.Message.setWrapperField(this, 4, value);
1265
+ };
1266
+
1267
+
1268
+ /**
1269
+ * Clears the message field making it undefined.
1270
+ * @return {!proto.gateway.parallax.v1.CreateTraceRequest} returns this
1271
+ */
1272
+ proto.gateway.parallax.v1.CreateTraceRequest.prototype.clearStartTime = function() {
1273
+ return this.setStartTime(undefined);
1274
+ };
1275
+
1276
+
1277
+ /**
1278
+ * Returns whether this field is set.
1279
+ * @return {boolean}
1280
+ */
1281
+ proto.gateway.parallax.v1.CreateTraceRequest.prototype.hasStartTime = function() {
1282
+ return jspb.Message.getField(this, 4) != null;
1283
+ };
1284
+
1285
+
1296
1286
 
1297
1287
 
1298
1288
 
@@ -1326,7 +1316,8 @@ function requireParallax_gateway_pb () {
1326
1316
  proto.gateway.parallax.v1.CreateTraceResponse.toObject = function(includeInstance, msg) {
1327
1317
  var f, obj = {
1328
1318
  status: (f = msg.getStatus()) && proto_common_v1_status_pb.ResponseStatus.toObject(includeInstance, f),
1329
- traceId: jspb.Message.getFieldWithDefault(msg, 2, "")
1319
+ traceId: jspb.Message.getFieldWithDefault(msg, 2, ""),
1320
+ rootSpanId: jspb.Message.getFieldWithDefault(msg, 3, "")
1330
1321
  };
1331
1322
 
1332
1323
  if (includeInstance) {
@@ -1372,6 +1363,10 @@ function requireParallax_gateway_pb () {
1372
1363
  var value = /** @type {string} */ (reader.readString());
1373
1364
  msg.setTraceId(value);
1374
1365
  break;
1366
+ case 3:
1367
+ var value = /** @type {string} */ (reader.readString());
1368
+ msg.setRootSpanId(value);
1369
+ break;
1375
1370
  default:
1376
1371
  reader.skipField();
1377
1372
  break;
@@ -1416,6 +1411,13 @@ function requireParallax_gateway_pb () {
1416
1411
  f
1417
1412
  );
1418
1413
  }
1414
+ f = message.getRootSpanId();
1415
+ if (f.length > 0) {
1416
+ writer.writeString(
1417
+ 3,
1418
+ f
1419
+ );
1420
+ }
1419
1421
  };
1420
1422
 
1421
1423
 
@@ -1474,6 +1476,24 @@ function requireParallax_gateway_pb () {
1474
1476
  };
1475
1477
 
1476
1478
 
1479
+ /**
1480
+ * optional string root_span_id = 3;
1481
+ * @return {string}
1482
+ */
1483
+ proto.gateway.parallax.v1.CreateTraceResponse.prototype.getRootSpanId = function() {
1484
+ return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, ""));
1485
+ };
1486
+
1487
+
1488
+ /**
1489
+ * @param {string} value
1490
+ * @return {!proto.gateway.parallax.v1.CreateTraceResponse} returns this
1491
+ */
1492
+ proto.gateway.parallax.v1.CreateTraceResponse.prototype.setRootSpanId = function(value) {
1493
+ return jspb.Message.setProto3StringField(this, 3, value);
1494
+ };
1495
+
1496
+
1477
1497
 
1478
1498
 
1479
1499
 
@@ -1508,7 +1528,7 @@ function requireParallax_gateway_pb () {
1508
1528
  var f, obj = {
1509
1529
  name: jspb.Message.getFieldWithDefault(msg, 1, ""),
1510
1530
  traceId: jspb.Message.getFieldWithDefault(msg, 2, ""),
1511
- parentSpanId: (f = jspb.Message.getField(msg, 3)) == null ? undefined : f,
1531
+ parentSpanId: jspb.Message.getFieldWithDefault(msg, 3, ""),
1512
1532
  attributesMap: (f = msg.getAttributesMap()) ? f.toObject(includeInstance, undefined) : [],
1513
1533
  startTime: (f = msg.getStartTime()) && google_protobuf_timestamp_pb.Timestamp.toObject(includeInstance, f)
1514
1534
  };
@@ -1613,8 +1633,8 @@ function requireParallax_gateway_pb () {
1613
1633
  f
1614
1634
  );
1615
1635
  }
1616
- f = /** @type {string} */ (jspb.Message.getField(message, 3));
1617
- if (f != null) {
1636
+ f = message.getParentSpanId();
1637
+ if (f.length > 0) {
1618
1638
  writer.writeString(
1619
1639
  3,
1620
1640
  f
@@ -1685,25 +1705,7 @@ function requireParallax_gateway_pb () {
1685
1705
  * @return {!proto.gateway.parallax.v1.StartSpanRequest} returns this
1686
1706
  */
1687
1707
  proto.gateway.parallax.v1.StartSpanRequest.prototype.setParentSpanId = function(value) {
1688
- return jspb.Message.setField(this, 3, value);
1689
- };
1690
-
1691
-
1692
- /**
1693
- * Clears the field making it undefined.
1694
- * @return {!proto.gateway.parallax.v1.StartSpanRequest} returns this
1695
- */
1696
- proto.gateway.parallax.v1.StartSpanRequest.prototype.clearParentSpanId = function() {
1697
- return jspb.Message.setField(this, 3, undefined);
1698
- };
1699
-
1700
-
1701
- /**
1702
- * Returns whether this field is set.
1703
- * @return {boolean}
1704
- */
1705
- proto.gateway.parallax.v1.StartSpanRequest.prototype.hasParentSpanId = function() {
1706
- return jspb.Message.getField(this, 3) != null;
1708
+ return jspb.Message.setProto3StringField(this, 3, value);
1707
1709
  };
1708
1710
 
1709
1711
 
@@ -4083,6 +4085,67 @@ function requireParallax_gateway_pb () {
4083
4085
 
4084
4086
  var parallax_gateway_pbExports = requireParallax_gateway_pb();
4085
4087
 
4088
+ var grpcWeb = {};
4089
+
4090
+ /*
4091
+
4092
+ Copyright The Closure Library Authors.
4093
+ SPDX-License-Identifier: Apache-2.0
4094
+ */
4095
+
4096
+ var hasRequiredGrpcWeb;
4097
+
4098
+ function requireGrpcWeb () {
4099
+ if (hasRequiredGrpcWeb) return grpcWeb;
4100
+ hasRequiredGrpcWeb = 1;
4101
+ 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)}
4102
+ 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)}
4103
+ 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]);
4104
+ 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}}
4105
+ 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";
4106
+ 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"});
4107
+ 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||
4108
+ 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);};
4109
+ 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--));}}
4110
+ 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);}
4111
+ 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.");}}
4112
+ 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));}
4113
+ 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}
4114
+ 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);};
4115
+ 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;}
4116
+ 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;}
4117
+ 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}
4118
+ 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"];
4119
+ 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
4120
+ 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: "+
4121
+ 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"));}
4122
+ 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);};
4123
+ 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,
4124
+ -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);}}}
4125
+ 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}};
4126
+ 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}}
4127
+ 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}
4128
+ 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));}}
4129
+ 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);}
4130
+ 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",
4131
+ 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]);
4132
+ 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)||
4133
+ (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,
4134
+ 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)}
4135
+ 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);});}
4136
+ 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")),
4137
+ 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+
4138
+ 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++]=
4139
+ 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}
4140
+ 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())}
4141
+ 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);
4142
+ 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"};
4143
+ rb=typeof globalThis!=="undefined"&&globalThis||self;
4144
+ return grpcWeb;
4145
+ }
4146
+
4147
+ var grpcWebExports = requireGrpcWeb();
4148
+
4086
4149
  /**
4087
4150
  * @fileoverview gRPC-Web generated client stub for gateway.parallax.v1
4088
4151
  * @enhanceable
@@ -4229,6 +4292,7 @@ class ParallaxGatewayServiceClient {
4229
4292
  }
4230
4293
  }
4231
4294
 
4295
+ // Parallax SDK Web Client
4232
4296
  const GRPC_GATEWAY_API_URL = "https://gateway-parallax-dev.platform.svc.cluster.local:50053";
4233
4297
  const debugIssue = (trace, error) => {
4234
4298
  // Handle our own debugging / logging here
@@ -4262,6 +4326,131 @@ class ParallaxClient {
4262
4326
  // Initialize the gRPC-Web client
4263
4327
  this.client = new ParallaxGatewayServiceClient(this.apiUrl, credentials);
4264
4328
  }
4329
+ /**
4330
+ * Gather client metadata for traces/spans
4331
+ * Returns a metadata object with client environment details
4332
+ * This includes browser, OS, screen size, IP address, and more
4333
+ * @returns metadata
4334
+ */
4335
+ async getClientMetadata() {
4336
+ const metadata = {};
4337
+ // Browser info
4338
+ metadata.userAgent = navigator.userAgent;
4339
+ metadata.platform = navigator.platform;
4340
+ metadata.language = navigator.language;
4341
+ // Screen info
4342
+ metadata.screenWidth = window.screen.width.toString();
4343
+ metadata.screenHeight = window.screen.height.toString();
4344
+ metadata.viewportWidth = window.innerWidth.toString();
4345
+ metadata.viewportHeight = window.innerHeight.toString();
4346
+ // Try to get IP address (non-blocking)
4347
+ // Note: This may be blocked by Content Security Policy (CSP)
4348
+ // If blocked, the backend should capture IP from request headers instead
4349
+ try {
4350
+ // Use ipify API (simple and fast JSON response)
4351
+ const ipResponse = await fetch('https://api.ipify.org?format=json');
4352
+ if (ipResponse && ipResponse.ok) {
4353
+ const data = await ipResponse.json();
4354
+ if (data && data.ip) {
4355
+ metadata.ip = data.ip;
4356
+ }
4357
+ else {
4358
+ metadata.ip = 'client_unavailable';
4359
+ }
4360
+ }
4361
+ else {
4362
+ metadata.ip = 'client_unavailable';
4363
+ }
4364
+ }
4365
+ catch (error) {
4366
+ // IP lookup failed (CSP block, timeout, or network error)
4367
+ // This is expected if CSP blocks external requests
4368
+ // Backend should capture IP from request headers instead
4369
+ if (error instanceof Error && error.message.includes('Content Security Policy')) {
4370
+ console.debug('IP fetch blocked by CSP - backend will capture from headers');
4371
+ }
4372
+ else {
4373
+ console.debug('Could not fetch IP address');
4374
+ }
4375
+ metadata.ip = 'client_unavailable';
4376
+ }
4377
+ // Browser details (parse from user agent)
4378
+ const ua = navigator.userAgent;
4379
+ if (ua.includes('Chrome')) {
4380
+ metadata.browser = 'Chrome';
4381
+ }
4382
+ else if (ua.includes('Firefox')) {
4383
+ metadata.browser = 'Firefox';
4384
+ }
4385
+ else if (ua.includes('Safari')) {
4386
+ metadata.browser = 'Safari';
4387
+ }
4388
+ else if (ua.includes('Edge')) {
4389
+ metadata.browser = 'Edge';
4390
+ }
4391
+ else {
4392
+ metadata.browser = 'Unknown';
4393
+ }
4394
+ // OS detection
4395
+ if (ua.includes('Windows')) {
4396
+ metadata.os = 'Windows';
4397
+ }
4398
+ else if (ua.includes('Mac')) {
4399
+ metadata.os = 'macOS';
4400
+ }
4401
+ else if (ua.includes('Linux')) {
4402
+ metadata.os = 'Linux';
4403
+ }
4404
+ else if (ua.includes('Android')) {
4405
+ metadata.os = 'Android';
4406
+ }
4407
+ else if (ua.includes('iOS')) {
4408
+ metadata.os = 'iOS';
4409
+ }
4410
+ else {
4411
+ metadata.os = 'Unknown';
4412
+ }
4413
+ // Timezone
4414
+ metadata.timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
4415
+ metadata.timezoneOffset = new Date().getTimezoneOffset().toString();
4416
+ // Page info
4417
+ metadata.url = window.location.href;
4418
+ metadata.referrer = document.referrer || 'direct';
4419
+ return metadata;
4420
+ }
4421
+ /**
4422
+ * Creates a CreateTraceRequest with optional attributes and client metadata
4423
+ * @param name name of the trace
4424
+ * @param tags optional tags for trace
4425
+ * @param attr optional attributes for trace
4426
+ * @param includeClientMeta optional flag to include client metadata (ip, browser, os, etc)
4427
+ * @returns a CreateTraceRequest object to be used for the createTrace request
4428
+ */
4429
+ async createTraceRequest({ name, tags, attr, includeClientMeta = false }) {
4430
+ const createTraceReq = new parallax_gateway_pbExports.CreateTraceRequest();
4431
+ createTraceReq.setName(name);
4432
+ if (tags) {
4433
+ createTraceReq.setTagsList(tags);
4434
+ }
4435
+ const traceAttrs = createTraceReq.getAttributesMap();
4436
+ if (attr) {
4437
+ Object.entries(attr).forEach(([key, value]) => {
4438
+ if (key.includes('client.')) {
4439
+ console.warn(`Attribute key "${key}" is reserved for client metadata. It will be prefixed with "custom."`);
4440
+ }
4441
+ else {
4442
+ traceAttrs.set(key, typeof value === 'object' ? JSON.stringify(value) : String(value));
4443
+ }
4444
+ });
4445
+ }
4446
+ if (includeClientMeta) {
4447
+ const clientMetadata = await this.getClientMetadata();
4448
+ Object.entries(clientMetadata).forEach(([key, value]) => {
4449
+ traceAttrs.set(`client.${key}`, value);
4450
+ });
4451
+ }
4452
+ return createTraceReq;
4453
+ }
4265
4454
  /**
4266
4455
  * Create a new trace
4267
4456
  * @param params Parameters to create a new trace
@@ -4276,6 +4465,46 @@ class ParallaxClient {
4276
4465
  throw _error;
4277
4466
  }
4278
4467
  }
4468
+ /**
4469
+ * Create a StartSpanRequest with optional attributes and client metadata
4470
+ * @param traceId trace id to associate the span with
4471
+ * @param name name of the span
4472
+ * @param parentSpanId (optional) create a span off a parent span id
4473
+ * @param attr (optional) attributes to add to the span
4474
+ * @param includeClientMeta (optional) flag to include client metadata (ip, browser, os, etc)
4475
+ * @returns
4476
+ */
4477
+ async createStartSpanRequest({ traceId, name, parentSpanId, attr, includeClientMeta = false }) {
4478
+ const startSpanReq = new parallax_gateway_pbExports.StartSpanRequest();
4479
+ startSpanReq.setTraceId(traceId);
4480
+ startSpanReq.setName(name);
4481
+ if (parentSpanId) {
4482
+ startSpanReq.setParentSpanId(parentSpanId);
4483
+ }
4484
+ const spanAttrs = startSpanReq.getAttributesMap();
4485
+ if (attr) {
4486
+ Object.entries(attr).forEach(([key, value]) => {
4487
+ if (key.includes('client.')) {
4488
+ console.warn(`Attribute key "${key}" is reserved for client metadata. It will be prefixed with "custom."`);
4489
+ }
4490
+ else {
4491
+ spanAttrs.set(key, typeof value === 'object' ? JSON.stringify(value) : String(value));
4492
+ }
4493
+ });
4494
+ }
4495
+ try {
4496
+ if (includeClientMeta) {
4497
+ const clientMetadata = await this.getClientMetadata();
4498
+ Object.entries(clientMetadata).forEach(([key, value]) => {
4499
+ spanAttrs.set(`client.${key}`, value);
4500
+ });
4501
+ }
4502
+ }
4503
+ catch (error) {
4504
+ console.error('Error gathering client metadata for span:', error);
4505
+ }
4506
+ return startSpanReq;
4507
+ }
4279
4508
  /**
4280
4509
  * Start a new span within a trace
4281
4510
  * @param params Parameters to start a new span
@@ -4289,6 +4518,25 @@ class ParallaxClient {
4289
4518
  throw _error;
4290
4519
  }
4291
4520
  }
4521
+ /**
4522
+ * Create a FinishSpanRequest
4523
+ * @param params Parameters to finish a span - traceId, spanId, status (optional) (success, errorMessage)
4524
+ * @returns FinishSpanRequest
4525
+ */
4526
+ createFinishSpanRequest({ traceId, spanId, status }) {
4527
+ const request = new parallax_gateway_pbExports.FinishSpanRequest();
4528
+ request.setTraceId(traceId);
4529
+ request.setSpanId(spanId);
4530
+ if (status !== undefined) {
4531
+ const spanStatus = new parallax_gateway_pbExports.FinishSpanRequest.SpanStatus();
4532
+ spanStatus.setCode(status.success ? parallax_gateway_pbExports.FinishSpanRequest.SpanStatus.StatusCode.STATUS_CODE_OK : parallax_gateway_pbExports.FinishSpanRequest.SpanStatus.StatusCode.STATUS_CODE_ERROR);
4533
+ if (status.errorMessage) {
4534
+ spanStatus.setMessage(status.errorMessage);
4535
+ }
4536
+ request.setStatus(spanStatus);
4537
+ }
4538
+ return request;
4539
+ }
4292
4540
  /**
4293
4541
  * Finish a span within a trace
4294
4542
  * @param params Parameters to finish a span
@@ -4302,6 +4550,25 @@ class ParallaxClient {
4302
4550
  throw _error;
4303
4551
  }
4304
4552
  }
4553
+ /**
4554
+ * Creates the add span event request
4555
+ * @param params - Parameters to create an AddSpanEventRequest - traceId, spanId, eventName, attr (optional)
4556
+ * @returns AddSpanEventRequest
4557
+ */
4558
+ createAddSpanEventRequest({ traceId, spanId, eventName, attr }) {
4559
+ const request = new parallax_gateway_pbExports.AddSpanEventRequest();
4560
+ request.setTraceId(traceId);
4561
+ request.setSpanId(spanId);
4562
+ request.setEventName(eventName);
4563
+ const eventAttrs = request.getAttributesMap();
4564
+ if (attr) {
4565
+ Object.entries(attr).forEach(([key, value]) => {
4566
+ eventAttrs.set(key, typeof value === 'object' ? JSON.stringify(value) : String(value));
4567
+ });
4568
+ }
4569
+ eventAttrs.set('timestamp', new Date().toISOString());
4570
+ return request;
4571
+ }
4305
4572
  /**
4306
4573
  * Add an event to a span
4307
4574
  * @param params Parameters to add an event to a span
@@ -4315,6 +4582,24 @@ class ParallaxClient {
4315
4582
  throw _error;
4316
4583
  }
4317
4584
  }
4585
+ /**
4586
+ * Creates the add span error request
4587
+ * @param params - params used to generate the error request ( traceid, span id, error message, error type, stack trace)
4588
+ * @returns AddSpanErrorRequest
4589
+ */
4590
+ createAddSpanErrorRequest({ traceId, spanId, errorMessage, errorType, stackTrace }) {
4591
+ const request = new parallax_gateway_pbExports.AddSpanErrorRequest();
4592
+ request.setTraceId(traceId);
4593
+ request.setSpanId(spanId);
4594
+ request.setMessage(errorMessage);
4595
+ if (errorType) {
4596
+ request.setErrorType(errorType);
4597
+ }
4598
+ if (stackTrace) {
4599
+ request.setStackTrace(stackTrace);
4600
+ }
4601
+ return request;
4602
+ }
4318
4603
  /**
4319
4604
  * Add an error to a span
4320
4605
  * @param params Parameters to add an error to a span
@@ -4328,6 +4613,23 @@ class ParallaxClient {
4328
4613
  throw _error;
4329
4614
  }
4330
4615
  }
4616
+ /**
4617
+ * Creates the add span hint request
4618
+ * @param params - params used to generate the span hint (trace id, parentSpanId, txHash and chainId)
4619
+ * @returns AddSpanHintRequest
4620
+ */
4621
+ createAddSpanHintRequest({ traceId, parentSpanId, txHash, chainId }) {
4622
+ const hintReq = new parallax_gateway_pbExports.AddSpanHintRequest();
4623
+ hintReq.setTraceId(traceId);
4624
+ hintReq.setParentSpanId(parentSpanId);
4625
+ if (txHash && chainId !== undefined) {
4626
+ const chainTxReq = new parallax_gateway_pbExports.AddSpanHintRequest.ChainTransaction();
4627
+ chainTxReq.setTxHash(txHash);
4628
+ chainTxReq.setChainId(chainId);
4629
+ hintReq.setChainTransaction(chainTxReq);
4630
+ }
4631
+ return hintReq;
4632
+ }
4331
4633
  /**
4332
4634
  * Add a hint to a span
4333
4635
  * @param params Parameters to add a hint to a span
@@ -4450,6 +4752,339 @@ class GrpcWebRpc {
4450
4752
  }
4451
4753
  }
4452
4754
 
4755
+ /**
4756
+ * Parallax Service - Transaction Tracing for Web Applications
4757
+ * Creates individual traces for each transaction and tracks them through their lifecycle
4758
+ *
4759
+ * This service provides a simplified interface for tracking transactions with automatic
4760
+ * client metadata collection and lifecycle management.
4761
+ */
4762
+ class ParallaxService {
4763
+ constructor() {
4764
+ Object.defineProperty(this, "client", {
4765
+ enumerable: true,
4766
+ configurable: true,
4767
+ writable: true,
4768
+ value: null
4769
+ });
4770
+ Object.defineProperty(this, "activeTransactions", {
4771
+ enumerable: true,
4772
+ configurable: true,
4773
+ writable: true,
4774
+ value: new Map()
4775
+ });
4776
+ // Client will be initialized lazily
4777
+ }
4778
+ /**
4779
+ * Initialize the Parallax client (lazy initialization)
4780
+ * @param apiKey - Optional API key for authentication
4781
+ * @param gatewayUrl - Optional custom gateway URL
4782
+ */
4783
+ _ensureClient(apiKey, gatewayUrl) {
4784
+ if (this.client)
4785
+ return;
4786
+ // Determine gateway URL based on environment if not provided
4787
+ let url = gatewayUrl;
4788
+ if (!url && typeof window !== 'undefined') {
4789
+ const isDevelopment = window.location.hostname === 'localhost' ||
4790
+ window.location.hostname === '127.0.0.1';
4791
+ url = isDevelopment
4792
+ ? `${window.location.protocol}//${window.location.host}/parallax-gateway`
4793
+ : 'https://gateway-parallax-dev.mirador.org';
4794
+ }
4795
+ this.client = new ParallaxClient(apiKey || '', url);
4796
+ console.log('[ParallaxService] Client initialized with URL:', url);
4797
+ }
4798
+ /**
4799
+ * Start a new transaction trace
4800
+ * Called when user initiates a transaction
4801
+ *
4802
+ * Note: Since createTrace now automatically creates a root span, we don't need
4803
+ * to call startSpan separately. The rootSpanId from the response is the parent span.
4804
+ *
4805
+ * @param txData - Transaction data
4806
+ * @param name - Name for the trace (e.g., 'SendingTrace', 'SwappingTrace')
4807
+ * @param options - Optional configuration (apiKey, gatewayUrl, includeClientMeta)
4808
+ * @returns Promise with traceId, rootSpanId, and txId
4809
+ */
4810
+ async startTransactionTrace(txData, name = 'WalletTransaction', options) {
4811
+ this._ensureClient(options?.apiKey, options?.gatewayUrl);
4812
+ if (!this.client) {
4813
+ throw new Error('Failed to initialize Parallax client');
4814
+ }
4815
+ try {
4816
+ const txId = `tx_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
4817
+ const timestamp = new Date().toISOString();
4818
+ // Create trace attributes
4819
+ const traceAttributes = {
4820
+ transactionId: txId,
4821
+ walletAddress: txData.walletAddress || txData.from,
4822
+ network: txData.network || 'Unknown',
4823
+ transactionStart: timestamp,
4824
+ from: txData.from,
4825
+ to: txData.to,
4826
+ value: txData.value,
4827
+ };
4828
+ // Add any additional transaction data
4829
+ if (txData.additionalData) {
4830
+ Object.entries(txData.additionalData).forEach(([key, value]) => {
4831
+ traceAttributes[key] = typeof value === 'object' ? JSON.stringify(value) : String(value);
4832
+ });
4833
+ }
4834
+ // Create a trace for this transaction
4835
+ const createTraceReq = await this.client.createTraceRequest({
4836
+ name: name,
4837
+ attr: traceAttributes,
4838
+ tags: ['transaction', 'wallet', txData.network || 'unknown'],
4839
+ includeClientMeta: options?.includeClientMeta ?? true,
4840
+ });
4841
+ const traceResponse = await this.client.createTrace(createTraceReq);
4842
+ const traceId = traceResponse.getTraceId();
4843
+ const rootSpanId = traceResponse.getRootSpanId();
4844
+ // Store transaction info
4845
+ this.activeTransactions.set(txId, {
4846
+ traceId,
4847
+ rootSpanId,
4848
+ spanId: rootSpanId, // Use rootSpanId as the main span for this transaction
4849
+ timestamp,
4850
+ txHash: null,
4851
+ from: txData.from,
4852
+ to: txData.to,
4853
+ network: txData.network,
4854
+ });
4855
+ console.log('[ParallaxService] Transaction trace started:', {
4856
+ txId,
4857
+ traceId,
4858
+ rootSpanId,
4859
+ from: txData.from,
4860
+ to: txData.to,
4861
+ });
4862
+ // Add initial event to the root span
4863
+ await this.addTransactionEvent(txId, 'transaction_initiated', {
4864
+ from: txData.from,
4865
+ to: txData.to,
4866
+ value: txData.value,
4867
+ timestamp,
4868
+ });
4869
+ return { traceId, rootSpanId, txId };
4870
+ }
4871
+ catch (error) {
4872
+ console.error('[ParallaxService] Failed to start transaction trace:', error);
4873
+ throw error;
4874
+ }
4875
+ }
4876
+ /**
4877
+ * Associate a transaction hash with an existing trace
4878
+ * Called when the transaction hash is available after signing/sending
4879
+ *
4880
+ * @param txId - Transaction identifier returned from startTransactionTrace
4881
+ * @param txHash - Blockchain transaction hash
4882
+ * @param chainId - Chain ID
4883
+ */
4884
+ async associateTransactionHash(txId, txHash, chainId) {
4885
+ const txInfo = this.activeTransactions.get(txId);
4886
+ if (!txInfo) {
4887
+ console.warn(`[ParallaxService] Transaction ${txId} not found in active transactions`);
4888
+ return;
4889
+ }
4890
+ if (!this.client) {
4891
+ console.warn('[ParallaxService] Client not initialized');
4892
+ return;
4893
+ }
4894
+ try {
4895
+ // Update stored tx info
4896
+ txInfo.txHash = txHash;
4897
+ this.activeTransactions.set(txId, txInfo);
4898
+ // Add chain hint to correlate with blockchain events
4899
+ const hintReq = this.client.createAddSpanHintRequest({
4900
+ traceId: txInfo.traceId,
4901
+ parentSpanId: txInfo.rootSpanId,
4902
+ txHash: txHash,
4903
+ chainId: chainId,
4904
+ });
4905
+ await this.client.addSpanHint(hintReq);
4906
+ // Add event for transaction sent
4907
+ await this.addTransactionEvent(txId, 'transaction_hash_available', {
4908
+ txHash,
4909
+ chainId: chainId.toString(),
4910
+ timestamp: new Date().toISOString(),
4911
+ });
4912
+ console.log('[ParallaxService] Transaction hash associated with trace:', {
4913
+ txId,
4914
+ txHash,
4915
+ traceId: txInfo.traceId,
4916
+ });
4917
+ }
4918
+ catch (error) {
4919
+ console.error('[ParallaxService] Failed to associate transaction hash:', error);
4920
+ }
4921
+ }
4922
+ /**
4923
+ * Add an event to a transaction trace
4924
+ *
4925
+ * @param txId - Transaction identifier
4926
+ * @param eventName - Event name
4927
+ * @param attributes - Event attributes
4928
+ */
4929
+ async addTransactionEvent(txId, eventName, attributes = {}) {
4930
+ const txInfo = this.activeTransactions.get(txId);
4931
+ if (!txInfo) {
4932
+ console.warn(`[ParallaxService] Transaction ${txId} not found. Cannot add event '${eventName}'`);
4933
+ return;
4934
+ }
4935
+ if (!this.client || !txInfo.spanId) {
4936
+ console.warn('[ParallaxService] Client not initialized or span not available');
4937
+ return;
4938
+ }
4939
+ try {
4940
+ // Convert attributes to plain object with string values
4941
+ const eventAttributes = {};
4942
+ Object.entries(attributes).forEach(([key, value]) => {
4943
+ eventAttributes[key] = typeof value === 'object' ? JSON.stringify(value) : String(value);
4944
+ });
4945
+ const request = this.client.createAddSpanEventRequest({
4946
+ traceId: txInfo.traceId,
4947
+ spanId: txInfo.spanId,
4948
+ eventName: eventName,
4949
+ attr: eventAttributes,
4950
+ });
4951
+ await this.client.addSpanEvent(request);
4952
+ }
4953
+ catch (error) {
4954
+ console.error(`[ParallaxService] Failed to add transaction event '${eventName}':`, error);
4955
+ }
4956
+ }
4957
+ /**
4958
+ * Add an error to a transaction trace
4959
+ * Creates a proper span error event in Parallax
4960
+ *
4961
+ * @param txId - Transaction identifier
4962
+ * @param error - Error object or message
4963
+ * @param errorType - Type/category of error (e.g., 'TransactionError', 'NetworkError', 'UserRejection')
4964
+ */
4965
+ async addTransactionError(txId, error, errorType = 'TransactionError') {
4966
+ const txInfo = this.activeTransactions.get(txId);
4967
+ if (!txInfo) {
4968
+ console.warn(`[ParallaxService] Transaction ${txId} not found. Cannot add error.`);
4969
+ return;
4970
+ }
4971
+ if (!this.client || !txInfo.spanId) {
4972
+ console.warn('[ParallaxService] Client not initialized or span not available');
4973
+ return;
4974
+ }
4975
+ try {
4976
+ // Extract error message and stack trace
4977
+ let errorMessage = '';
4978
+ let stackTrace;
4979
+ if (error instanceof Error) {
4980
+ errorMessage = error.message;
4981
+ stackTrace = error.stack;
4982
+ }
4983
+ else {
4984
+ errorMessage = String(error);
4985
+ }
4986
+ const request = this.client.createAddSpanErrorRequest({
4987
+ traceId: txInfo.traceId,
4988
+ spanId: txInfo.spanId,
4989
+ errorMessage: errorMessage,
4990
+ errorType: errorType,
4991
+ stackTrace: stackTrace,
4992
+ });
4993
+ await this.client.addSpanError(request);
4994
+ console.log('[ParallaxService] Transaction error added to trace:', {
4995
+ txId,
4996
+ errorType,
4997
+ message: error instanceof Error ? error.message : String(error),
4998
+ });
4999
+ }
5000
+ catch (err) {
5001
+ console.error('[ParallaxService] Failed to add transaction error:', err);
5002
+ }
5003
+ }
5004
+ /**
5005
+ * Finish a transaction trace
5006
+ * Called when transaction is confirmed or permanently failed
5007
+ *
5008
+ * @param txId - Transaction identifier
5009
+ * @param options - Finish options (success, error message)
5010
+ */
5011
+ async finishTransactionTrace(txId, options = { success: true }) {
5012
+ const txInfo = this.activeTransactions.get(txId);
5013
+ if (!txInfo) {
5014
+ console.warn(`[ParallaxService] Transaction ${txId} not found. Cannot finish.`);
5015
+ return;
5016
+ }
5017
+ if (!this.client || !txInfo.spanId) {
5018
+ console.warn('[ParallaxService] Client not initialized or span not available');
5019
+ return;
5020
+ }
5021
+ try {
5022
+ // Add final event
5023
+ await this.addTransactionEvent(txId, options.success ? 'transaction_completed' : 'transaction_failed', {
5024
+ success: options.success.toString(),
5025
+ error: options.error || '',
5026
+ duration: (Date.now() - new Date(txInfo.timestamp).getTime()).toString(),
5027
+ timestamp: new Date().toISOString(),
5028
+ });
5029
+ // Finish the span
5030
+ const request = this.client.createFinishSpanRequest({
5031
+ traceId: txInfo.traceId,
5032
+ spanId: txInfo.spanId,
5033
+ status: {
5034
+ success: options.success,
5035
+ errorMessage: options.error || '',
5036
+ },
5037
+ });
5038
+ await this.client.finishSpan(request);
5039
+ console.log('[ParallaxService] Transaction trace finished:', {
5040
+ txId,
5041
+ traceId: txInfo.traceId,
5042
+ success: options.success,
5043
+ txHash: txInfo.txHash,
5044
+ });
5045
+ // Remove from active transactions
5046
+ this.activeTransactions.delete(txId);
5047
+ }
5048
+ catch (error) {
5049
+ console.error('[ParallaxService] Failed to finish transaction trace:', error);
5050
+ }
5051
+ }
5052
+ /**
5053
+ * Get info about an active transaction
5054
+ *
5055
+ * @param txId - Transaction identifier
5056
+ * @returns Transaction info or null if not found
5057
+ */
5058
+ getTransactionInfo(txId) {
5059
+ return this.activeTransactions.get(txId) || null;
5060
+ }
5061
+ /**
5062
+ * Get all active transactions
5063
+ *
5064
+ * @returns Array of active transaction info
5065
+ */
5066
+ getAllActiveTransactions() {
5067
+ return Array.from(this.activeTransactions.entries()).map(([txId, info]) => ({
5068
+ txId,
5069
+ ...info,
5070
+ }));
5071
+ }
5072
+ /**
5073
+ * Get the ParallaxClient instance for advanced usage
5074
+ * @param apiKey - Optional API key
5075
+ * @param gatewayUrl - Optional gateway URL
5076
+ */
5077
+ getClient(apiKey, gatewayUrl) {
5078
+ this._ensureClient(apiKey, gatewayUrl);
5079
+ if (!this.client) {
5080
+ throw new Error('Failed to initialize Parallax client');
5081
+ }
5082
+ return this.client;
5083
+ }
5084
+ }
5085
+ // Export singleton instance
5086
+ const parallaxService = new ParallaxService();
5087
+
4453
5088
  var AddSpanErrorRequest = parallax_gateway_pbExports.AddSpanErrorRequest;
4454
5089
  var AddSpanErrorResponse = parallax_gateway_pbExports.AddSpanErrorResponse;
4455
5090
  var AddSpanEventRequest = parallax_gateway_pbExports.AddSpanEventRequest;
@@ -4462,5 +5097,5 @@ var FinishSpanRequest = parallax_gateway_pbExports.FinishSpanRequest;
4462
5097
  var FinishSpanResponse = parallax_gateway_pbExports.FinishSpanResponse;
4463
5098
  var StartSpanRequest = parallax_gateway_pbExports.StartSpanRequest;
4464
5099
  var StartSpanResponse = parallax_gateway_pbExports.StartSpanResponse;
4465
- export { AddSpanErrorRequest, AddSpanErrorResponse, AddSpanEventRequest, AddSpanEventResponse, AddSpanHintRequest, AddSpanHintResponse, CreateTraceRequest, CreateTraceResponse, FinishSpanRequest, FinishSpanResponse, GrpcWebRpc, ParallaxClient, StartSpanRequest, StartSpanResponse };
5100
+ export { AddSpanErrorRequest, AddSpanErrorResponse, AddSpanEventRequest, AddSpanEventResponse, AddSpanHintRequest, AddSpanHintResponse, CreateTraceRequest, CreateTraceResponse, FinishSpanRequest, FinishSpanResponse, GrpcWebRpc, ParallaxClient, ParallaxService, StartSpanRequest, StartSpanResponse, parallaxService };
4466
5101
  //# sourceMappingURL=index.esm.js.map