@walletconnect/ethereum-provider 2.17.3 → 2.17.4

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
@@ -40,7 +40,7 @@
40
40
  LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
41
41
  OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
42
42
  PERFORMANCE OF THIS SOFTWARE.
43
- ***************************************************************************** */var g0=function(r,e){return g0=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,i){t.__proto__=i}||function(t,i){for(var n in i)i.hasOwnProperty(n)&&(t[n]=i[n])},g0(r,e)};function uI(r,e){g0(r,e);function t(){this.constructor=r}r.prototype=e===null?Object.create(e):(t.prototype=e.prototype,new t)}var v0=function(){return v0=Object.assign||function(e){for(var t,i=1,n=arguments.length;i<n;i++){t=arguments[i];for(var s in t)Object.prototype.hasOwnProperty.call(t,s)&&(e[s]=t[s])}return e},v0.apply(this,arguments)};function dI(r,e){var t={};for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&e.indexOf(i)<0&&(t[i]=r[i]);if(r!=null&&typeof Object.getOwnPropertySymbols=="function")for(var n=0,i=Object.getOwnPropertySymbols(r);n<i.length;n++)e.indexOf(i[n])<0&&Object.prototype.propertyIsEnumerable.call(r,i[n])&&(t[i[n]]=r[i[n]]);return t}function pI(r,e,t,i){var n=arguments.length,s=n<3?e:i===null?i=Object.getOwnPropertyDescriptor(e,t):i,a;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")s=Reflect.decorate(r,e,t,i);else for(var f=r.length-1;f>=0;f--)(a=r[f])&&(s=(n<3?a(s):n>3?a(e,t,s):a(e,t))||s);return n>3&&s&&Object.defineProperty(e,t,s),s}function gI(r,e){return function(t,i){e(t,i,r)}}function vI(r,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(r,e)}function mI(r,e,t,i){function n(s){return s instanceof t?s:new t(function(a){a(s)})}return new(t||(t=Promise))(function(s,a){function f(g){try{u(i.next(g))}catch(w){a(w)}}function h(g){try{u(i.throw(g))}catch(w){a(w)}}function u(g){g.done?s(g.value):n(g.value).then(f,h)}u((i=i.apply(r,e||[])).next())})}function bI(r,e){var t={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},i,n,s,a;return a={next:f(0),throw:f(1),return:f(2)},typeof Symbol=="function"&&(a[Symbol.iterator]=function(){return this}),a;function f(u){return function(g){return h([u,g])}}function h(u){if(i)throw new TypeError("Generator is already executing.");for(;t;)try{if(i=1,n&&(s=u[0]&2?n.return:u[0]?n.throw||((s=n.return)&&s.call(n),0):n.next)&&!(s=s.call(n,u[1])).done)return s;switch(n=0,s&&(u=[u[0]&2,s.value]),u[0]){case 0:case 1:s=u;break;case 4:return t.label++,{value:u[1],done:!1};case 5:t.label++,n=u[1],u=[0];continue;case 7:u=t.ops.pop(),t.trys.pop();continue;default:if(s=t.trys,!(s=s.length>0&&s[s.length-1])&&(u[0]===6||u[0]===2)){t=0;continue}if(u[0]===3&&(!s||u[1]>s[0]&&u[1]<s[3])){t.label=u[1];break}if(u[0]===6&&t.label<s[1]){t.label=s[1],s=u;break}if(s&&t.label<s[2]){t.label=s[2],t.ops.push(u);break}s[2]&&t.ops.pop(),t.trys.pop();continue}u=e.call(r,t)}catch(g){u=[6,g],n=0}finally{i=s=0}if(u[0]&5)throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}function wI(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}function yI(r,e){for(var t in r)t!=="default"&&!e.hasOwnProperty(t)&&(e[t]=r[t])}function m0(r){var e=typeof Symbol=="function"&&Symbol.iterator,t=e&&r[e],i=0;if(t)return t.call(r);if(r&&typeof r.length=="number")return{next:function(){return r&&i>=r.length&&(r=void 0),{value:r&&r[i++],done:!r}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function Vb(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var i=t.call(r),n,s=[],a;try{for(;(e===void 0||e-- >0)&&!(n=i.next()).done;)s.push(n.value)}catch(f){a={error:f}}finally{try{n&&!n.done&&(t=i.return)&&t.call(i)}finally{if(a)throw a.error}}return s}function _I(){for(var r=[],e=0;e<arguments.length;e++)r=r.concat(Vb(arguments[e]));return r}function xI(){for(var r=0,e=0,t=arguments.length;e<t;e++)r+=arguments[e].length;for(var i=Array(r),n=0,e=0;e<t;e++)for(var s=arguments[e],a=0,f=s.length;a<f;a++,n++)i[n]=s[a];return i}function ff(r){return this instanceof ff?(this.v=r,this):new ff(r)}function AI(r,e,t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var i=t.apply(r,e||[]),n,s=[];return n={},a("next"),a("throw"),a("return"),n[Symbol.asyncIterator]=function(){return this},n;function a(M){i[M]&&(n[M]=function(C){return new Promise(function(O,N){s.push([M,C,O,N])>1||f(M,C)})})}function f(M,C){try{h(i[M](C))}catch(O){w(s[0][3],O)}}function h(M){M.value instanceof ff?Promise.resolve(M.value.v).then(u,g):w(s[0][2],M)}function u(M){f("next",M)}function g(M){f("throw",M)}function w(M,C){M(C),s.shift(),s.length&&f(s[0][0],s[0][1])}}function EI(r){var e,t;return e={},i("next"),i("throw",function(n){throw n}),i("return"),e[Symbol.iterator]=function(){return this},e;function i(n,s){e[n]=r[n]?function(a){return(t=!t)?{value:ff(r[n](a)),done:n==="return"}:s?s(a):a}:s}}function SI(r){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var e=r[Symbol.asyncIterator],t;return e?e.call(r):(r=typeof m0=="function"?m0(r):r[Symbol.iterator](),t={},i("next"),i("throw"),i("return"),t[Symbol.asyncIterator]=function(){return this},t);function i(s){t[s]=r[s]&&function(a){return new Promise(function(f,h){a=r[s](a),n(f,h,a.done,a.value)})}}function n(s,a,f,h){Promise.resolve(h).then(function(u){s({value:u,done:f})},a)}}function II(r,e){return Object.defineProperty?Object.defineProperty(r,"raw",{value:e}):r.raw=e,r}function MI(r){if(r&&r.__esModule)return r;var e={};if(r!=null)for(var t in r)Object.hasOwnProperty.call(r,t)&&(e[t]=r[t]);return e.default=r,e}function CI(r){return r&&r.__esModule?r:{default:r}}function PI(r,e){if(!e.has(r))throw new TypeError("attempted to get private field on non-instance");return e.get(r)}function DI(r,e,t){if(!e.has(r))throw new TypeError("attempted to set private field on non-instance");return e.set(r,t),t}var OI=Object.freeze({__proto__:null,__extends:uI,get __assign(){return v0},__rest:dI,__decorate:pI,__param:gI,__metadata:vI,__awaiter:mI,__generator:bI,__createBinding:wI,__exportStar:yI,__values:m0,__read:Vb,__spread:_I,__spreadArrays:xI,__await:ff,__asyncGenerator:AI,__asyncDelegator:EI,__asyncValues:SI,__makeTemplateObject:II,__importStar:MI,__importDefault:CI,__classPrivateFieldGet:PI,__classPrivateFieldSet:DI}),RI=ju(OI),xs={},Gb;function TI(){if(Gb)return xs;Gb=1,Object.defineProperty(xs,"__esModule",{value:!0}),xs.isBrowserCryptoAvailable=xs.getSubtleCrypto=xs.getBrowerCrypto=void 0;function r(){return fr?.crypto||fr?.msCrypto||{}}xs.getBrowerCrypto=r;function e(){const i=r();return i.subtle||i.webkitSubtle}xs.getSubtleCrypto=e;function t(){return!!r()&&!!e()}return xs.isBrowserCryptoAvailable=t,xs}var As={},Yb;function NI(){if(Yb)return As;Yb=1,Object.defineProperty(As,"__esModule",{value:!0}),As.isBrowser=As.isNode=As.isReactNative=void 0;function r(){return typeof document>"u"&&typeof navigator<"u"&&navigator.product==="ReactNative"}As.isReactNative=r;function e(){return typeof process<"u"&&typeof process.versions<"u"&&typeof process.versions.node<"u"}As.isNode=e;function t(){return!r()&&!e()}return As.isBrowser=t,As}(function(r){Object.defineProperty(r,"__esModule",{value:!0});const e=RI;e.__exportStar(TI(),r),e.__exportStar(NI(),r)})(Kb);function Es(r=3){const e=Date.now()*Math.pow(10,r),t=Math.floor(Math.random()*Math.pow(10,r));return e+t}function Uo(r=6){return BigInt(Es(r))}function Qs(r,e,t){return{id:t||Es(),jsonrpc:"2.0",method:r,params:e}}function ih(r,e){return{id:r,jsonrpc:"2.0",result:e}}function nh(r,e,t){return{id:r,jsonrpc:"2.0",error:$I(e,t)}}function $I(r,e){return typeof r>"u"?jb(Hb):(typeof r=="string"&&(r=Object.assign(Object.assign({},jb(p0)),{message:r})),typeof e<"u"&&(r.data=e),lI(r.code)&&(r=hI(r.code)),r)}class LI{}class BI extends LI{constructor(){super()}}class FI extends BI{constructor(e){super()}}const UI="^https?:",qI="^wss?:";function zI(r){const e=r.match(new RegExp(/^\w+:/,"gi"));if(!(!e||!e.length))return e[0]}function Jb(r,e){const t=zI(r);return typeof t>"u"?!1:new RegExp(e).test(t)}function Qb(r){return Jb(r,UI)}function Zb(r){return Jb(r,qI)}function HI(r){return new RegExp("wss?://localhost(:d{2,5})?").test(r)}function Xb(r){return typeof r=="object"&&"id"in r&&"jsonrpc"in r&&r.jsonrpc==="2.0"}function b0(r){return Xb(r)&&"method"in r}function sh(r){return Xb(r)&&(es(r)||rn(r))}function es(r){return"result"in r}function rn(r){return"error"in r}class nn extends FI{constructor(e){super(e),this.events=new zr.exports.EventEmitter,this.hasRegisteredEventListeners=!1,this.connection=this.setConnection(e),this.connection.connected&&this.registerEventListeners()}async connect(e=this.connection){await this.open(e)}async disconnect(){await this.close()}on(e,t){this.events.on(e,t)}once(e,t){this.events.once(e,t)}off(e,t){this.events.off(e,t)}removeListener(e,t){this.events.removeListener(e,t)}async request(e,t){return this.requestStrict(Qs(e.method,e.params||[],e.id||Uo().toString()),t)}async requestStrict(e,t){return new Promise(async(i,n)=>{if(!this.connection.connected)try{await this.open()}catch(s){n(s)}this.events.on(`${e.id}`,s=>{rn(s)?n(s.error):i(s.result)});try{await this.connection.send(e,t)}catch(s){n(s)}})}setConnection(e=this.connection){return e}onPayload(e){this.events.emit("payload",e),sh(e)?this.events.emit(`${e.id}`,e):this.events.emit("message",{type:e.method,data:e.params})}onClose(e){e&&e.code===3e3&&this.events.emit("error",new Error(`WebSocket connection closed abnormally with code: ${e.code} ${e.reason?`(${e.reason})`:""}`)),this.events.emit("disconnect")}async open(e=this.connection){this.connection===e&&this.connection.connected||(this.connection.connected&&this.close(),typeof e=="string"&&(await this.connection.open(e),e=this.connection),this.connection=this.setConnection(e),await this.connection.open(),this.registerEventListeners(),this.events.emit("connect"))}async close(){await this.connection.close()}registerEventListeners(){this.hasRegisteredEventListeners||(this.connection.on("payload",e=>this.onPayload(e)),this.connection.on("close",e=>this.onClose(e)),this.connection.on("error",e=>this.events.emit("error",e)),this.connection.on("register_error",e=>this.onClose()),this.hasRegisteredEventListeners=!0)}}const kI=()=>typeof WebSocket<"u"?WebSocket:typeof global<"u"&&typeof global.WebSocket<"u"?global.WebSocket:typeof window<"u"&&typeof window.WebSocket<"u"?window.WebSocket:typeof self<"u"&&typeof self.WebSocket<"u"?self.WebSocket:require("ws"),jI=()=>typeof WebSocket<"u"||typeof global<"u"&&typeof global.WebSocket<"u"||typeof window<"u"&&typeof window.WebSocket<"u"||typeof self<"u"&&typeof self.WebSocket<"u",e2=r=>r.split("?")[0],t2=10,WI=kI();class KI{constructor(e){if(this.url=e,this.events=new zr.exports.EventEmitter,this.registering=!1,!Zb(e))throw new Error(`Provided URL is not compatible with WebSocket connection: ${e}`);this.url=e}get connected(){return typeof this.socket<"u"}get connecting(){return this.registering}on(e,t){this.events.on(e,t)}once(e,t){this.events.once(e,t)}off(e,t){this.events.off(e,t)}removeListener(e,t){this.events.removeListener(e,t)}async open(e=this.url){await this.register(e)}async close(){return new Promise((e,t)=>{if(typeof this.socket>"u"){t(new Error("Connection already closed"));return}this.socket.onclose=i=>{this.onClose(i),e()},this.socket.close()})}async send(e){typeof this.socket>"u"&&(this.socket=await this.register());try{this.socket.send(bs(e))}catch(t){this.onError(e.id,t)}}register(e=this.url){if(!Zb(e))throw new Error(`Provided URL is not compatible with WebSocket connection: ${e}`);if(this.registering){const t=this.events.getMaxListeners();return(this.events.listenerCount("register_error")>=t||this.events.listenerCount("open")>=t)&&this.events.setMaxListeners(t+1),new Promise((i,n)=>{this.events.once("register_error",s=>{this.resetMaxListeners(),n(s)}),this.events.once("open",()=>{if(this.resetMaxListeners(),typeof this.socket>"u")return n(new Error("WebSocket connection is missing or invalid"));i(this.socket)})})}return this.url=e,this.registering=!0,new Promise((t,i)=>{const n=Kb.isReactNative()?void 0:{rejectUnauthorized:!HI(e)},s=new WI(e,[],n);jI()?s.onerror=a=>{const f=a;i(this.emitError(f.error))}:s.on("error",a=>{i(this.emitError(a))}),s.onopen=()=>{this.onOpen(s),t(s)}})}onOpen(e){e.onmessage=t=>this.onPayload(t),e.onclose=t=>this.onClose(t),this.socket=e,this.registering=!1,this.events.emit("open")}onClose(e){this.socket=void 0,this.registering=!1,this.events.emit("close",e)}onPayload(e){if(typeof e.data>"u")return;const t=typeof e.data=="string"?Ro(e.data):e.data;this.events.emit("payload",t)}onError(e,t){const i=this.parseError(t),n=i.message||i.toString(),s=nh(e,n);this.events.emit("payload",s)}parseError(e,t=this.url){return Wb(e,e2(t),"WS")}resetMaxListeners(){this.events.getMaxListeners()>t2&&this.events.setMaxListeners(t2)}emitError(e){const t=this.parseError(new Error(e?.message||`WebSocket connection failed for host: ${e2(this.url)}`));return this.events.emit("register_error",t),t}}var w0={exports:{}};(function(r,e){var t=200,i="__lodash_hash_undefined__",n=1,s=2,a=9007199254740991,f="[object Arguments]",h="[object Array]",u="[object AsyncFunction]",g="[object Boolean]",w="[object Date]",M="[object Error]",C="[object Function]",O="[object GeneratorFunction]",N="[object Map]",j="[object Number]",H="[object Null]",F="[object Object]",G="[object Promise]",B="[object Proxy]",z="[object RegExp]",W="[object Set]",_="[object String]",U="[object Symbol]",ee="[object Undefined]",oe="[object WeakMap]",L="[object ArrayBuffer]",b="[object DataView]",m="[object Float32Array]",l="[object Float64Array]",d="[object Int8Array]",y="[object Int16Array]",P="[object Int32Array]",D="[object Uint8Array]",S="[object Uint8ClampedArray]",v="[object Uint16Array]",A="[object Uint32Array]",x=/[\\^$.*+?()[\]{}|]/g,$=/^\[object .+?Constructor\]$/,ae=/^(?:0|[1-9]\d*)$/,R={};R[m]=R[l]=R[d]=R[y]=R[P]=R[D]=R[S]=R[v]=R[A]=!0,R[f]=R[h]=R[L]=R[g]=R[b]=R[w]=R[M]=R[C]=R[N]=R[j]=R[F]=R[z]=R[W]=R[_]=R[oe]=!1;var X=typeof fr=="object"&&fr&&fr.Object===Object&&fr,V=typeof self=="object"&&self&&self.Object===Object&&self,J=X||V||Function("return this")(),K=e&&!e.nodeType&&e,E=K&&!0&&r&&!r.nodeType&&r,Y=E&&E.exports===K,re=Y&&X.process,le=function(){try{return re&&re.binding&&re.binding("util")}catch{}}(),he=le&&le.isTypedArray;function ge(Q,ne){for(var pe=-1,Ue=Q==null?0:Q.length,Xt=0,bt=[];++pe<Ue;){var or=Q[pe];ne(or,pe,Q)&&(bt[Xt++]=or)}return bt}function He(Q,ne){for(var pe=-1,Ue=ne.length,Xt=Q.length;++pe<Ue;)Q[Xt+pe]=ne[pe];return Q}function Te(Q,ne){for(var pe=-1,Ue=Q==null?0:Q.length;++pe<Ue;)if(ne(Q[pe],pe,Q))return!0;return!1}function Ce(Q,ne){for(var pe=-1,Ue=Array(Q);++pe<Q;)Ue[pe]=ne(pe);return Ue}function Xe(Q){return function(ne){return Q(ne)}}function Ne(Q,ne){return Q.has(ne)}function be(Q,ne){return Q?.[ne]}function Pe(Q){var ne=-1,pe=Array(Q.size);return Q.forEach(function(Ue,Xt){pe[++ne]=[Xt,Ue]}),pe}function De(Q,ne){return function(pe){return Q(ne(pe))}}function ye(Q){var ne=-1,pe=Array(Q.size);return Q.forEach(function(Ue){pe[++ne]=Ue}),pe}var Ie=Array.prototype,Oe=Function.prototype,me=Object.prototype,Me=J["__core-js_shared__"],Be=Oe.toString,we=me.hasOwnProperty,ke=function(){var Q=/[^.]+$/.exec(Me&&Me.keys&&Me.keys.IE_PROTO||"");return Q?"Symbol(src)_1."+Q:""}(),We=me.toString,Ae=RegExp("^"+Be.call(we).replace(x,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Ve=Y?J.Buffer:void 0,Ke=J.Symbol,Ge=J.Uint8Array,mt=me.propertyIsEnumerable,It=Ie.splice,Ye=Ke?Ke.toStringTag:void 0,Pt=Object.getOwnPropertySymbols,Ot=Ve?Ve.isBuffer:void 0,Ze=De(Object.keys,Object),rt=Hi(J,"DataView"),et=Hi(J,"Map"),$e=Hi(J,"Promise"),it=Hi(J,"Set"),tt=Hi(J,"WeakMap"),Re=Hi(Object,"create"),lt=Ps(rt),ht=Ps(et),Le=Ps($e),ut=Ps(it),nt=Ps(tt),Fe=Ke?Ke.prototype:void 0,st=Fe?Fe.valueOf:void 0;function Qe(Q){var ne=-1,pe=Q==null?0:Q.length;for(this.clear();++ne<pe;){var Ue=Q[ne];this.set(Ue[0],Ue[1])}}function qe(){this.__data__=Re?Re(null):{},this.size=0}function dt(Q){var ne=this.has(Q)&&delete this.__data__[Q];return this.size-=ne?1:0,ne}function Ht(Q){var ne=this.__data__;if(Re){var pe=ne[Q];return pe===i?void 0:pe}return we.call(ne,Q)?ne[Q]:void 0}function at(Q){var ne=this.__data__;return Re?ne[Q]!==void 0:we.call(ne,Q)}function kt(Q,ne){var pe=this.__data__;return this.size+=this.has(Q)?0:1,pe[Q]=Re&&ne===void 0?i:ne,this}Qe.prototype.clear=qe,Qe.prototype.delete=dt,Qe.prototype.get=Ht,Qe.prototype.has=at,Qe.prototype.set=kt;function _t(Q){var ne=-1,pe=Q==null?0:Q.length;for(this.clear();++ne<pe;){var Ue=Q[ne];this.set(Ue[0],Ue[1])}}function qt(){this.__data__=[],this.size=0}function Zr(Q){var ne=this.__data__,pe=sa(ne,Q);if(pe<0)return!1;var Ue=ne.length-1;return pe==Ue?ne.pop():It.call(ne,pe,1),--this.size,!0}function Xr(Q){var ne=this.__data__,pe=sa(ne,Q);return pe<0?void 0:ne[pe][1]}function ei(Q){return sa(this.__data__,Q)>-1}function ti(Q,ne){var pe=this.__data__,Ue=sa(pe,Q);return Ue<0?(++this.size,pe.push([Q,ne])):pe[Ue][1]=ne,this}_t.prototype.clear=qt,_t.prototype.delete=Zr,_t.prototype.get=Xr,_t.prototype.has=ei,_t.prototype.set=ti;function vr(Q){var ne=-1,pe=Q==null?0:Q.length;for(this.clear();++ne<pe;){var Ue=Q[ne];this.set(Ue[0],Ue[1])}}function Ai(){this.size=0,this.__data__={hash:new Qe,map:new(et||_t),string:new Qe}}function Pn(Q){var ne=ho(this,Q).delete(Q);return this.size-=ne?1:0,ne}function Ei(Q){return ho(this,Q).get(Q)}function Dn(Q){return ho(this,Q).has(Q)}function On(Q,ne){var pe=ho(this,Q),Ue=pe.size;return pe.set(Q,ne),this.size+=pe.size==Ue?0:1,this}vr.prototype.clear=Ai,vr.prototype.delete=Pn,vr.prototype.get=Ei,vr.prototype.has=Dn,vr.prototype.set=On;function Si(Q){var ne=-1,pe=Q==null?0:Q.length;for(this.__data__=new vr;++ne<pe;)this.add(Q[ne])}function fn(Q){return this.__data__.set(Q,i),this}function ln(Q){return this.__data__.has(Q)}Si.prototype.add=Si.prototype.push=fn,Si.prototype.has=ln;function Cr(Q){var ne=this.__data__=new _t(Q);this.size=ne.size}function Rn(){this.__data__=new _t,this.size=0}function Tn(Q){var ne=this.__data__,pe=ne.delete(Q);return this.size=ne.size,pe}function Nn(Q){return this.__data__.get(Q)}function na(Q){return this.__data__.has(Q)}function lo(Q,ne){var pe=this.__data__;if(pe instanceof _t){var Ue=pe.__data__;if(!et||Ue.length<t-1)return Ue.push([Q,ne]),this.size=++pe.size,this;pe=this.__data__=new vr(Ue)}return pe.set(Q,ne),this.size=pe.size,this}Cr.prototype.clear=Rn,Cr.prototype.delete=Tn,Cr.prototype.get=Nn,Cr.prototype.has=na,Cr.prototype.set=lo;function kh(Q,ne){var pe=dc(Q),Ue=!pe&&tu(Q),Xt=!pe&&!Ue&&Bf(Q),bt=!pe&&!Ue&&!Xt&&nu(Q),or=pe||Ue||Xt||bt,Er=or?Ce(Q.length,String):[],Bt=Er.length;for(var er in Q)(ne||we.call(Q,er))&&!(or&&(er=="length"||Xt&&(er=="offset"||er=="parent")||bt&&(er=="buffer"||er=="byteLength"||er=="byteOffset")||Jh(er,Bt)))&&Er.push(er);return Er}function sa(Q,ne){for(var pe=Q.length;pe--;)if(eu(Q[pe][0],ne))return pe;return-1}function $f(Q,ne,pe){var Ue=ne(Q);return dc(Q)?Ue:He(Ue,pe(Q))}function oa(Q){return Q==null?Q===void 0?ee:H:Ye&&Ye in Object(Q)?Gh(Q):Yp(Q)}function Lf(Q){return ca(Q)&&oa(Q)==f}function aa(Q,ne,pe,Ue,Xt){return Q===ne?!0:Q==null||ne==null||!ca(Q)&&!ca(ne)?Q!==Q&&ne!==ne:jh(Q,ne,pe,Ue,aa,Xt)}function jh(Q,ne,pe,Ue,Xt,bt){var or=dc(Q),Er=dc(ne),Bt=or?h:cs(Q),er=Er?h:cs(ne);Bt=Bt==f?F:Bt,er=er==f?F:er;var _r=Bt==F,Ii=er==F,Sr=Bt==er;if(Sr&&Bf(Q)){if(!Bf(ne))return!1;or=!0,_r=!1}if(Sr&&!_r)return bt||(bt=new Cr),or||nu(Q)?hc(Q,ne,pe,Ue,Xt,bt):Gp(Q,ne,Bt,pe,Ue,Xt,bt);if(!(pe&n)){var ar=_r&&we.call(Q,"__wrapped__"),hi=Ii&&we.call(ne,"__wrapped__");if(ar||hi){var $n=ar?Q.value():Q,hn=hi?ne.value():ne;return bt||(bt=new Cr),Xt($n,hn,pe,Ue,bt)}}return Sr?(bt||(bt=new Cr),Vh(Q,ne,pe,Ue,Xt,bt)):!1}function Vp(Q){if(!iu(Q)||Zh(Q))return!1;var ne=pc(Q)?Ae:$;return ne.test(Ps(Q))}function Wh(Q){return ca(Q)&&ru(Q.length)&&!!R[oa(Q)]}function Kh(Q){if(!Xh(Q))return Ze(Q);var ne=[];for(var pe in Object(Q))we.call(Q,pe)&&pe!="constructor"&&ne.push(pe);return ne}function hc(Q,ne,pe,Ue,Xt,bt){var or=pe&n,Er=Q.length,Bt=ne.length;if(Er!=Bt&&!(or&&Bt>Er))return!1;var er=bt.get(Q);if(er&&bt.get(ne))return er==ne;var _r=-1,Ii=!0,Sr=pe&s?new Si:void 0;for(bt.set(Q,ne),bt.set(ne,Q);++_r<Er;){var ar=Q[_r],hi=ne[_r];if(Ue)var $n=or?Ue(hi,ar,_r,ne,Q,bt):Ue(ar,hi,_r,Q,ne,bt);if($n!==void 0){if($n)continue;Ii=!1;break}if(Sr){if(!Te(ne,function(hn,fs){if(!Ne(Sr,fs)&&(ar===hn||Xt(ar,hn,pe,Ue,bt)))return Sr.push(fs)})){Ii=!1;break}}else if(!(ar===hi||Xt(ar,hi,pe,Ue,bt))){Ii=!1;break}}return bt.delete(Q),bt.delete(ne),Ii}function Gp(Q,ne,pe,Ue,Xt,bt,or){switch(pe){case b:if(Q.byteLength!=ne.byteLength||Q.byteOffset!=ne.byteOffset)return!1;Q=Q.buffer,ne=ne.buffer;case L:return!(Q.byteLength!=ne.byteLength||!bt(new Ge(Q),new Ge(ne)));case g:case w:case j:return eu(+Q,+ne);case M:return Q.name==ne.name&&Q.message==ne.message;case z:case _:return Q==ne+"";case N:var Er=Pe;case W:var Bt=Ue&n;if(Er||(Er=ye),Q.size!=ne.size&&!Bt)return!1;var er=or.get(Q);if(er)return er==ne;Ue|=s,or.set(Q,ne);var _r=hc(Er(Q),Er(ne),Ue,Xt,bt,or);return or.delete(Q),_r;case U:if(st)return st.call(Q)==st.call(ne)}return!1}function Vh(Q,ne,pe,Ue,Xt,bt){var or=pe&n,Er=uc(Q),Bt=Er.length,er=uc(ne),_r=er.length;if(Bt!=_r&&!or)return!1;for(var Ii=Bt;Ii--;){var Sr=Er[Ii];if(!(or?Sr in ne:we.call(ne,Sr)))return!1}var ar=bt.get(Q);if(ar&&bt.get(ne))return ar==ne;var hi=!0;bt.set(Q,ne),bt.set(ne,Q);for(var $n=or;++Ii<Bt;){Sr=Er[Ii];var hn=Q[Sr],fs=ne[Sr];if(Ue)var Ff=or?Ue(fs,hn,Sr,ne,Q,bt):Ue(hn,fs,Sr,Q,ne,bt);if(!(Ff===void 0?hn===fs||Xt(hn,fs,pe,Ue,bt):Ff)){hi=!1;break}$n||($n=Sr=="constructor")}if(hi&&!$n){var fa=Q.constructor,Ur=ne.constructor;fa!=Ur&&"constructor"in Q&&"constructor"in ne&&!(typeof fa=="function"&&fa instanceof fa&&typeof Ur=="function"&&Ur instanceof Ur)&&(hi=!1)}return bt.delete(Q),bt.delete(ne),hi}function uc(Q){return $f(Q,Zp,Yh)}function ho(Q,ne){var pe=Q.__data__;return Qh(ne)?pe[typeof ne=="string"?"string":"hash"]:pe.map}function Hi(Q,ne){var pe=be(Q,ne);return Vp(pe)?pe:void 0}function Gh(Q){var ne=we.call(Q,Ye),pe=Q[Ye];try{Q[Ye]=void 0;var Ue=!0}catch{}var Xt=We.call(Q);return Ue&&(ne?Q[Ye]=pe:delete Q[Ye]),Xt}var Yh=Pt?function(Q){return Q==null?[]:(Q=Object(Q),ge(Pt(Q),function(ne){return mt.call(Q,ne)}))}:Zt,cs=oa;(rt&&cs(new rt(new ArrayBuffer(1)))!=b||et&&cs(new et)!=N||$e&&cs($e.resolve())!=G||it&&cs(new it)!=W||tt&&cs(new tt)!=oe)&&(cs=function(Q){var ne=oa(Q),pe=ne==F?Q.constructor:void 0,Ue=pe?Ps(pe):"";if(Ue)switch(Ue){case lt:return b;case ht:return N;case Le:return G;case ut:return W;case nt:return oe}return ne});function Jh(Q,ne){return ne=ne??a,!!ne&&(typeof Q=="number"||ae.test(Q))&&Q>-1&&Q%1==0&&Q<ne}function Qh(Q){var ne=typeof Q;return ne=="string"||ne=="number"||ne=="symbol"||ne=="boolean"?Q!=="__proto__":Q===null}function Zh(Q){return!!ke&&ke in Q}function Xh(Q){var ne=Q&&Q.constructor,pe=typeof ne=="function"&&ne.prototype||me;return Q===pe}function Yp(Q){return We.call(Q)}function Ps(Q){if(Q!=null){try{return Be.call(Q)}catch{}try{return Q+""}catch{}}return""}function eu(Q,ne){return Q===ne||Q!==Q&&ne!==ne}var tu=Lf(function(){return arguments}())?Lf:function(Q){return ca(Q)&&we.call(Q,"callee")&&!mt.call(Q,"callee")},dc=Array.isArray;function Jp(Q){return Q!=null&&ru(Q.length)&&!pc(Q)}var Bf=Ot||Qt;function Qp(Q,ne){return aa(Q,ne)}function pc(Q){if(!iu(Q))return!1;var ne=oa(Q);return ne==C||ne==O||ne==u||ne==B}function ru(Q){return typeof Q=="number"&&Q>-1&&Q%1==0&&Q<=a}function iu(Q){var ne=typeof Q;return Q!=null&&(ne=="object"||ne=="function")}function ca(Q){return Q!=null&&typeof Q=="object"}var nu=he?Xe(he):Wh;function Zp(Q){return Jp(Q)?kh(Q):Kh(Q)}function Zt(){return[]}function Qt(){return!1}r.exports=Qp})(w0,w0.exports);var VI=w0.exports,GI=Object.defineProperty,r2=Object.getOwnPropertySymbols,YI=Object.prototype.hasOwnProperty,JI=Object.prototype.propertyIsEnumerable,i2=(r,e,t)=>e in r?GI(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,fi=(r,e)=>{for(var t in e||(e={}))YI.call(e,t)&&i2(r,t,e[t]);if(r2)for(var t of r2(e))JI.call(e,t)&&i2(r,t,e[t]);return r};const n2="wc",s2=2,oh="core",ts=`${n2}@2:${oh}:`,QI={name:oh,logger:"error"},ZI={database:":memory:"},XI="crypto",o2="client_ed25519_seed",eM=_e.ONE_DAY,tM="keychain",rM="0.3",iM="messages",nM="0.3",a2=_e.SIX_HOURS,sM="publisher",c2="irn",oM="error",f2="wss://relay.walletconnect.org",aM="relayer",Lr={message:"relayer_message",message_ack:"relayer_message_ack",connect:"relayer_connect",disconnect:"relayer_disconnect",error:"relayer_error",connection_stalled:"relayer_connection_stalled",transport_closed:"relayer_transport_closed",publish:"relayer_publish"},cM="_subscription",sn={payload:"payload",connect:"connect",disconnect:"disconnect",error:"error"},fM=.1,y0="2.17.3",sr={link_mode:"link_mode",relay:"relay"},lM="0.3",hM="WALLETCONNECT_CLIENT_ID",l2="WALLETCONNECT_LINK_MODE_APPS",Fi={created:"subscription_created",deleted:"subscription_deleted",expired:"subscription_expired",disabled:"subscription_disabled",sync:"subscription_sync",resubscribed:"subscription_resubscribed"},uM="subscription",dM="0.3",pM=_e.FIVE_SECONDS*1e3,gM="pairing",vM="0.3",lf={wc_pairingDelete:{req:{ttl:_e.ONE_DAY,prompt:!1,tag:1e3},res:{ttl:_e.ONE_DAY,prompt:!1,tag:1001}},wc_pairingPing:{req:{ttl:_e.THIRTY_SECONDS,prompt:!1,tag:1002},res:{ttl:_e.THIRTY_SECONDS,prompt:!1,tag:1003}},unregistered_method:{req:{ttl:_e.ONE_DAY,prompt:!1,tag:0},res:{ttl:_e.ONE_DAY,prompt:!1,tag:0}}},qo={create:"pairing_create",expire:"pairing_expire",delete:"pairing_delete",ping:"pairing_ping"},Sn={created:"history_created",updated:"history_updated",deleted:"history_deleted",sync:"history_sync"},mM="history",bM="0.3",wM="expirer",on={created:"expirer_created",deleted:"expirer_deleted",expired:"expirer_expired",sync:"expirer_sync"},yM="0.3",_M="verify-api",xM="https://verify.walletconnect.com",h2="https://verify.walletconnect.org",hf=h2,AM=`${hf}/v3`,EM=[xM,h2],SM="echo",IM="https://echo.walletconnect.com",rs={pairing_started:"pairing_started",pairing_uri_validation_success:"pairing_uri_validation_success",pairing_uri_not_expired:"pairing_uri_not_expired",store_new_pairing:"store_new_pairing",subscribing_pairing_topic:"subscribing_pairing_topic",subscribe_pairing_topic_success:"subscribe_pairing_topic_success",existing_pairing:"existing_pairing",pairing_not_expired:"pairing_not_expired",emit_inactive_pairing:"emit_inactive_pairing",emit_session_proposal:"emit_session_proposal",subscribing_to_pairing_topic:"subscribing_to_pairing_topic"},Ss={no_wss_connection:"no_wss_connection",no_internet_connection:"no_internet_connection",malformed_pairing_uri:"malformed_pairing_uri",active_pairing_already_exists:"active_pairing_already_exists",subscribe_pairing_topic_failure:"subscribe_pairing_topic_failure",pairing_expired:"pairing_expired",proposal_expired:"proposal_expired",proposal_listener_not_found:"proposal_listener_not_found"},In={session_approve_started:"session_approve_started",proposal_not_expired:"proposal_not_expired",session_namespaces_validation_success:"session_namespaces_validation_success",create_session_topic:"create_session_topic",subscribing_session_topic:"subscribing_session_topic",subscribe_session_topic_success:"subscribe_session_topic_success",publishing_session_approve:"publishing_session_approve",session_approve_publish_success:"session_approve_publish_success",store_session:"store_session",publishing_session_settle:"publishing_session_settle",session_settle_publish_success:"session_settle_publish_success"},zo={no_internet_connection:"no_internet_connection",no_wss_connection:"no_wss_connection",proposal_expired:"proposal_expired",subscribe_session_topic_failure:"subscribe_session_topic_failure",session_approve_publish_failure:"session_approve_publish_failure",session_settle_publish_failure:"session_settle_publish_failure",session_approve_namespace_validation_failure:"session_approve_namespace_validation_failure",proposal_not_found:"proposal_not_found"},Ho={authenticated_session_approve_started:"authenticated_session_approve_started",authenticated_session_not_expired:"authenticated_session_not_expired",chains_caip2_compliant:"chains_caip2_compliant",chains_evm_compliant:"chains_evm_compliant",create_authenticated_session_topic:"create_authenticated_session_topic",cacaos_verified:"cacaos_verified",store_authenticated_session:"store_authenticated_session",subscribing_authenticated_session_topic:"subscribing_authenticated_session_topic",subscribe_authenticated_session_topic_success:"subscribe_authenticated_session_topic_success",publishing_authenticated_session_approve:"publishing_authenticated_session_approve",authenticated_session_approve_publish_success:"authenticated_session_approve_publish_success"},uf={no_internet_connection:"no_internet_connection",no_wss_connection:"no_wss_connection",missing_session_authenticate_request:"missing_session_authenticate_request",session_authenticate_request_expired:"session_authenticate_request_expired",chains_caip2_compliant_failure:"chains_caip2_compliant_failure",chains_evm_compliant_failure:"chains_evm_compliant_failure",invalid_cacao:"invalid_cacao",subscribe_authenticated_session_topic_failure:"subscribe_authenticated_session_topic_failure",authenticated_session_approve_publish_failure:"authenticated_session_approve_publish_failure",authenticated_session_pending_request_not_found:"authenticated_session_pending_request_not_found"},MM=.1,CM="event-client",PM=86400,DM="https://pulse.walletconnect.org/batch";function OM(r,e){if(r.length>=255)throw new TypeError("Alphabet too long");for(var t=new Uint8Array(256),i=0;i<t.length;i++)t[i]=255;for(var n=0;n<r.length;n++){var s=r.charAt(n),a=s.charCodeAt(0);if(t[a]!==255)throw new TypeError(s+" is ambiguous");t[a]=n}var f=r.length,h=r.charAt(0),u=Math.log(f)/Math.log(256),g=Math.log(256)/Math.log(f);function w(O){if(O instanceof Uint8Array||(ArrayBuffer.isView(O)?O=new Uint8Array(O.buffer,O.byteOffset,O.byteLength):Array.isArray(O)&&(O=Uint8Array.from(O))),!(O instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(O.length===0)return"";for(var N=0,j=0,H=0,F=O.length;H!==F&&O[H]===0;)H++,N++;for(var G=(F-H)*g+1>>>0,B=new Uint8Array(G);H!==F;){for(var z=O[H],W=0,_=G-1;(z!==0||W<j)&&_!==-1;_--,W++)z+=256*B[_]>>>0,B[_]=z%f>>>0,z=z/f>>>0;if(z!==0)throw new Error("Non-zero carry");j=W,H++}for(var U=G-j;U!==G&&B[U]===0;)U++;for(var ee=h.repeat(N);U<G;++U)ee+=r.charAt(B[U]);return ee}function M(O){if(typeof O!="string")throw new TypeError("Expected String");if(O.length===0)return new Uint8Array;var N=0;if(O[N]!==" "){for(var j=0,H=0;O[N]===h;)j++,N++;for(var F=(O.length-N)*u+1>>>0,G=new Uint8Array(F);O[N];){var B=t[O.charCodeAt(N)];if(B===255)return;for(var z=0,W=F-1;(B!==0||z<H)&&W!==-1;W--,z++)B+=f*G[W]>>>0,G[W]=B%256>>>0,B=B/256>>>0;if(B!==0)throw new Error("Non-zero carry");H=z,N++}if(O[N]!==" "){for(var _=F-H;_!==F&&G[_]===0;)_++;for(var U=new Uint8Array(j+(F-_)),ee=j;_!==F;)U[ee++]=G[_++];return U}}}function C(O){var N=M(O);if(N)return N;throw new Error(`Non-${e} character`)}return{encode:w,decodeUnsafe:M,decode:C}}var RM=OM,TM=RM;const u2=r=>{if(r instanceof Uint8Array&&r.constructor.name==="Uint8Array")return r;if(r instanceof ArrayBuffer)return new Uint8Array(r);if(ArrayBuffer.isView(r))return new Uint8Array(r.buffer,r.byteOffset,r.byteLength);throw new Error("Unknown type, must be binary type")},NM=r=>new TextEncoder().encode(r),$M=r=>new TextDecoder().decode(r);class LM{constructor(e,t,i){this.name=e,this.prefix=t,this.baseEncode=i}encode(e){if(e instanceof Uint8Array)return`${this.prefix}${this.baseEncode(e)}`;throw Error("Unknown type, must be binary type")}}class BM{constructor(e,t,i){if(this.name=e,this.prefix=t,t.codePointAt(0)===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=t.codePointAt(0),this.baseDecode=i}decode(e){if(typeof e=="string"){if(e.codePointAt(0)!==this.prefixCodePoint)throw Error(`Unable to decode multibase string ${JSON.stringify(e)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`);return this.baseDecode(e.slice(this.prefix.length))}else throw Error("Can only multibase decode strings")}or(e){return d2(this,e)}}class FM{constructor(e){this.decoders=e}or(e){return d2(this,e)}decode(e){const t=e[0],i=this.decoders[t];if(i)return i.decode(e);throw RangeError(`Unable to decode multibase string ${JSON.stringify(e)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)}}const d2=(r,e)=>new FM(fi(fi({},r.decoders||{[r.prefix]:r}),e.decoders||{[e.prefix]:e}));class UM{constructor(e,t,i,n){this.name=e,this.prefix=t,this.baseEncode=i,this.baseDecode=n,this.encoder=new LM(e,t,i),this.decoder=new BM(e,t,n)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}}const ah=({name:r,prefix:e,encode:t,decode:i})=>new UM(r,e,t,i),df=({prefix:r,name:e,alphabet:t})=>{const{encode:i,decode:n}=TM(t,e);return ah({prefix:r,name:e,encode:i,decode:s=>u2(n(s))})},qM=(r,e,t,i)=>{const n={};for(let g=0;g<e.length;++g)n[e[g]]=g;let s=r.length;for(;r[s-1]==="=";)--s;const a=new Uint8Array(s*t/8|0);let f=0,h=0,u=0;for(let g=0;g<s;++g){const w=n[r[g]];if(w===void 0)throw new SyntaxError(`Non-${i} character`);h=h<<t|w,f+=t,f>=8&&(f-=8,a[u++]=255&h>>f)}if(f>=t||255&h<<8-f)throw new SyntaxError("Unexpected end of data");return a},zM=(r,e,t)=>{const i=e[e.length-1]==="=",n=(1<<t)-1;let s="",a=0,f=0;for(let h=0;h<r.length;++h)for(f=f<<8|r[h],a+=8;a>t;)a-=t,s+=e[n&f>>a];if(a&&(s+=e[n&f<<t-a]),i)for(;s.length*t&7;)s+="=";return s},Kr=({name:r,prefix:e,bitsPerChar:t,alphabet:i})=>ah({prefix:e,name:r,encode(n){return zM(n,i,t)},decode(n){return qM(n,i,t,r)}}),HM=ah({prefix:"\0",name:"identity",encode:r=>$M(r),decode:r=>NM(r)});var kM=Object.freeze({__proto__:null,identity:HM});const jM=Kr({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1});var WM=Object.freeze({__proto__:null,base2:jM});const KM=Kr({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3});var VM=Object.freeze({__proto__:null,base8:KM});const GM=df({prefix:"9",name:"base10",alphabet:"0123456789"});var YM=Object.freeze({__proto__:null,base10:GM});const JM=Kr({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),QM=Kr({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4});var ZM=Object.freeze({__proto__:null,base16:JM,base16upper:QM});const XM=Kr({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),eC=Kr({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),tC=Kr({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),rC=Kr({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),iC=Kr({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),nC=Kr({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),sC=Kr({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),oC=Kr({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),aC=Kr({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var cC=Object.freeze({__proto__:null,base32:XM,base32upper:eC,base32pad:tC,base32padupper:rC,base32hex:iC,base32hexupper:nC,base32hexpad:sC,base32hexpadupper:oC,base32z:aC});const fC=df({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),lC=df({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"});var hC=Object.freeze({__proto__:null,base36:fC,base36upper:lC});const uC=df({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),dC=df({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var pC=Object.freeze({__proto__:null,base58btc:uC,base58flickr:dC});const gC=Kr({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),vC=Kr({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),mC=Kr({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),bC=Kr({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});var wC=Object.freeze({__proto__:null,base64:gC,base64pad:vC,base64url:mC,base64urlpad:bC});const p2=Array.from("\u{1F680}\u{1FA90}\u2604\u{1F6F0}\u{1F30C}\u{1F311}\u{1F312}\u{1F313}\u{1F314}\u{1F315}\u{1F316}\u{1F317}\u{1F318}\u{1F30D}\u{1F30F}\u{1F30E}\u{1F409}\u2600\u{1F4BB}\u{1F5A5}\u{1F4BE}\u{1F4BF}\u{1F602}\u2764\u{1F60D}\u{1F923}\u{1F60A}\u{1F64F}\u{1F495}\u{1F62D}\u{1F618}\u{1F44D}\u{1F605}\u{1F44F}\u{1F601}\u{1F525}\u{1F970}\u{1F494}\u{1F496}\u{1F499}\u{1F622}\u{1F914}\u{1F606}\u{1F644}\u{1F4AA}\u{1F609}\u263A\u{1F44C}\u{1F917}\u{1F49C}\u{1F614}\u{1F60E}\u{1F607}\u{1F339}\u{1F926}\u{1F389}\u{1F49E}\u270C\u2728\u{1F937}\u{1F631}\u{1F60C}\u{1F338}\u{1F64C}\u{1F60B}\u{1F497}\u{1F49A}\u{1F60F}\u{1F49B}\u{1F642}\u{1F493}\u{1F929}\u{1F604}\u{1F600}\u{1F5A4}\u{1F603}\u{1F4AF}\u{1F648}\u{1F447}\u{1F3B6}\u{1F612}\u{1F92D}\u2763\u{1F61C}\u{1F48B}\u{1F440}\u{1F62A}\u{1F611}\u{1F4A5}\u{1F64B}\u{1F61E}\u{1F629}\u{1F621}\u{1F92A}\u{1F44A}\u{1F973}\u{1F625}\u{1F924}\u{1F449}\u{1F483}\u{1F633}\u270B\u{1F61A}\u{1F61D}\u{1F634}\u{1F31F}\u{1F62C}\u{1F643}\u{1F340}\u{1F337}\u{1F63B}\u{1F613}\u2B50\u2705\u{1F97A}\u{1F308}\u{1F608}\u{1F918}\u{1F4A6}\u2714\u{1F623}\u{1F3C3}\u{1F490}\u2639\u{1F38A}\u{1F498}\u{1F620}\u261D\u{1F615}\u{1F33A}\u{1F382}\u{1F33B}\u{1F610}\u{1F595}\u{1F49D}\u{1F64A}\u{1F639}\u{1F5E3}\u{1F4AB}\u{1F480}\u{1F451}\u{1F3B5}\u{1F91E}\u{1F61B}\u{1F534}\u{1F624}\u{1F33C}\u{1F62B}\u26BD\u{1F919}\u2615\u{1F3C6}\u{1F92B}\u{1F448}\u{1F62E}\u{1F646}\u{1F37B}\u{1F343}\u{1F436}\u{1F481}\u{1F632}\u{1F33F}\u{1F9E1}\u{1F381}\u26A1\u{1F31E}\u{1F388}\u274C\u270A\u{1F44B}\u{1F630}\u{1F928}\u{1F636}\u{1F91D}\u{1F6B6}\u{1F4B0}\u{1F353}\u{1F4A2}\u{1F91F}\u{1F641}\u{1F6A8}\u{1F4A8}\u{1F92C}\u2708\u{1F380}\u{1F37A}\u{1F913}\u{1F619}\u{1F49F}\u{1F331}\u{1F616}\u{1F476}\u{1F974}\u25B6\u27A1\u2753\u{1F48E}\u{1F4B8}\u2B07\u{1F628}\u{1F31A}\u{1F98B}\u{1F637}\u{1F57A}\u26A0\u{1F645}\u{1F61F}\u{1F635}\u{1F44E}\u{1F932}\u{1F920}\u{1F927}\u{1F4CC}\u{1F535}\u{1F485}\u{1F9D0}\u{1F43E}\u{1F352}\u{1F617}\u{1F911}\u{1F30A}\u{1F92F}\u{1F437}\u260E\u{1F4A7}\u{1F62F}\u{1F486}\u{1F446}\u{1F3A4}\u{1F647}\u{1F351}\u2744\u{1F334}\u{1F4A3}\u{1F438}\u{1F48C}\u{1F4CD}\u{1F940}\u{1F922}\u{1F445}\u{1F4A1}\u{1F4A9}\u{1F450}\u{1F4F8}\u{1F47B}\u{1F910}\u{1F92E}\u{1F3BC}\u{1F975}\u{1F6A9}\u{1F34E}\u{1F34A}\u{1F47C}\u{1F48D}\u{1F4E3}\u{1F942}"),yC=p2.reduce((r,e,t)=>(r[t]=e,r),[]),_C=p2.reduce((r,e,t)=>(r[e.codePointAt(0)]=t,r),[]);function xC(r){return r.reduce((e,t)=>(e+=yC[t],e),"")}function AC(r){const e=[];for(const t of r){const i=_C[t.codePointAt(0)];if(i===void 0)throw new Error(`Non-base256emoji character: ${t}`);e.push(i)}return new Uint8Array(e)}const EC=ah({prefix:"\u{1F680}",name:"base256emoji",encode:xC,decode:AC});var SC=Object.freeze({__proto__:null,base256emoji:EC}),IC=v2,g2=128,MC=127,CC=~MC,PC=Math.pow(2,31);function v2(r,e,t){e=e||[],t=t||0;for(var i=t;r>=PC;)e[t++]=r&255|g2,r/=128;for(;r&CC;)e[t++]=r&255|g2,r>>>=7;return e[t]=r|0,v2.bytes=t-i+1,e}var DC=_0,OC=128,m2=127;function _0(r,i){var t=0,i=i||0,n=0,s=i,a,f=r.length;do{if(s>=f)throw _0.bytes=0,new RangeError("Could not decode varint");a=r[s++],t+=n<28?(a&m2)<<n:(a&m2)*Math.pow(2,n),n+=7}while(a>=OC);return _0.bytes=s-i,t}var RC=Math.pow(2,7),TC=Math.pow(2,14),NC=Math.pow(2,21),$C=Math.pow(2,28),LC=Math.pow(2,35),BC=Math.pow(2,42),FC=Math.pow(2,49),UC=Math.pow(2,56),qC=Math.pow(2,63),zC=function(r){return r<RC?1:r<TC?2:r<NC?3:r<$C?4:r<LC?5:r<BC?6:r<FC?7:r<UC?8:r<qC?9:10},HC={encode:IC,decode:DC,encodingLength:zC},b2=HC;const w2=(r,e,t=0)=>(b2.encode(r,e,t),e),y2=r=>b2.encodingLength(r),x0=(r,e)=>{const t=e.byteLength,i=y2(r),n=i+y2(t),s=new Uint8Array(n+t);return w2(r,s,0),w2(t,s,i),s.set(e,n),new kC(r,t,e,s)};class kC{constructor(e,t,i,n){this.code=e,this.size=t,this.digest=i,this.bytes=n}}const _2=({name:r,code:e,encode:t})=>new jC(r,e,t);class jC{constructor(e,t,i){this.name=e,this.code=t,this.encode=i}digest(e){if(e instanceof Uint8Array){const t=this.encode(e);return t instanceof Uint8Array?x0(this.code,t):t.then(i=>x0(this.code,i))}else throw Error("Unknown type, must be binary type")}}const x2=r=>async e=>new Uint8Array(await crypto.subtle.digest(r,e)),WC=_2({name:"sha2-256",code:18,encode:x2("SHA-256")}),KC=_2({name:"sha2-512",code:19,encode:x2("SHA-512")});var VC=Object.freeze({__proto__:null,sha256:WC,sha512:KC});const A2=0,GC="identity",E2=u2;var YC=Object.freeze({__proto__:null,identity:{code:A2,name:GC,encode:E2,digest:r=>x0(A2,E2(r))}});new TextEncoder,new TextDecoder;const S2=fi(fi(fi(fi(fi(fi(fi(fi(fi(fi({},kM),WM),VM),YM),ZM),cC),hC),pC),wC),SC);fi(fi({},VC),YC);function JC(r=0){return globalThis.Buffer!=null&&globalThis.Buffer.allocUnsafe!=null?globalThis.Buffer.allocUnsafe(r):new Uint8Array(r)}function I2(r,e,t,i){return{name:r,prefix:e,encoder:{name:r,prefix:e,encode:t},decoder:{decode:i}}}const M2=I2("utf8","u",r=>"u"+new TextDecoder("utf8").decode(r),r=>new TextEncoder().encode(r.substring(1))),A0=I2("ascii","a",r=>{let e="a";for(let t=0;t<r.length;t++)e+=String.fromCharCode(r[t]);return e},r=>{r=r.substring(1);const e=JC(r.length);for(let t=0;t<r.length;t++)e[t]=r.charCodeAt(t);return e}),QC=fi({utf8:M2,"utf-8":M2,hex:S2.base16,latin1:A0,ascii:A0,binary:A0},S2);function ZC(r,e="utf8"){const t=QC[e];if(!t)throw new Error(`Unsupported encoding "${e}"`);return(e==="utf8"||e==="utf-8")&&globalThis.Buffer!=null&&globalThis.Buffer.from!=null?globalThis.Buffer.from(r,"utf8"):t.decoder.decode(`${t.prefix}${r}`)}class XC{constructor(e,t){this.core=e,this.logger=t,this.keychain=new Map,this.name=tM,this.version=rM,this.initialized=!1,this.storagePrefix=ts,this.init=async()=>{if(!this.initialized){const i=await this.getKeyChain();typeof i<"u"&&(this.keychain=i),this.initialized=!0}},this.has=i=>(this.isInitialized(),this.keychain.has(i)),this.set=async(i,n)=>{this.isInitialized(),this.keychain.set(i,n),await this.persist()},this.get=i=>{this.isInitialized();const n=this.keychain.get(i);if(typeof n>"u"){const{message:s}=xe("NO_MATCHING_KEY",`${this.name}: ${i}`);throw new Error(s)}return n},this.del=async i=>{this.isInitialized(),this.keychain.delete(i),await this.persist()},this.core=e,this.logger=ci(t,this.name)}get context(){return yi(this.logger)}get storageKey(){return this.storagePrefix+this.version+this.core.customStoragePrefix+"//"+this.name}async setKeyChain(e){await this.core.storage.setItem(this.storageKey,Wm(e))}async getKeyChain(){const e=await this.core.storage.getItem(this.storageKey);return typeof e<"u"?Km(e):void 0}async persist(){await this.setKeyChain(this.keychain)}isInitialized(){if(!this.initialized){const{message:e}=xe("NOT_INITIALIZED",this.name);throw new Error(e)}}}class eP{constructor(e,t,i){this.core=e,this.logger=t,this.name=XI,this.randomSessionIdentifier=t0(),this.initialized=!1,this.init=async()=>{this.initialized||(await this.keychain.init(),this.initialized=!0)},this.hasKeys=n=>(this.isInitialized(),this.keychain.has(n)),this.getClientId=async()=>{this.isInitialized();const n=await this.getClientSeed(),s=Lm(n);return $m(s.publicKey)},this.generateKeyPair=()=>{this.isInitialized();const n=LA();return this.setPrivateKey(n.publicKey,n.privateKey)},this.signJWT=async n=>{this.isInitialized();const s=await this.getClientSeed(),a=Lm(s),f=this.randomSessionIdentifier;return await jx(f,n,eM,a)},this.generateSharedKey=(n,s,a)=>{this.isInitialized();const f=this.getPrivateKey(n),h=BA(f,s);return this.setSymKey(h,a)},this.setSymKey=async(n,s)=>{this.isInitialized();const a=s||jl(n);return await this.keychain.set(a,n),a},this.deleteKeyPair=async n=>{this.isInitialized(),await this.keychain.del(n)},this.deleteSymKey=async n=>{this.isInitialized(),await this.keychain.del(n)},this.encode=async(n,s,a)=>{this.isInitialized();const f=lb(a),h=bs(s);if(ub(f))return UA(h,a?.encoding);if(hb(f)){const M=f.senderPublicKey,C=f.receiverPublicKey;n=await this.generateSharedKey(M,C)}const u=this.getSymKey(n),{type:g,senderPublicKey:w}=f;return FA({type:g,symKey:u,message:h,senderPublicKey:w,encoding:a?.encoding})},this.decode=async(n,s,a)=>{this.isInitialized();const f=HA(s,a);if(ub(f)){const h=zA(s,a?.encoding);return Ro(h)}if(hb(f)){const h=f.receiverPublicKey,u=f.senderPublicKey;n=await this.generateSharedKey(h,u)}try{const h=this.getSymKey(n),u=qA({symKey:h,encoded:s,encoding:a?.encoding});return Ro(u)}catch(h){this.logger.error(`Failed to decode message from topic: '${n}', clientId: '${await this.getClientId()}'`),this.logger.error(h)}},this.getPayloadType=(n,s=Js)=>{const a=Zc({encoded:n,encoding:s});return Lo(a.type)},this.getPayloadSenderPublicKey=(n,s=Js)=>{const a=Zc({encoded:n,encoding:s});return a.senderPublicKey?nI(a.senderPublicKey,oi):void 0},this.core=e,this.logger=ci(t,this.name),this.keychain=i||new XC(this.core,this.logger)}get context(){return yi(this.logger)}async setPrivateKey(e,t){return await this.keychain.set(e,t),e}getPrivateKey(e){return this.keychain.get(e)}async getClientSeed(){let e="";try{e=this.keychain.get(o2)}catch{e=t0(),await this.keychain.set(o2,e)}return ZC(e,"base16")}getSymKey(e){return this.keychain.get(e)}isInitialized(){if(!this.initialized){const{message:e}=xe("NOT_INITIALIZED",this.name);throw new Error(e)}}}class tP extends WS{constructor(e,t){super(e,t),this.logger=e,this.core=t,this.messages=new Map,this.name=iM,this.version=nM,this.initialized=!1,this.storagePrefix=ts,this.init=async()=>{if(!this.initialized){this.logger.trace("Initialized");try{const i=await this.getRelayerMessages();typeof i<"u"&&(this.messages=i),this.logger.debug(`Successfully Restored records for ${this.name}`),this.logger.trace({type:"method",method:"restore",size:this.messages.size})}catch(i){this.logger.debug(`Failed to Restore records for ${this.name}`),this.logger.error(i)}finally{this.initialized=!0}}},this.set=async(i,n)=>{this.isInitialized();const s=ys(n);let a=this.messages.get(i);return typeof a>"u"&&(a={}),typeof a[s]<"u"||(a[s]=n,this.messages.set(i,a),await this.persist()),s},this.get=i=>{this.isInitialized();let n=this.messages.get(i);return typeof n>"u"&&(n={}),n},this.has=(i,n)=>{this.isInitialized();const s=this.get(i),a=ys(n);return typeof s[a]<"u"},this.del=async i=>{this.isInitialized(),this.messages.delete(i),await this.persist()},this.logger=ci(e,this.name),this.core=t}get context(){return yi(this.logger)}get storageKey(){return this.storagePrefix+this.version+this.core.customStoragePrefix+"//"+this.name}async setRelayerMessages(e){await this.core.storage.setItem(this.storageKey,Wm(e))}async getRelayerMessages(){const e=await this.core.storage.getItem(this.storageKey);return typeof e<"u"?Km(e):void 0}async persist(){await this.setRelayerMessages(this.messages)}isInitialized(){if(!this.initialized){const{message:e}=xe("NOT_INITIALIZED",this.name);throw new Error(e)}}}var rP=Object.defineProperty,iP=Object.defineProperties,nP=Object.getOwnPropertyDescriptors,C2=Object.getOwnPropertySymbols,sP=Object.prototype.hasOwnProperty,oP=Object.prototype.propertyIsEnumerable,P2=(r,e,t)=>e in r?rP(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,D2=(r,e)=>{for(var t in e||(e={}))sP.call(e,t)&&P2(r,t,e[t]);if(C2)for(var t of C2(e))oP.call(e,t)&&P2(r,t,e[t]);return r},O2=(r,e)=>iP(r,nP(e));class aP extends KS{constructor(e,t){super(e,t),this.relayer=e,this.logger=t,this.events=new zr.exports.EventEmitter,this.name=sM,this.queue=new Map,this.publishTimeout=_e.toMiliseconds(_e.ONE_MINUTE),this.initialPublishTimeout=_e.toMiliseconds(_e.ONE_SECOND*15),this.needsTransportRestart=!1,this.publish=async(i,n,s)=>{var a;this.logger.debug("Publishing Payload"),this.logger.trace({type:"method",method:"publish",params:{topic:i,message:n,opts:s}});const f=s?.ttl||a2,h=Wl(s),u=s?.prompt||!1,g=s?.tag||0,w=s?.id||Uo().toString(),M={topic:i,message:n,opts:{ttl:f,relay:h,prompt:u,tag:g,id:w,attestation:s?.attestation}},C=`Failed to publish payload, please try again. id:${w} tag:${g}`;try{const O=new Promise(async N=>{const j=({id:F})=>{M.opts.id===F&&(this.removeRequestFromQueue(F),this.relayer.events.removeListener(Lr.publish,j),N(M))};this.relayer.events.on(Lr.publish,j);const H=Gs(new Promise((F,G)=>{this.rpcPublish({topic:i,message:n,ttl:f,prompt:u,tag:g,id:w,attestation:s?.attestation}).then(F).catch(B=>{this.logger.warn(B,B?.message),G(B)})}),this.initialPublishTimeout,`Failed initial publish, retrying.... id:${w} tag:${g}`);try{await H,this.events.removeListener(Lr.publish,j)}catch(F){this.queue.set(w,O2(D2({},M),{attempt:1})),this.logger.warn(F,F?.message)}});this.logger.trace({type:"method",method:"publish",params:{id:w,topic:i,message:n,opts:s}}),await Gs(O,this.publishTimeout,C)}catch(O){if(this.logger.debug("Failed to Publish Payload"),this.logger.error(O),(a=s?.internal)!=null&&a.throwOnFailedPublish)throw O}finally{this.queue.delete(w)}},this.on=(i,n)=>{this.events.on(i,n)},this.once=(i,n)=>{this.events.once(i,n)},this.off=(i,n)=>{this.events.off(i,n)},this.removeListener=(i,n)=>{this.events.removeListener(i,n)},this.relayer=e,this.logger=ci(t,this.name),this.registerEventListeners()}get context(){return yi(this.logger)}async rpcPublish(e){var t,i,n,s;const{topic:a,message:f,ttl:h=a2,prompt:u,tag:g,id:w,attestation:M}=e,C={method:Xc(Wl().protocol).publish,params:{topic:a,message:f,ttl:h,prompt:u,tag:g,attestation:M},id:w};ai((t=C.params)==null?void 0:t.prompt)&&((i=C.params)==null||delete i.prompt),ai((n=C.params)==null?void 0:n.tag)&&((s=C.params)==null||delete s.tag),this.logger.debug("Outgoing Relay Payload"),this.logger.trace({type:"message",direction:"outgoing",request:C});const O=await this.relayer.request(C);return this.relayer.events.emit(Lr.publish,e),this.logger.debug("Successfully Published Payload"),O}removeRequestFromQueue(e){this.queue.delete(e)}checkQueue(){this.queue.forEach(async(e,t)=>{const i=e.attempt+1;this.queue.set(t,O2(D2({},e),{attempt:i}));const{topic:n,message:s,opts:a,attestation:f}=e;this.logger.warn({},`Publisher: queue->publishing: ${e.opts.id}, tag: ${e.opts.tag}, attempt: ${i}`),await this.rpcPublish({topic:n,message:s,ttl:a.ttl,prompt:a.prompt,tag:a.tag,id:a.id,attestation:f}),this.logger.warn({},`Publisher: queue->published: ${e.opts.id}`)})}registerEventListeners(){this.relayer.core.heartbeat.on(Ha.pulse,()=>{if(this.needsTransportRestart){this.needsTransportRestart=!1,this.relayer.events.emit(Lr.connection_stalled);return}this.checkQueue()}),this.relayer.on(Lr.message_ack,e=>{this.removeRequestFromQueue(e.id.toString())})}}class cP{constructor(){this.map=new Map,this.set=(e,t)=>{const i=this.get(e);this.exists(e,t)||this.map.set(e,[...i,t])},this.get=e=>this.map.get(e)||[],this.exists=(e,t)=>this.get(e).includes(t),this.delete=(e,t)=>{if(typeof t>"u"){this.map.delete(e);return}if(!this.map.has(e))return;const i=this.get(e);if(!this.exists(e,t))return;const n=i.filter(s=>s!==t);if(!n.length){this.map.delete(e);return}this.map.set(e,n)},this.clear=()=>{this.map.clear()}}get topics(){return Array.from(this.map.keys())}}var fP=Object.defineProperty,lP=Object.defineProperties,hP=Object.getOwnPropertyDescriptors,R2=Object.getOwnPropertySymbols,uP=Object.prototype.hasOwnProperty,dP=Object.prototype.propertyIsEnumerable,T2=(r,e,t)=>e in r?fP(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,pf=(r,e)=>{for(var t in e||(e={}))uP.call(e,t)&&T2(r,t,e[t]);if(R2)for(var t of R2(e))dP.call(e,t)&&T2(r,t,e[t]);return r},E0=(r,e)=>lP(r,hP(e));class pP extends YS{constructor(e,t){super(e,t),this.relayer=e,this.logger=t,this.subscriptions=new Map,this.topicMap=new cP,this.events=new zr.exports.EventEmitter,this.name=uM,this.version=dM,this.pending=new Map,this.cached=[],this.initialized=!1,this.pendingSubscriptionWatchLabel="pending_sub_watch_label",this.pollingInterval=20,this.storagePrefix=ts,this.subscribeTimeout=_e.toMiliseconds(_e.ONE_MINUTE),this.initialSubscribeTimeout=_e.toMiliseconds(_e.ONE_SECOND*15),this.batchSubscribeTopicsLimit=500,this.init=async()=>{this.initialized||(this.logger.trace("Initialized"),this.registerEventListeners(),this.clientId=await this.relayer.core.crypto.getClientId(),await this.restore()),this.initialized=!0},this.subscribe=async(i,n)=>{this.isInitialized(),this.logger.debug("Subscribing Topic"),this.logger.trace({type:"method",method:"subscribe",params:{topic:i,opts:n}});try{const s=Wl(n),a={topic:i,relay:s,transportType:n?.transportType};this.pending.set(i,a);const f=await this.rpcSubscribe(i,s,n);return typeof f=="string"&&(this.onSubscribe(f,a),this.logger.debug("Successfully Subscribed Topic"),this.logger.trace({type:"method",method:"subscribe",params:{topic:i,opts:n}})),f}catch(s){throw this.logger.debug("Failed to Subscribe Topic"),this.logger.error(s),s}},this.unsubscribe=async(i,n)=>{await this.restartToComplete(),this.isInitialized(),typeof n?.id<"u"?await this.unsubscribeById(i,n.id,n):await this.unsubscribeByTopic(i,n)},this.isSubscribed=async i=>{if(this.topics.includes(i))return!0;const n=`${this.pendingSubscriptionWatchLabel}_${i}`;return await new Promise((s,a)=>{const f=new _e.Watch;f.start(n);const h=setInterval(()=>{(!this.pending.has(i)&&this.topics.includes(i)||this.cached.some(u=>u.topic===i))&&(clearInterval(h),f.stop(n),s(!0)),f.elapsed(n)>=pM&&(clearInterval(h),f.stop(n),a(new Error("Subscription resolution timeout")))},this.pollingInterval)}).catch(()=>!1)},this.on=(i,n)=>{this.events.on(i,n)},this.once=(i,n)=>{this.events.once(i,n)},this.off=(i,n)=>{this.events.off(i,n)},this.removeListener=(i,n)=>{this.events.removeListener(i,n)},this.start=async()=>{await this.onConnect()},this.stop=async()=>{await this.onDisconnect()},this.restart=async()=>{await this.restore(),await this.onRestart()},this.checkPending=async()=>{if(this.pending.size===0&&(!this.initialized||!this.relayer.connected))return;const i=[];this.pending.forEach(n=>{i.push(n)}),await this.batchSubscribe(i)},this.registerEventListeners=()=>{this.relayer.core.heartbeat.on(Ha.pulse,async()=>{await this.checkPending()}),this.events.on(Fi.created,async i=>{const n=Fi.created;this.logger.info(`Emitting ${n}`),this.logger.debug({type:"event",event:n,data:i}),await this.persist()}),this.events.on(Fi.deleted,async i=>{const n=Fi.deleted;this.logger.info(`Emitting ${n}`),this.logger.debug({type:"event",event:n,data:i}),await this.persist()})},this.relayer=e,this.logger=ci(t,this.name),this.clientId=""}get context(){return yi(this.logger)}get storageKey(){return this.storagePrefix+this.version+this.relayer.core.customStoragePrefix+"//"+this.name}get length(){return this.subscriptions.size}get ids(){return Array.from(this.subscriptions.keys())}get values(){return Array.from(this.subscriptions.values())}get topics(){return this.topicMap.topics}hasSubscription(e,t){let i=!1;try{i=this.getSubscription(e).topic===t}catch{}return i}reset(){this.cached=[],this.initialized=!0}onDisable(){this.cached=this.values,this.subscriptions.clear(),this.topicMap.clear()}async unsubscribeByTopic(e,t){const i=this.topicMap.get(e);await Promise.all(i.map(async n=>await this.unsubscribeById(e,n,t)))}async unsubscribeById(e,t,i){this.logger.debug("Unsubscribing Topic"),this.logger.trace({type:"method",method:"unsubscribe",params:{topic:e,id:t,opts:i}});try{const n=Wl(i);await this.rpcUnsubscribe(e,t,n);const s=Gt("USER_DISCONNECTED",`${this.name}, ${e}`);await this.onUnsubscribe(e,t,s),this.logger.debug("Successfully Unsubscribed Topic"),this.logger.trace({type:"method",method:"unsubscribe",params:{topic:e,id:t,opts:i}})}catch(n){throw this.logger.debug("Failed to Unsubscribe Topic"),this.logger.error(n),n}}async rpcSubscribe(e,t,i){var n;i?.transportType===sr.relay&&await this.restartToComplete();const s={method:Xc(t.protocol).subscribe,params:{topic:e}};this.logger.debug("Outgoing Relay Payload"),this.logger.trace({type:"payload",direction:"outgoing",request:s});const a=(n=i?.internal)==null?void 0:n.throwOnFailedPublish;try{const f=this.getSubscriptionId(e);if(i?.transportType===sr.link_mode)return setTimeout(()=>{(this.relayer.connected||this.relayer.connecting)&&this.relayer.request(s).catch(g=>this.logger.warn(g))},_e.toMiliseconds(_e.ONE_SECOND)),f;const h=new Promise(async g=>{const w=M=>{M.topic===e&&(this.events.removeListener(Fi.created,w),g(M.id))};this.events.on(Fi.created,w);try{const M=await Gs(new Promise((C,O)=>{this.relayer.request(s).catch(N=>{this.logger.warn(N,N?.message),O(N)}).then(C)}),this.initialSubscribeTimeout,`Subscribing to ${e} failed, please try again`);this.events.removeListener(Fi.created,w),g(M)}catch{}}),u=await Gs(h,this.subscribeTimeout,`Subscribing to ${e} failed, please try again`);if(!u&&a)throw new Error(`Subscribing to ${e} failed, please try again`);return u?f:null}catch(f){if(this.logger.debug("Outgoing Relay Subscribe Payload stalled"),this.relayer.events.emit(Lr.connection_stalled),a)throw f}return null}async rpcBatchSubscribe(e){if(!e.length)return;const t=e[0].relay,i={method:Xc(t.protocol).batchSubscribe,params:{topics:e.map(n=>n.topic)}};this.logger.debug("Outgoing Relay Payload"),this.logger.trace({type:"payload",direction:"outgoing",request:i});try{await await Gs(new Promise(n=>{this.relayer.request(i).catch(s=>this.logger.warn(s)).then(n)}),this.subscribeTimeout,"rpcBatchSubscribe failed, please try again")}catch{this.relayer.events.emit(Lr.connection_stalled)}}async rpcBatchFetchMessages(e){if(!e.length)return;const t=e[0].relay,i={method:Xc(t.protocol).batchFetchMessages,params:{topics:e.map(s=>s.topic)}};this.logger.debug("Outgoing Relay Payload"),this.logger.trace({type:"payload",direction:"outgoing",request:i});let n;try{n=await await Gs(new Promise((s,a)=>{this.relayer.request(i).catch(f=>{this.logger.warn(f),a(f)}).then(s)}),this.subscribeTimeout,"rpcBatchFetchMessages failed, please try again")}catch{this.relayer.events.emit(Lr.connection_stalled)}return n}rpcUnsubscribe(e,t,i){const n={method:Xc(i.protocol).unsubscribe,params:{topic:e,id:t}};return this.logger.debug("Outgoing Relay Payload"),this.logger.trace({type:"payload",direction:"outgoing",request:n}),this.relayer.request(n)}onSubscribe(e,t){this.setSubscription(e,E0(pf({},t),{id:e})),this.pending.delete(t.topic)}onBatchSubscribe(e){e.length&&e.forEach(t=>{this.setSubscription(t.id,pf({},t)),this.pending.delete(t.topic)})}async onUnsubscribe(e,t,i){this.events.removeAllListeners(t),this.hasSubscription(t,e)&&this.deleteSubscription(t,i),await this.relayer.messages.del(e)}async setRelayerSubscriptions(e){await this.relayer.core.storage.setItem(this.storageKey,e)}async getRelayerSubscriptions(){return await this.relayer.core.storage.getItem(this.storageKey)}setSubscription(e,t){this.logger.debug("Setting subscription"),this.logger.trace({type:"method",method:"setSubscription",id:e,subscription:t}),this.addSubscription(e,t)}addSubscription(e,t){this.subscriptions.set(e,pf({},t)),this.topicMap.set(t.topic,e),this.events.emit(Fi.created,t)}getSubscription(e){this.logger.debug("Getting subscription"),this.logger.trace({type:"method",method:"getSubscription",id:e});const t=this.subscriptions.get(e);if(!t){const{message:i}=xe("NO_MATCHING_KEY",`${this.name}: ${e}`);throw new Error(i)}return t}deleteSubscription(e,t){this.logger.debug("Deleting subscription"),this.logger.trace({type:"method",method:"deleteSubscription",id:e,reason:t});const i=this.getSubscription(e);this.subscriptions.delete(e),this.topicMap.delete(i.topic,e),this.events.emit(Fi.deleted,E0(pf({},i),{reason:t}))}async persist(){await this.setRelayerSubscriptions(this.values),this.events.emit(Fi.sync)}async onRestart(){if(this.cached.length){const e=[...this.cached],t=Math.ceil(this.cached.length/this.batchSubscribeTopicsLimit);for(let i=0;i<t;i++){const n=e.splice(0,this.batchSubscribeTopicsLimit);await this.batchSubscribe(n)}}this.events.emit(Fi.resubscribed)}async restore(){try{const e=await this.getRelayerSubscriptions();if(typeof e>"u"||!e.length)return;if(this.subscriptions.size){const{message:t}=xe("RESTORE_WILL_OVERRIDE",this.name);throw this.logger.error(t),this.logger.error(`${this.name}: ${JSON.stringify(this.values)}`),new Error(t)}this.cached=e,this.logger.debug(`Successfully Restored subscriptions for ${this.name}`),this.logger.trace({type:"method",method:"restore",subscriptions:this.values})}catch(e){this.logger.debug(`Failed to Restore subscriptions for ${this.name}`),this.logger.error(e)}}async batchSubscribe(e){e.length&&(await this.rpcBatchSubscribe(e),this.onBatchSubscribe(e.map(t=>E0(pf({},t),{id:this.getSubscriptionId(t.topic)}))))}async batchFetchMessages(e){if(!e.length)return;this.logger.trace(`Fetching batch messages for ${e.length} subscriptions`);const t=await this.rpcBatchFetchMessages(e);t&&t.messages&&(await hA(_e.toMiliseconds(_e.ONE_SECOND)),await this.relayer.handleBatchMessageEvents(t.messages))}async onConnect(){await this.restart(),this.reset()}onDisconnect(){this.onDisable()}isInitialized(){if(!this.initialized){const{message:e}=xe("NOT_INITIALIZED",this.name);throw new Error(e)}}async restartToComplete(){!this.relayer.connected&&!this.relayer.connecting&&await this.relayer.transportOpen()}getSubscriptionId(e){return ys(e+this.clientId)}}var gP=Object.defineProperty,N2=Object.getOwnPropertySymbols,vP=Object.prototype.hasOwnProperty,mP=Object.prototype.propertyIsEnumerable,$2=(r,e,t)=>e in r?gP(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,L2=(r,e)=>{for(var t in e||(e={}))vP.call(e,t)&&$2(r,t,e[t]);if(N2)for(var t of N2(e))mP.call(e,t)&&$2(r,t,e[t]);return r};class bP extends VS{constructor(e){super(e),this.protocol="wc",this.version=2,this.events=new zr.exports.EventEmitter,this.name=aM,this.transportExplicitlyClosed=!1,this.initialized=!1,this.connectionAttemptInProgress=!1,this.hasExperiencedNetworkDisruption=!1,this.heartBeatTimeout=_e.toMiliseconds(_e.THIRTY_SECONDS+_e.FIVE_SECONDS),this.requestsInFlight=[],this.connectTimeout=_e.toMiliseconds(_e.ONE_SECOND*15),this.request=async t=>{var i,n;this.logger.debug("Publishing Request Payload");const s=t.id||Uo().toString();await this.toEstablishConnection();try{this.logger.trace({id:s,method:t.method,topic:(i=t.params)==null?void 0:i.topic},"relayer.request - publishing...");const a=`${s}:${((n=t.params)==null?void 0:n.tag)||""}`;this.requestsInFlight.push(a);const f=await this.provider.request(t);return this.requestsInFlight=this.requestsInFlight.filter(h=>h!==a),f}catch(a){throw this.logger.debug(`Failed to Publish Request: ${s}`),a}},this.resetPingTimeout=()=>{if(ql())try{clearTimeout(this.pingTimeout),this.pingTimeout=setTimeout(()=>{var t,i,n;this.logger.debug({},"pingTimeout: Connection stalled, terminating..."),(n=(i=(t=this.provider)==null?void 0:t.connection)==null?void 0:i.socket)==null||n.terminate()},this.heartBeatTimeout)}catch(t){this.logger.warn(t,t?.message)}},this.onPayloadHandler=t=>{this.onProviderPayload(t),this.resetPingTimeout()},this.onConnectHandler=()=>{this.logger.warn({},"Relayer connected \u{1F6DC}"),this.startPingTimeout(),this.events.emit(Lr.connect)},this.onDisconnectHandler=()=>{this.logger.warn({},"Relayer disconnected \u{1F6D1}"),this.requestsInFlight=[],this.onProviderDisconnect()},this.onProviderErrorHandler=t=>{this.logger.fatal(t,`Fatal socket error: ${t?.message}`),this.events.emit(Lr.error,t),this.logger.fatal("Fatal socket error received, closing transport"),this.transportClose()},this.registerProviderListeners=()=>{this.provider.on(sn.payload,this.onPayloadHandler),this.provider.on(sn.connect,this.onConnectHandler),this.provider.on(sn.disconnect,this.onDisconnectHandler),this.provider.on(sn.error,this.onProviderErrorHandler)},this.core=e.core,this.logger=typeof e.logger<"u"&&typeof e.logger!="string"?ci(e.logger,this.name):Zn(rh({level:e.logger||oM})),this.messages=new tP(this.logger,e.core),this.subscriber=new pP(this,this.logger),this.publisher=new aP(this,this.logger),this.relayUrl=e?.relayUrl||f2,this.projectId=e.projectId,Zx()?this.packageName=Hm():Xx()&&(this.bundleId=Hm()),this.provider={}}async init(){if(this.logger.trace("Initialized"),this.registerEventListeners(),await Promise.all([this.messages.init(),this.subscriber.init()]),this.initialized=!0,this.subscriber.cached.length>0)try{await this.transportOpen()}catch(e){this.logger.warn(e,e?.message)}}get context(){return yi(this.logger)}get connected(){var e,t,i;return((i=(t=(e=this.provider)==null?void 0:e.connection)==null?void 0:t.socket)==null?void 0:i.readyState)===1}get connecting(){var e,t,i;return((i=(t=(e=this.provider)==null?void 0:e.connection)==null?void 0:t.socket)==null?void 0:i.readyState)===0}async publish(e,t,i){this.isInitialized(),await this.publisher.publish(e,t,i),await this.recordMessageEvent({topic:e,message:t,publishedAt:Date.now(),transportType:sr.relay})}async subscribe(e,t){var i,n,s;this.isInitialized(),(!(t!=null&&t.transportType)||t?.transportType==="relay")&&await this.toEstablishConnection();const a=typeof((i=t?.internal)==null?void 0:i.throwOnFailedPublish)>"u"?!0:(n=t?.internal)==null?void 0:n.throwOnFailedPublish;let f=((s=this.subscriber.topicMap.get(e))==null?void 0:s[0])||"",h;const u=g=>{g.topic===e&&(this.subscriber.off(Fi.created,u),h())};return await Promise.all([new Promise(g=>{h=g,this.subscriber.on(Fi.created,u)}),new Promise(async(g,w)=>{f=await this.subscriber.subscribe(e,L2({internal:{throwOnFailedPublish:a}},t)).catch(M=>{a&&w(M)})||f,g()})]),f}async unsubscribe(e,t){this.isInitialized(),await this.subscriber.unsubscribe(e,t)}on(e,t){this.events.on(e,t)}once(e,t){this.events.once(e,t)}off(e,t){this.events.off(e,t)}removeListener(e,t){this.events.removeListener(e,t)}async transportDisconnect(){this.provider.disconnect&&(this.hasExperiencedNetworkDisruption||this.connected)?await Gs(this.provider.disconnect(),2e3,"provider.disconnect()").catch(()=>this.onProviderDisconnect()):this.onProviderDisconnect()}async transportClose(){this.transportExplicitlyClosed=!0,await this.transportDisconnect()}async transportOpen(e){if(this.connectPromise?(this.logger.debug({},"Waiting for existing connection attempt to resolve..."),await this.connectPromise,this.logger.debug({},"Existing connection attempt resolved")):(this.connectPromise=new Promise(async(t,i)=>{await this.connect(e).then(t).catch(i).finally(()=>{this.connectPromise=void 0})}),await this.connectPromise),!this.connected)throw new Error(`Couldn't establish socket connection to the relay server: ${this.relayUrl}`)}async restartTransport(e){this.logger.debug({},"Restarting transport..."),!this.connectionAttemptInProgress&&(this.relayUrl=e||this.relayUrl,await this.confirmOnlineStateOrThrow(),await this.transportClose(),await this.transportOpen())}async confirmOnlineStateOrThrow(){if(!await Sb())throw new Error("No internet connection detected. Please restart your network and try again.")}async handleBatchMessageEvents(e){if(e?.length===0){this.logger.trace("Batch message events is empty. Ignoring...");return}const t=e.sort((i,n)=>i.publishedAt-n.publishedAt);this.logger.debug(`Batch of ${t.length} message events sorted`);for(const i of t)try{await this.onMessageEvent(i)}catch(n){this.logger.warn(n,"Error while processing batch message event: "+n?.message)}this.logger.trace(`Batch of ${t.length} message events processed`)}async onLinkMessageEvent(e,t){const{topic:i}=e;if(!t.sessionExists){const n=Ir(_e.FIVE_MINUTES),s={topic:i,expiry:n,relay:{protocol:"irn"},active:!1};await this.core.pairing.pairings.set(i,s)}this.events.emit(Lr.message,e),await this.recordMessageEvent(e)}async connect(e){await this.confirmOnlineStateOrThrow(),e&&e!==this.relayUrl&&(this.relayUrl=e,await this.transportDisconnect()),this.connectionAttemptInProgress=!0,this.transportExplicitlyClosed=!1;let t=1;for(;t<6;){try{this.logger.debug({},`Connecting to ${this.relayUrl}, attempt: ${t}...`),await this.createProvider(),await new Promise(async(i,n)=>{const s=()=>{n(new Error("Connection interrupted while trying to subscribe"))};this.provider.once(sn.disconnect,s),await Gs(new Promise((a,f)=>{this.provider.connect().then(a).catch(f)}),this.connectTimeout,`Socket stalled when trying to connect to ${this.relayUrl}`).catch(a=>{n(a)}).finally(()=>{this.provider.off(sn.disconnect,s),clearTimeout(this.reconnectTimeout),this.reconnectTimeout=void 0}),await new Promise(async(a,f)=>{const h=()=>{f(new Error("Connection interrupted while trying to subscribe"))};this.provider.once(sn.disconnect,h),await this.subscriber.start().then(a).catch(f).finally(()=>{this.provider.off(sn.disconnect,h)})}),this.hasExperiencedNetworkDisruption=!1,i()})}catch(i){await this.subscriber.stop();const n=i;this.logger.warn({},n.message),this.hasExperiencedNetworkDisruption=!0}finally{this.connectionAttemptInProgress=!1}if(this.connected){this.logger.debug({},`Connected to ${this.relayUrl} successfully on attempt: ${t}`);break}await new Promise(i=>setTimeout(i,_e.toMiliseconds(t*1))),t++}}startPingTimeout(){var e,t,i,n,s;if(ql())try{(t=(e=this.provider)==null?void 0:e.connection)!=null&&t.socket&&((s=(n=(i=this.provider)==null?void 0:i.connection)==null?void 0:n.socket)==null||s.on("ping",()=>{this.resetPingTimeout()})),this.resetPingTimeout()}catch(a){this.logger.warn(a,a?.message)}}async createProvider(){this.provider.connection&&this.unregisterProviderListeners();const e=await this.core.crypto.signJWT(this.relayUrl);this.provider=new nn(new KI(iA({sdkVersion:y0,protocol:this.protocol,version:this.version,relayUrl:this.relayUrl,projectId:this.projectId,auth:e,useOnCloseEvent:!0,bundleId:this.bundleId,packageName:this.packageName}))),this.registerProviderListeners()}async recordMessageEvent(e){const{topic:t,message:i}=e;await this.messages.set(t,i)}async shouldIgnoreMessageEvent(e){const{topic:t,message:i}=e;if(!i||i.length===0)return this.logger.warn(`Ignoring invalid/empty message: ${i}`),!0;if(!await this.subscriber.isSubscribed(t))return this.logger.warn(`Ignoring message for non-subscribed topic ${t}`),!0;const n=this.messages.has(t,i);return n&&this.logger.warn(`Ignoring duplicate message: ${i}`),n}async onProviderPayload(e){if(this.logger.debug("Incoming Relay Payload"),this.logger.trace({type:"payload",direction:"incoming",payload:e}),b0(e)){if(!e.method.endsWith(cM))return;const t=e.params,{topic:i,message:n,publishedAt:s,attestation:a}=t.data,f={topic:i,message:n,publishedAt:s,transportType:sr.relay,attestation:a};this.logger.debug("Emitting Relayer Payload"),this.logger.trace(L2({type:"event",event:t.id},f)),this.events.emit(t.id,f),await this.acknowledgePayload(e),await this.onMessageEvent(f)}else sh(e)&&this.events.emit(Lr.message_ack,e)}async onMessageEvent(e){await this.shouldIgnoreMessageEvent(e)||(this.events.emit(Lr.message,e),await this.recordMessageEvent(e))}async acknowledgePayload(e){const t=ih(e.id,!0);await this.provider.connection.send(t)}unregisterProviderListeners(){this.provider.off(sn.payload,this.onPayloadHandler),this.provider.off(sn.connect,this.onConnectHandler),this.provider.off(sn.disconnect,this.onDisconnectHandler),this.provider.off(sn.error,this.onProviderErrorHandler),clearTimeout(this.pingTimeout)}async registerEventListeners(){let e=await Sb();$E(async t=>{e!==t&&(e=t,t?await this.transportOpen().catch(i=>this.logger.error(i,i?.message)):(this.hasExperiencedNetworkDisruption=!0,await this.transportDisconnect(),this.transportExplicitlyClosed=!1))})}async onProviderDisconnect(){await this.subscriber.stop(),clearTimeout(this.pingTimeout),this.events.emit(Lr.disconnect),this.connectionAttemptInProgress=!1,!this.transportExplicitlyClosed&&(this.reconnectTimeout||this.connectPromise||(this.reconnectTimeout=setTimeout(async()=>{clearTimeout(this.reconnectTimeout),await this.transportOpen().catch(e=>this.logger.error(e,e?.message))},_e.toMiliseconds(fM))))}isInitialized(){if(!this.initialized){const{message:e}=xe("NOT_INITIALIZED",this.name);throw new Error(e)}}async toEstablishConnection(){await this.confirmOnlineStateOrThrow(),!this.connected&&await this.transportOpen()}}var wP=Object.defineProperty,B2=Object.getOwnPropertySymbols,yP=Object.prototype.hasOwnProperty,_P=Object.prototype.propertyIsEnumerable,F2=(r,e,t)=>e in r?wP(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,U2=(r,e)=>{for(var t in e||(e={}))yP.call(e,t)&&F2(r,t,e[t]);if(B2)for(var t of B2(e))_P.call(e,t)&&F2(r,t,e[t]);return r};class ko extends GS{constructor(e,t,i,n=ts,s=void 0){super(e,t,i,n),this.core=e,this.logger=t,this.name=i,this.map=new Map,this.version=lM,this.cached=[],this.initialized=!1,this.storagePrefix=ts,this.recentlyDeleted=[],this.recentlyDeletedLimit=200,this.init=async()=>{this.initialized||(this.logger.trace("Initialized"),await this.restore(),this.cached.forEach(a=>{this.getKey&&a!==null&&!ai(a)?this.map.set(this.getKey(a),a):uE(a)?this.map.set(a.id,a):dE(a)&&this.map.set(a.topic,a)}),this.cached=[],this.initialized=!0)},this.set=async(a,f)=>{this.isInitialized(),this.map.has(a)?await this.update(a,f):(this.logger.debug("Setting value"),this.logger.trace({type:"method",method:"set",key:a,value:f}),this.map.set(a,f),await this.persist())},this.get=a=>(this.isInitialized(),this.logger.debug("Getting value"),this.logger.trace({type:"method",method:"get",key:a}),this.getData(a)),this.getAll=a=>(this.isInitialized(),a?this.values.filter(f=>Object.keys(a).every(h=>VI(f[h],a[h]))):this.values),this.update=async(a,f)=>{this.isInitialized(),this.logger.debug("Updating value"),this.logger.trace({type:"method",method:"update",key:a,update:f});const h=U2(U2({},this.getData(a)),f);this.map.set(a,h),await this.persist()},this.delete=async(a,f)=>{this.isInitialized(),this.map.has(a)&&(this.logger.debug("Deleting value"),this.logger.trace({type:"method",method:"delete",key:a,reason:f}),this.map.delete(a),this.addToRecentlyDeleted(a),await this.persist())},this.logger=ci(t,this.name),this.storagePrefix=n,this.getKey=s}get context(){return yi(this.logger)}get storageKey(){return this.storagePrefix+this.version+this.core.customStoragePrefix+"//"+this.name}get length(){return this.map.size}get keys(){return Array.from(this.map.keys())}get values(){return Array.from(this.map.values())}addToRecentlyDeleted(e){this.recentlyDeleted.push(e),this.recentlyDeleted.length>=this.recentlyDeletedLimit&&this.recentlyDeleted.splice(0,this.recentlyDeletedLimit/2)}async setDataStore(e){await this.core.storage.setItem(this.storageKey,e)}async getDataStore(){return await this.core.storage.getItem(this.storageKey)}getData(e){const t=this.map.get(e);if(!t){if(this.recentlyDeleted.includes(e)){const{message:n}=xe("MISSING_OR_INVALID",`Record was recently deleted - ${this.name}: ${e}`);throw this.logger.error(n),new Error(n)}const{message:i}=xe("NO_MATCHING_KEY",`${this.name}: ${e}`);throw this.logger.error(i),new Error(i)}return t}async persist(){await this.setDataStore(this.values)}async restore(){try{const e=await this.getDataStore();if(typeof e>"u"||!e.length)return;if(this.map.size){const{message:t}=xe("RESTORE_WILL_OVERRIDE",this.name);throw this.logger.error(t),new Error(t)}this.cached=e,this.logger.debug(`Successfully Restored value for ${this.name}`),this.logger.trace({type:"method",method:"restore",value:this.values})}catch(e){this.logger.debug(`Failed to Restore value for ${this.name}`),this.logger.error(e)}}isInitialized(){if(!this.initialized){const{message:e}=xe("NOT_INITIALIZED",this.name);throw new Error(e)}}}class xP{constructor(e,t){this.core=e,this.logger=t,this.name=gM,this.version=vM,this.events=new zr.exports,this.initialized=!1,this.storagePrefix=ts,this.ignoredPayloadTypes=[ws],this.registeredMethods=[],this.init=async()=>{this.initialized||(await this.pairings.init(),await this.cleanup(),this.registerRelayerEvents(),this.registerExpirerEvents(),this.initialized=!0,this.logger.trace("Initialized"))},this.register=({methods:i})=>{this.isInitialized(),this.registeredMethods=[...new Set([...this.registeredMethods,...i])]},this.create=async i=>{this.isInitialized();const n=t0(),s=await this.core.crypto.setSymKey(n),a=Ir(_e.FIVE_MINUTES),f={protocol:c2},h={topic:s,expiry:a,relay:f,active:!1,methods:i?.methods},u=mb({protocol:this.core.protocol,version:this.core.version,topic:s,symKey:n,relay:f,expiryTimestamp:a,methods:i?.methods});return this.events.emit(qo.create,h),this.core.expirer.set(s,a),await this.pairings.set(s,h),await this.core.relayer.subscribe(s,{transportType:i?.transportType}),{topic:s,uri:u}},this.pair=async i=>{this.isInitialized();const n=this.core.eventClient.createEvent({properties:{topic:i?.uri,trace:[rs.pairing_started]}});this.isValidPair(i,n);const{topic:s,symKey:a,relay:f,expiryTimestamp:h,methods:u}=vb(i.uri);n.props.properties.topic=s,n.addTrace(rs.pairing_uri_validation_success),n.addTrace(rs.pairing_uri_not_expired);let g;if(this.pairings.keys.includes(s)){if(g=this.pairings.get(s),n.addTrace(rs.existing_pairing),g.active)throw n.setError(Ss.active_pairing_already_exists),new Error(`Pairing already exists: ${s}. Please try again with a new connection URI.`);n.addTrace(rs.pairing_not_expired)}const w=h||Ir(_e.FIVE_MINUTES),M={topic:s,relay:f,expiry:w,active:!1,methods:u};this.core.expirer.set(s,w),await this.pairings.set(s,M),n.addTrace(rs.store_new_pairing),i.activatePairing&&await this.activate({topic:s}),this.events.emit(qo.create,M),n.addTrace(rs.emit_inactive_pairing),this.core.crypto.keychain.has(s)||await this.core.crypto.setSymKey(a,s),n.addTrace(rs.subscribing_pairing_topic);try{await this.core.relayer.confirmOnlineStateOrThrow()}catch{n.setError(Ss.no_internet_connection)}try{await this.core.relayer.subscribe(s,{relay:f})}catch(C){throw n.setError(Ss.subscribe_pairing_topic_failure),C}return n.addTrace(rs.subscribe_pairing_topic_success),M},this.activate=async({topic:i})=>{this.isInitialized();const n=Ir(_e.THIRTY_DAYS);this.core.expirer.set(i,n),await this.pairings.update(i,{active:!0,expiry:n})},this.ping=async i=>{this.isInitialized(),await this.isValidPing(i);const{topic:n}=i;if(this.pairings.keys.includes(n)){const s=await this.sendRequest(n,"wc_pairingPing",{}),{done:a,resolve:f,reject:h}=No();this.events.once(Dt("pairing_ping",s),({error:u})=>{u?h(u):f()}),await a()}},this.updateExpiry=async({topic:i,expiry:n})=>{this.isInitialized(),await this.pairings.update(i,{expiry:n})},this.updateMetadata=async({topic:i,metadata:n})=>{this.isInitialized(),await this.pairings.update(i,{peerMetadata:n})},this.getPairings=()=>(this.isInitialized(),this.pairings.values),this.disconnect=async i=>{this.isInitialized(),await this.isValidDisconnect(i);const{topic:n}=i;this.pairings.keys.includes(n)&&(await this.sendRequest(n,"wc_pairingDelete",Gt("USER_DISCONNECTED")),await this.deletePairing(n))},this.formatUriFromPairing=i=>{this.isInitialized();const{topic:n,relay:s,expiry:a,methods:f}=i,h=this.core.crypto.keychain.get(n);return mb({protocol:this.core.protocol,version:this.core.version,topic:n,symKey:h,relay:s,expiryTimestamp:a,methods:f})},this.sendRequest=async(i,n,s)=>{const a=Qs(n,s),f=await this.core.crypto.encode(i,a),h=lf[n].req;return this.core.history.set(i,a),this.core.relayer.publish(i,f,h),a.id},this.sendResult=async(i,n,s)=>{const a=ih(i,s),f=await this.core.crypto.encode(n,a),h=await this.core.history.get(n,i),u=lf[h.request.method].res;await this.core.relayer.publish(n,f,u),await this.core.history.resolve(a)},this.sendError=async(i,n,s)=>{const a=nh(i,s),f=await this.core.crypto.encode(n,a),h=await this.core.history.get(n,i),u=lf[h.request.method]?lf[h.request.method].res:lf.unregistered_method.res;await this.core.relayer.publish(n,f,u),await this.core.history.resolve(a)},this.deletePairing=async(i,n)=>{await this.core.relayer.unsubscribe(i),await Promise.all([this.pairings.delete(i,Gt("USER_DISCONNECTED")),this.core.crypto.deleteSymKey(i),n?Promise.resolve():this.core.expirer.del(i)])},this.cleanup=async()=>{const i=this.pairings.getAll().filter(n=>Ys(n.expiry));await Promise.all(i.map(n=>this.deletePairing(n.topic)))},this.onRelayEventRequest=i=>{const{topic:n,payload:s}=i;switch(s.method){case"wc_pairingPing":return this.onPairingPingRequest(n,s);case"wc_pairingDelete":return this.onPairingDeleteRequest(n,s);default:return this.onUnknownRpcMethodRequest(n,s)}},this.onRelayEventResponse=async i=>{const{topic:n,payload:s}=i,a=(await this.core.history.get(n,s.id)).request.method;switch(a){case"wc_pairingPing":return this.onPairingPingResponse(n,s);default:return this.onUnknownRpcMethodResponse(a)}},this.onPairingPingRequest=async(i,n)=>{const{id:s}=n;try{this.isValidPing({topic:i}),await this.sendResult(s,i,!0),this.events.emit(qo.ping,{id:s,topic:i})}catch(a){await this.sendError(s,i,a),this.logger.error(a)}},this.onPairingPingResponse=(i,n)=>{const{id:s}=n;setTimeout(()=>{es(n)?this.events.emit(Dt("pairing_ping",s),{}):rn(n)&&this.events.emit(Dt("pairing_ping",s),{error:n.error})},500)},this.onPairingDeleteRequest=async(i,n)=>{const{id:s}=n;try{this.isValidDisconnect({topic:i}),await this.deletePairing(i),this.events.emit(qo.delete,{id:s,topic:i})}catch(a){await this.sendError(s,i,a),this.logger.error(a)}},this.onUnknownRpcMethodRequest=async(i,n)=>{const{id:s,method:a}=n;try{if(this.registeredMethods.includes(a))return;const f=Gt("WC_METHOD_UNSUPPORTED",a);await this.sendError(s,i,f),this.logger.error(f)}catch(f){await this.sendError(s,i,f),this.logger.error(f)}},this.onUnknownRpcMethodResponse=i=>{this.registeredMethods.includes(i)||this.logger.error(Gt("WC_METHOD_UNSUPPORTED",i))},this.isValidPair=(i,n)=>{var s;if(!bi(i)){const{message:f}=xe("MISSING_OR_INVALID",`pair() params: ${i}`);throw n.setError(Ss.malformed_pairing_uri),new Error(f)}if(!hE(i.uri)){const{message:f}=xe("MISSING_OR_INVALID",`pair() uri: ${i.uri}`);throw n.setError(Ss.malformed_pairing_uri),new Error(f)}const a=vb(i?.uri);if(!((s=a?.relay)!=null&&s.protocol)){const{message:f}=xe("MISSING_OR_INVALID","pair() uri#relay-protocol");throw n.setError(Ss.malformed_pairing_uri),new Error(f)}if(!(a!=null&&a.symKey)){const{message:f}=xe("MISSING_OR_INVALID","pair() uri#symKey");throw n.setError(Ss.malformed_pairing_uri),new Error(f)}if(a!=null&&a.expiryTimestamp&&_e.toMiliseconds(a?.expiryTimestamp)<Date.now()){n.setError(Ss.pairing_expired);const{message:f}=xe("EXPIRED","pair() URI has expired. Please try again with a new connection URI.");throw new Error(f)}},this.isValidPing=async i=>{if(!bi(i)){const{message:s}=xe("MISSING_OR_INVALID",`ping() params: ${i}`);throw new Error(s)}const{topic:n}=i;await this.isValidPairingTopic(n)},this.isValidDisconnect=async i=>{if(!bi(i)){const{message:s}=xe("MISSING_OR_INVALID",`disconnect() params: ${i}`);throw new Error(s)}const{topic:n}=i;await this.isValidPairingTopic(n)},this.isValidPairingTopic=async i=>{if(!wr(i,!1)){const{message:n}=xe("MISSING_OR_INVALID",`pairing topic should be a string: ${i}`);throw new Error(n)}if(!this.pairings.keys.includes(i)){const{message:n}=xe("NO_MATCHING_KEY",`pairing topic doesn't exist: ${i}`);throw new Error(n)}if(Ys(this.pairings.get(i).expiry)){await this.deletePairing(i);const{message:n}=xe("EXPIRED",`pairing topic: ${i}`);throw new Error(n)}},this.core=e,this.logger=ci(t,this.name),this.pairings=new ko(this.core,this.logger,this.name,this.storagePrefix)}get context(){return yi(this.logger)}isInitialized(){if(!this.initialized){const{message:e}=xe("NOT_INITIALIZED",this.name);throw new Error(e)}}registerRelayerEvents(){this.core.relayer.on(Lr.message,async e=>{const{topic:t,message:i,transportType:n}=e;if(!this.pairings.keys.includes(t)||n===sr.link_mode||this.ignoredPayloadTypes.includes(this.core.crypto.getPayloadType(i)))return;const s=await this.core.crypto.decode(t,i);try{b0(s)?(this.core.history.set(t,s),this.onRelayEventRequest({topic:t,payload:s})):sh(s)&&(await this.core.history.resolve(s),await this.onRelayEventResponse({topic:t,payload:s}),this.core.history.delete(t,s.id))}catch(a){this.logger.error(a)}})}registerExpirerEvents(){this.core.expirer.on(on.expired,async e=>{const{topic:t}=Gm(e.target);t&&this.pairings.keys.includes(t)&&(await this.deletePairing(t,!0),this.events.emit(qo.expire,{topic:t}))})}}class AP extends jS{constructor(e,t){super(e,t),this.core=e,this.logger=t,this.records=new Map,this.events=new zr.exports.EventEmitter,this.name=mM,this.version=bM,this.cached=[],this.initialized=!1,this.storagePrefix=ts,this.init=async()=>{this.initialized||(this.logger.trace("Initialized"),await this.restore(),this.cached.forEach(i=>this.records.set(i.id,i)),this.cached=[],this.registerEventListeners(),this.initialized=!0)},this.set=(i,n,s)=>{if(this.isInitialized(),this.logger.debug("Setting JSON-RPC request history record"),this.logger.trace({type:"method",method:"set",topic:i,request:n,chainId:s}),this.records.has(n.id))return;const a={id:n.id,topic:i,request:{method:n.method,params:n.params||null},chainId:s,expiry:Ir(_e.THIRTY_DAYS)};this.records.set(a.id,a),this.persist(),this.events.emit(Sn.created,a)},this.resolve=async i=>{if(this.isInitialized(),this.logger.debug("Updating JSON-RPC response history record"),this.logger.trace({type:"method",method:"update",response:i}),!this.records.has(i.id))return;const n=await this.getRecord(i.id);typeof n.response>"u"&&(n.response=rn(i)?{error:i.error}:{result:i.result},this.records.set(n.id,n),this.persist(),this.events.emit(Sn.updated,n))},this.get=async(i,n)=>(this.isInitialized(),this.logger.debug("Getting record"),this.logger.trace({type:"method",method:"get",topic:i,id:n}),await this.getRecord(n)),this.delete=(i,n)=>{this.isInitialized(),this.logger.debug("Deleting record"),this.logger.trace({type:"method",method:"delete",id:n}),this.values.forEach(s=>{if(s.topic===i){if(typeof n<"u"&&s.id!==n)return;this.records.delete(s.id),this.events.emit(Sn.deleted,s)}}),this.persist()},this.exists=async(i,n)=>(this.isInitialized(),this.records.has(n)?(await this.getRecord(n)).topic===i:!1),this.on=(i,n)=>{this.events.on(i,n)},this.once=(i,n)=>{this.events.once(i,n)},this.off=(i,n)=>{this.events.off(i,n)},this.removeListener=(i,n)=>{this.events.removeListener(i,n)},this.logger=ci(t,this.name)}get context(){return yi(this.logger)}get storageKey(){return this.storagePrefix+this.version+this.core.customStoragePrefix+"//"+this.name}get size(){return this.records.size}get keys(){return Array.from(this.records.keys())}get values(){return Array.from(this.records.values())}get pending(){const e=[];return this.values.forEach(t=>{if(typeof t.response<"u")return;const i={topic:t.topic,request:Qs(t.request.method,t.request.params,t.id),chainId:t.chainId};return e.push(i)}),e}async setJsonRpcRecords(e){await this.core.storage.setItem(this.storageKey,e)}async getJsonRpcRecords(){return await this.core.storage.getItem(this.storageKey)}getRecord(e){this.isInitialized();const t=this.records.get(e);if(!t){const{message:i}=xe("NO_MATCHING_KEY",`${this.name}: ${e}`);throw new Error(i)}return t}async persist(){await this.setJsonRpcRecords(this.values),this.events.emit(Sn.sync)}async restore(){try{const e=await this.getJsonRpcRecords();if(typeof e>"u"||!e.length)return;if(this.records.size){const{message:t}=xe("RESTORE_WILL_OVERRIDE",this.name);throw this.logger.error(t),new Error(t)}this.cached=e,this.logger.debug(`Successfully Restored records for ${this.name}`),this.logger.trace({type:"method",method:"restore",records:this.values})}catch(e){this.logger.debug(`Failed to Restore records for ${this.name}`),this.logger.error(e)}}registerEventListeners(){this.events.on(Sn.created,e=>{const t=Sn.created;this.logger.info(`Emitting ${t}`),this.logger.debug({type:"event",event:t,record:e})}),this.events.on(Sn.updated,e=>{const t=Sn.updated;this.logger.info(`Emitting ${t}`),this.logger.debug({type:"event",event:t,record:e})}),this.events.on(Sn.deleted,e=>{const t=Sn.deleted;this.logger.info(`Emitting ${t}`),this.logger.debug({type:"event",event:t,record:e})}),this.core.heartbeat.on(Ha.pulse,()=>{this.cleanup()})}cleanup(){try{this.isInitialized();let e=!1;this.records.forEach(t=>{_e.toMiliseconds(t.expiry||0)-Date.now()<=0&&(this.logger.info(`Deleting expired history log: ${t.id}`),this.records.delete(t.id),this.events.emit(Sn.deleted,t,!1),e=!0)}),e&&this.persist()}catch(e){this.logger.warn(e)}}isInitialized(){if(!this.initialized){const{message:e}=xe("NOT_INITIALIZED",this.name);throw new Error(e)}}}class EP extends JS{constructor(e,t){super(e,t),this.core=e,this.logger=t,this.expirations=new Map,this.events=new zr.exports.EventEmitter,this.name=wM,this.version=yM,this.cached=[],this.initialized=!1,this.storagePrefix=ts,this.init=async()=>{this.initialized||(this.logger.trace("Initialized"),await this.restore(),this.cached.forEach(i=>this.expirations.set(i.target,i)),this.cached=[],this.registerEventListeners(),this.initialized=!0)},this.has=i=>{try{const n=this.formatTarget(i);return typeof this.getExpiration(n)<"u"}catch{return!1}},this.set=(i,n)=>{this.isInitialized();const s=this.formatTarget(i),a={target:s,expiry:n};this.expirations.set(s,a),this.checkExpiry(s,a),this.events.emit(on.created,{target:s,expiration:a})},this.get=i=>{this.isInitialized();const n=this.formatTarget(i);return this.getExpiration(n)},this.del=i=>{if(this.isInitialized(),this.has(i)){const n=this.formatTarget(i),s=this.getExpiration(n);this.expirations.delete(n),this.events.emit(on.deleted,{target:n,expiration:s})}},this.on=(i,n)=>{this.events.on(i,n)},this.once=(i,n)=>{this.events.once(i,n)},this.off=(i,n)=>{this.events.off(i,n)},this.removeListener=(i,n)=>{this.events.removeListener(i,n)},this.logger=ci(t,this.name)}get context(){return yi(this.logger)}get storageKey(){return this.storagePrefix+this.version+this.core.customStoragePrefix+"//"+this.name}get length(){return this.expirations.size}get keys(){return Array.from(this.expirations.keys())}get values(){return Array.from(this.expirations.values())}formatTarget(e){if(typeof e=="string")return nA(e);if(typeof e=="number")return sA(e);const{message:t}=xe("UNKNOWN_TYPE",`Target type: ${typeof e}`);throw new Error(t)}async setExpirations(e){await this.core.storage.setItem(this.storageKey,e)}async getExpirations(){return await this.core.storage.getItem(this.storageKey)}async persist(){await this.setExpirations(this.values),this.events.emit(on.sync)}async restore(){try{const e=await this.getExpirations();if(typeof e>"u"||!e.length)return;if(this.expirations.size){const{message:t}=xe("RESTORE_WILL_OVERRIDE",this.name);throw this.logger.error(t),new Error(t)}this.cached=e,this.logger.debug(`Successfully Restored expirations for ${this.name}`),this.logger.trace({type:"method",method:"restore",expirations:this.values})}catch(e){this.logger.debug(`Failed to Restore expirations for ${this.name}`),this.logger.error(e)}}getExpiration(e){const t=this.expirations.get(e);if(!t){const{message:i}=xe("NO_MATCHING_KEY",`${this.name}: ${e}`);throw this.logger.warn(i),new Error(i)}return t}checkExpiry(e,t){const{expiry:i}=t;_e.toMiliseconds(i)-Date.now()<=0&&this.expire(e,t)}expire(e,t){this.expirations.delete(e),this.events.emit(on.expired,{target:e,expiration:t})}checkExpirations(){this.core.relayer.connected&&this.expirations.forEach((e,t)=>this.checkExpiry(t,e))}registerEventListeners(){this.core.heartbeat.on(Ha.pulse,()=>this.checkExpirations()),this.events.on(on.created,e=>{const t=on.created;this.logger.info(`Emitting ${t}`),this.logger.debug({type:"event",event:t,data:e}),this.persist()}),this.events.on(on.expired,e=>{const t=on.expired;this.logger.info(`Emitting ${t}`),this.logger.debug({type:"event",event:t,data:e}),this.persist()}),this.events.on(on.deleted,e=>{const t=on.deleted;this.logger.info(`Emitting ${t}`),this.logger.debug({type:"event",event:t,data:e}),this.persist()})}isInitialized(){if(!this.initialized){const{message:e}=xe("NOT_INITIALIZED",this.name);throw new Error(e)}}}class SP extends QS{constructor(e,t,i){super(e,t,i),this.core=e,this.logger=t,this.store=i,this.name=_M,this.verifyUrlV3=AM,this.storagePrefix=ts,this.version=s2,this.init=async()=>{var n;this.isDevEnv||(this.publicKey=await this.store.getItem(this.storeKey),this.publicKey&&_e.toMiliseconds((n=this.publicKey)==null?void 0:n.expiresAt)<Date.now()&&(this.logger.debug("verify v2 public key expired"),await this.removePublicKey()))},this.register=async n=>{if(!Wc()||this.isDevEnv)return;const s=window.location.origin,{id:a,decryptedId:f}=n,h=`${this.verifyUrlV3}/attestation?projectId=${this.core.projectId}&origin=${s}&id=${a}&decryptedId=${f}`;try{const u=Oc(),g=this.startAbortTimer(_e.ONE_SECOND*5),w=await new Promise((M,C)=>{const O=()=>{window.removeEventListener("message",j),u.body.removeChild(N),C("attestation aborted")};this.abortController.signal.addEventListener("abort",O);const N=u.createElement("iframe");N.src=h,N.style.display="none",N.addEventListener("error",O,{signal:this.abortController.signal});const j=H=>{if(H.data&&typeof H.data=="string")try{const F=JSON.parse(H.data);if(F.type==="verify_attestation"){if(Jd(F.attestation).payload.id!==a)return;clearInterval(g),u.body.removeChild(N),this.abortController.signal.removeEventListener("abort",O),window.removeEventListener("message",j),M(F.attestation===null?"":F.attestation)}}catch(F){this.logger.warn(F)}};u.body.appendChild(N),window.addEventListener("message",j,{signal:this.abortController.signal})});return this.logger.debug("jwt attestation",w),w}catch(u){this.logger.warn(u)}return""},this.resolve=async n=>{if(this.isDevEnv)return"";const{attestationId:s,hash:a,encryptedId:f}=n;if(s===""){this.logger.debug("resolve: attestationId is empty, skipping");return}if(s){if(Jd(s).payload.id!==f)return;const u=await this.isValidJwtAttestation(s);if(u){if(!u.isVerified){this.logger.warn("resolve: jwt attestation: origin url not verified");return}return u}}if(!a)return;const h=this.getVerifyUrl(n?.verifyUrl);return this.fetchAttestation(a,h)},this.fetchAttestation=async(n,s)=>{this.logger.debug(`resolving attestation: ${n} from url: ${s}`);const a=this.startAbortTimer(_e.ONE_SECOND*5),f=await fetch(`${s}/attestation/${n}?v2Supported=true`,{signal:this.abortController.signal});return clearTimeout(a),f.status===200?await f.json():void 0},this.getVerifyUrl=n=>{let s=n||hf;return EM.includes(s)||(this.logger.info(`verify url: ${s}, not included in trusted list, assigning default: ${hf}`),s=hf),s},this.fetchPublicKey=async()=>{try{this.logger.debug(`fetching public key from: ${this.verifyUrlV3}`);const n=this.startAbortTimer(_e.FIVE_SECONDS),s=await fetch(`${this.verifyUrlV3}/public-key`,{signal:this.abortController.signal});return clearTimeout(n),await s.json()}catch(n){this.logger.warn(n)}},this.persistPublicKey=async n=>{this.logger.debug("persisting public key to local storage",n),await this.store.setItem(this.storeKey,n),this.publicKey=n},this.removePublicKey=async()=>{this.logger.debug("removing verify v2 public key from storage"),await this.store.removeItem(this.storeKey),this.publicKey=void 0},this.isValidJwtAttestation=async n=>{const s=await this.getPublicKey();try{if(s)return this.validateAttestation(n,s)}catch(f){this.logger.error(f),this.logger.warn("error validating attestation")}const a=await this.fetchAndPersistPublicKey();try{if(a)return this.validateAttestation(n,a)}catch(f){this.logger.error(f),this.logger.warn("error validating attestation")}},this.getPublicKey=async()=>this.publicKey?this.publicKey:await this.fetchAndPersistPublicKey(),this.fetchAndPersistPublicKey=async()=>{if(this.fetchPromise)return await this.fetchPromise,this.publicKey;this.fetchPromise=new Promise(async s=>{const a=await this.fetchPublicKey();a&&(await this.persistPublicKey(a),s(a))});const n=await this.fetchPromise;return this.fetchPromise=void 0,n},this.validateAttestation=(n,s)=>{const a=KA(n,s.publicKey),f={hasExpired:_e.toMiliseconds(a.exp)<Date.now(),payload:a};if(f.hasExpired)throw this.logger.warn("resolve: jwt attestation expired"),new Error("JWT attestation expired");return{origin:f.payload.origin,isScam:f.payload.isScam,isVerified:f.payload.isVerified}},this.logger=ci(t,this.name),this.abortController=new AbortController,this.isDevEnv=Qd(),this.init()}get storeKey(){return this.storagePrefix+this.version+this.core.customStoragePrefix+"//verify:public:key"}get context(){return yi(this.logger)}startAbortTimer(e){return this.abortController=new AbortController,setTimeout(()=>this.abortController.abort(),_e.toMiliseconds(e))}}class IP extends ZS{constructor(e,t){super(e,t),this.projectId=e,this.logger=t,this.context=SM,this.registerDeviceToken=async i=>{const{clientId:n,token:s,notificationType:a,enableEncrypted:f=!1}=i,h=`${IM}/${this.projectId}/clients`;await fetch(h,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({client_id:n,type:a,token:s,always_raw:f})})},this.logger=ci(t,this.context)}}var MP=Object.defineProperty,q2=Object.getOwnPropertySymbols,CP=Object.prototype.hasOwnProperty,PP=Object.prototype.propertyIsEnumerable,z2=(r,e,t)=>e in r?MP(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,gf=(r,e)=>{for(var t in e||(e={}))CP.call(e,t)&&z2(r,t,e[t]);if(q2)for(var t of q2(e))PP.call(e,t)&&z2(r,t,e[t]);return r};class DP extends XS{constructor(e,t,i=!0){super(e,t,i),this.core=e,this.logger=t,this.context=CM,this.storagePrefix=ts,this.storageVersion=MM,this.events=new Map,this.shouldPersist=!1,this.init=async()=>{if(!Qd())try{const n={eventId:Jm(),timestamp:Date.now(),domain:this.getAppDomain(),props:{event:"INIT",type:"",properties:{client_id:await this.core.crypto.getClientId(),user_agent:jm(this.core.relayer.protocol,this.core.relayer.version,y0)}}};await this.sendEvent([n])}catch(n){this.logger.warn(n)}},this.createEvent=n=>{const{event:s="ERROR",type:a="",properties:{topic:f,trace:h}}=n,u=Jm(),g=this.core.projectId||"",w=Date.now(),M=gf({eventId:u,timestamp:w,props:{event:s,type:a,properties:{topic:f,trace:h}},bundleId:g,domain:this.getAppDomain()},this.setMethods(u));return this.telemetryEnabled&&(this.events.set(u,M),this.shouldPersist=!0),M},this.getEvent=n=>{const{eventId:s,topic:a}=n;if(s)return this.events.get(s);const f=Array.from(this.events.values()).find(h=>h.props.properties.topic===a);if(f)return gf(gf({},f),this.setMethods(f.eventId))},this.deleteEvent=n=>{const{eventId:s}=n;this.events.delete(s),this.shouldPersist=!0},this.setEventListeners=()=>{this.core.heartbeat.on(Ha.pulse,async()=>{this.shouldPersist&&await this.persist(),this.events.forEach(n=>{_e.fromMiliseconds(Date.now())-_e.fromMiliseconds(n.timestamp)>PM&&(this.events.delete(n.eventId),this.shouldPersist=!0)})})},this.setMethods=n=>({addTrace:s=>this.addTrace(n,s),setError:s=>this.setError(n,s)}),this.addTrace=(n,s)=>{const a=this.events.get(n);a&&(a.props.properties.trace.push(s),this.events.set(n,a),this.shouldPersist=!0)},this.setError=(n,s)=>{const a=this.events.get(n);a&&(a.props.type=s,a.timestamp=Date.now(),this.events.set(n,a),this.shouldPersist=!0)},this.persist=async()=>{await this.core.storage.setItem(this.storageKey,Array.from(this.events.values())),this.shouldPersist=!1},this.restore=async()=>{try{const n=await this.core.storage.getItem(this.storageKey)||[];if(!n.length)return;n.forEach(s=>{this.events.set(s.eventId,gf(gf({},s),this.setMethods(s.eventId)))})}catch(n){this.logger.warn(n)}},this.submit=async()=>{if(!this.telemetryEnabled||this.events.size===0)return;const n=[];for(const[s,a]of this.events)a.props.type&&n.push(a);if(n.length!==0)try{if((await this.sendEvent(n)).ok)for(const s of n)this.events.delete(s.eventId),this.shouldPersist=!0}catch(s){this.logger.warn(s)}},this.sendEvent=async n=>{const s=this.getAppDomain()?"":"&sp=desktop";return await fetch(`${DM}?projectId=${this.core.projectId}&st=events_sdk&sv=js-${y0}${s}`,{method:"POST",body:JSON.stringify(n)})},this.getAppDomain=()=>km().url,this.logger=ci(t,this.context),this.telemetryEnabled=i,i?this.restore().then(async()=>{await this.submit(),this.setEventListeners()}):this.persist()}get storageKey(){return this.storagePrefix+this.storageVersion+this.core.customStoragePrefix+"//"+this.context}}var OP=Object.defineProperty,H2=Object.getOwnPropertySymbols,RP=Object.prototype.hasOwnProperty,TP=Object.prototype.propertyIsEnumerable,k2=(r,e,t)=>e in r?OP(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,j2=(r,e)=>{for(var t in e||(e={}))RP.call(e,t)&&k2(r,t,e[t]);if(H2)for(var t of H2(e))TP.call(e,t)&&k2(r,t,e[t]);return r};class S0 extends kS{constructor(e){var t;super(e),this.protocol=n2,this.version=s2,this.name=oh,this.events=new zr.exports.EventEmitter,this.initialized=!1,this.on=(a,f)=>this.events.on(a,f),this.once=(a,f)=>this.events.once(a,f),this.off=(a,f)=>this.events.off(a,f),this.removeListener=(a,f)=>this.events.removeListener(a,f),this.dispatchEnvelope=({topic:a,message:f,sessionExists:h})=>{if(!a||!f)return;const u={topic:a,message:f,publishedAt:Date.now(),transportType:sr.link_mode};this.relayer.onLinkMessageEvent(u,{sessionExists:h})},this.projectId=e?.projectId,this.relayUrl=e?.relayUrl||f2,this.customStoragePrefix=e!=null&&e.customStoragePrefix?`:${e.customStoragePrefix}`:"";const i=rh({level:typeof e?.logger=="string"&&e.logger?e.logger:QI.logger,name:oh}),{logger:n,chunkLoggerController:s}=HS({opts:i,maxSizeInBytes:e?.maxLogBlobSizeInBytes,loggerOverride:e?.logger});this.logChunkController=s,(t=this.logChunkController)!=null&&t.downloadLogsBlobInBrowser&&(window.downloadLogsBlobInBrowser=async()=>{var a,f;(a=this.logChunkController)!=null&&a.downloadLogsBlobInBrowser&&((f=this.logChunkController)==null||f.downloadLogsBlobInBrowser({clientId:await this.crypto.getClientId()}))}),this.logger=ci(n,this.name),this.heartbeat=new o0,this.crypto=new eP(this,this.logger,e?.keychain),this.history=new AP(this,this.logger),this.expirer=new EP(this,this.logger),this.storage=e!=null&&e.storage?e.storage:new pS(j2(j2({},ZI),e?.storageOptions)),this.relayer=new bP({core:this,logger:this.logger,relayUrl:this.relayUrl,projectId:this.projectId}),this.pairing=new xP(this,this.logger),this.verify=new SP(this,this.logger,this.storage),this.echoClient=new IP(this.projectId||"",this.logger),this.linkModeSupportedApps=[],this.eventClient=new DP(this,this.logger,e?.telemetryEnabled)}static async init(e){const t=new S0(e);await t.initialize();const i=await t.crypto.getClientId();return await t.storage.setItem(hM,i),t}get context(){return yi(this.logger)}async start(){this.initialized||await this.initialize()}async getLogsBlob(){var e;return(e=this.logChunkController)==null?void 0:e.logsToBlob({clientId:await this.crypto.getClientId()})}async addLinkModeSupportedApp(e){this.linkModeSupportedApps.includes(e)||(this.linkModeSupportedApps.push(e),await this.storage.setItem(l2,this.linkModeSupportedApps))}async initialize(){this.logger.trace("Initialized");try{await this.crypto.init(),await this.history.init(),await this.expirer.init(),await this.relayer.init(),await this.heartbeat.init(),await this.pairing.init(),this.eventClient.init(),this.linkModeSupportedApps=await this.storage.getItem(l2)||[],this.initialized=!0,this.logger.info("Core Initialization Success")}catch(e){throw this.logger.warn(`Core Initialization Failure at epoch ${Date.now()}`,e),this.logger.error(e.message),e}}}const NP=S0,W2="wc",K2=2,V2="client",I0=`${W2}@${K2}:${V2}:`,M0={name:V2,logger:"error",controller:!1,relayUrl:"wss://relay.walletconnect.org"},G2="WALLETCONNECT_DEEPLINK_CHOICE",$P="proposal",Y2="Proposal expired",LP="session",Wa=_e.SEVEN_DAYS,BP="engine",Br={wc_sessionPropose:{req:{ttl:_e.FIVE_MINUTES,prompt:!0,tag:1100},res:{ttl:_e.FIVE_MINUTES,prompt:!1,tag:1101},reject:{ttl:_e.FIVE_MINUTES,prompt:!1,tag:1120},autoReject:{ttl:_e.FIVE_MINUTES,prompt:!1,tag:1121}},wc_sessionSettle:{req:{ttl:_e.FIVE_MINUTES,prompt:!1,tag:1102},res:{ttl:_e.FIVE_MINUTES,prompt:!1,tag:1103}},wc_sessionUpdate:{req:{ttl:_e.ONE_DAY,prompt:!1,tag:1104},res:{ttl:_e.ONE_DAY,prompt:!1,tag:1105}},wc_sessionExtend:{req:{ttl:_e.ONE_DAY,prompt:!1,tag:1106},res:{ttl:_e.ONE_DAY,prompt:!1,tag:1107}},wc_sessionRequest:{req:{ttl:_e.FIVE_MINUTES,prompt:!0,tag:1108},res:{ttl:_e.FIVE_MINUTES,prompt:!1,tag:1109}},wc_sessionEvent:{req:{ttl:_e.FIVE_MINUTES,prompt:!0,tag:1110},res:{ttl:_e.FIVE_MINUTES,prompt:!1,tag:1111}},wc_sessionDelete:{req:{ttl:_e.ONE_DAY,prompt:!1,tag:1112},res:{ttl:_e.ONE_DAY,prompt:!1,tag:1113}},wc_sessionPing:{req:{ttl:_e.ONE_DAY,prompt:!1,tag:1114},res:{ttl:_e.ONE_DAY,prompt:!1,tag:1115}},wc_sessionAuthenticate:{req:{ttl:_e.ONE_HOUR,prompt:!0,tag:1116},res:{ttl:_e.ONE_HOUR,prompt:!1,tag:1117},reject:{ttl:_e.FIVE_MINUTES,prompt:!1,tag:1118},autoReject:{ttl:_e.FIVE_MINUTES,prompt:!1,tag:1119}}},C0={min:_e.FIVE_MINUTES,max:_e.SEVEN_DAYS},is={idle:"IDLE",active:"ACTIVE"},FP="request",UP=["wc_sessionPropose","wc_sessionRequest","wc_authRequest","wc_sessionAuthenticate"],qP="wc",zP="auth",HP="authKeys",kP="pairingTopics",jP="requests",ch=`${qP}@${1.5}:${zP}:`,fh=`${ch}:PUB_KEY`;var WP=Object.defineProperty,KP=Object.defineProperties,VP=Object.getOwnPropertyDescriptors,J2=Object.getOwnPropertySymbols,GP=Object.prototype.hasOwnProperty,YP=Object.prototype.propertyIsEnumerable,Q2=(r,e,t)=>e in r?WP(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,pr=(r,e)=>{for(var t in e||(e={}))GP.call(e,t)&&Q2(r,t,e[t]);if(J2)for(var t of J2(e))YP.call(e,t)&&Q2(r,t,e[t]);return r},Mn=(r,e)=>KP(r,VP(e));class JP extends tI{constructor(e){super(e),this.name=BP,this.events=new zr.exports,this.initialized=!1,this.requestQueue={state:is.idle,queue:[]},this.sessionRequestQueue={state:is.idle,queue:[]},this.requestQueueDelay=_e.ONE_SECOND,this.expectedPairingMethodMap=new Map,this.recentlyDeletedMap=new Map,this.recentlyDeletedLimit=200,this.relayMessageCache=[],this.init=async()=>{this.initialized||(await this.cleanup(),this.registerRelayerEvents(),this.registerExpirerEvents(),this.registerPairingEvents(),await this.registerLinkModeListeners(),this.client.core.pairing.register({methods:Object.keys(Br)}),this.initialized=!0,setTimeout(()=>{this.sessionRequestQueue.queue=this.getPendingSessionRequests(),this.processSessionRequestQueue()},_e.toMiliseconds(this.requestQueueDelay)))},this.connect=async t=>{this.isInitialized(),await this.confirmOnlineStateOrThrow();const i=Mn(pr({},t),{requiredNamespaces:t.requiredNamespaces||{},optionalNamespaces:t.optionalNamespaces||{}});await this.isValidConnect(i);const{pairingTopic:n,requiredNamespaces:s,optionalNamespaces:a,sessionProperties:f,relays:h}=i;let u=n,g,w=!1;try{u&&(w=this.client.core.pairing.pairings.get(u).active)}catch(B){throw this.client.logger.error(`connect() -> pairing.get(${u}) failed`),B}if(!u||!w){const{topic:B,uri:z}=await this.client.core.pairing.create();u=B,g=z}if(!u){const{message:B}=xe("NO_MATCHING_KEY",`connect() pairing topic: ${u}`);throw new Error(B)}const M=await this.client.core.crypto.generateKeyPair(),C=Br.wc_sessionPropose.req.ttl||_e.FIVE_MINUTES,O=Ir(C),N=pr({requiredNamespaces:s,optionalNamespaces:a,relays:h??[{protocol:c2}],proposer:{publicKey:M,metadata:this.client.metadata},expiryTimestamp:O,pairingTopic:u},f&&{sessionProperties:f}),{reject:j,resolve:H,done:F}=No(C,Y2);this.events.once(Dt("session_connect"),async({error:B,session:z})=>{if(B)j(B);else if(z){z.self.publicKey=M;const W=Mn(pr({},z),{pairingTopic:N.pairingTopic,requiredNamespaces:N.requiredNamespaces,optionalNamespaces:N.optionalNamespaces,transportType:sr.relay});await this.client.session.set(z.topic,W),await this.setExpiry(z.topic,z.expiry),u&&await this.client.core.pairing.updateMetadata({topic:u,metadata:z.peer.metadata}),this.cleanupDuplicatePairings(W),H(W)}});const G=await this.sendRequest({topic:u,method:"wc_sessionPropose",params:N,throwOnFailedPublish:!0});return await this.setProposal(G,pr({id:G},N)),{uri:g,approval:F}},this.pair=async t=>{this.isInitialized(),await this.confirmOnlineStateOrThrow();try{return await this.client.core.pairing.pair(t)}catch(i){throw this.client.logger.error("pair() failed"),i}},this.approve=async t=>{var i,n,s;const a=this.client.core.eventClient.createEvent({properties:{topic:(i=t?.id)==null?void 0:i.toString(),trace:[In.session_approve_started]}});try{this.isInitialized(),await this.confirmOnlineStateOrThrow()}catch(U){throw a.setError(zo.no_internet_connection),U}try{await this.isValidProposalId(t?.id)}catch(U){throw this.client.logger.error(`approve() -> proposal.get(${t?.id}) failed`),a.setError(zo.proposal_not_found),U}try{await this.isValidApprove(t)}catch(U){throw this.client.logger.error("approve() -> isValidApprove() failed"),a.setError(zo.session_approve_namespace_validation_failure),U}const{id:f,relayProtocol:h,namespaces:u,sessionProperties:g,sessionConfig:w}=t,M=this.client.proposal.get(f);this.client.core.eventClient.deleteEvent({eventId:a.eventId});const{pairingTopic:C,proposer:O,requiredNamespaces:N,optionalNamespaces:j}=M;let H=(n=this.client.core.eventClient)==null?void 0:n.getEvent({topic:C});H||(H=(s=this.client.core.eventClient)==null?void 0:s.createEvent({type:In.session_approve_started,properties:{topic:C,trace:[In.session_approve_started,In.session_namespaces_validation_success]}}));const F=await this.client.core.crypto.generateKeyPair(),G=O.publicKey,B=await this.client.core.crypto.generateSharedKey(F,G),z=pr(pr({relay:{protocol:h??"irn"},namespaces:u,controller:{publicKey:F,metadata:this.client.metadata},expiry:Ir(Wa)},g&&{sessionProperties:g}),w&&{sessionConfig:w}),W=sr.relay;H.addTrace(In.subscribing_session_topic);try{await this.client.core.relayer.subscribe(B,{transportType:W})}catch(U){throw H.setError(zo.subscribe_session_topic_failure),U}H.addTrace(In.subscribe_session_topic_success);const _=Mn(pr({},z),{topic:B,requiredNamespaces:N,optionalNamespaces:j,pairingTopic:C,acknowledged:!1,self:z.controller,peer:{publicKey:O.publicKey,metadata:O.metadata},controller:F,transportType:sr.relay});await this.client.session.set(B,_),H.addTrace(In.store_session);try{H.addTrace(In.publishing_session_settle),await this.sendRequest({topic:B,method:"wc_sessionSettle",params:z,throwOnFailedPublish:!0}).catch(U=>{throw H?.setError(zo.session_settle_publish_failure),U}),H.addTrace(In.session_settle_publish_success),H.addTrace(In.publishing_session_approve),await this.sendResult({id:f,topic:C,result:{relay:{protocol:h??"irn"},responderPublicKey:F},throwOnFailedPublish:!0}).catch(U=>{throw H?.setError(zo.session_approve_publish_failure),U}),H.addTrace(In.session_approve_publish_success)}catch(U){throw this.client.logger.error(U),this.client.session.delete(B,Gt("USER_DISCONNECTED")),await this.client.core.relayer.unsubscribe(B),U}return this.client.core.eventClient.deleteEvent({eventId:H.eventId}),await this.client.core.pairing.updateMetadata({topic:C,metadata:O.metadata}),await this.client.proposal.delete(f,Gt("USER_DISCONNECTED")),await this.client.core.pairing.activate({topic:C}),await this.setExpiry(B,Ir(Wa)),{topic:B,acknowledged:()=>Promise.resolve(this.client.session.get(B))}},this.reject=async t=>{this.isInitialized(),await this.confirmOnlineStateOrThrow();try{await this.isValidReject(t)}catch(a){throw this.client.logger.error("reject() -> isValidReject() failed"),a}const{id:i,reason:n}=t;let s;try{s=this.client.proposal.get(i).pairingTopic}catch(a){throw this.client.logger.error(`reject() -> proposal.get(${i}) failed`),a}s&&(await this.sendError({id:i,topic:s,error:n,rpcOpts:Br.wc_sessionPropose.reject}),await this.client.proposal.delete(i,Gt("USER_DISCONNECTED")))},this.update=async t=>{this.isInitialized(),await this.confirmOnlineStateOrThrow();try{await this.isValidUpdate(t)}catch(w){throw this.client.logger.error("update() -> isValidUpdate() failed"),w}const{topic:i,namespaces:n}=t,{done:s,resolve:a,reject:f}=No(),h=Es(),u=Uo().toString(),g=this.client.session.get(i).namespaces;return this.events.once(Dt("session_update",h),({error:w})=>{w?f(w):a()}),await this.client.session.update(i,{namespaces:n}),await this.sendRequest({topic:i,method:"wc_sessionUpdate",params:{namespaces:n},throwOnFailedPublish:!0,clientRpcId:h,relayRpcId:u}).catch(w=>{this.client.logger.error(w),this.client.session.update(i,{namespaces:g}),f(w)}),{acknowledged:s}},this.extend=async t=>{this.isInitialized(),await this.confirmOnlineStateOrThrow();try{await this.isValidExtend(t)}catch(h){throw this.client.logger.error("extend() -> isValidExtend() failed"),h}const{topic:i}=t,n=Es(),{done:s,resolve:a,reject:f}=No();return this.events.once(Dt("session_extend",n),({error:h})=>{h?f(h):a()}),await this.setExpiry(i,Ir(Wa)),this.sendRequest({topic:i,method:"wc_sessionExtend",params:{},clientRpcId:n,throwOnFailedPublish:!0}).catch(h=>{f(h)}),{acknowledged:s}},this.request=async t=>{this.isInitialized();try{await this.isValidRequest(t)}catch(O){throw this.client.logger.error("request() -> isValidRequest() failed"),O}const{chainId:i,request:n,topic:s,expiry:a=Br.wc_sessionRequest.req.ttl}=t,f=this.client.session.get(s);f?.transportType===sr.relay&&await this.confirmOnlineStateOrThrow();const h=Es(),u=Uo().toString(),{done:g,resolve:w,reject:M}=No(a,"Request expired. Please try again.");this.events.once(Dt("session_request",h),({error:O,result:N})=>{O?M(O):w(N)});const C=this.getAppLinkIfEnabled(f.peer.metadata,f.transportType);return C?(await this.sendRequest({clientRpcId:h,relayRpcId:u,topic:s,method:"wc_sessionRequest",params:{request:Mn(pr({},n),{expiryTimestamp:Ir(a)}),chainId:i},expiry:a,throwOnFailedPublish:!0,appLink:C}).catch(O=>M(O)),this.client.events.emit("session_request_sent",{topic:s,request:n,chainId:i,id:h}),await g()):await Promise.all([new Promise(async O=>{await this.sendRequest({clientRpcId:h,relayRpcId:u,topic:s,method:"wc_sessionRequest",params:{request:Mn(pr({},n),{expiryTimestamp:Ir(a)}),chainId:i},expiry:a,throwOnFailedPublish:!0}).catch(N=>M(N)),this.client.events.emit("session_request_sent",{topic:s,request:n,chainId:i,id:h}),O()}),new Promise(async O=>{var N;if(!((N=f.sessionConfig)!=null&&N.disableDeepLink)){const j=await cA(this.client.core.storage,G2);await oA({id:h,topic:s,wcDeepLink:j})}O()}),g()]).then(O=>O[2])},this.respond=async t=>{this.isInitialized(),await this.isValidRespond(t);const{topic:i,response:n}=t,{id:s}=n,a=this.client.session.get(i);a.transportType===sr.relay&&await this.confirmOnlineStateOrThrow();const f=this.getAppLinkIfEnabled(a.peer.metadata,a.transportType);es(n)?await this.sendResult({id:s,topic:i,result:n.result,throwOnFailedPublish:!0,appLink:f}):rn(n)&&await this.sendError({id:s,topic:i,error:n.error,appLink:f}),this.cleanupAfterResponse(t)},this.ping=async t=>{this.isInitialized(),await this.confirmOnlineStateOrThrow();try{await this.isValidPing(t)}catch(n){throw this.client.logger.error("ping() -> isValidPing() failed"),n}const{topic:i}=t;if(this.client.session.keys.includes(i)){const n=Es(),s=Uo().toString(),{done:a,resolve:f,reject:h}=No();this.events.once(Dt("session_ping",n),({error:u})=>{u?h(u):f()}),await Promise.all([this.sendRequest({topic:i,method:"wc_sessionPing",params:{},throwOnFailedPublish:!0,clientRpcId:n,relayRpcId:s}),a()])}else this.client.core.pairing.pairings.keys.includes(i)&&await this.client.core.pairing.ping({topic:i})},this.emit=async t=>{this.isInitialized(),await this.confirmOnlineStateOrThrow(),await this.isValidEmit(t);const{topic:i,event:n,chainId:s}=t,a=Uo().toString(),f=Es();await this.sendRequest({topic:i,method:"wc_sessionEvent",params:{event:n,chainId:s},throwOnFailedPublish:!0,relayRpcId:a,clientRpcId:f})},this.disconnect=async t=>{this.isInitialized(),await this.confirmOnlineStateOrThrow(),await this.isValidDisconnect(t);const{topic:i}=t;if(this.client.session.keys.includes(i))await this.sendRequest({topic:i,method:"wc_sessionDelete",params:Gt("USER_DISCONNECTED"),throwOnFailedPublish:!0}),await this.deleteSession({topic:i,emitEvent:!1});else if(this.client.core.pairing.pairings.keys.includes(i))await this.client.core.pairing.disconnect({topic:i});else{const{message:n}=xe("MISMATCHED_TOPIC",`Session or pairing topic not found: ${i}`);throw new Error(n)}},this.find=t=>(this.isInitialized(),this.client.session.getAll().filter(i=>fE(i,t))),this.getPendingSessionRequests=()=>this.client.pendingRequest.getAll(),this.authenticate=async(t,i)=>{var n;this.isInitialized(),this.isValidAuthenticate(t);const s=i&&this.client.core.linkModeSupportedApps.includes(i)&&((n=this.client.metadata.redirect)==null?void 0:n.linkMode),a=s?sr.link_mode:sr.relay;a===sr.relay&&await this.confirmOnlineStateOrThrow();const{chains:f,statement:h="",uri:u,domain:g,nonce:w,type:M,exp:C,nbf:O,methods:N=[],expiry:j}=t,H=[...t.resources||[]],{topic:F,uri:G}=await this.client.core.pairing.create({methods:["wc_sessionAuthenticate"],transportType:a});this.client.logger.info({message:"Generated new pairing",pairing:{topic:F,uri:G}});const B=await this.client.core.crypto.generateKeyPair(),z=jl(B);if(await Promise.all([this.client.auth.authKeys.set(fh,{responseTopic:z,publicKey:B}),this.client.auth.pairingTopics.set(z,{topic:z,pairingTopic:F})]),await this.client.core.relayer.subscribe(z,{transportType:a}),this.client.logger.info(`sending request to new pairing topic: ${F}`),N.length>0){const{namespace:D}=qa(f[0]);let S=DA(D,"request",N);kl(H)&&(S=RA(S,H.pop())),H.push(S)}const W=j&&j>Br.wc_sessionAuthenticate.req.ttl?j:Br.wc_sessionAuthenticate.req.ttl,_={authPayload:{type:M??"caip122",chains:f,statement:h,aud:u,domain:g,version:"1",nonce:w,iat:new Date().toISOString(),exp:C,nbf:O,resources:H},requester:{publicKey:B,metadata:this.client.metadata},expiryTimestamp:Ir(W)},U={eip155:{chains:f,methods:[...new Set(["personal_sign",...N])],events:["chainChanged","accountsChanged"]}},ee={requiredNamespaces:{},optionalNamespaces:U,relays:[{protocol:"irn"}],pairingTopic:F,proposer:{publicKey:B,metadata:this.client.metadata},expiryTimestamp:Ir(Br.wc_sessionPropose.req.ttl)},{done:oe,resolve:L,reject:b}=No(W,"Request expired"),m=async({error:D,session:S})=>{if(this.events.off(Dt("session_request",d),l),D)b(D);else if(S){S.self.publicKey=B,await this.client.session.set(S.topic,S),await this.setExpiry(S.topic,S.expiry),F&&await this.client.core.pairing.updateMetadata({topic:F,metadata:S.peer.metadata});const v=this.client.session.get(S.topic);await this.deleteProposal(y),L({session:v})}},l=async D=>{var S,v,A;if(await this.deletePendingAuthRequest(d,{message:"fulfilled",code:0}),D.error){const J=Gt("WC_METHOD_UNSUPPORTED","wc_sessionAuthenticate");return D.error.code===J.code?void 0:(this.events.off(Dt("session_connect"),m),b(D.error.message))}await this.deleteProposal(y),this.events.off(Dt("session_connect"),m);const{cacaos:x,responder:$}=D.result,ae=[],R=[];for(const J of x){await eb({cacao:J,projectId:this.client.core.projectId})||(this.client.logger.error(J,"Signature verification failed"),b(Gt("SESSION_SETTLEMENT_FAILED","Signature verification failed")));const{p:K}=J,E=kl(K.resources),Y=[Xd(K.iss)],re=Hl(K.iss);if(E){const le=ib(E),he=nb(E);ae.push(...le),Y.push(...he)}for(const le of Y)R.push(`${le}:${re}`)}const X=await this.client.core.crypto.generateSharedKey(B,$.publicKey);let V;ae.length>0&&(V={topic:X,acknowledged:!0,self:{publicKey:B,metadata:this.client.metadata},peer:$,controller:$.publicKey,expiry:Ir(Wa),requiredNamespaces:{},optionalNamespaces:{},relay:{protocol:"irn"},pairingTopic:F,namespaces:bb([...new Set(ae)],[...new Set(R)]),transportType:a},await this.client.core.relayer.subscribe(X,{transportType:a}),await this.client.session.set(X,V),F&&await this.client.core.pairing.updateMetadata({topic:F,metadata:$.metadata}),V=this.client.session.get(X)),(S=this.client.metadata.redirect)!=null&&S.linkMode&&(v=$.metadata.redirect)!=null&&v.linkMode&&(A=$.metadata.redirect)!=null&&A.universal&&i&&(this.client.core.addLinkModeSupportedApp($.metadata.redirect.universal),this.client.session.update(X,{transportType:sr.link_mode})),L({auths:x,session:V})},d=Es(),y=Es();this.events.once(Dt("session_connect"),m),this.events.once(Dt("session_request",d),l);let P;try{if(s){const D=Qs("wc_sessionAuthenticate",_,d);this.client.core.history.set(F,D);const S=await this.client.core.crypto.encode("",D,{type:Jc,encoding:Gc});P=Kl(i,F,S)}else await Promise.all([this.sendRequest({topic:F,method:"wc_sessionAuthenticate",params:_,expiry:t.expiry,throwOnFailedPublish:!0,clientRpcId:d}),this.sendRequest({topic:F,method:"wc_sessionPropose",params:ee,expiry:Br.wc_sessionPropose.req.ttl,throwOnFailedPublish:!0,clientRpcId:y})])}catch(D){throw this.events.off(Dt("session_connect"),m),this.events.off(Dt("session_request",d),l),D}return await this.setProposal(y,pr({id:y},ee)),await this.setAuthRequest(d,{request:Mn(pr({},_),{verifyContext:{}}),pairingTopic:F,transportType:a}),{uri:P??G,response:oe}},this.approveSessionAuthenticate=async t=>{const{id:i,auths:n}=t,s=this.client.core.eventClient.createEvent({properties:{topic:i.toString(),trace:[Ho.authenticated_session_approve_started]}});try{this.isInitialized()}catch(j){throw s.setError(uf.no_internet_connection),j}const a=this.getPendingAuthRequest(i);if(!a)throw s.setError(uf.authenticated_session_pending_request_not_found),new Error(`Could not find pending auth request with id ${i}`);const f=a.transportType||sr.relay;f===sr.relay&&await this.confirmOnlineStateOrThrow();const h=a.requester.publicKey,u=await this.client.core.crypto.generateKeyPair(),g=jl(h),w={type:ws,receiverPublicKey:h,senderPublicKey:u},M=[],C=[];for(const j of n){if(!await eb({cacao:j,projectId:this.client.core.projectId})){s.setError(uf.invalid_cacao);const z=Gt("SESSION_SETTLEMENT_FAILED","Signature verification failed");throw await this.sendError({id:i,topic:g,error:z,encodeOpts:w}),new Error(z.message)}s.addTrace(Ho.cacaos_verified);const{p:H}=j,F=kl(H.resources),G=[Xd(H.iss)],B=Hl(H.iss);if(F){const z=ib(F),W=nb(F);M.push(...z),G.push(...W)}for(const z of G)C.push(`${z}:${B}`)}const O=await this.client.core.crypto.generateSharedKey(u,h);s.addTrace(Ho.create_authenticated_session_topic);let N;if(M?.length>0){N={topic:O,acknowledged:!0,self:{publicKey:u,metadata:this.client.metadata},peer:{publicKey:h,metadata:a.requester.metadata},controller:h,expiry:Ir(Wa),authentication:n,requiredNamespaces:{},optionalNamespaces:{},relay:{protocol:"irn"},pairingTopic:a.pairingTopic,namespaces:bb([...new Set(M)],[...new Set(C)]),transportType:f},s.addTrace(Ho.subscribing_authenticated_session_topic);try{await this.client.core.relayer.subscribe(O,{transportType:f})}catch(j){throw s.setError(uf.subscribe_authenticated_session_topic_failure),j}s.addTrace(Ho.subscribe_authenticated_session_topic_success),await this.client.session.set(O,N),s.addTrace(Ho.store_authenticated_session),await this.client.core.pairing.updateMetadata({topic:a.pairingTopic,metadata:a.requester.metadata})}s.addTrace(Ho.publishing_authenticated_session_approve);try{await this.sendResult({topic:g,id:i,result:{cacaos:n,responder:{publicKey:u,metadata:this.client.metadata}},encodeOpts:w,throwOnFailedPublish:!0,appLink:this.getAppLinkIfEnabled(a.requester.metadata,f)})}catch(j){throw s.setError(uf.authenticated_session_approve_publish_failure),j}return await this.client.auth.requests.delete(i,{message:"fulfilled",code:0}),await this.client.core.pairing.activate({topic:a.pairingTopic}),this.client.core.eventClient.deleteEvent({eventId:s.eventId}),{session:N}},this.rejectSessionAuthenticate=async t=>{this.isInitialized();const{id:i,reason:n}=t,s=this.getPendingAuthRequest(i);if(!s)throw new Error(`Could not find pending auth request with id ${i}`);s.transportType===sr.relay&&await this.confirmOnlineStateOrThrow();const a=s.requester.publicKey,f=await this.client.core.crypto.generateKeyPair(),h=jl(a),u={type:ws,receiverPublicKey:a,senderPublicKey:f};await this.sendError({id:i,topic:h,error:n,encodeOpts:u,rpcOpts:Br.wc_sessionAuthenticate.reject,appLink:this.getAppLinkIfEnabled(s.requester.metadata,s.transportType)}),await this.client.auth.requests.delete(i,{message:"rejected",code:0}),await this.client.proposal.delete(i,Gt("USER_DISCONNECTED"))},this.formatAuthMessage=t=>{this.isInitialized();const{request:i,iss:n}=t;return tb(i,n)},this.processRelayMessageCache=()=>{setTimeout(async()=>{if(this.relayMessageCache.length!==0)for(;this.relayMessageCache.length>0;)try{const t=this.relayMessageCache.shift();t&&await this.onRelayMessage(t)}catch(t){this.client.logger.error(t)}},50)},this.cleanupDuplicatePairings=async t=>{if(t.pairingTopic)try{const i=this.client.core.pairing.pairings.get(t.pairingTopic),n=this.client.core.pairing.pairings.getAll().filter(s=>{var a,f;return((a=s.peerMetadata)==null?void 0:a.url)&&((f=s.peerMetadata)==null?void 0:f.url)===t.peer.metadata.url&&s.topic&&s.topic!==i.topic});if(n.length===0)return;this.client.logger.info(`Cleaning up ${n.length} duplicate pairing(s)`),await Promise.all(n.map(s=>this.client.core.pairing.disconnect({topic:s.topic}))),this.client.logger.info("Duplicate pairings clean up finished")}catch(i){this.client.logger.error(i)}},this.deleteSession=async t=>{var i;const{topic:n,expirerHasDeleted:s=!1,emitEvent:a=!0,id:f=0}=t,{self:h}=this.client.session.get(n);await this.client.core.relayer.unsubscribe(n),await this.client.session.delete(n,Gt("USER_DISCONNECTED")),this.addToRecentlyDeleted(n,"session"),this.client.core.crypto.keychain.has(h.publicKey)&&await this.client.core.crypto.deleteKeyPair(h.publicKey),this.client.core.crypto.keychain.has(n)&&await this.client.core.crypto.deleteSymKey(n),s||this.client.core.expirer.del(n),this.client.core.storage.removeItem(G2).catch(u=>this.client.logger.warn(u)),this.getPendingSessionRequests().forEach(u=>{u.topic===n&&this.deletePendingSessionRequest(u.id,Gt("USER_DISCONNECTED"))}),n===((i=this.sessionRequestQueue.queue[0])==null?void 0:i.topic)&&(this.sessionRequestQueue.state=is.idle),a&&this.client.events.emit("session_delete",{id:f,topic:n})},this.deleteProposal=async(t,i)=>{if(i)try{const n=this.client.proposal.get(t),s=this.client.core.eventClient.getEvent({topic:n.pairingTopic});s?.setError(zo.proposal_expired)}catch{}await Promise.all([this.client.proposal.delete(t,Gt("USER_DISCONNECTED")),i?Promise.resolve():this.client.core.expirer.del(t)]),this.addToRecentlyDeleted(t,"proposal")},this.deletePendingSessionRequest=async(t,i,n=!1)=>{await Promise.all([this.client.pendingRequest.delete(t,i),n?Promise.resolve():this.client.core.expirer.del(t)]),this.addToRecentlyDeleted(t,"request"),this.sessionRequestQueue.queue=this.sessionRequestQueue.queue.filter(s=>s.id!==t),n&&(this.sessionRequestQueue.state=is.idle,this.client.events.emit("session_request_expire",{id:t}))},this.deletePendingAuthRequest=async(t,i,n=!1)=>{await Promise.all([this.client.auth.requests.delete(t,i),n?Promise.resolve():this.client.core.expirer.del(t)])},this.setExpiry=async(t,i)=>{this.client.session.keys.includes(t)&&(this.client.core.expirer.set(t,i),await this.client.session.update(t,{expiry:i}))},this.setProposal=async(t,i)=>{this.client.core.expirer.set(t,Ir(Br.wc_sessionPropose.req.ttl)),await this.client.proposal.set(t,i)},this.setAuthRequest=async(t,i)=>{const{request:n,pairingTopic:s,transportType:a=sr.relay}=i;this.client.core.expirer.set(t,n.expiryTimestamp),await this.client.auth.requests.set(t,{authPayload:n.authPayload,requester:n.requester,expiryTimestamp:n.expiryTimestamp,id:t,pairingTopic:s,verifyContext:n.verifyContext,transportType:a})},this.setPendingSessionRequest=async t=>{const{id:i,topic:n,params:s,verifyContext:a}=t,f=s.request.expiryTimestamp||Ir(Br.wc_sessionRequest.req.ttl);this.client.core.expirer.set(i,f),await this.client.pendingRequest.set(i,{id:i,topic:n,params:s,verifyContext:a})},this.sendRequest=async t=>{const{topic:i,method:n,params:s,expiry:a,relayRpcId:f,clientRpcId:h,throwOnFailedPublish:u,appLink:g}=t,w=Qs(n,s,h);let M;const C=!!g;try{const j=C?Gc:Js;M=await this.client.core.crypto.encode(i,w,{encoding:j})}catch(j){throw await this.cleanup(),this.client.logger.error(`sendRequest() -> core.crypto.encode() for topic ${i} failed`),j}let O;if(UP.includes(n)){const j=ys(JSON.stringify(w)),H=ys(M);O=await this.client.core.verify.register({id:H,decryptedId:j})}const N=Br[n].req;if(N.attestation=O,a&&(N.ttl=a),f&&(N.id=f),this.client.core.history.set(i,w),C){const j=Kl(g,i,M);await global.Linking.openURL(j,this.client.name)}else{const j=Br[n].req;a&&(j.ttl=a),f&&(j.id=f),u?(j.internal=Mn(pr({},j.internal),{throwOnFailedPublish:!0}),await this.client.core.relayer.publish(i,M,j)):this.client.core.relayer.publish(i,M,j).catch(H=>this.client.logger.error(H))}return w.id},this.sendResult=async t=>{const{id:i,topic:n,result:s,throwOnFailedPublish:a,encodeOpts:f,appLink:h}=t,u=ih(i,s);let g;const w=h&&typeof(global==null?void 0:global.Linking)<"u";try{const C=w?Gc:Js;g=await this.client.core.crypto.encode(n,u,Mn(pr({},f||{}),{encoding:C}))}catch(C){throw await this.cleanup(),this.client.logger.error(`sendResult() -> core.crypto.encode() for topic ${n} failed`),C}let M;try{M=await this.client.core.history.get(n,i)}catch(C){throw this.client.logger.error(`sendResult() -> history.get(${n}, ${i}) failed`),C}if(w){const C=Kl(h,n,g);await global.Linking.openURL(C,this.client.name)}else{const C=Br[M.request.method].res;a?(C.internal=Mn(pr({},C.internal),{throwOnFailedPublish:!0}),await this.client.core.relayer.publish(n,g,C)):this.client.core.relayer.publish(n,g,C).catch(O=>this.client.logger.error(O))}await this.client.core.history.resolve(u)},this.sendError=async t=>{const{id:i,topic:n,error:s,encodeOpts:a,rpcOpts:f,appLink:h}=t,u=nh(i,s);let g;const w=h&&typeof(global==null?void 0:global.Linking)<"u";try{const C=w?Gc:Js;g=await this.client.core.crypto.encode(n,u,Mn(pr({},a||{}),{encoding:C}))}catch(C){throw await this.cleanup(),this.client.logger.error(`sendError() -> core.crypto.encode() for topic ${n} failed`),C}let M;try{M=await this.client.core.history.get(n,i)}catch(C){throw this.client.logger.error(`sendError() -> history.get(${n}, ${i}) failed`),C}if(w){const C=Kl(h,n,g);await global.Linking.openURL(C,this.client.name)}else{const C=f||Br[M.request.method].res;this.client.core.relayer.publish(n,g,C)}await this.client.core.history.resolve(u)},this.cleanup=async()=>{const t=[],i=[];this.client.session.getAll().forEach(n=>{let s=!1;Ys(n.expiry)&&(s=!0),this.client.core.crypto.keychain.has(n.topic)||(s=!0),s&&t.push(n.topic)}),this.client.proposal.getAll().forEach(n=>{Ys(n.expiryTimestamp)&&i.push(n.id)}),await Promise.all([...t.map(n=>this.deleteSession({topic:n})),...i.map(n=>this.deleteProposal(n))])},this.onRelayEventRequest=async t=>{this.requestQueue.queue.push(t),await this.processRequestsQueue()},this.processRequestsQueue=async()=>{if(this.requestQueue.state===is.active){this.client.logger.info("Request queue already active, skipping...");return}for(this.client.logger.info(`Request queue starting with ${this.requestQueue.queue.length} requests`);this.requestQueue.queue.length>0;){this.requestQueue.state=is.active;const t=this.requestQueue.queue.shift();if(t)try{await this.processRequest(t)}catch(i){this.client.logger.warn(i)}}this.requestQueue.state=is.idle},this.processRequest=async t=>{const{topic:i,payload:n,attestation:s,transportType:a,encryptedId:f}=t,h=n.method;if(!this.shouldIgnorePairingRequest({topic:i,requestMethod:h}))switch(h){case"wc_sessionPropose":return await this.onSessionProposeRequest({topic:i,payload:n,attestation:s,encryptedId:f});case"wc_sessionSettle":return await this.onSessionSettleRequest(i,n);case"wc_sessionUpdate":return await this.onSessionUpdateRequest(i,n);case"wc_sessionExtend":return await this.onSessionExtendRequest(i,n);case"wc_sessionPing":return await this.onSessionPingRequest(i,n);case"wc_sessionDelete":return await this.onSessionDeleteRequest(i,n);case"wc_sessionRequest":return await this.onSessionRequest({topic:i,payload:n,attestation:s,encryptedId:f,transportType:a});case"wc_sessionEvent":return await this.onSessionEventRequest(i,n);case"wc_sessionAuthenticate":return await this.onSessionAuthenticateRequest({topic:i,payload:n,attestation:s,encryptedId:f,transportType:a});default:return this.client.logger.info(`Unsupported request method ${h}`)}},this.onRelayEventResponse=async t=>{const{topic:i,payload:n,transportType:s}=t,a=(await this.client.core.history.get(i,n.id)).request.method;switch(a){case"wc_sessionPropose":return this.onSessionProposeResponse(i,n,s);case"wc_sessionSettle":return this.onSessionSettleResponse(i,n);case"wc_sessionUpdate":return this.onSessionUpdateResponse(i,n);case"wc_sessionExtend":return this.onSessionExtendResponse(i,n);case"wc_sessionPing":return this.onSessionPingResponse(i,n);case"wc_sessionRequest":return this.onSessionRequestResponse(i,n);case"wc_sessionAuthenticate":return this.onSessionAuthenticateResponse(i,n);default:return this.client.logger.info(`Unsupported response method ${a}`)}},this.onRelayEventUnknownPayload=t=>{const{topic:i}=t,{message:n}=xe("MISSING_OR_INVALID",`Decoded payload on topic ${i} is not identifiable as a JSON-RPC request or a response.`);throw new Error(n)},this.shouldIgnorePairingRequest=t=>{const{topic:i,requestMethod:n}=t,s=this.expectedPairingMethodMap.get(i);return!s||s.includes(n)?!1:!!(s.includes("wc_sessionAuthenticate")&&this.client.events.listenerCount("session_authenticate")>0)},this.onSessionProposeRequest=async t=>{const{topic:i,payload:n,attestation:s,encryptedId:a}=t,{params:f,id:h}=n;try{const u=this.client.core.eventClient.getEvent({topic:i});this.client.events.listenerCount("session_proposal")===0&&(console.warn("No listener for session_proposal event"),u?.setError(Ss.proposal_listener_not_found)),this.isValidConnect(pr({},n.params));const g=f.expiryTimestamp||Ir(Br.wc_sessionPropose.req.ttl),w=pr({id:h,pairingTopic:i,expiryTimestamp:g},f);await this.setProposal(h,w);const M=await this.getVerifyContext({attestationId:s,hash:ys(JSON.stringify(n)),encryptedId:a,metadata:w.proposer.metadata});u?.addTrace(rs.emit_session_proposal),this.client.events.emit("session_proposal",{id:h,params:w,verifyContext:M})}catch(u){await this.sendError({id:h,topic:i,error:u,rpcOpts:Br.wc_sessionPropose.autoReject}),this.client.logger.error(u)}},this.onSessionProposeResponse=async(t,i,n)=>{const{id:s}=i;if(es(i)){const{result:a}=i;this.client.logger.trace({type:"method",method:"onSessionProposeResponse",result:a});const f=this.client.proposal.get(s);this.client.logger.trace({type:"method",method:"onSessionProposeResponse",proposal:f});const h=f.proposer.publicKey;this.client.logger.trace({type:"method",method:"onSessionProposeResponse",selfPublicKey:h});const u=a.responderPublicKey;this.client.logger.trace({type:"method",method:"onSessionProposeResponse",peerPublicKey:u});const g=await this.client.core.crypto.generateSharedKey(h,u);this.client.logger.trace({type:"method",method:"onSessionProposeResponse",sessionTopic:g});const w=await this.client.core.relayer.subscribe(g,{transportType:n});this.client.logger.trace({type:"method",method:"onSessionProposeResponse",subscriptionId:w}),await this.client.core.pairing.activate({topic:t})}else if(rn(i)){await this.client.proposal.delete(s,Gt("USER_DISCONNECTED"));const a=Dt("session_connect");if(this.events.listenerCount(a)===0)throw new Error(`emitting ${a} without any listeners, 954`);this.events.emit(Dt("session_connect"),{error:i.error})}},this.onSessionSettleRequest=async(t,i)=>{const{id:n,params:s}=i;try{this.isValidSessionSettleRequest(s);const{relay:a,controller:f,expiry:h,namespaces:u,sessionProperties:g,sessionConfig:w}=i.params,M=Mn(pr(pr({topic:t,relay:a,expiry:h,namespaces:u,acknowledged:!0,pairingTopic:"",requiredNamespaces:{},optionalNamespaces:{},controller:f.publicKey,self:{publicKey:"",metadata:this.client.metadata},peer:{publicKey:f.publicKey,metadata:f.metadata}},g&&{sessionProperties:g}),w&&{sessionConfig:w}),{transportType:sr.relay}),C=Dt("session_connect");if(this.events.listenerCount(C)===0)throw new Error(`emitting ${C} without any listeners 997`);this.events.emit(Dt("session_connect"),{session:M}),await this.sendResult({id:i.id,topic:t,result:!0,throwOnFailedPublish:!0})}catch(a){await this.sendError({id:n,topic:t,error:a}),this.client.logger.error(a)}},this.onSessionSettleResponse=async(t,i)=>{const{id:n}=i;es(i)?(await this.client.session.update(t,{acknowledged:!0}),this.events.emit(Dt("session_approve",n),{})):rn(i)&&(await this.client.session.delete(t,Gt("USER_DISCONNECTED")),this.events.emit(Dt("session_approve",n),{error:i.error}))},this.onSessionUpdateRequest=async(t,i)=>{const{params:n,id:s}=i;try{const a=`${t}_session_update`,f=rf.get(a);if(f&&this.isRequestOutOfSync(f,s)){this.client.logger.warn(`Discarding out of sync request - ${s}`),this.sendError({id:s,topic:t,error:Gt("INVALID_UPDATE_REQUEST")});return}this.isValidUpdate(pr({topic:t},n));try{rf.set(a,s),await this.client.session.update(t,{namespaces:n.namespaces}),await this.sendResult({id:s,topic:t,result:!0,throwOnFailedPublish:!0})}catch(h){throw rf.delete(a),h}this.client.events.emit("session_update",{id:s,topic:t,params:n})}catch(a){await this.sendError({id:s,topic:t,error:a}),this.client.logger.error(a)}},this.isRequestOutOfSync=(t,i)=>i.toString().slice(0,-3)<t.toString().slice(0,-3),this.onSessionUpdateResponse=(t,i)=>{const{id:n}=i,s=Dt("session_update",n);if(this.events.listenerCount(s)===0)throw new Error(`emitting ${s} without any listeners`);es(i)?this.events.emit(Dt("session_update",n),{}):rn(i)&&this.events.emit(Dt("session_update",n),{error:i.error})},this.onSessionExtendRequest=async(t,i)=>{const{id:n}=i;try{this.isValidExtend({topic:t}),await this.setExpiry(t,Ir(Wa)),await this.sendResult({id:n,topic:t,result:!0,throwOnFailedPublish:!0}),this.client.events.emit("session_extend",{id:n,topic:t})}catch(s){await this.sendError({id:n,topic:t,error:s}),this.client.logger.error(s)}},this.onSessionExtendResponse=(t,i)=>{const{id:n}=i,s=Dt("session_extend",n);if(this.events.listenerCount(s)===0)throw new Error(`emitting ${s} without any listeners`);es(i)?this.events.emit(Dt("session_extend",n),{}):rn(i)&&this.events.emit(Dt("session_extend",n),{error:i.error})},this.onSessionPingRequest=async(t,i)=>{const{id:n}=i;try{this.isValidPing({topic:t}),await this.sendResult({id:n,topic:t,result:!0,throwOnFailedPublish:!0}),this.client.events.emit("session_ping",{id:n,topic:t})}catch(s){await this.sendError({id:n,topic:t,error:s}),this.client.logger.error(s)}},this.onSessionPingResponse=(t,i)=>{const{id:n}=i,s=Dt("session_ping",n);if(this.events.listenerCount(s)===0)throw new Error(`emitting ${s} without any listeners`);setTimeout(()=>{es(i)?this.events.emit(Dt("session_ping",n),{}):rn(i)&&this.events.emit(Dt("session_ping",n),{error:i.error})},500)},this.onSessionDeleteRequest=async(t,i)=>{const{id:n}=i;try{this.isValidDisconnect({topic:t,reason:i.params}),Promise.all([new Promise(s=>{this.client.core.relayer.once(Lr.publish,async()=>{s(await this.deleteSession({topic:t,id:n}))})}),this.sendResult({id:n,topic:t,result:!0,throwOnFailedPublish:!0}),this.cleanupPendingSentRequestsForTopic({topic:t,error:Gt("USER_DISCONNECTED")})]).catch(s=>this.client.logger.error(s))}catch(s){this.client.logger.error(s)}},this.onSessionRequest=async t=>{var i,n,s;const{topic:a,payload:f,attestation:h,encryptedId:u,transportType:g}=t,{id:w,params:M}=f;try{await this.isValidRequest(pr({topic:a},M));const C=this.client.session.get(a),O=await this.getVerifyContext({attestationId:h,hash:ys(JSON.stringify(Qs("wc_sessionRequest",M,w))),encryptedId:u,metadata:C.peer.metadata,transportType:g}),N={id:w,topic:a,params:M,verifyContext:O};await this.setPendingSessionRequest(N),g===sr.link_mode&&(i=C.peer.metadata.redirect)!=null&&i.universal&&this.client.core.addLinkModeSupportedApp((n=C.peer.metadata.redirect)==null?void 0:n.universal),(s=this.client.signConfig)!=null&&s.disableRequestQueue?this.emitSessionRequest(N):(this.addSessionRequestToSessionRequestQueue(N),this.processSessionRequestQueue())}catch(C){await this.sendError({id:w,topic:a,error:C}),this.client.logger.error(C)}},this.onSessionRequestResponse=(t,i)=>{const{id:n}=i,s=Dt("session_request",n);if(this.events.listenerCount(s)===0)throw new Error(`emitting ${s} without any listeners`);es(i)?this.events.emit(Dt("session_request",n),{result:i.result}):rn(i)&&this.events.emit(Dt("session_request",n),{error:i.error})},this.onSessionEventRequest=async(t,i)=>{const{id:n,params:s}=i;try{const a=`${t}_session_event_${s.event.name}`,f=rf.get(a);if(f&&this.isRequestOutOfSync(f,n)){this.client.logger.info(`Discarding out of sync request - ${n}`);return}this.isValidEmit(pr({topic:t},s)),this.client.events.emit("session_event",{id:n,topic:t,params:s}),rf.set(a,n)}catch(a){await this.sendError({id:n,topic:t,error:a}),this.client.logger.error(a)}},this.onSessionAuthenticateResponse=(t,i)=>{const{id:n}=i;this.client.logger.trace({type:"method",method:"onSessionAuthenticateResponse",topic:t,payload:i}),es(i)?this.events.emit(Dt("session_request",n),{result:i.result}):rn(i)&&this.events.emit(Dt("session_request",n),{error:i.error})},this.onSessionAuthenticateRequest=async t=>{var i;const{topic:n,payload:s,attestation:a,encryptedId:f,transportType:h}=t;try{const{requester:u,authPayload:g,expiryTimestamp:w}=s.params,M=await this.getVerifyContext({attestationId:a,hash:ys(JSON.stringify(s)),encryptedId:f,metadata:u.metadata,transportType:h}),C={requester:u,pairingTopic:n,id:s.id,authPayload:g,verifyContext:M,expiryTimestamp:w};await this.setAuthRequest(s.id,{request:C,pairingTopic:n,transportType:h}),h===sr.link_mode&&(i=u.metadata.redirect)!=null&&i.universal&&this.client.core.addLinkModeSupportedApp(u.metadata.redirect.universal),this.client.events.emit("session_authenticate",{topic:n,params:s.params,id:s.id,verifyContext:M})}catch(u){this.client.logger.error(u);const g=s.params.requester.publicKey,w=await this.client.core.crypto.generateKeyPair(),M=this.getAppLinkIfEnabled(s.params.requester.metadata,h),C={type:ws,receiverPublicKey:g,senderPublicKey:w};await this.sendError({id:s.id,topic:n,error:u,encodeOpts:C,rpcOpts:Br.wc_sessionAuthenticate.autoReject,appLink:M})}},this.addSessionRequestToSessionRequestQueue=t=>{this.sessionRequestQueue.queue.push(t)},this.cleanupAfterResponse=t=>{this.deletePendingSessionRequest(t.response.id,{message:"fulfilled",code:0}),setTimeout(()=>{this.sessionRequestQueue.state=is.idle,this.processSessionRequestQueue()},_e.toMiliseconds(this.requestQueueDelay))},this.cleanupPendingSentRequestsForTopic=({topic:t,error:i})=>{const n=this.client.core.history.pending;n.length>0&&n.filter(s=>s.topic===t&&s.request.method==="wc_sessionRequest").forEach(s=>{const a=s.request.id,f=Dt("session_request",a);if(this.events.listenerCount(f)===0)throw new Error(`emitting ${f} without any listeners`);this.events.emit(Dt("session_request",s.request.id),{error:i})})},this.processSessionRequestQueue=()=>{if(this.sessionRequestQueue.state===is.active){this.client.logger.info("session request queue is already active.");return}const t=this.sessionRequestQueue.queue[0];if(!t){this.client.logger.info("session request queue is empty.");return}try{this.sessionRequestQueue.state=is.active,this.emitSessionRequest(t)}catch(i){this.client.logger.error(i)}},this.emitSessionRequest=t=>{this.client.events.emit("session_request",t)},this.onPairingCreated=t=>{if(t.methods&&this.expectedPairingMethodMap.set(t.topic,t.methods),t.active)return;const i=this.client.proposal.getAll().find(n=>n.pairingTopic===t.topic);i&&this.onSessionProposeRequest({topic:t.topic,payload:Qs("wc_sessionPropose",{requiredNamespaces:i.requiredNamespaces,optionalNamespaces:i.optionalNamespaces,relays:i.relays,proposer:i.proposer,sessionProperties:i.sessionProperties},i.id)})},this.isValidConnect=async t=>{if(!bi(t)){const{message:h}=xe("MISSING_OR_INVALID",`connect() params: ${JSON.stringify(t)}`);throw new Error(h)}const{pairingTopic:i,requiredNamespaces:n,optionalNamespaces:s,sessionProperties:a,relays:f}=t;if(ai(i)||await this.isValidPairingTopic(i),!_E(f,!0)){const{message:h}=xe("MISSING_OR_INVALID",`connect() relays: ${f}`);throw new Error(h)}!ai(n)&&tf(n)!==0&&this.validateNamespaces(n,"requiredNamespaces"),!ai(s)&&tf(s)!==0&&this.validateNamespaces(s,"optionalNamespaces"),ai(a)||this.validateSessionProps(a,"sessionProperties")},this.validateNamespaces=(t,i)=>{const n=yE(t,"connect()",i);if(n)throw new Error(n.message)},this.isValidApprove=async t=>{if(!bi(t))throw new Error(xe("MISSING_OR_INVALID",`approve() params: ${t}`).message);const{id:i,namespaces:n,relayProtocol:s,sessionProperties:a}=t;this.checkRecentlyDeleted(i),await this.isValidProposalId(i);const f=this.client.proposal.get(i),h=n0(n,"approve()");if(h)throw new Error(h.message);const u=Ab(f.requiredNamespaces,n,"approve()");if(u)throw new Error(u.message);if(!wr(s,!0)){const{message:g}=xe("MISSING_OR_INVALID",`approve() relayProtocol: ${s}`);throw new Error(g)}ai(a)||this.validateSessionProps(a,"sessionProperties")},this.isValidReject=async t=>{if(!bi(t)){const{message:s}=xe("MISSING_OR_INVALID",`reject() params: ${t}`);throw new Error(s)}const{id:i,reason:n}=t;if(this.checkRecentlyDeleted(i),await this.isValidProposalId(i),!AE(n)){const{message:s}=xe("MISSING_OR_INVALID",`reject() reason: ${JSON.stringify(n)}`);throw new Error(s)}},this.isValidSessionSettleRequest=t=>{if(!bi(t)){const{message:u}=xe("MISSING_OR_INVALID",`onSessionSettleRequest() params: ${t}`);throw new Error(u)}const{relay:i,controller:n,namespaces:s,expiry:a}=t;if(!_b(i)){const{message:u}=xe("MISSING_OR_INVALID","onSessionSettleRequest() relay protocol should be a string");throw new Error(u)}const f=pE(n,"onSessionSettleRequest()");if(f)throw new Error(f.message);const h=n0(s,"onSessionSettleRequest()");if(h)throw new Error(h.message);if(Ys(a)){const{message:u}=xe("EXPIRED","onSessionSettleRequest()");throw new Error(u)}},this.isValidUpdate=async t=>{if(!bi(t)){const{message:h}=xe("MISSING_OR_INVALID",`update() params: ${t}`);throw new Error(h)}const{topic:i,namespaces:n}=t;this.checkRecentlyDeleted(i),await this.isValidSessionTopic(i);const s=this.client.session.get(i),a=n0(n,"update()");if(a)throw new Error(a.message);const f=Ab(s.requiredNamespaces,n,"update()");if(f)throw new Error(f.message)},this.isValidExtend=async t=>{if(!bi(t)){const{message:n}=xe("MISSING_OR_INVALID",`extend() params: ${t}`);throw new Error(n)}const{topic:i}=t;this.checkRecentlyDeleted(i),await this.isValidSessionTopic(i)},this.isValidRequest=async t=>{if(!bi(t)){const{message:h}=xe("MISSING_OR_INVALID",`request() params: ${t}`);throw new Error(h)}const{topic:i,request:n,chainId:s,expiry:a}=t;this.checkRecentlyDeleted(i),await this.isValidSessionTopic(i);const{namespaces:f}=this.client.session.get(i);if(!xb(f,s)){const{message:h}=xe("MISSING_OR_INVALID",`request() chainId: ${s}`);throw new Error(h)}if(!EE(n)){const{message:h}=xe("MISSING_OR_INVALID",`request() ${JSON.stringify(n)}`);throw new Error(h)}if(!ME(f,s,n.method)){const{message:h}=xe("MISSING_OR_INVALID",`request() method: ${n.method}`);throw new Error(h)}if(a&&!OE(a,C0)){const{message:h}=xe("MISSING_OR_INVALID",`request() expiry: ${a}. Expiry must be a number (in seconds) between ${C0.min} and ${C0.max}`);throw new Error(h)}},this.isValidRespond=async t=>{var i;if(!bi(t)){const{message:a}=xe("MISSING_OR_INVALID",`respond() params: ${t}`);throw new Error(a)}const{topic:n,response:s}=t;try{await this.isValidSessionTopic(n)}catch(a){throw(i=t?.response)!=null&&i.id&&this.cleanupAfterResponse(t),a}if(!SE(s)){const{message:a}=xe("MISSING_OR_INVALID",`respond() response: ${JSON.stringify(s)}`);throw new Error(a)}},this.isValidPing=async t=>{if(!bi(t)){const{message:n}=xe("MISSING_OR_INVALID",`ping() params: ${t}`);throw new Error(n)}const{topic:i}=t;await this.isValidSessionOrPairingTopic(i)},this.isValidEmit=async t=>{if(!bi(t)){const{message:f}=xe("MISSING_OR_INVALID",`emit() params: ${t}`);throw new Error(f)}const{topic:i,event:n,chainId:s}=t;await this.isValidSessionTopic(i);const{namespaces:a}=this.client.session.get(i);if(!xb(a,s)){const{message:f}=xe("MISSING_OR_INVALID",`emit() chainId: ${s}`);throw new Error(f)}if(!IE(n)){const{message:f}=xe("MISSING_OR_INVALID",`emit() event: ${JSON.stringify(n)}`);throw new Error(f)}if(!CE(a,s,n.name)){const{message:f}=xe("MISSING_OR_INVALID",`emit() event: ${JSON.stringify(n)}`);throw new Error(f)}},this.isValidDisconnect=async t=>{if(!bi(t)){const{message:n}=xe("MISSING_OR_INVALID",`disconnect() params: ${t}`);throw new Error(n)}const{topic:i}=t;await this.isValidSessionOrPairingTopic(i)},this.isValidAuthenticate=t=>{const{chains:i,uri:n,domain:s,nonce:a}=t;if(!Array.isArray(i)||i.length===0)throw new Error("chains is required and must be a non-empty array");if(!wr(n,!1))throw new Error("uri is required parameter");if(!wr(s,!1))throw new Error("domain is required parameter");if(!wr(a,!1))throw new Error("nonce is required parameter");if([...new Set(i.map(h=>qa(h).namespace))].length>1)throw new Error("Multi-namespace requests are not supported. Please request single namespace only.");const{namespace:f}=qa(i[0]);if(f!=="eip155")throw new Error("Only eip155 namespace is supported for authenticated sessions. Please use .connect() for non-eip155 chains.")},this.getVerifyContext=async t=>{const{attestationId:i,hash:n,encryptedId:s,metadata:a,transportType:f}=t,h={verified:{verifyUrl:a.verifyUrl||hf,validation:"UNKNOWN",origin:a.url||""}};try{if(f===sr.link_mode){const g=this.getAppLinkIfEnabled(a,f);return h.verified.validation=g&&new URL(g).origin===new URL(a.url).origin?"VALID":"INVALID",h}const u=await this.client.core.verify.resolve({attestationId:i,hash:n,encryptedId:s,verifyUrl:a.verifyUrl});u&&(h.verified.origin=u.origin,h.verified.isScam=u.isScam,h.verified.validation=u.origin===new URL(a.url).origin?"VALID":"INVALID")}catch(u){this.client.logger.warn(u)}return this.client.logger.debug(`Verify context: ${JSON.stringify(h)}`),h},this.validateSessionProps=(t,i)=>{Object.values(t).forEach(n=>{if(!wr(n,!1)){const{message:s}=xe("MISSING_OR_INVALID",`${i} must be in Record<string, string> format. Received: ${JSON.stringify(n)}`);throw new Error(s)}})},this.getPendingAuthRequest=t=>{const i=this.client.auth.requests.get(t);return typeof i=="object"?i:void 0},this.addToRecentlyDeleted=(t,i)=>{if(this.recentlyDeletedMap.set(t,i),this.recentlyDeletedMap.size>=this.recentlyDeletedLimit){let n=0;const s=this.recentlyDeletedLimit/2;for(const a of this.recentlyDeletedMap.keys()){if(n++>=s)break;this.recentlyDeletedMap.delete(a)}}},this.checkRecentlyDeleted=t=>{const i=this.recentlyDeletedMap.get(t);if(i){const{message:n}=xe("MISSING_OR_INVALID",`Record was recently deleted - ${i}: ${t}`);throw new Error(n)}},this.isLinkModeEnabled=(t,i)=>{var n,s,a,f,h,u,g,w,M;return!t||i!==sr.link_mode?!1:((s=(n=this.client.metadata)==null?void 0:n.redirect)==null?void 0:s.linkMode)===!0&&((f=(a=this.client.metadata)==null?void 0:a.redirect)==null?void 0:f.universal)!==void 0&&((u=(h=this.client.metadata)==null?void 0:h.redirect)==null?void 0:u.universal)!==""&&((g=t?.redirect)==null?void 0:g.universal)!==void 0&&((w=t?.redirect)==null?void 0:w.universal)!==""&&((M=t?.redirect)==null?void 0:M.linkMode)===!0&&this.client.core.linkModeSupportedApps.includes(t.redirect.universal)&&typeof(global==null?void 0:global.Linking)<"u"},this.getAppLinkIfEnabled=(t,i)=>{var n;return this.isLinkModeEnabled(t,i)?(n=t?.redirect)==null?void 0:n.universal:void 0},this.handleLinkModeMessage=({url:t})=>{if(!t||!t.includes("wc_ev")||!t.includes("topic"))return;const i=Ym(t,"topic")||"",n=decodeURIComponent(Ym(t,"wc_ev")||""),s=this.client.session.keys.includes(i);s&&this.client.session.update(i,{transportType:sr.link_mode}),this.client.core.dispatchEnvelope({topic:i,message:n,sessionExists:s})},this.registerLinkModeListeners=async()=>{var t;if(Qd()||Vs()&&(t=this.client.metadata.redirect)!=null&&t.linkMode){const i=global==null?void 0:global.Linking;if(typeof i<"u"){i.addEventListener("url",this.handleLinkModeMessage,this.client.name);const n=await i.getInitialURL();n&&setTimeout(()=>{this.handleLinkModeMessage({url:n})},50)}}}}isInitialized(){if(!this.initialized){const{message:e}=xe("NOT_INITIALIZED",this.name);throw new Error(e)}}async confirmOnlineStateOrThrow(){await this.client.core.relayer.confirmOnlineStateOrThrow()}registerRelayerEvents(){this.client.core.relayer.on(Lr.message,e=>{!this.initialized||this.relayMessageCache.length>0?this.relayMessageCache.push(e):this.onRelayMessage(e)})}async onRelayMessage(e){const{topic:t,message:i,attestation:n,transportType:s}=e,{publicKey:a}=this.client.auth.authKeys.keys.includes(fh)?this.client.auth.authKeys.get(fh):{responseTopic:void 0,publicKey:void 0},f=await this.client.core.crypto.decode(t,i,{receiverPublicKey:a,encoding:s===sr.link_mode?Gc:Js});try{b0(f)?(this.client.core.history.set(t,f),this.onRelayEventRequest({topic:t,payload:f,attestation:n,transportType:s,encryptedId:ys(i)})):sh(f)?(await this.client.core.history.resolve(f),await this.onRelayEventResponse({topic:t,payload:f,transportType:s}),this.client.core.history.delete(t,f.id)):this.onRelayEventUnknownPayload({topic:t,payload:f,transportType:s})}catch(h){this.client.logger.error(h)}}registerExpirerEvents(){this.client.core.expirer.on(on.expired,async e=>{const{topic:t,id:i}=Gm(e.target);if(i&&this.client.pendingRequest.keys.includes(i))return await this.deletePendingSessionRequest(i,xe("EXPIRED"),!0);if(i&&this.client.auth.requests.keys.includes(i))return await this.deletePendingAuthRequest(i,xe("EXPIRED"),!0);t?this.client.session.keys.includes(t)&&(await this.deleteSession({topic:t,expirerHasDeleted:!0}),this.client.events.emit("session_expire",{topic:t})):i&&(await this.deleteProposal(i,!0),this.client.events.emit("proposal_expire",{id:i}))})}registerPairingEvents(){this.client.core.pairing.events.on(qo.create,e=>this.onPairingCreated(e)),this.client.core.pairing.events.on(qo.delete,e=>{this.addToRecentlyDeleted(e.topic,"pairing")})}isValidPairingTopic(e){if(!wr(e,!1)){const{message:t}=xe("MISSING_OR_INVALID",`pairing topic should be a string: ${e}`);throw new Error(t)}if(!this.client.core.pairing.pairings.keys.includes(e)){const{message:t}=xe("NO_MATCHING_KEY",`pairing topic doesn't exist: ${e}`);throw new Error(t)}if(Ys(this.client.core.pairing.pairings.get(e).expiry)){const{message:t}=xe("EXPIRED",`pairing topic: ${e}`);throw new Error(t)}}async isValidSessionTopic(e){if(!wr(e,!1)){const{message:t}=xe("MISSING_OR_INVALID",`session topic should be a string: ${e}`);throw new Error(t)}if(this.checkRecentlyDeleted(e),!this.client.session.keys.includes(e)){const{message:t}=xe("NO_MATCHING_KEY",`session topic doesn't exist: ${e}`);throw new Error(t)}if(Ys(this.client.session.get(e).expiry)){await this.deleteSession({topic:e});const{message:t}=xe("EXPIRED",`session topic: ${e}`);throw new Error(t)}if(!this.client.core.crypto.keychain.has(e)){const{message:t}=xe("MISSING_OR_INVALID",`session topic does not exist in keychain: ${e}`);throw await this.deleteSession({topic:e}),new Error(t)}}async isValidSessionOrPairingTopic(e){if(this.checkRecentlyDeleted(e),this.client.session.keys.includes(e))await this.isValidSessionTopic(e);else if(this.client.core.pairing.pairings.keys.includes(e))this.isValidPairingTopic(e);else if(wr(e,!1)){const{message:t}=xe("NO_MATCHING_KEY",`session or pairing topic doesn't exist: ${e}`);throw new Error(t)}else{const{message:t}=xe("MISSING_OR_INVALID",`session or pairing topic should be a string: ${e}`);throw new Error(t)}}async isValidProposalId(e){if(!xE(e)){const{message:t}=xe("MISSING_OR_INVALID",`proposal id should be a number: ${e}`);throw new Error(t)}if(!this.client.proposal.keys.includes(e)){const{message:t}=xe("NO_MATCHING_KEY",`proposal id doesn't exist: ${e}`);throw new Error(t)}if(Ys(this.client.proposal.get(e).expiryTimestamp)){await this.deleteProposal(e);const{message:t}=xe("EXPIRED",`proposal id: ${e}`);throw new Error(t)}}}class QP extends ko{constructor(e,t){super(e,t,$P,I0),this.core=e,this.logger=t}}class ZP extends ko{constructor(e,t){super(e,t,LP,I0),this.core=e,this.logger=t}}class XP extends ko{constructor(e,t){super(e,t,FP,I0,i=>i.id),this.core=e,this.logger=t}}class eD extends ko{constructor(e,t){super(e,t,HP,ch,()=>fh),this.core=e,this.logger=t}}class tD extends ko{constructor(e,t){super(e,t,kP,ch),this.core=e,this.logger=t}}class rD extends ko{constructor(e,t){super(e,t,jP,ch,i=>i.id),this.core=e,this.logger=t}}class iD{constructor(e,t){this.core=e,this.logger=t,this.authKeys=new eD(this.core,this.logger),this.pairingTopics=new tD(this.core,this.logger),this.requests=new rD(this.core,this.logger)}async init(){await this.authKeys.init(),await this.pairingTopics.init(),await this.requests.init()}}class P0 extends eI{constructor(e){super(e),this.protocol=W2,this.version=K2,this.name=M0.name,this.events=new zr.exports.EventEmitter,this.on=(i,n)=>this.events.on(i,n),this.once=(i,n)=>this.events.once(i,n),this.off=(i,n)=>this.events.off(i,n),this.removeListener=(i,n)=>this.events.removeListener(i,n),this.removeAllListeners=i=>this.events.removeAllListeners(i),this.connect=async i=>{try{return await this.engine.connect(i)}catch(n){throw this.logger.error(n.message),n}},this.pair=async i=>{try{return await this.engine.pair(i)}catch(n){throw this.logger.error(n.message),n}},this.approve=async i=>{try{return await this.engine.approve(i)}catch(n){throw this.logger.error(n.message),n}},this.reject=async i=>{try{return await this.engine.reject(i)}catch(n){throw this.logger.error(n.message),n}},this.update=async i=>{try{return await this.engine.update(i)}catch(n){throw this.logger.error(n.message),n}},this.extend=async i=>{try{return await this.engine.extend(i)}catch(n){throw this.logger.error(n.message),n}},this.request=async i=>{try{return await this.engine.request(i)}catch(n){throw this.logger.error(n.message),n}},this.respond=async i=>{try{return await this.engine.respond(i)}catch(n){throw this.logger.error(n.message),n}},this.ping=async i=>{try{return await this.engine.ping(i)}catch(n){throw this.logger.error(n.message),n}},this.emit=async i=>{try{return await this.engine.emit(i)}catch(n){throw this.logger.error(n.message),n}},this.disconnect=async i=>{try{return await this.engine.disconnect(i)}catch(n){throw this.logger.error(n.message),n}},this.find=i=>{try{return this.engine.find(i)}catch(n){throw this.logger.error(n.message),n}},this.getPendingSessionRequests=()=>{try{return this.engine.getPendingSessionRequests()}catch(i){throw this.logger.error(i.message),i}},this.authenticate=async(i,n)=>{try{return await this.engine.authenticate(i,n)}catch(s){throw this.logger.error(s.message),s}},this.formatAuthMessage=i=>{try{return this.engine.formatAuthMessage(i)}catch(n){throw this.logger.error(n.message),n}},this.approveSessionAuthenticate=async i=>{try{return await this.engine.approveSessionAuthenticate(i)}catch(n){throw this.logger.error(n.message),n}},this.rejectSessionAuthenticate=async i=>{try{return await this.engine.rejectSessionAuthenticate(i)}catch(n){throw this.logger.error(n.message),n}},this.name=e?.name||M0.name,this.metadata=e?.metadata||km(),this.signConfig=e?.signConfig;const t=typeof e?.logger<"u"&&typeof e?.logger!="string"?e.logger:Zn(rh({level:e?.logger||M0.logger}));this.core=e?.core||new NP(e),this.logger=ci(t,this.name),this.session=new ZP(this.core,this.logger),this.proposal=new QP(this.core,this.logger),this.pendingRequest=new XP(this.core,this.logger),this.engine=new JP(this),this.auth=new iD(this.core,this.logger)}static async init(e){const t=new P0(e);return await t.initialize(),t}get context(){return yi(this.logger)}get pairing(){return this.core.pairing.pairings}async initialize(){this.logger.trace("Initialized");try{await this.core.start(),await this.session.init(),await this.proposal.init(),await this.pendingRequest.init(),await this.auth.init(),await this.engine.init(),this.logger.info("SignClient Initialization Success"),setTimeout(()=>{this.engine.processRelayMessageCache()},_e.toMiliseconds(_e.ONE_SECOND))}catch(e){throw this.logger.info("SignClient Initialization Failure"),this.logger.error(e.message),e}}}var D0={exports:{}};/**
43
+ ***************************************************************************** */var g0=function(r,e){return g0=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,i){t.__proto__=i}||function(t,i){for(var n in i)i.hasOwnProperty(n)&&(t[n]=i[n])},g0(r,e)};function uI(r,e){g0(r,e);function t(){this.constructor=r}r.prototype=e===null?Object.create(e):(t.prototype=e.prototype,new t)}var v0=function(){return v0=Object.assign||function(e){for(var t,i=1,n=arguments.length;i<n;i++){t=arguments[i];for(var s in t)Object.prototype.hasOwnProperty.call(t,s)&&(e[s]=t[s])}return e},v0.apply(this,arguments)};function dI(r,e){var t={};for(var i in r)Object.prototype.hasOwnProperty.call(r,i)&&e.indexOf(i)<0&&(t[i]=r[i]);if(r!=null&&typeof Object.getOwnPropertySymbols=="function")for(var n=0,i=Object.getOwnPropertySymbols(r);n<i.length;n++)e.indexOf(i[n])<0&&Object.prototype.propertyIsEnumerable.call(r,i[n])&&(t[i[n]]=r[i[n]]);return t}function pI(r,e,t,i){var n=arguments.length,s=n<3?e:i===null?i=Object.getOwnPropertyDescriptor(e,t):i,a;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")s=Reflect.decorate(r,e,t,i);else for(var f=r.length-1;f>=0;f--)(a=r[f])&&(s=(n<3?a(s):n>3?a(e,t,s):a(e,t))||s);return n>3&&s&&Object.defineProperty(e,t,s),s}function gI(r,e){return function(t,i){e(t,i,r)}}function vI(r,e){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(r,e)}function mI(r,e,t,i){function n(s){return s instanceof t?s:new t(function(a){a(s)})}return new(t||(t=Promise))(function(s,a){function f(g){try{u(i.next(g))}catch(w){a(w)}}function h(g){try{u(i.throw(g))}catch(w){a(w)}}function u(g){g.done?s(g.value):n(g.value).then(f,h)}u((i=i.apply(r,e||[])).next())})}function bI(r,e){var t={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},i,n,s,a;return a={next:f(0),throw:f(1),return:f(2)},typeof Symbol=="function"&&(a[Symbol.iterator]=function(){return this}),a;function f(u){return function(g){return h([u,g])}}function h(u){if(i)throw new TypeError("Generator is already executing.");for(;t;)try{if(i=1,n&&(s=u[0]&2?n.return:u[0]?n.throw||((s=n.return)&&s.call(n),0):n.next)&&!(s=s.call(n,u[1])).done)return s;switch(n=0,s&&(u=[u[0]&2,s.value]),u[0]){case 0:case 1:s=u;break;case 4:return t.label++,{value:u[1],done:!1};case 5:t.label++,n=u[1],u=[0];continue;case 7:u=t.ops.pop(),t.trys.pop();continue;default:if(s=t.trys,!(s=s.length>0&&s[s.length-1])&&(u[0]===6||u[0]===2)){t=0;continue}if(u[0]===3&&(!s||u[1]>s[0]&&u[1]<s[3])){t.label=u[1];break}if(u[0]===6&&t.label<s[1]){t.label=s[1],s=u;break}if(s&&t.label<s[2]){t.label=s[2],t.ops.push(u);break}s[2]&&t.ops.pop(),t.trys.pop();continue}u=e.call(r,t)}catch(g){u=[6,g],n=0}finally{i=s=0}if(u[0]&5)throw u[1];return{value:u[0]?u[1]:void 0,done:!0}}}function wI(r,e,t,i){i===void 0&&(i=t),r[i]=e[t]}function yI(r,e){for(var t in r)t!=="default"&&!e.hasOwnProperty(t)&&(e[t]=r[t])}function m0(r){var e=typeof Symbol=="function"&&Symbol.iterator,t=e&&r[e],i=0;if(t)return t.call(r);if(r&&typeof r.length=="number")return{next:function(){return r&&i>=r.length&&(r=void 0),{value:r&&r[i++],done:!r}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}function Vb(r,e){var t=typeof Symbol=="function"&&r[Symbol.iterator];if(!t)return r;var i=t.call(r),n,s=[],a;try{for(;(e===void 0||e-- >0)&&!(n=i.next()).done;)s.push(n.value)}catch(f){a={error:f}}finally{try{n&&!n.done&&(t=i.return)&&t.call(i)}finally{if(a)throw a.error}}return s}function _I(){for(var r=[],e=0;e<arguments.length;e++)r=r.concat(Vb(arguments[e]));return r}function xI(){for(var r=0,e=0,t=arguments.length;e<t;e++)r+=arguments[e].length;for(var i=Array(r),n=0,e=0;e<t;e++)for(var s=arguments[e],a=0,f=s.length;a<f;a++,n++)i[n]=s[a];return i}function ff(r){return this instanceof ff?(this.v=r,this):new ff(r)}function AI(r,e,t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var i=t.apply(r,e||[]),n,s=[];return n={},a("next"),a("throw"),a("return"),n[Symbol.asyncIterator]=function(){return this},n;function a(M){i[M]&&(n[M]=function(C){return new Promise(function(O,N){s.push([M,C,O,N])>1||f(M,C)})})}function f(M,C){try{h(i[M](C))}catch(O){w(s[0][3],O)}}function h(M){M.value instanceof ff?Promise.resolve(M.value.v).then(u,g):w(s[0][2],M)}function u(M){f("next",M)}function g(M){f("throw",M)}function w(M,C){M(C),s.shift(),s.length&&f(s[0][0],s[0][1])}}function EI(r){var e,t;return e={},i("next"),i("throw",function(n){throw n}),i("return"),e[Symbol.iterator]=function(){return this},e;function i(n,s){e[n]=r[n]?function(a){return(t=!t)?{value:ff(r[n](a)),done:n==="return"}:s?s(a):a}:s}}function SI(r){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var e=r[Symbol.asyncIterator],t;return e?e.call(r):(r=typeof m0=="function"?m0(r):r[Symbol.iterator](),t={},i("next"),i("throw"),i("return"),t[Symbol.asyncIterator]=function(){return this},t);function i(s){t[s]=r[s]&&function(a){return new Promise(function(f,h){a=r[s](a),n(f,h,a.done,a.value)})}}function n(s,a,f,h){Promise.resolve(h).then(function(u){s({value:u,done:f})},a)}}function II(r,e){return Object.defineProperty?Object.defineProperty(r,"raw",{value:e}):r.raw=e,r}function MI(r){if(r&&r.__esModule)return r;var e={};if(r!=null)for(var t in r)Object.hasOwnProperty.call(r,t)&&(e[t]=r[t]);return e.default=r,e}function CI(r){return r&&r.__esModule?r:{default:r}}function PI(r,e){if(!e.has(r))throw new TypeError("attempted to get private field on non-instance");return e.get(r)}function DI(r,e,t){if(!e.has(r))throw new TypeError("attempted to set private field on non-instance");return e.set(r,t),t}var OI=Object.freeze({__proto__:null,__extends:uI,get __assign(){return v0},__rest:dI,__decorate:pI,__param:gI,__metadata:vI,__awaiter:mI,__generator:bI,__createBinding:wI,__exportStar:yI,__values:m0,__read:Vb,__spread:_I,__spreadArrays:xI,__await:ff,__asyncGenerator:AI,__asyncDelegator:EI,__asyncValues:SI,__makeTemplateObject:II,__importStar:MI,__importDefault:CI,__classPrivateFieldGet:PI,__classPrivateFieldSet:DI}),RI=ju(OI),xs={},Gb;function TI(){if(Gb)return xs;Gb=1,Object.defineProperty(xs,"__esModule",{value:!0}),xs.isBrowserCryptoAvailable=xs.getSubtleCrypto=xs.getBrowerCrypto=void 0;function r(){return fr?.crypto||fr?.msCrypto||{}}xs.getBrowerCrypto=r;function e(){const i=r();return i.subtle||i.webkitSubtle}xs.getSubtleCrypto=e;function t(){return!!r()&&!!e()}return xs.isBrowserCryptoAvailable=t,xs}var As={},Yb;function NI(){if(Yb)return As;Yb=1,Object.defineProperty(As,"__esModule",{value:!0}),As.isBrowser=As.isNode=As.isReactNative=void 0;function r(){return typeof document>"u"&&typeof navigator<"u"&&navigator.product==="ReactNative"}As.isReactNative=r;function e(){return typeof process<"u"&&typeof process.versions<"u"&&typeof process.versions.node<"u"}As.isNode=e;function t(){return!r()&&!e()}return As.isBrowser=t,As}(function(r){Object.defineProperty(r,"__esModule",{value:!0});const e=RI;e.__exportStar(TI(),r),e.__exportStar(NI(),r)})(Kb);function Es(r=3){const e=Date.now()*Math.pow(10,r),t=Math.floor(Math.random()*Math.pow(10,r));return e+t}function Uo(r=6){return BigInt(Es(r))}function Qs(r,e,t){return{id:t||Es(),jsonrpc:"2.0",method:r,params:e}}function ih(r,e){return{id:r,jsonrpc:"2.0",result:e}}function nh(r,e,t){return{id:r,jsonrpc:"2.0",error:$I(e,t)}}function $I(r,e){return typeof r>"u"?jb(Hb):(typeof r=="string"&&(r=Object.assign(Object.assign({},jb(p0)),{message:r})),typeof e<"u"&&(r.data=e),lI(r.code)&&(r=hI(r.code)),r)}class LI{}class BI extends LI{constructor(){super()}}class FI extends BI{constructor(e){super()}}const UI="^https?:",qI="^wss?:";function zI(r){const e=r.match(new RegExp(/^\w+:/,"gi"));if(!(!e||!e.length))return e[0]}function Jb(r,e){const t=zI(r);return typeof t>"u"?!1:new RegExp(e).test(t)}function Qb(r){return Jb(r,UI)}function Zb(r){return Jb(r,qI)}function HI(r){return new RegExp("wss?://localhost(:d{2,5})?").test(r)}function Xb(r){return typeof r=="object"&&"id"in r&&"jsonrpc"in r&&r.jsonrpc==="2.0"}function b0(r){return Xb(r)&&"method"in r}function sh(r){return Xb(r)&&(es(r)||rn(r))}function es(r){return"result"in r}function rn(r){return"error"in r}class nn extends FI{constructor(e){super(e),this.events=new zr.exports.EventEmitter,this.hasRegisteredEventListeners=!1,this.connection=this.setConnection(e),this.connection.connected&&this.registerEventListeners()}async connect(e=this.connection){await this.open(e)}async disconnect(){await this.close()}on(e,t){this.events.on(e,t)}once(e,t){this.events.once(e,t)}off(e,t){this.events.off(e,t)}removeListener(e,t){this.events.removeListener(e,t)}async request(e,t){return this.requestStrict(Qs(e.method,e.params||[],e.id||Uo().toString()),t)}async requestStrict(e,t){return new Promise(async(i,n)=>{if(!this.connection.connected)try{await this.open()}catch(s){n(s)}this.events.on(`${e.id}`,s=>{rn(s)?n(s.error):i(s.result)});try{await this.connection.send(e,t)}catch(s){n(s)}})}setConnection(e=this.connection){return e}onPayload(e){this.events.emit("payload",e),sh(e)?this.events.emit(`${e.id}`,e):this.events.emit("message",{type:e.method,data:e.params})}onClose(e){e&&e.code===3e3&&this.events.emit("error",new Error(`WebSocket connection closed abnormally with code: ${e.code} ${e.reason?`(${e.reason})`:""}`)),this.events.emit("disconnect")}async open(e=this.connection){this.connection===e&&this.connection.connected||(this.connection.connected&&this.close(),typeof e=="string"&&(await this.connection.open(e),e=this.connection),this.connection=this.setConnection(e),await this.connection.open(),this.registerEventListeners(),this.events.emit("connect"))}async close(){await this.connection.close()}registerEventListeners(){this.hasRegisteredEventListeners||(this.connection.on("payload",e=>this.onPayload(e)),this.connection.on("close",e=>this.onClose(e)),this.connection.on("error",e=>this.events.emit("error",e)),this.connection.on("register_error",e=>this.onClose()),this.hasRegisteredEventListeners=!0)}}const kI=()=>typeof WebSocket<"u"?WebSocket:typeof global<"u"&&typeof global.WebSocket<"u"?global.WebSocket:typeof window<"u"&&typeof window.WebSocket<"u"?window.WebSocket:typeof self<"u"&&typeof self.WebSocket<"u"?self.WebSocket:require("ws"),jI=()=>typeof WebSocket<"u"||typeof global<"u"&&typeof global.WebSocket<"u"||typeof window<"u"&&typeof window.WebSocket<"u"||typeof self<"u"&&typeof self.WebSocket<"u",e2=r=>r.split("?")[0],t2=10,WI=kI();class KI{constructor(e){if(this.url=e,this.events=new zr.exports.EventEmitter,this.registering=!1,!Zb(e))throw new Error(`Provided URL is not compatible with WebSocket connection: ${e}`);this.url=e}get connected(){return typeof this.socket<"u"}get connecting(){return this.registering}on(e,t){this.events.on(e,t)}once(e,t){this.events.once(e,t)}off(e,t){this.events.off(e,t)}removeListener(e,t){this.events.removeListener(e,t)}async open(e=this.url){await this.register(e)}async close(){return new Promise((e,t)=>{if(typeof this.socket>"u"){t(new Error("Connection already closed"));return}this.socket.onclose=i=>{this.onClose(i),e()},this.socket.close()})}async send(e){typeof this.socket>"u"&&(this.socket=await this.register());try{this.socket.send(bs(e))}catch(t){this.onError(e.id,t)}}register(e=this.url){if(!Zb(e))throw new Error(`Provided URL is not compatible with WebSocket connection: ${e}`);if(this.registering){const t=this.events.getMaxListeners();return(this.events.listenerCount("register_error")>=t||this.events.listenerCount("open")>=t)&&this.events.setMaxListeners(t+1),new Promise((i,n)=>{this.events.once("register_error",s=>{this.resetMaxListeners(),n(s)}),this.events.once("open",()=>{if(this.resetMaxListeners(),typeof this.socket>"u")return n(new Error("WebSocket connection is missing or invalid"));i(this.socket)})})}return this.url=e,this.registering=!0,new Promise((t,i)=>{const n=Kb.isReactNative()?void 0:{rejectUnauthorized:!HI(e)},s=new WI(e,[],n);jI()?s.onerror=a=>{const f=a;i(this.emitError(f.error))}:s.on("error",a=>{i(this.emitError(a))}),s.onopen=()=>{this.onOpen(s),t(s)}})}onOpen(e){e.onmessage=t=>this.onPayload(t),e.onclose=t=>this.onClose(t),this.socket=e,this.registering=!1,this.events.emit("open")}onClose(e){this.socket=void 0,this.registering=!1,this.events.emit("close",e)}onPayload(e){if(typeof e.data>"u")return;const t=typeof e.data=="string"?Ro(e.data):e.data;this.events.emit("payload",t)}onError(e,t){const i=this.parseError(t),n=i.message||i.toString(),s=nh(e,n);this.events.emit("payload",s)}parseError(e,t=this.url){return Wb(e,e2(t),"WS")}resetMaxListeners(){this.events.getMaxListeners()>t2&&this.events.setMaxListeners(t2)}emitError(e){const t=this.parseError(new Error(e?.message||`WebSocket connection failed for host: ${e2(this.url)}`));return this.events.emit("register_error",t),t}}var w0={exports:{}};(function(r,e){var t=200,i="__lodash_hash_undefined__",n=1,s=2,a=9007199254740991,f="[object Arguments]",h="[object Array]",u="[object AsyncFunction]",g="[object Boolean]",w="[object Date]",M="[object Error]",C="[object Function]",O="[object GeneratorFunction]",N="[object Map]",j="[object Number]",H="[object Null]",F="[object Object]",G="[object Promise]",B="[object Proxy]",z="[object RegExp]",W="[object Set]",_="[object String]",U="[object Symbol]",ee="[object Undefined]",oe="[object WeakMap]",L="[object ArrayBuffer]",b="[object DataView]",m="[object Float32Array]",l="[object Float64Array]",d="[object Int8Array]",y="[object Int16Array]",P="[object Int32Array]",D="[object Uint8Array]",S="[object Uint8ClampedArray]",v="[object Uint16Array]",A="[object Uint32Array]",x=/[\\^$.*+?()[\]{}|]/g,$=/^\[object .+?Constructor\]$/,ae=/^(?:0|[1-9]\d*)$/,R={};R[m]=R[l]=R[d]=R[y]=R[P]=R[D]=R[S]=R[v]=R[A]=!0,R[f]=R[h]=R[L]=R[g]=R[b]=R[w]=R[M]=R[C]=R[N]=R[j]=R[F]=R[z]=R[W]=R[_]=R[oe]=!1;var X=typeof fr=="object"&&fr&&fr.Object===Object&&fr,V=typeof self=="object"&&self&&self.Object===Object&&self,J=X||V||Function("return this")(),K=e&&!e.nodeType&&e,E=K&&!0&&r&&!r.nodeType&&r,Y=E&&E.exports===K,re=Y&&X.process,le=function(){try{return re&&re.binding&&re.binding("util")}catch{}}(),he=le&&le.isTypedArray;function ge(Q,ne){for(var pe=-1,Ue=Q==null?0:Q.length,Xt=0,bt=[];++pe<Ue;){var or=Q[pe];ne(or,pe,Q)&&(bt[Xt++]=or)}return bt}function He(Q,ne){for(var pe=-1,Ue=ne.length,Xt=Q.length;++pe<Ue;)Q[Xt+pe]=ne[pe];return Q}function Te(Q,ne){for(var pe=-1,Ue=Q==null?0:Q.length;++pe<Ue;)if(ne(Q[pe],pe,Q))return!0;return!1}function Ce(Q,ne){for(var pe=-1,Ue=Array(Q);++pe<Q;)Ue[pe]=ne(pe);return Ue}function Xe(Q){return function(ne){return Q(ne)}}function Ne(Q,ne){return Q.has(ne)}function be(Q,ne){return Q?.[ne]}function Pe(Q){var ne=-1,pe=Array(Q.size);return Q.forEach(function(Ue,Xt){pe[++ne]=[Xt,Ue]}),pe}function De(Q,ne){return function(pe){return Q(ne(pe))}}function ye(Q){var ne=-1,pe=Array(Q.size);return Q.forEach(function(Ue){pe[++ne]=Ue}),pe}var Ie=Array.prototype,Oe=Function.prototype,me=Object.prototype,Me=J["__core-js_shared__"],Be=Oe.toString,we=me.hasOwnProperty,ke=function(){var Q=/[^.]+$/.exec(Me&&Me.keys&&Me.keys.IE_PROTO||"");return Q?"Symbol(src)_1."+Q:""}(),We=me.toString,Ae=RegExp("^"+Be.call(we).replace(x,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Ve=Y?J.Buffer:void 0,Ke=J.Symbol,Ge=J.Uint8Array,mt=me.propertyIsEnumerable,It=Ie.splice,Ye=Ke?Ke.toStringTag:void 0,Pt=Object.getOwnPropertySymbols,Ot=Ve?Ve.isBuffer:void 0,Ze=De(Object.keys,Object),rt=Hi(J,"DataView"),et=Hi(J,"Map"),$e=Hi(J,"Promise"),it=Hi(J,"Set"),tt=Hi(J,"WeakMap"),Re=Hi(Object,"create"),lt=Ps(rt),ht=Ps(et),Le=Ps($e),ut=Ps(it),nt=Ps(tt),Fe=Ke?Ke.prototype:void 0,st=Fe?Fe.valueOf:void 0;function Qe(Q){var ne=-1,pe=Q==null?0:Q.length;for(this.clear();++ne<pe;){var Ue=Q[ne];this.set(Ue[0],Ue[1])}}function qe(){this.__data__=Re?Re(null):{},this.size=0}function dt(Q){var ne=this.has(Q)&&delete this.__data__[Q];return this.size-=ne?1:0,ne}function Ht(Q){var ne=this.__data__;if(Re){var pe=ne[Q];return pe===i?void 0:pe}return we.call(ne,Q)?ne[Q]:void 0}function at(Q){var ne=this.__data__;return Re?ne[Q]!==void 0:we.call(ne,Q)}function kt(Q,ne){var pe=this.__data__;return this.size+=this.has(Q)?0:1,pe[Q]=Re&&ne===void 0?i:ne,this}Qe.prototype.clear=qe,Qe.prototype.delete=dt,Qe.prototype.get=Ht,Qe.prototype.has=at,Qe.prototype.set=kt;function _t(Q){var ne=-1,pe=Q==null?0:Q.length;for(this.clear();++ne<pe;){var Ue=Q[ne];this.set(Ue[0],Ue[1])}}function qt(){this.__data__=[],this.size=0}function Zr(Q){var ne=this.__data__,pe=sa(ne,Q);if(pe<0)return!1;var Ue=ne.length-1;return pe==Ue?ne.pop():It.call(ne,pe,1),--this.size,!0}function Xr(Q){var ne=this.__data__,pe=sa(ne,Q);return pe<0?void 0:ne[pe][1]}function ei(Q){return sa(this.__data__,Q)>-1}function ti(Q,ne){var pe=this.__data__,Ue=sa(pe,Q);return Ue<0?(++this.size,pe.push([Q,ne])):pe[Ue][1]=ne,this}_t.prototype.clear=qt,_t.prototype.delete=Zr,_t.prototype.get=Xr,_t.prototype.has=ei,_t.prototype.set=ti;function vr(Q){var ne=-1,pe=Q==null?0:Q.length;for(this.clear();++ne<pe;){var Ue=Q[ne];this.set(Ue[0],Ue[1])}}function Ai(){this.size=0,this.__data__={hash:new Qe,map:new(et||_t),string:new Qe}}function Pn(Q){var ne=ho(this,Q).delete(Q);return this.size-=ne?1:0,ne}function Ei(Q){return ho(this,Q).get(Q)}function Dn(Q){return ho(this,Q).has(Q)}function On(Q,ne){var pe=ho(this,Q),Ue=pe.size;return pe.set(Q,ne),this.size+=pe.size==Ue?0:1,this}vr.prototype.clear=Ai,vr.prototype.delete=Pn,vr.prototype.get=Ei,vr.prototype.has=Dn,vr.prototype.set=On;function Si(Q){var ne=-1,pe=Q==null?0:Q.length;for(this.__data__=new vr;++ne<pe;)this.add(Q[ne])}function fn(Q){return this.__data__.set(Q,i),this}function ln(Q){return this.__data__.has(Q)}Si.prototype.add=Si.prototype.push=fn,Si.prototype.has=ln;function Cr(Q){var ne=this.__data__=new _t(Q);this.size=ne.size}function Rn(){this.__data__=new _t,this.size=0}function Tn(Q){var ne=this.__data__,pe=ne.delete(Q);return this.size=ne.size,pe}function Nn(Q){return this.__data__.get(Q)}function na(Q){return this.__data__.has(Q)}function lo(Q,ne){var pe=this.__data__;if(pe instanceof _t){var Ue=pe.__data__;if(!et||Ue.length<t-1)return Ue.push([Q,ne]),this.size=++pe.size,this;pe=this.__data__=new vr(Ue)}return pe.set(Q,ne),this.size=pe.size,this}Cr.prototype.clear=Rn,Cr.prototype.delete=Tn,Cr.prototype.get=Nn,Cr.prototype.has=na,Cr.prototype.set=lo;function kh(Q,ne){var pe=dc(Q),Ue=!pe&&tu(Q),Xt=!pe&&!Ue&&Bf(Q),bt=!pe&&!Ue&&!Xt&&nu(Q),or=pe||Ue||Xt||bt,Er=or?Ce(Q.length,String):[],Bt=Er.length;for(var er in Q)(ne||we.call(Q,er))&&!(or&&(er=="length"||Xt&&(er=="offset"||er=="parent")||bt&&(er=="buffer"||er=="byteLength"||er=="byteOffset")||Jh(er,Bt)))&&Er.push(er);return Er}function sa(Q,ne){for(var pe=Q.length;pe--;)if(eu(Q[pe][0],ne))return pe;return-1}function $f(Q,ne,pe){var Ue=ne(Q);return dc(Q)?Ue:He(Ue,pe(Q))}function oa(Q){return Q==null?Q===void 0?ee:H:Ye&&Ye in Object(Q)?Gh(Q):Yp(Q)}function Lf(Q){return ca(Q)&&oa(Q)==f}function aa(Q,ne,pe,Ue,Xt){return Q===ne?!0:Q==null||ne==null||!ca(Q)&&!ca(ne)?Q!==Q&&ne!==ne:jh(Q,ne,pe,Ue,aa,Xt)}function jh(Q,ne,pe,Ue,Xt,bt){var or=dc(Q),Er=dc(ne),Bt=or?h:cs(Q),er=Er?h:cs(ne);Bt=Bt==f?F:Bt,er=er==f?F:er;var _r=Bt==F,Ii=er==F,Sr=Bt==er;if(Sr&&Bf(Q)){if(!Bf(ne))return!1;or=!0,_r=!1}if(Sr&&!_r)return bt||(bt=new Cr),or||nu(Q)?hc(Q,ne,pe,Ue,Xt,bt):Gp(Q,ne,Bt,pe,Ue,Xt,bt);if(!(pe&n)){var ar=_r&&we.call(Q,"__wrapped__"),hi=Ii&&we.call(ne,"__wrapped__");if(ar||hi){var $n=ar?Q.value():Q,hn=hi?ne.value():ne;return bt||(bt=new Cr),Xt($n,hn,pe,Ue,bt)}}return Sr?(bt||(bt=new Cr),Vh(Q,ne,pe,Ue,Xt,bt)):!1}function Vp(Q){if(!iu(Q)||Zh(Q))return!1;var ne=pc(Q)?Ae:$;return ne.test(Ps(Q))}function Wh(Q){return ca(Q)&&ru(Q.length)&&!!R[oa(Q)]}function Kh(Q){if(!Xh(Q))return Ze(Q);var ne=[];for(var pe in Object(Q))we.call(Q,pe)&&pe!="constructor"&&ne.push(pe);return ne}function hc(Q,ne,pe,Ue,Xt,bt){var or=pe&n,Er=Q.length,Bt=ne.length;if(Er!=Bt&&!(or&&Bt>Er))return!1;var er=bt.get(Q);if(er&&bt.get(ne))return er==ne;var _r=-1,Ii=!0,Sr=pe&s?new Si:void 0;for(bt.set(Q,ne),bt.set(ne,Q);++_r<Er;){var ar=Q[_r],hi=ne[_r];if(Ue)var $n=or?Ue(hi,ar,_r,ne,Q,bt):Ue(ar,hi,_r,Q,ne,bt);if($n!==void 0){if($n)continue;Ii=!1;break}if(Sr){if(!Te(ne,function(hn,fs){if(!Ne(Sr,fs)&&(ar===hn||Xt(ar,hn,pe,Ue,bt)))return Sr.push(fs)})){Ii=!1;break}}else if(!(ar===hi||Xt(ar,hi,pe,Ue,bt))){Ii=!1;break}}return bt.delete(Q),bt.delete(ne),Ii}function Gp(Q,ne,pe,Ue,Xt,bt,or){switch(pe){case b:if(Q.byteLength!=ne.byteLength||Q.byteOffset!=ne.byteOffset)return!1;Q=Q.buffer,ne=ne.buffer;case L:return!(Q.byteLength!=ne.byteLength||!bt(new Ge(Q),new Ge(ne)));case g:case w:case j:return eu(+Q,+ne);case M:return Q.name==ne.name&&Q.message==ne.message;case z:case _:return Q==ne+"";case N:var Er=Pe;case W:var Bt=Ue&n;if(Er||(Er=ye),Q.size!=ne.size&&!Bt)return!1;var er=or.get(Q);if(er)return er==ne;Ue|=s,or.set(Q,ne);var _r=hc(Er(Q),Er(ne),Ue,Xt,bt,or);return or.delete(Q),_r;case U:if(st)return st.call(Q)==st.call(ne)}return!1}function Vh(Q,ne,pe,Ue,Xt,bt){var or=pe&n,Er=uc(Q),Bt=Er.length,er=uc(ne),_r=er.length;if(Bt!=_r&&!or)return!1;for(var Ii=Bt;Ii--;){var Sr=Er[Ii];if(!(or?Sr in ne:we.call(ne,Sr)))return!1}var ar=bt.get(Q);if(ar&&bt.get(ne))return ar==ne;var hi=!0;bt.set(Q,ne),bt.set(ne,Q);for(var $n=or;++Ii<Bt;){Sr=Er[Ii];var hn=Q[Sr],fs=ne[Sr];if(Ue)var Ff=or?Ue(fs,hn,Sr,ne,Q,bt):Ue(hn,fs,Sr,Q,ne,bt);if(!(Ff===void 0?hn===fs||Xt(hn,fs,pe,Ue,bt):Ff)){hi=!1;break}$n||($n=Sr=="constructor")}if(hi&&!$n){var fa=Q.constructor,Ur=ne.constructor;fa!=Ur&&"constructor"in Q&&"constructor"in ne&&!(typeof fa=="function"&&fa instanceof fa&&typeof Ur=="function"&&Ur instanceof Ur)&&(hi=!1)}return bt.delete(Q),bt.delete(ne),hi}function uc(Q){return $f(Q,Zp,Yh)}function ho(Q,ne){var pe=Q.__data__;return Qh(ne)?pe[typeof ne=="string"?"string":"hash"]:pe.map}function Hi(Q,ne){var pe=be(Q,ne);return Vp(pe)?pe:void 0}function Gh(Q){var ne=we.call(Q,Ye),pe=Q[Ye];try{Q[Ye]=void 0;var Ue=!0}catch{}var Xt=We.call(Q);return Ue&&(ne?Q[Ye]=pe:delete Q[Ye]),Xt}var Yh=Pt?function(Q){return Q==null?[]:(Q=Object(Q),ge(Pt(Q),function(ne){return mt.call(Q,ne)}))}:Zt,cs=oa;(rt&&cs(new rt(new ArrayBuffer(1)))!=b||et&&cs(new et)!=N||$e&&cs($e.resolve())!=G||it&&cs(new it)!=W||tt&&cs(new tt)!=oe)&&(cs=function(Q){var ne=oa(Q),pe=ne==F?Q.constructor:void 0,Ue=pe?Ps(pe):"";if(Ue)switch(Ue){case lt:return b;case ht:return N;case Le:return G;case ut:return W;case nt:return oe}return ne});function Jh(Q,ne){return ne=ne??a,!!ne&&(typeof Q=="number"||ae.test(Q))&&Q>-1&&Q%1==0&&Q<ne}function Qh(Q){var ne=typeof Q;return ne=="string"||ne=="number"||ne=="symbol"||ne=="boolean"?Q!=="__proto__":Q===null}function Zh(Q){return!!ke&&ke in Q}function Xh(Q){var ne=Q&&Q.constructor,pe=typeof ne=="function"&&ne.prototype||me;return Q===pe}function Yp(Q){return We.call(Q)}function Ps(Q){if(Q!=null){try{return Be.call(Q)}catch{}try{return Q+""}catch{}}return""}function eu(Q,ne){return Q===ne||Q!==Q&&ne!==ne}var tu=Lf(function(){return arguments}())?Lf:function(Q){return ca(Q)&&we.call(Q,"callee")&&!mt.call(Q,"callee")},dc=Array.isArray;function Jp(Q){return Q!=null&&ru(Q.length)&&!pc(Q)}var Bf=Ot||Qt;function Qp(Q,ne){return aa(Q,ne)}function pc(Q){if(!iu(Q))return!1;var ne=oa(Q);return ne==C||ne==O||ne==u||ne==B}function ru(Q){return typeof Q=="number"&&Q>-1&&Q%1==0&&Q<=a}function iu(Q){var ne=typeof Q;return Q!=null&&(ne=="object"||ne=="function")}function ca(Q){return Q!=null&&typeof Q=="object"}var nu=he?Xe(he):Wh;function Zp(Q){return Jp(Q)?kh(Q):Kh(Q)}function Zt(){return[]}function Qt(){return!1}r.exports=Qp})(w0,w0.exports);var VI=w0.exports,GI=Object.defineProperty,r2=Object.getOwnPropertySymbols,YI=Object.prototype.hasOwnProperty,JI=Object.prototype.propertyIsEnumerable,i2=(r,e,t)=>e in r?GI(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,fi=(r,e)=>{for(var t in e||(e={}))YI.call(e,t)&&i2(r,t,e[t]);if(r2)for(var t of r2(e))JI.call(e,t)&&i2(r,t,e[t]);return r};const n2="wc",s2=2,oh="core",ts=`${n2}@2:${oh}:`,QI={name:oh,logger:"error"},ZI={database:":memory:"},XI="crypto",o2="client_ed25519_seed",eM=_e.ONE_DAY,tM="keychain",rM="0.3",iM="messages",nM="0.3",a2=_e.SIX_HOURS,sM="publisher",c2="irn",oM="error",f2="wss://relay.walletconnect.org",aM="relayer",Lr={message:"relayer_message",message_ack:"relayer_message_ack",connect:"relayer_connect",disconnect:"relayer_disconnect",error:"relayer_error",connection_stalled:"relayer_connection_stalled",transport_closed:"relayer_transport_closed",publish:"relayer_publish"},cM="_subscription",sn={payload:"payload",connect:"connect",disconnect:"disconnect",error:"error"},fM=.1,y0="2.17.4",sr={link_mode:"link_mode",relay:"relay"},lM="0.3",hM="WALLETCONNECT_CLIENT_ID",l2="WALLETCONNECT_LINK_MODE_APPS",Fi={created:"subscription_created",deleted:"subscription_deleted",expired:"subscription_expired",disabled:"subscription_disabled",sync:"subscription_sync",resubscribed:"subscription_resubscribed"},uM="subscription",dM="0.3",pM=_e.FIVE_SECONDS*1e3,gM="pairing",vM="0.3",lf={wc_pairingDelete:{req:{ttl:_e.ONE_DAY,prompt:!1,tag:1e3},res:{ttl:_e.ONE_DAY,prompt:!1,tag:1001}},wc_pairingPing:{req:{ttl:_e.THIRTY_SECONDS,prompt:!1,tag:1002},res:{ttl:_e.THIRTY_SECONDS,prompt:!1,tag:1003}},unregistered_method:{req:{ttl:_e.ONE_DAY,prompt:!1,tag:0},res:{ttl:_e.ONE_DAY,prompt:!1,tag:0}}},qo={create:"pairing_create",expire:"pairing_expire",delete:"pairing_delete",ping:"pairing_ping"},Sn={created:"history_created",updated:"history_updated",deleted:"history_deleted",sync:"history_sync"},mM="history",bM="0.3",wM="expirer",on={created:"expirer_created",deleted:"expirer_deleted",expired:"expirer_expired",sync:"expirer_sync"},yM="0.3",_M="verify-api",xM="https://verify.walletconnect.com",h2="https://verify.walletconnect.org",hf=h2,AM=`${hf}/v3`,EM=[xM,h2],SM="echo",IM="https://echo.walletconnect.com",rs={pairing_started:"pairing_started",pairing_uri_validation_success:"pairing_uri_validation_success",pairing_uri_not_expired:"pairing_uri_not_expired",store_new_pairing:"store_new_pairing",subscribing_pairing_topic:"subscribing_pairing_topic",subscribe_pairing_topic_success:"subscribe_pairing_topic_success",existing_pairing:"existing_pairing",pairing_not_expired:"pairing_not_expired",emit_inactive_pairing:"emit_inactive_pairing",emit_session_proposal:"emit_session_proposal",subscribing_to_pairing_topic:"subscribing_to_pairing_topic"},Ss={no_wss_connection:"no_wss_connection",no_internet_connection:"no_internet_connection",malformed_pairing_uri:"malformed_pairing_uri",active_pairing_already_exists:"active_pairing_already_exists",subscribe_pairing_topic_failure:"subscribe_pairing_topic_failure",pairing_expired:"pairing_expired",proposal_expired:"proposal_expired",proposal_listener_not_found:"proposal_listener_not_found"},In={session_approve_started:"session_approve_started",proposal_not_expired:"proposal_not_expired",session_namespaces_validation_success:"session_namespaces_validation_success",create_session_topic:"create_session_topic",subscribing_session_topic:"subscribing_session_topic",subscribe_session_topic_success:"subscribe_session_topic_success",publishing_session_approve:"publishing_session_approve",session_approve_publish_success:"session_approve_publish_success",store_session:"store_session",publishing_session_settle:"publishing_session_settle",session_settle_publish_success:"session_settle_publish_success"},zo={no_internet_connection:"no_internet_connection",no_wss_connection:"no_wss_connection",proposal_expired:"proposal_expired",subscribe_session_topic_failure:"subscribe_session_topic_failure",session_approve_publish_failure:"session_approve_publish_failure",session_settle_publish_failure:"session_settle_publish_failure",session_approve_namespace_validation_failure:"session_approve_namespace_validation_failure",proposal_not_found:"proposal_not_found"},Ho={authenticated_session_approve_started:"authenticated_session_approve_started",authenticated_session_not_expired:"authenticated_session_not_expired",chains_caip2_compliant:"chains_caip2_compliant",chains_evm_compliant:"chains_evm_compliant",create_authenticated_session_topic:"create_authenticated_session_topic",cacaos_verified:"cacaos_verified",store_authenticated_session:"store_authenticated_session",subscribing_authenticated_session_topic:"subscribing_authenticated_session_topic",subscribe_authenticated_session_topic_success:"subscribe_authenticated_session_topic_success",publishing_authenticated_session_approve:"publishing_authenticated_session_approve",authenticated_session_approve_publish_success:"authenticated_session_approve_publish_success"},uf={no_internet_connection:"no_internet_connection",no_wss_connection:"no_wss_connection",missing_session_authenticate_request:"missing_session_authenticate_request",session_authenticate_request_expired:"session_authenticate_request_expired",chains_caip2_compliant_failure:"chains_caip2_compliant_failure",chains_evm_compliant_failure:"chains_evm_compliant_failure",invalid_cacao:"invalid_cacao",subscribe_authenticated_session_topic_failure:"subscribe_authenticated_session_topic_failure",authenticated_session_approve_publish_failure:"authenticated_session_approve_publish_failure",authenticated_session_pending_request_not_found:"authenticated_session_pending_request_not_found"},MM=.1,CM="event-client",PM=86400,DM="https://pulse.walletconnect.org/batch";function OM(r,e){if(r.length>=255)throw new TypeError("Alphabet too long");for(var t=new Uint8Array(256),i=0;i<t.length;i++)t[i]=255;for(var n=0;n<r.length;n++){var s=r.charAt(n),a=s.charCodeAt(0);if(t[a]!==255)throw new TypeError(s+" is ambiguous");t[a]=n}var f=r.length,h=r.charAt(0),u=Math.log(f)/Math.log(256),g=Math.log(256)/Math.log(f);function w(O){if(O instanceof Uint8Array||(ArrayBuffer.isView(O)?O=new Uint8Array(O.buffer,O.byteOffset,O.byteLength):Array.isArray(O)&&(O=Uint8Array.from(O))),!(O instanceof Uint8Array))throw new TypeError("Expected Uint8Array");if(O.length===0)return"";for(var N=0,j=0,H=0,F=O.length;H!==F&&O[H]===0;)H++,N++;for(var G=(F-H)*g+1>>>0,B=new Uint8Array(G);H!==F;){for(var z=O[H],W=0,_=G-1;(z!==0||W<j)&&_!==-1;_--,W++)z+=256*B[_]>>>0,B[_]=z%f>>>0,z=z/f>>>0;if(z!==0)throw new Error("Non-zero carry");j=W,H++}for(var U=G-j;U!==G&&B[U]===0;)U++;for(var ee=h.repeat(N);U<G;++U)ee+=r.charAt(B[U]);return ee}function M(O){if(typeof O!="string")throw new TypeError("Expected String");if(O.length===0)return new Uint8Array;var N=0;if(O[N]!==" "){for(var j=0,H=0;O[N]===h;)j++,N++;for(var F=(O.length-N)*u+1>>>0,G=new Uint8Array(F);O[N];){var B=t[O.charCodeAt(N)];if(B===255)return;for(var z=0,W=F-1;(B!==0||z<H)&&W!==-1;W--,z++)B+=f*G[W]>>>0,G[W]=B%256>>>0,B=B/256>>>0;if(B!==0)throw new Error("Non-zero carry");H=z,N++}if(O[N]!==" "){for(var _=F-H;_!==F&&G[_]===0;)_++;for(var U=new Uint8Array(j+(F-_)),ee=j;_!==F;)U[ee++]=G[_++];return U}}}function C(O){var N=M(O);if(N)return N;throw new Error(`Non-${e} character`)}return{encode:w,decodeUnsafe:M,decode:C}}var RM=OM,TM=RM;const u2=r=>{if(r instanceof Uint8Array&&r.constructor.name==="Uint8Array")return r;if(r instanceof ArrayBuffer)return new Uint8Array(r);if(ArrayBuffer.isView(r))return new Uint8Array(r.buffer,r.byteOffset,r.byteLength);throw new Error("Unknown type, must be binary type")},NM=r=>new TextEncoder().encode(r),$M=r=>new TextDecoder().decode(r);class LM{constructor(e,t,i){this.name=e,this.prefix=t,this.baseEncode=i}encode(e){if(e instanceof Uint8Array)return`${this.prefix}${this.baseEncode(e)}`;throw Error("Unknown type, must be binary type")}}class BM{constructor(e,t,i){if(this.name=e,this.prefix=t,t.codePointAt(0)===void 0)throw new Error("Invalid prefix character");this.prefixCodePoint=t.codePointAt(0),this.baseDecode=i}decode(e){if(typeof e=="string"){if(e.codePointAt(0)!==this.prefixCodePoint)throw Error(`Unable to decode multibase string ${JSON.stringify(e)}, ${this.name} decoder only supports inputs prefixed with ${this.prefix}`);return this.baseDecode(e.slice(this.prefix.length))}else throw Error("Can only multibase decode strings")}or(e){return d2(this,e)}}class FM{constructor(e){this.decoders=e}or(e){return d2(this,e)}decode(e){const t=e[0],i=this.decoders[t];if(i)return i.decode(e);throw RangeError(`Unable to decode multibase string ${JSON.stringify(e)}, only inputs prefixed with ${Object.keys(this.decoders)} are supported`)}}const d2=(r,e)=>new FM(fi(fi({},r.decoders||{[r.prefix]:r}),e.decoders||{[e.prefix]:e}));class UM{constructor(e,t,i,n){this.name=e,this.prefix=t,this.baseEncode=i,this.baseDecode=n,this.encoder=new LM(e,t,i),this.decoder=new BM(e,t,n)}encode(e){return this.encoder.encode(e)}decode(e){return this.decoder.decode(e)}}const ah=({name:r,prefix:e,encode:t,decode:i})=>new UM(r,e,t,i),df=({prefix:r,name:e,alphabet:t})=>{const{encode:i,decode:n}=TM(t,e);return ah({prefix:r,name:e,encode:i,decode:s=>u2(n(s))})},qM=(r,e,t,i)=>{const n={};for(let g=0;g<e.length;++g)n[e[g]]=g;let s=r.length;for(;r[s-1]==="=";)--s;const a=new Uint8Array(s*t/8|0);let f=0,h=0,u=0;for(let g=0;g<s;++g){const w=n[r[g]];if(w===void 0)throw new SyntaxError(`Non-${i} character`);h=h<<t|w,f+=t,f>=8&&(f-=8,a[u++]=255&h>>f)}if(f>=t||255&h<<8-f)throw new SyntaxError("Unexpected end of data");return a},zM=(r,e,t)=>{const i=e[e.length-1]==="=",n=(1<<t)-1;let s="",a=0,f=0;for(let h=0;h<r.length;++h)for(f=f<<8|r[h],a+=8;a>t;)a-=t,s+=e[n&f>>a];if(a&&(s+=e[n&f<<t-a]),i)for(;s.length*t&7;)s+="=";return s},Kr=({name:r,prefix:e,bitsPerChar:t,alphabet:i})=>ah({prefix:e,name:r,encode(n){return zM(n,i,t)},decode(n){return qM(n,i,t,r)}}),HM=ah({prefix:"\0",name:"identity",encode:r=>$M(r),decode:r=>NM(r)});var kM=Object.freeze({__proto__:null,identity:HM});const jM=Kr({prefix:"0",name:"base2",alphabet:"01",bitsPerChar:1});var WM=Object.freeze({__proto__:null,base2:jM});const KM=Kr({prefix:"7",name:"base8",alphabet:"01234567",bitsPerChar:3});var VM=Object.freeze({__proto__:null,base8:KM});const GM=df({prefix:"9",name:"base10",alphabet:"0123456789"});var YM=Object.freeze({__proto__:null,base10:GM});const JM=Kr({prefix:"f",name:"base16",alphabet:"0123456789abcdef",bitsPerChar:4}),QM=Kr({prefix:"F",name:"base16upper",alphabet:"0123456789ABCDEF",bitsPerChar:4});var ZM=Object.freeze({__proto__:null,base16:JM,base16upper:QM});const XM=Kr({prefix:"b",name:"base32",alphabet:"abcdefghijklmnopqrstuvwxyz234567",bitsPerChar:5}),eC=Kr({prefix:"B",name:"base32upper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567",bitsPerChar:5}),tC=Kr({prefix:"c",name:"base32pad",alphabet:"abcdefghijklmnopqrstuvwxyz234567=",bitsPerChar:5}),rC=Kr({prefix:"C",name:"base32padupper",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",bitsPerChar:5}),iC=Kr({prefix:"v",name:"base32hex",alphabet:"0123456789abcdefghijklmnopqrstuv",bitsPerChar:5}),nC=Kr({prefix:"V",name:"base32hexupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV",bitsPerChar:5}),sC=Kr({prefix:"t",name:"base32hexpad",alphabet:"0123456789abcdefghijklmnopqrstuv=",bitsPerChar:5}),oC=Kr({prefix:"T",name:"base32hexpadupper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUV=",bitsPerChar:5}),aC=Kr({prefix:"h",name:"base32z",alphabet:"ybndrfg8ejkmcpqxot1uwisza345h769",bitsPerChar:5});var cC=Object.freeze({__proto__:null,base32:XM,base32upper:eC,base32pad:tC,base32padupper:rC,base32hex:iC,base32hexupper:nC,base32hexpad:sC,base32hexpadupper:oC,base32z:aC});const fC=df({prefix:"k",name:"base36",alphabet:"0123456789abcdefghijklmnopqrstuvwxyz"}),lC=df({prefix:"K",name:"base36upper",alphabet:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"});var hC=Object.freeze({__proto__:null,base36:fC,base36upper:lC});const uC=df({name:"base58btc",prefix:"z",alphabet:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}),dC=df({name:"base58flickr",prefix:"Z",alphabet:"123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"});var pC=Object.freeze({__proto__:null,base58btc:uC,base58flickr:dC});const gC=Kr({prefix:"m",name:"base64",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",bitsPerChar:6}),vC=Kr({prefix:"M",name:"base64pad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",bitsPerChar:6}),mC=Kr({prefix:"u",name:"base64url",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_",bitsPerChar:6}),bC=Kr({prefix:"U",name:"base64urlpad",alphabet:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",bitsPerChar:6});var wC=Object.freeze({__proto__:null,base64:gC,base64pad:vC,base64url:mC,base64urlpad:bC});const p2=Array.from("\u{1F680}\u{1FA90}\u2604\u{1F6F0}\u{1F30C}\u{1F311}\u{1F312}\u{1F313}\u{1F314}\u{1F315}\u{1F316}\u{1F317}\u{1F318}\u{1F30D}\u{1F30F}\u{1F30E}\u{1F409}\u2600\u{1F4BB}\u{1F5A5}\u{1F4BE}\u{1F4BF}\u{1F602}\u2764\u{1F60D}\u{1F923}\u{1F60A}\u{1F64F}\u{1F495}\u{1F62D}\u{1F618}\u{1F44D}\u{1F605}\u{1F44F}\u{1F601}\u{1F525}\u{1F970}\u{1F494}\u{1F496}\u{1F499}\u{1F622}\u{1F914}\u{1F606}\u{1F644}\u{1F4AA}\u{1F609}\u263A\u{1F44C}\u{1F917}\u{1F49C}\u{1F614}\u{1F60E}\u{1F607}\u{1F339}\u{1F926}\u{1F389}\u{1F49E}\u270C\u2728\u{1F937}\u{1F631}\u{1F60C}\u{1F338}\u{1F64C}\u{1F60B}\u{1F497}\u{1F49A}\u{1F60F}\u{1F49B}\u{1F642}\u{1F493}\u{1F929}\u{1F604}\u{1F600}\u{1F5A4}\u{1F603}\u{1F4AF}\u{1F648}\u{1F447}\u{1F3B6}\u{1F612}\u{1F92D}\u2763\u{1F61C}\u{1F48B}\u{1F440}\u{1F62A}\u{1F611}\u{1F4A5}\u{1F64B}\u{1F61E}\u{1F629}\u{1F621}\u{1F92A}\u{1F44A}\u{1F973}\u{1F625}\u{1F924}\u{1F449}\u{1F483}\u{1F633}\u270B\u{1F61A}\u{1F61D}\u{1F634}\u{1F31F}\u{1F62C}\u{1F643}\u{1F340}\u{1F337}\u{1F63B}\u{1F613}\u2B50\u2705\u{1F97A}\u{1F308}\u{1F608}\u{1F918}\u{1F4A6}\u2714\u{1F623}\u{1F3C3}\u{1F490}\u2639\u{1F38A}\u{1F498}\u{1F620}\u261D\u{1F615}\u{1F33A}\u{1F382}\u{1F33B}\u{1F610}\u{1F595}\u{1F49D}\u{1F64A}\u{1F639}\u{1F5E3}\u{1F4AB}\u{1F480}\u{1F451}\u{1F3B5}\u{1F91E}\u{1F61B}\u{1F534}\u{1F624}\u{1F33C}\u{1F62B}\u26BD\u{1F919}\u2615\u{1F3C6}\u{1F92B}\u{1F448}\u{1F62E}\u{1F646}\u{1F37B}\u{1F343}\u{1F436}\u{1F481}\u{1F632}\u{1F33F}\u{1F9E1}\u{1F381}\u26A1\u{1F31E}\u{1F388}\u274C\u270A\u{1F44B}\u{1F630}\u{1F928}\u{1F636}\u{1F91D}\u{1F6B6}\u{1F4B0}\u{1F353}\u{1F4A2}\u{1F91F}\u{1F641}\u{1F6A8}\u{1F4A8}\u{1F92C}\u2708\u{1F380}\u{1F37A}\u{1F913}\u{1F619}\u{1F49F}\u{1F331}\u{1F616}\u{1F476}\u{1F974}\u25B6\u27A1\u2753\u{1F48E}\u{1F4B8}\u2B07\u{1F628}\u{1F31A}\u{1F98B}\u{1F637}\u{1F57A}\u26A0\u{1F645}\u{1F61F}\u{1F635}\u{1F44E}\u{1F932}\u{1F920}\u{1F927}\u{1F4CC}\u{1F535}\u{1F485}\u{1F9D0}\u{1F43E}\u{1F352}\u{1F617}\u{1F911}\u{1F30A}\u{1F92F}\u{1F437}\u260E\u{1F4A7}\u{1F62F}\u{1F486}\u{1F446}\u{1F3A4}\u{1F647}\u{1F351}\u2744\u{1F334}\u{1F4A3}\u{1F438}\u{1F48C}\u{1F4CD}\u{1F940}\u{1F922}\u{1F445}\u{1F4A1}\u{1F4A9}\u{1F450}\u{1F4F8}\u{1F47B}\u{1F910}\u{1F92E}\u{1F3BC}\u{1F975}\u{1F6A9}\u{1F34E}\u{1F34A}\u{1F47C}\u{1F48D}\u{1F4E3}\u{1F942}"),yC=p2.reduce((r,e,t)=>(r[t]=e,r),[]),_C=p2.reduce((r,e,t)=>(r[e.codePointAt(0)]=t,r),[]);function xC(r){return r.reduce((e,t)=>(e+=yC[t],e),"")}function AC(r){const e=[];for(const t of r){const i=_C[t.codePointAt(0)];if(i===void 0)throw new Error(`Non-base256emoji character: ${t}`);e.push(i)}return new Uint8Array(e)}const EC=ah({prefix:"\u{1F680}",name:"base256emoji",encode:xC,decode:AC});var SC=Object.freeze({__proto__:null,base256emoji:EC}),IC=v2,g2=128,MC=127,CC=~MC,PC=Math.pow(2,31);function v2(r,e,t){e=e||[],t=t||0;for(var i=t;r>=PC;)e[t++]=r&255|g2,r/=128;for(;r&CC;)e[t++]=r&255|g2,r>>>=7;return e[t]=r|0,v2.bytes=t-i+1,e}var DC=_0,OC=128,m2=127;function _0(r,i){var t=0,i=i||0,n=0,s=i,a,f=r.length;do{if(s>=f)throw _0.bytes=0,new RangeError("Could not decode varint");a=r[s++],t+=n<28?(a&m2)<<n:(a&m2)*Math.pow(2,n),n+=7}while(a>=OC);return _0.bytes=s-i,t}var RC=Math.pow(2,7),TC=Math.pow(2,14),NC=Math.pow(2,21),$C=Math.pow(2,28),LC=Math.pow(2,35),BC=Math.pow(2,42),FC=Math.pow(2,49),UC=Math.pow(2,56),qC=Math.pow(2,63),zC=function(r){return r<RC?1:r<TC?2:r<NC?3:r<$C?4:r<LC?5:r<BC?6:r<FC?7:r<UC?8:r<qC?9:10},HC={encode:IC,decode:DC,encodingLength:zC},b2=HC;const w2=(r,e,t=0)=>(b2.encode(r,e,t),e),y2=r=>b2.encodingLength(r),x0=(r,e)=>{const t=e.byteLength,i=y2(r),n=i+y2(t),s=new Uint8Array(n+t);return w2(r,s,0),w2(t,s,i),s.set(e,n),new kC(r,t,e,s)};class kC{constructor(e,t,i,n){this.code=e,this.size=t,this.digest=i,this.bytes=n}}const _2=({name:r,code:e,encode:t})=>new jC(r,e,t);class jC{constructor(e,t,i){this.name=e,this.code=t,this.encode=i}digest(e){if(e instanceof Uint8Array){const t=this.encode(e);return t instanceof Uint8Array?x0(this.code,t):t.then(i=>x0(this.code,i))}else throw Error("Unknown type, must be binary type")}}const x2=r=>async e=>new Uint8Array(await crypto.subtle.digest(r,e)),WC=_2({name:"sha2-256",code:18,encode:x2("SHA-256")}),KC=_2({name:"sha2-512",code:19,encode:x2("SHA-512")});var VC=Object.freeze({__proto__:null,sha256:WC,sha512:KC});const A2=0,GC="identity",E2=u2;var YC=Object.freeze({__proto__:null,identity:{code:A2,name:GC,encode:E2,digest:r=>x0(A2,E2(r))}});new TextEncoder,new TextDecoder;const S2=fi(fi(fi(fi(fi(fi(fi(fi(fi(fi({},kM),WM),VM),YM),ZM),cC),hC),pC),wC),SC);fi(fi({},VC),YC);function JC(r=0){return globalThis.Buffer!=null&&globalThis.Buffer.allocUnsafe!=null?globalThis.Buffer.allocUnsafe(r):new Uint8Array(r)}function I2(r,e,t,i){return{name:r,prefix:e,encoder:{name:r,prefix:e,encode:t},decoder:{decode:i}}}const M2=I2("utf8","u",r=>"u"+new TextDecoder("utf8").decode(r),r=>new TextEncoder().encode(r.substring(1))),A0=I2("ascii","a",r=>{let e="a";for(let t=0;t<r.length;t++)e+=String.fromCharCode(r[t]);return e},r=>{r=r.substring(1);const e=JC(r.length);for(let t=0;t<r.length;t++)e[t]=r.charCodeAt(t);return e}),QC=fi({utf8:M2,"utf-8":M2,hex:S2.base16,latin1:A0,ascii:A0,binary:A0},S2);function ZC(r,e="utf8"){const t=QC[e];if(!t)throw new Error(`Unsupported encoding "${e}"`);return(e==="utf8"||e==="utf-8")&&globalThis.Buffer!=null&&globalThis.Buffer.from!=null?globalThis.Buffer.from(r,"utf8"):t.decoder.decode(`${t.prefix}${r}`)}class XC{constructor(e,t){this.core=e,this.logger=t,this.keychain=new Map,this.name=tM,this.version=rM,this.initialized=!1,this.storagePrefix=ts,this.init=async()=>{if(!this.initialized){const i=await this.getKeyChain();typeof i<"u"&&(this.keychain=i),this.initialized=!0}},this.has=i=>(this.isInitialized(),this.keychain.has(i)),this.set=async(i,n)=>{this.isInitialized(),this.keychain.set(i,n),await this.persist()},this.get=i=>{this.isInitialized();const n=this.keychain.get(i);if(typeof n>"u"){const{message:s}=xe("NO_MATCHING_KEY",`${this.name}: ${i}`);throw new Error(s)}return n},this.del=async i=>{this.isInitialized(),this.keychain.delete(i),await this.persist()},this.core=e,this.logger=ci(t,this.name)}get context(){return yi(this.logger)}get storageKey(){return this.storagePrefix+this.version+this.core.customStoragePrefix+"//"+this.name}async setKeyChain(e){await this.core.storage.setItem(this.storageKey,Wm(e))}async getKeyChain(){const e=await this.core.storage.getItem(this.storageKey);return typeof e<"u"?Km(e):void 0}async persist(){await this.setKeyChain(this.keychain)}isInitialized(){if(!this.initialized){const{message:e}=xe("NOT_INITIALIZED",this.name);throw new Error(e)}}}class eP{constructor(e,t,i){this.core=e,this.logger=t,this.name=XI,this.randomSessionIdentifier=t0(),this.initialized=!1,this.init=async()=>{this.initialized||(await this.keychain.init(),this.initialized=!0)},this.hasKeys=n=>(this.isInitialized(),this.keychain.has(n)),this.getClientId=async()=>{this.isInitialized();const n=await this.getClientSeed(),s=Lm(n);return $m(s.publicKey)},this.generateKeyPair=()=>{this.isInitialized();const n=LA();return this.setPrivateKey(n.publicKey,n.privateKey)},this.signJWT=async n=>{this.isInitialized();const s=await this.getClientSeed(),a=Lm(s),f=this.randomSessionIdentifier;return await jx(f,n,eM,a)},this.generateSharedKey=(n,s,a)=>{this.isInitialized();const f=this.getPrivateKey(n),h=BA(f,s);return this.setSymKey(h,a)},this.setSymKey=async(n,s)=>{this.isInitialized();const a=s||jl(n);return await this.keychain.set(a,n),a},this.deleteKeyPair=async n=>{this.isInitialized(),await this.keychain.del(n)},this.deleteSymKey=async n=>{this.isInitialized(),await this.keychain.del(n)},this.encode=async(n,s,a)=>{this.isInitialized();const f=lb(a),h=bs(s);if(ub(f))return UA(h,a?.encoding);if(hb(f)){const M=f.senderPublicKey,C=f.receiverPublicKey;n=await this.generateSharedKey(M,C)}const u=this.getSymKey(n),{type:g,senderPublicKey:w}=f;return FA({type:g,symKey:u,message:h,senderPublicKey:w,encoding:a?.encoding})},this.decode=async(n,s,a)=>{this.isInitialized();const f=HA(s,a);if(ub(f)){const h=zA(s,a?.encoding);return Ro(h)}if(hb(f)){const h=f.receiverPublicKey,u=f.senderPublicKey;n=await this.generateSharedKey(h,u)}try{const h=this.getSymKey(n),u=qA({symKey:h,encoded:s,encoding:a?.encoding});return Ro(u)}catch(h){this.logger.error(`Failed to decode message from topic: '${n}', clientId: '${await this.getClientId()}'`),this.logger.error(h)}},this.getPayloadType=(n,s=Js)=>{const a=Zc({encoded:n,encoding:s});return Lo(a.type)},this.getPayloadSenderPublicKey=(n,s=Js)=>{const a=Zc({encoded:n,encoding:s});return a.senderPublicKey?nI(a.senderPublicKey,oi):void 0},this.core=e,this.logger=ci(t,this.name),this.keychain=i||new XC(this.core,this.logger)}get context(){return yi(this.logger)}async setPrivateKey(e,t){return await this.keychain.set(e,t),e}getPrivateKey(e){return this.keychain.get(e)}async getClientSeed(){let e="";try{e=this.keychain.get(o2)}catch{e=t0(),await this.keychain.set(o2,e)}return ZC(e,"base16")}getSymKey(e){return this.keychain.get(e)}isInitialized(){if(!this.initialized){const{message:e}=xe("NOT_INITIALIZED",this.name);throw new Error(e)}}}class tP extends WS{constructor(e,t){super(e,t),this.logger=e,this.core=t,this.messages=new Map,this.name=iM,this.version=nM,this.initialized=!1,this.storagePrefix=ts,this.init=async()=>{if(!this.initialized){this.logger.trace("Initialized");try{const i=await this.getRelayerMessages();typeof i<"u"&&(this.messages=i),this.logger.debug(`Successfully Restored records for ${this.name}`),this.logger.trace({type:"method",method:"restore",size:this.messages.size})}catch(i){this.logger.debug(`Failed to Restore records for ${this.name}`),this.logger.error(i)}finally{this.initialized=!0}}},this.set=async(i,n)=>{this.isInitialized();const s=ys(n);let a=this.messages.get(i);return typeof a>"u"&&(a={}),typeof a[s]<"u"||(a[s]=n,this.messages.set(i,a),await this.persist()),s},this.get=i=>{this.isInitialized();let n=this.messages.get(i);return typeof n>"u"&&(n={}),n},this.has=(i,n)=>{this.isInitialized();const s=this.get(i),a=ys(n);return typeof s[a]<"u"},this.del=async i=>{this.isInitialized(),this.messages.delete(i),await this.persist()},this.logger=ci(e,this.name),this.core=t}get context(){return yi(this.logger)}get storageKey(){return this.storagePrefix+this.version+this.core.customStoragePrefix+"//"+this.name}async setRelayerMessages(e){await this.core.storage.setItem(this.storageKey,Wm(e))}async getRelayerMessages(){const e=await this.core.storage.getItem(this.storageKey);return typeof e<"u"?Km(e):void 0}async persist(){await this.setRelayerMessages(this.messages)}isInitialized(){if(!this.initialized){const{message:e}=xe("NOT_INITIALIZED",this.name);throw new Error(e)}}}var rP=Object.defineProperty,iP=Object.defineProperties,nP=Object.getOwnPropertyDescriptors,C2=Object.getOwnPropertySymbols,sP=Object.prototype.hasOwnProperty,oP=Object.prototype.propertyIsEnumerable,P2=(r,e,t)=>e in r?rP(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,D2=(r,e)=>{for(var t in e||(e={}))sP.call(e,t)&&P2(r,t,e[t]);if(C2)for(var t of C2(e))oP.call(e,t)&&P2(r,t,e[t]);return r},O2=(r,e)=>iP(r,nP(e));class aP extends KS{constructor(e,t){super(e,t),this.relayer=e,this.logger=t,this.events=new zr.exports.EventEmitter,this.name=sM,this.queue=new Map,this.publishTimeout=_e.toMiliseconds(_e.ONE_MINUTE),this.initialPublishTimeout=_e.toMiliseconds(_e.ONE_SECOND*15),this.needsTransportRestart=!1,this.publish=async(i,n,s)=>{var a;this.logger.debug("Publishing Payload"),this.logger.trace({type:"method",method:"publish",params:{topic:i,message:n,opts:s}});const f=s?.ttl||a2,h=Wl(s),u=s?.prompt||!1,g=s?.tag||0,w=s?.id||Uo().toString(),M={topic:i,message:n,opts:{ttl:f,relay:h,prompt:u,tag:g,id:w,attestation:s?.attestation}},C=`Failed to publish payload, please try again. id:${w} tag:${g}`;try{const O=new Promise(async N=>{const j=({id:F})=>{M.opts.id===F&&(this.removeRequestFromQueue(F),this.relayer.events.removeListener(Lr.publish,j),N(M))};this.relayer.events.on(Lr.publish,j);const H=Gs(new Promise((F,G)=>{this.rpcPublish({topic:i,message:n,ttl:f,prompt:u,tag:g,id:w,attestation:s?.attestation}).then(F).catch(B=>{this.logger.warn(B,B?.message),G(B)})}),this.initialPublishTimeout,`Failed initial publish, retrying.... id:${w} tag:${g}`);try{await H,this.events.removeListener(Lr.publish,j)}catch(F){this.queue.set(w,O2(D2({},M),{attempt:1})),this.logger.warn(F,F?.message)}});this.logger.trace({type:"method",method:"publish",params:{id:w,topic:i,message:n,opts:s}}),await Gs(O,this.publishTimeout,C)}catch(O){if(this.logger.debug("Failed to Publish Payload"),this.logger.error(O),(a=s?.internal)!=null&&a.throwOnFailedPublish)throw O}finally{this.queue.delete(w)}},this.on=(i,n)=>{this.events.on(i,n)},this.once=(i,n)=>{this.events.once(i,n)},this.off=(i,n)=>{this.events.off(i,n)},this.removeListener=(i,n)=>{this.events.removeListener(i,n)},this.relayer=e,this.logger=ci(t,this.name),this.registerEventListeners()}get context(){return yi(this.logger)}async rpcPublish(e){var t,i,n,s;const{topic:a,message:f,ttl:h=a2,prompt:u,tag:g,id:w,attestation:M}=e,C={method:Xc(Wl().protocol).publish,params:{topic:a,message:f,ttl:h,prompt:u,tag:g,attestation:M},id:w};ai((t=C.params)==null?void 0:t.prompt)&&((i=C.params)==null||delete i.prompt),ai((n=C.params)==null?void 0:n.tag)&&((s=C.params)==null||delete s.tag),this.logger.debug("Outgoing Relay Payload"),this.logger.trace({type:"message",direction:"outgoing",request:C});const O=await this.relayer.request(C);return this.relayer.events.emit(Lr.publish,e),this.logger.debug("Successfully Published Payload"),O}removeRequestFromQueue(e){this.queue.delete(e)}checkQueue(){this.queue.forEach(async(e,t)=>{const i=e.attempt+1;this.queue.set(t,O2(D2({},e),{attempt:i}));const{topic:n,message:s,opts:a,attestation:f}=e;this.logger.warn({},`Publisher: queue->publishing: ${e.opts.id}, tag: ${e.opts.tag}, attempt: ${i}`),await this.rpcPublish({topic:n,message:s,ttl:a.ttl,prompt:a.prompt,tag:a.tag,id:a.id,attestation:f}),this.logger.warn({},`Publisher: queue->published: ${e.opts.id}`)})}registerEventListeners(){this.relayer.core.heartbeat.on(Ha.pulse,()=>{if(this.needsTransportRestart){this.needsTransportRestart=!1,this.relayer.events.emit(Lr.connection_stalled);return}this.checkQueue()}),this.relayer.on(Lr.message_ack,e=>{this.removeRequestFromQueue(e.id.toString())})}}class cP{constructor(){this.map=new Map,this.set=(e,t)=>{const i=this.get(e);this.exists(e,t)||this.map.set(e,[...i,t])},this.get=e=>this.map.get(e)||[],this.exists=(e,t)=>this.get(e).includes(t),this.delete=(e,t)=>{if(typeof t>"u"){this.map.delete(e);return}if(!this.map.has(e))return;const i=this.get(e);if(!this.exists(e,t))return;const n=i.filter(s=>s!==t);if(!n.length){this.map.delete(e);return}this.map.set(e,n)},this.clear=()=>{this.map.clear()}}get topics(){return Array.from(this.map.keys())}}var fP=Object.defineProperty,lP=Object.defineProperties,hP=Object.getOwnPropertyDescriptors,R2=Object.getOwnPropertySymbols,uP=Object.prototype.hasOwnProperty,dP=Object.prototype.propertyIsEnumerable,T2=(r,e,t)=>e in r?fP(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,pf=(r,e)=>{for(var t in e||(e={}))uP.call(e,t)&&T2(r,t,e[t]);if(R2)for(var t of R2(e))dP.call(e,t)&&T2(r,t,e[t]);return r},E0=(r,e)=>lP(r,hP(e));class pP extends YS{constructor(e,t){super(e,t),this.relayer=e,this.logger=t,this.subscriptions=new Map,this.topicMap=new cP,this.events=new zr.exports.EventEmitter,this.name=uM,this.version=dM,this.pending=new Map,this.cached=[],this.initialized=!1,this.pendingSubscriptionWatchLabel="pending_sub_watch_label",this.pollingInterval=20,this.storagePrefix=ts,this.subscribeTimeout=_e.toMiliseconds(_e.ONE_MINUTE),this.initialSubscribeTimeout=_e.toMiliseconds(_e.ONE_SECOND*15),this.batchSubscribeTopicsLimit=500,this.init=async()=>{this.initialized||(this.logger.trace("Initialized"),this.registerEventListeners(),this.clientId=await this.relayer.core.crypto.getClientId(),await this.restore()),this.initialized=!0},this.subscribe=async(i,n)=>{this.isInitialized(),this.logger.debug("Subscribing Topic"),this.logger.trace({type:"method",method:"subscribe",params:{topic:i,opts:n}});try{const s=Wl(n),a={topic:i,relay:s,transportType:n?.transportType};this.pending.set(i,a);const f=await this.rpcSubscribe(i,s,n);return typeof f=="string"&&(this.onSubscribe(f,a),this.logger.debug("Successfully Subscribed Topic"),this.logger.trace({type:"method",method:"subscribe",params:{topic:i,opts:n}})),f}catch(s){throw this.logger.debug("Failed to Subscribe Topic"),this.logger.error(s),s}},this.unsubscribe=async(i,n)=>{await this.restartToComplete(),this.isInitialized(),typeof n?.id<"u"?await this.unsubscribeById(i,n.id,n):await this.unsubscribeByTopic(i,n)},this.isSubscribed=async i=>{if(this.topics.includes(i))return!0;const n=`${this.pendingSubscriptionWatchLabel}_${i}`;return await new Promise((s,a)=>{const f=new _e.Watch;f.start(n);const h=setInterval(()=>{(!this.pending.has(i)&&this.topics.includes(i)||this.cached.some(u=>u.topic===i))&&(clearInterval(h),f.stop(n),s(!0)),f.elapsed(n)>=pM&&(clearInterval(h),f.stop(n),a(new Error("Subscription resolution timeout")))},this.pollingInterval)}).catch(()=>!1)},this.on=(i,n)=>{this.events.on(i,n)},this.once=(i,n)=>{this.events.once(i,n)},this.off=(i,n)=>{this.events.off(i,n)},this.removeListener=(i,n)=>{this.events.removeListener(i,n)},this.start=async()=>{await this.onConnect()},this.stop=async()=>{await this.onDisconnect()},this.restart=async()=>{await this.restore(),await this.onRestart()},this.checkPending=async()=>{if(this.pending.size===0&&(!this.initialized||!this.relayer.connected))return;const i=[];this.pending.forEach(n=>{i.push(n)}),await this.batchSubscribe(i)},this.registerEventListeners=()=>{this.relayer.core.heartbeat.on(Ha.pulse,async()=>{await this.checkPending()}),this.events.on(Fi.created,async i=>{const n=Fi.created;this.logger.info(`Emitting ${n}`),this.logger.debug({type:"event",event:n,data:i}),await this.persist()}),this.events.on(Fi.deleted,async i=>{const n=Fi.deleted;this.logger.info(`Emitting ${n}`),this.logger.debug({type:"event",event:n,data:i}),await this.persist()})},this.relayer=e,this.logger=ci(t,this.name),this.clientId=""}get context(){return yi(this.logger)}get storageKey(){return this.storagePrefix+this.version+this.relayer.core.customStoragePrefix+"//"+this.name}get length(){return this.subscriptions.size}get ids(){return Array.from(this.subscriptions.keys())}get values(){return Array.from(this.subscriptions.values())}get topics(){return this.topicMap.topics}hasSubscription(e,t){let i=!1;try{i=this.getSubscription(e).topic===t}catch{}return i}reset(){this.cached=[],this.initialized=!0}onDisable(){this.cached=this.values,this.subscriptions.clear(),this.topicMap.clear()}async unsubscribeByTopic(e,t){const i=this.topicMap.get(e);await Promise.all(i.map(async n=>await this.unsubscribeById(e,n,t)))}async unsubscribeById(e,t,i){this.logger.debug("Unsubscribing Topic"),this.logger.trace({type:"method",method:"unsubscribe",params:{topic:e,id:t,opts:i}});try{const n=Wl(i);await this.rpcUnsubscribe(e,t,n);const s=Gt("USER_DISCONNECTED",`${this.name}, ${e}`);await this.onUnsubscribe(e,t,s),this.logger.debug("Successfully Unsubscribed Topic"),this.logger.trace({type:"method",method:"unsubscribe",params:{topic:e,id:t,opts:i}})}catch(n){throw this.logger.debug("Failed to Unsubscribe Topic"),this.logger.error(n),n}}async rpcSubscribe(e,t,i){var n;i?.transportType===sr.relay&&await this.restartToComplete();const s={method:Xc(t.protocol).subscribe,params:{topic:e}};this.logger.debug("Outgoing Relay Payload"),this.logger.trace({type:"payload",direction:"outgoing",request:s});const a=(n=i?.internal)==null?void 0:n.throwOnFailedPublish;try{const f=this.getSubscriptionId(e);if(i?.transportType===sr.link_mode)return setTimeout(()=>{(this.relayer.connected||this.relayer.connecting)&&this.relayer.request(s).catch(g=>this.logger.warn(g))},_e.toMiliseconds(_e.ONE_SECOND)),f;const h=new Promise(async g=>{const w=M=>{M.topic===e&&(this.events.removeListener(Fi.created,w),g(M.id))};this.events.on(Fi.created,w);try{const M=await Gs(new Promise((C,O)=>{this.relayer.request(s).catch(N=>{this.logger.warn(N,N?.message),O(N)}).then(C)}),this.initialSubscribeTimeout,`Subscribing to ${e} failed, please try again`);this.events.removeListener(Fi.created,w),g(M)}catch{}}),u=await Gs(h,this.subscribeTimeout,`Subscribing to ${e} failed, please try again`);if(!u&&a)throw new Error(`Subscribing to ${e} failed, please try again`);return u?f:null}catch(f){if(this.logger.debug("Outgoing Relay Subscribe Payload stalled"),this.relayer.events.emit(Lr.connection_stalled),a)throw f}return null}async rpcBatchSubscribe(e){if(!e.length)return;const t=e[0].relay,i={method:Xc(t.protocol).batchSubscribe,params:{topics:e.map(n=>n.topic)}};this.logger.debug("Outgoing Relay Payload"),this.logger.trace({type:"payload",direction:"outgoing",request:i});try{await await Gs(new Promise(n=>{this.relayer.request(i).catch(s=>this.logger.warn(s)).then(n)}),this.subscribeTimeout,"rpcBatchSubscribe failed, please try again")}catch{this.relayer.events.emit(Lr.connection_stalled)}}async rpcBatchFetchMessages(e){if(!e.length)return;const t=e[0].relay,i={method:Xc(t.protocol).batchFetchMessages,params:{topics:e.map(s=>s.topic)}};this.logger.debug("Outgoing Relay Payload"),this.logger.trace({type:"payload",direction:"outgoing",request:i});let n;try{n=await await Gs(new Promise((s,a)=>{this.relayer.request(i).catch(f=>{this.logger.warn(f),a(f)}).then(s)}),this.subscribeTimeout,"rpcBatchFetchMessages failed, please try again")}catch{this.relayer.events.emit(Lr.connection_stalled)}return n}rpcUnsubscribe(e,t,i){const n={method:Xc(i.protocol).unsubscribe,params:{topic:e,id:t}};return this.logger.debug("Outgoing Relay Payload"),this.logger.trace({type:"payload",direction:"outgoing",request:n}),this.relayer.request(n)}onSubscribe(e,t){this.setSubscription(e,E0(pf({},t),{id:e})),this.pending.delete(t.topic)}onBatchSubscribe(e){e.length&&e.forEach(t=>{this.setSubscription(t.id,pf({},t)),this.pending.delete(t.topic)})}async onUnsubscribe(e,t,i){this.events.removeAllListeners(t),this.hasSubscription(t,e)&&this.deleteSubscription(t,i),await this.relayer.messages.del(e)}async setRelayerSubscriptions(e){await this.relayer.core.storage.setItem(this.storageKey,e)}async getRelayerSubscriptions(){return await this.relayer.core.storage.getItem(this.storageKey)}setSubscription(e,t){this.logger.debug("Setting subscription"),this.logger.trace({type:"method",method:"setSubscription",id:e,subscription:t}),this.addSubscription(e,t)}addSubscription(e,t){this.subscriptions.set(e,pf({},t)),this.topicMap.set(t.topic,e),this.events.emit(Fi.created,t)}getSubscription(e){this.logger.debug("Getting subscription"),this.logger.trace({type:"method",method:"getSubscription",id:e});const t=this.subscriptions.get(e);if(!t){const{message:i}=xe("NO_MATCHING_KEY",`${this.name}: ${e}`);throw new Error(i)}return t}deleteSubscription(e,t){this.logger.debug("Deleting subscription"),this.logger.trace({type:"method",method:"deleteSubscription",id:e,reason:t});const i=this.getSubscription(e);this.subscriptions.delete(e),this.topicMap.delete(i.topic,e),this.events.emit(Fi.deleted,E0(pf({},i),{reason:t}))}async persist(){await this.setRelayerSubscriptions(this.values),this.events.emit(Fi.sync)}async onRestart(){if(this.cached.length){const e=[...this.cached],t=Math.ceil(this.cached.length/this.batchSubscribeTopicsLimit);for(let i=0;i<t;i++){const n=e.splice(0,this.batchSubscribeTopicsLimit);await this.batchSubscribe(n)}}this.events.emit(Fi.resubscribed)}async restore(){try{const e=await this.getRelayerSubscriptions();if(typeof e>"u"||!e.length)return;if(this.subscriptions.size){const{message:t}=xe("RESTORE_WILL_OVERRIDE",this.name);throw this.logger.error(t),this.logger.error(`${this.name}: ${JSON.stringify(this.values)}`),new Error(t)}this.cached=e,this.logger.debug(`Successfully Restored subscriptions for ${this.name}`),this.logger.trace({type:"method",method:"restore",subscriptions:this.values})}catch(e){this.logger.debug(`Failed to Restore subscriptions for ${this.name}`),this.logger.error(e)}}async batchSubscribe(e){e.length&&(await this.rpcBatchSubscribe(e),this.onBatchSubscribe(e.map(t=>E0(pf({},t),{id:this.getSubscriptionId(t.topic)}))))}async batchFetchMessages(e){if(!e.length)return;this.logger.trace(`Fetching batch messages for ${e.length} subscriptions`);const t=await this.rpcBatchFetchMessages(e);t&&t.messages&&(await hA(_e.toMiliseconds(_e.ONE_SECOND)),await this.relayer.handleBatchMessageEvents(t.messages))}async onConnect(){await this.restart(),this.reset()}onDisconnect(){this.onDisable()}isInitialized(){if(!this.initialized){const{message:e}=xe("NOT_INITIALIZED",this.name);throw new Error(e)}}async restartToComplete(){!this.relayer.connected&&!this.relayer.connecting&&await this.relayer.transportOpen()}getSubscriptionId(e){return ys(e+this.clientId)}}var gP=Object.defineProperty,N2=Object.getOwnPropertySymbols,vP=Object.prototype.hasOwnProperty,mP=Object.prototype.propertyIsEnumerable,$2=(r,e,t)=>e in r?gP(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,L2=(r,e)=>{for(var t in e||(e={}))vP.call(e,t)&&$2(r,t,e[t]);if(N2)for(var t of N2(e))mP.call(e,t)&&$2(r,t,e[t]);return r};class bP extends VS{constructor(e){super(e),this.protocol="wc",this.version=2,this.events=new zr.exports.EventEmitter,this.name=aM,this.transportExplicitlyClosed=!1,this.initialized=!1,this.connectionAttemptInProgress=!1,this.hasExperiencedNetworkDisruption=!1,this.heartBeatTimeout=_e.toMiliseconds(_e.THIRTY_SECONDS+_e.FIVE_SECONDS),this.requestsInFlight=[],this.connectTimeout=_e.toMiliseconds(_e.ONE_SECOND*15),this.request=async t=>{var i,n;this.logger.debug("Publishing Request Payload");const s=t.id||Uo().toString();await this.toEstablishConnection();try{this.logger.trace({id:s,method:t.method,topic:(i=t.params)==null?void 0:i.topic},"relayer.request - publishing...");const a=`${s}:${((n=t.params)==null?void 0:n.tag)||""}`;this.requestsInFlight.push(a);const f=await this.provider.request(t);return this.requestsInFlight=this.requestsInFlight.filter(h=>h!==a),f}catch(a){throw this.logger.debug(`Failed to Publish Request: ${s}`),a}},this.resetPingTimeout=()=>{if(ql())try{clearTimeout(this.pingTimeout),this.pingTimeout=setTimeout(()=>{var t,i,n;this.logger.debug({},"pingTimeout: Connection stalled, terminating..."),(n=(i=(t=this.provider)==null?void 0:t.connection)==null?void 0:i.socket)==null||n.terminate()},this.heartBeatTimeout)}catch(t){this.logger.warn(t,t?.message)}},this.onPayloadHandler=t=>{this.onProviderPayload(t),this.resetPingTimeout()},this.onConnectHandler=()=>{this.logger.warn({},"Relayer connected \u{1F6DC}"),this.startPingTimeout(),this.events.emit(Lr.connect)},this.onDisconnectHandler=()=>{this.logger.warn({},"Relayer disconnected \u{1F6D1}"),this.requestsInFlight=[],this.onProviderDisconnect()},this.onProviderErrorHandler=t=>{this.logger.fatal(t,`Fatal socket error: ${t?.message}`),this.events.emit(Lr.error,t),this.logger.fatal("Fatal socket error received, closing transport"),this.transportClose()},this.registerProviderListeners=()=>{this.provider.on(sn.payload,this.onPayloadHandler),this.provider.on(sn.connect,this.onConnectHandler),this.provider.on(sn.disconnect,this.onDisconnectHandler),this.provider.on(sn.error,this.onProviderErrorHandler)},this.core=e.core,this.logger=typeof e.logger<"u"&&typeof e.logger!="string"?ci(e.logger,this.name):Zn(rh({level:e.logger||oM})),this.messages=new tP(this.logger,e.core),this.subscriber=new pP(this,this.logger),this.publisher=new aP(this,this.logger),this.relayUrl=e?.relayUrl||f2,this.projectId=e.projectId,Zx()?this.packageName=Hm():Xx()&&(this.bundleId=Hm()),this.provider={}}async init(){if(this.logger.trace("Initialized"),this.registerEventListeners(),await Promise.all([this.messages.init(),this.subscriber.init()]),this.initialized=!0,this.subscriber.cached.length>0)try{await this.transportOpen()}catch(e){this.logger.warn(e,e?.message)}}get context(){return yi(this.logger)}get connected(){var e,t,i;return((i=(t=(e=this.provider)==null?void 0:e.connection)==null?void 0:t.socket)==null?void 0:i.readyState)===1}get connecting(){var e,t,i;return((i=(t=(e=this.provider)==null?void 0:e.connection)==null?void 0:t.socket)==null?void 0:i.readyState)===0}async publish(e,t,i){this.isInitialized(),await this.publisher.publish(e,t,i),await this.recordMessageEvent({topic:e,message:t,publishedAt:Date.now(),transportType:sr.relay})}async subscribe(e,t){var i,n,s;this.isInitialized(),(!(t!=null&&t.transportType)||t?.transportType==="relay")&&await this.toEstablishConnection();const a=typeof((i=t?.internal)==null?void 0:i.throwOnFailedPublish)>"u"?!0:(n=t?.internal)==null?void 0:n.throwOnFailedPublish;let f=((s=this.subscriber.topicMap.get(e))==null?void 0:s[0])||"",h;const u=g=>{g.topic===e&&(this.subscriber.off(Fi.created,u),h())};return await Promise.all([new Promise(g=>{h=g,this.subscriber.on(Fi.created,u)}),new Promise(async(g,w)=>{f=await this.subscriber.subscribe(e,L2({internal:{throwOnFailedPublish:a}},t)).catch(M=>{a&&w(M)})||f,g()})]),f}async unsubscribe(e,t){this.isInitialized(),await this.subscriber.unsubscribe(e,t)}on(e,t){this.events.on(e,t)}once(e,t){this.events.once(e,t)}off(e,t){this.events.off(e,t)}removeListener(e,t){this.events.removeListener(e,t)}async transportDisconnect(){this.provider.disconnect&&(this.hasExperiencedNetworkDisruption||this.connected)?await Gs(this.provider.disconnect(),2e3,"provider.disconnect()").catch(()=>this.onProviderDisconnect()):this.onProviderDisconnect()}async transportClose(){this.transportExplicitlyClosed=!0,await this.transportDisconnect()}async transportOpen(e){if(this.connectPromise?(this.logger.debug({},"Waiting for existing connection attempt to resolve..."),await this.connectPromise,this.logger.debug({},"Existing connection attempt resolved")):(this.connectPromise=new Promise(async(t,i)=>{await this.connect(e).then(t).catch(i).finally(()=>{this.connectPromise=void 0})}),await this.connectPromise),!this.connected)throw new Error(`Couldn't establish socket connection to the relay server: ${this.relayUrl}`)}async restartTransport(e){this.logger.debug({},"Restarting transport..."),!this.connectionAttemptInProgress&&(this.relayUrl=e||this.relayUrl,await this.confirmOnlineStateOrThrow(),await this.transportClose(),await this.transportOpen())}async confirmOnlineStateOrThrow(){if(!await Sb())throw new Error("No internet connection detected. Please restart your network and try again.")}async handleBatchMessageEvents(e){if(e?.length===0){this.logger.trace("Batch message events is empty. Ignoring...");return}const t=e.sort((i,n)=>i.publishedAt-n.publishedAt);this.logger.debug(`Batch of ${t.length} message events sorted`);for(const i of t)try{await this.onMessageEvent(i)}catch(n){this.logger.warn(n,"Error while processing batch message event: "+n?.message)}this.logger.trace(`Batch of ${t.length} message events processed`)}async onLinkMessageEvent(e,t){const{topic:i}=e;if(!t.sessionExists){const n=Ir(_e.FIVE_MINUTES),s={topic:i,expiry:n,relay:{protocol:"irn"},active:!1};await this.core.pairing.pairings.set(i,s)}this.events.emit(Lr.message,e),await this.recordMessageEvent(e)}async connect(e){await this.confirmOnlineStateOrThrow(),e&&e!==this.relayUrl&&(this.relayUrl=e,await this.transportDisconnect()),this.connectionAttemptInProgress=!0,this.transportExplicitlyClosed=!1;let t=1;for(;t<6;){try{this.logger.debug({},`Connecting to ${this.relayUrl}, attempt: ${t}...`),await this.createProvider(),await new Promise(async(i,n)=>{const s=()=>{n(new Error("Connection interrupted while trying to subscribe"))};this.provider.once(sn.disconnect,s),await Gs(new Promise((a,f)=>{this.provider.connect().then(a).catch(f)}),this.connectTimeout,`Socket stalled when trying to connect to ${this.relayUrl}`).catch(a=>{n(a)}).finally(()=>{this.provider.off(sn.disconnect,s),clearTimeout(this.reconnectTimeout),this.reconnectTimeout=void 0}),await new Promise(async(a,f)=>{const h=()=>{f(new Error("Connection interrupted while trying to subscribe"))};this.provider.once(sn.disconnect,h),await this.subscriber.start().then(a).catch(f).finally(()=>{this.provider.off(sn.disconnect,h)})}),this.hasExperiencedNetworkDisruption=!1,i()})}catch(i){await this.subscriber.stop();const n=i;this.logger.warn({},n.message),this.hasExperiencedNetworkDisruption=!0}finally{this.connectionAttemptInProgress=!1}if(this.connected){this.logger.debug({},`Connected to ${this.relayUrl} successfully on attempt: ${t}`);break}await new Promise(i=>setTimeout(i,_e.toMiliseconds(t*1))),t++}}startPingTimeout(){var e,t,i,n,s;if(ql())try{(t=(e=this.provider)==null?void 0:e.connection)!=null&&t.socket&&((s=(n=(i=this.provider)==null?void 0:i.connection)==null?void 0:n.socket)==null||s.on("ping",()=>{this.resetPingTimeout()})),this.resetPingTimeout()}catch(a){this.logger.warn(a,a?.message)}}async createProvider(){this.provider.connection&&this.unregisterProviderListeners();const e=await this.core.crypto.signJWT(this.relayUrl);this.provider=new nn(new KI(iA({sdkVersion:y0,protocol:this.protocol,version:this.version,relayUrl:this.relayUrl,projectId:this.projectId,auth:e,useOnCloseEvent:!0,bundleId:this.bundleId,packageName:this.packageName}))),this.registerProviderListeners()}async recordMessageEvent(e){const{topic:t,message:i}=e;await this.messages.set(t,i)}async shouldIgnoreMessageEvent(e){const{topic:t,message:i}=e;if(!i||i.length===0)return this.logger.warn(`Ignoring invalid/empty message: ${i}`),!0;if(!await this.subscriber.isSubscribed(t))return this.logger.warn(`Ignoring message for non-subscribed topic ${t}`),!0;const n=this.messages.has(t,i);return n&&this.logger.warn(`Ignoring duplicate message: ${i}`),n}async onProviderPayload(e){if(this.logger.debug("Incoming Relay Payload"),this.logger.trace({type:"payload",direction:"incoming",payload:e}),b0(e)){if(!e.method.endsWith(cM))return;const t=e.params,{topic:i,message:n,publishedAt:s,attestation:a}=t.data,f={topic:i,message:n,publishedAt:s,transportType:sr.relay,attestation:a};this.logger.debug("Emitting Relayer Payload"),this.logger.trace(L2({type:"event",event:t.id},f)),this.events.emit(t.id,f),await this.acknowledgePayload(e),await this.onMessageEvent(f)}else sh(e)&&this.events.emit(Lr.message_ack,e)}async onMessageEvent(e){await this.shouldIgnoreMessageEvent(e)||(this.events.emit(Lr.message,e),await this.recordMessageEvent(e))}async acknowledgePayload(e){const t=ih(e.id,!0);await this.provider.connection.send(t)}unregisterProviderListeners(){this.provider.off(sn.payload,this.onPayloadHandler),this.provider.off(sn.connect,this.onConnectHandler),this.provider.off(sn.disconnect,this.onDisconnectHandler),this.provider.off(sn.error,this.onProviderErrorHandler),clearTimeout(this.pingTimeout)}async registerEventListeners(){let e=await Sb();$E(async t=>{e!==t&&(e=t,t?await this.transportOpen().catch(i=>this.logger.error(i,i?.message)):(this.hasExperiencedNetworkDisruption=!0,await this.transportDisconnect(),this.transportExplicitlyClosed=!1))})}async onProviderDisconnect(){await this.subscriber.stop(),clearTimeout(this.pingTimeout),this.events.emit(Lr.disconnect),this.connectionAttemptInProgress=!1,!this.transportExplicitlyClosed&&(this.reconnectTimeout||this.connectPromise||(this.reconnectTimeout=setTimeout(async()=>{clearTimeout(this.reconnectTimeout),await this.transportOpen().catch(e=>this.logger.error(e,e?.message))},_e.toMiliseconds(fM))))}isInitialized(){if(!this.initialized){const{message:e}=xe("NOT_INITIALIZED",this.name);throw new Error(e)}}async toEstablishConnection(){await this.confirmOnlineStateOrThrow(),!this.connected&&await this.transportOpen()}}var wP=Object.defineProperty,B2=Object.getOwnPropertySymbols,yP=Object.prototype.hasOwnProperty,_P=Object.prototype.propertyIsEnumerable,F2=(r,e,t)=>e in r?wP(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,U2=(r,e)=>{for(var t in e||(e={}))yP.call(e,t)&&F2(r,t,e[t]);if(B2)for(var t of B2(e))_P.call(e,t)&&F2(r,t,e[t]);return r};class ko extends GS{constructor(e,t,i,n=ts,s=void 0){super(e,t,i,n),this.core=e,this.logger=t,this.name=i,this.map=new Map,this.version=lM,this.cached=[],this.initialized=!1,this.storagePrefix=ts,this.recentlyDeleted=[],this.recentlyDeletedLimit=200,this.init=async()=>{this.initialized||(this.logger.trace("Initialized"),await this.restore(),this.cached.forEach(a=>{this.getKey&&a!==null&&!ai(a)?this.map.set(this.getKey(a),a):uE(a)?this.map.set(a.id,a):dE(a)&&this.map.set(a.topic,a)}),this.cached=[],this.initialized=!0)},this.set=async(a,f)=>{this.isInitialized(),this.map.has(a)?await this.update(a,f):(this.logger.debug("Setting value"),this.logger.trace({type:"method",method:"set",key:a,value:f}),this.map.set(a,f),await this.persist())},this.get=a=>(this.isInitialized(),this.logger.debug("Getting value"),this.logger.trace({type:"method",method:"get",key:a}),this.getData(a)),this.getAll=a=>(this.isInitialized(),a?this.values.filter(f=>Object.keys(a).every(h=>VI(f[h],a[h]))):this.values),this.update=async(a,f)=>{this.isInitialized(),this.logger.debug("Updating value"),this.logger.trace({type:"method",method:"update",key:a,update:f});const h=U2(U2({},this.getData(a)),f);this.map.set(a,h),await this.persist()},this.delete=async(a,f)=>{this.isInitialized(),this.map.has(a)&&(this.logger.debug("Deleting value"),this.logger.trace({type:"method",method:"delete",key:a,reason:f}),this.map.delete(a),this.addToRecentlyDeleted(a),await this.persist())},this.logger=ci(t,this.name),this.storagePrefix=n,this.getKey=s}get context(){return yi(this.logger)}get storageKey(){return this.storagePrefix+this.version+this.core.customStoragePrefix+"//"+this.name}get length(){return this.map.size}get keys(){return Array.from(this.map.keys())}get values(){return Array.from(this.map.values())}addToRecentlyDeleted(e){this.recentlyDeleted.push(e),this.recentlyDeleted.length>=this.recentlyDeletedLimit&&this.recentlyDeleted.splice(0,this.recentlyDeletedLimit/2)}async setDataStore(e){await this.core.storage.setItem(this.storageKey,e)}async getDataStore(){return await this.core.storage.getItem(this.storageKey)}getData(e){const t=this.map.get(e);if(!t){if(this.recentlyDeleted.includes(e)){const{message:n}=xe("MISSING_OR_INVALID",`Record was recently deleted - ${this.name}: ${e}`);throw this.logger.error(n),new Error(n)}const{message:i}=xe("NO_MATCHING_KEY",`${this.name}: ${e}`);throw this.logger.error(i),new Error(i)}return t}async persist(){await this.setDataStore(this.values)}async restore(){try{const e=await this.getDataStore();if(typeof e>"u"||!e.length)return;if(this.map.size){const{message:t}=xe("RESTORE_WILL_OVERRIDE",this.name);throw this.logger.error(t),new Error(t)}this.cached=e,this.logger.debug(`Successfully Restored value for ${this.name}`),this.logger.trace({type:"method",method:"restore",value:this.values})}catch(e){this.logger.debug(`Failed to Restore value for ${this.name}`),this.logger.error(e)}}isInitialized(){if(!this.initialized){const{message:e}=xe("NOT_INITIALIZED",this.name);throw new Error(e)}}}class xP{constructor(e,t){this.core=e,this.logger=t,this.name=gM,this.version=vM,this.events=new zr.exports,this.initialized=!1,this.storagePrefix=ts,this.ignoredPayloadTypes=[ws],this.registeredMethods=[],this.init=async()=>{this.initialized||(await this.pairings.init(),await this.cleanup(),this.registerRelayerEvents(),this.registerExpirerEvents(),this.initialized=!0,this.logger.trace("Initialized"))},this.register=({methods:i})=>{this.isInitialized(),this.registeredMethods=[...new Set([...this.registeredMethods,...i])]},this.create=async i=>{this.isInitialized();const n=t0(),s=await this.core.crypto.setSymKey(n),a=Ir(_e.FIVE_MINUTES),f={protocol:c2},h={topic:s,expiry:a,relay:f,active:!1,methods:i?.methods},u=mb({protocol:this.core.protocol,version:this.core.version,topic:s,symKey:n,relay:f,expiryTimestamp:a,methods:i?.methods});return this.events.emit(qo.create,h),this.core.expirer.set(s,a),await this.pairings.set(s,h),await this.core.relayer.subscribe(s,{transportType:i?.transportType}),{topic:s,uri:u}},this.pair=async i=>{this.isInitialized();const n=this.core.eventClient.createEvent({properties:{topic:i?.uri,trace:[rs.pairing_started]}});this.isValidPair(i,n);const{topic:s,symKey:a,relay:f,expiryTimestamp:h,methods:u}=vb(i.uri);n.props.properties.topic=s,n.addTrace(rs.pairing_uri_validation_success),n.addTrace(rs.pairing_uri_not_expired);let g;if(this.pairings.keys.includes(s)){if(g=this.pairings.get(s),n.addTrace(rs.existing_pairing),g.active)throw n.setError(Ss.active_pairing_already_exists),new Error(`Pairing already exists: ${s}. Please try again with a new connection URI.`);n.addTrace(rs.pairing_not_expired)}const w=h||Ir(_e.FIVE_MINUTES),M={topic:s,relay:f,expiry:w,active:!1,methods:u};this.core.expirer.set(s,w),await this.pairings.set(s,M),n.addTrace(rs.store_new_pairing),i.activatePairing&&await this.activate({topic:s}),this.events.emit(qo.create,M),n.addTrace(rs.emit_inactive_pairing),this.core.crypto.keychain.has(s)||await this.core.crypto.setSymKey(a,s),n.addTrace(rs.subscribing_pairing_topic);try{await this.core.relayer.confirmOnlineStateOrThrow()}catch{n.setError(Ss.no_internet_connection)}try{await this.core.relayer.subscribe(s,{relay:f})}catch(C){throw n.setError(Ss.subscribe_pairing_topic_failure),C}return n.addTrace(rs.subscribe_pairing_topic_success),M},this.activate=async({topic:i})=>{this.isInitialized();const n=Ir(_e.THIRTY_DAYS);this.core.expirer.set(i,n),await this.pairings.update(i,{active:!0,expiry:n})},this.ping=async i=>{this.isInitialized(),await this.isValidPing(i);const{topic:n}=i;if(this.pairings.keys.includes(n)){const s=await this.sendRequest(n,"wc_pairingPing",{}),{done:a,resolve:f,reject:h}=No();this.events.once(Dt("pairing_ping",s),({error:u})=>{u?h(u):f()}),await a()}},this.updateExpiry=async({topic:i,expiry:n})=>{this.isInitialized(),await this.pairings.update(i,{expiry:n})},this.updateMetadata=async({topic:i,metadata:n})=>{this.isInitialized(),await this.pairings.update(i,{peerMetadata:n})},this.getPairings=()=>(this.isInitialized(),this.pairings.values),this.disconnect=async i=>{this.isInitialized(),await this.isValidDisconnect(i);const{topic:n}=i;this.pairings.keys.includes(n)&&(await this.sendRequest(n,"wc_pairingDelete",Gt("USER_DISCONNECTED")),await this.deletePairing(n))},this.formatUriFromPairing=i=>{this.isInitialized();const{topic:n,relay:s,expiry:a,methods:f}=i,h=this.core.crypto.keychain.get(n);return mb({protocol:this.core.protocol,version:this.core.version,topic:n,symKey:h,relay:s,expiryTimestamp:a,methods:f})},this.sendRequest=async(i,n,s)=>{const a=Qs(n,s),f=await this.core.crypto.encode(i,a),h=lf[n].req;return this.core.history.set(i,a),this.core.relayer.publish(i,f,h),a.id},this.sendResult=async(i,n,s)=>{const a=ih(i,s),f=await this.core.crypto.encode(n,a),h=await this.core.history.get(n,i),u=lf[h.request.method].res;await this.core.relayer.publish(n,f,u),await this.core.history.resolve(a)},this.sendError=async(i,n,s)=>{const a=nh(i,s),f=await this.core.crypto.encode(n,a),h=await this.core.history.get(n,i),u=lf[h.request.method]?lf[h.request.method].res:lf.unregistered_method.res;await this.core.relayer.publish(n,f,u),await this.core.history.resolve(a)},this.deletePairing=async(i,n)=>{await this.core.relayer.unsubscribe(i),await Promise.all([this.pairings.delete(i,Gt("USER_DISCONNECTED")),this.core.crypto.deleteSymKey(i),n?Promise.resolve():this.core.expirer.del(i)])},this.cleanup=async()=>{const i=this.pairings.getAll().filter(n=>Ys(n.expiry));await Promise.all(i.map(n=>this.deletePairing(n.topic)))},this.onRelayEventRequest=i=>{const{topic:n,payload:s}=i;switch(s.method){case"wc_pairingPing":return this.onPairingPingRequest(n,s);case"wc_pairingDelete":return this.onPairingDeleteRequest(n,s);default:return this.onUnknownRpcMethodRequest(n,s)}},this.onRelayEventResponse=async i=>{const{topic:n,payload:s}=i,a=(await this.core.history.get(n,s.id)).request.method;switch(a){case"wc_pairingPing":return this.onPairingPingResponse(n,s);default:return this.onUnknownRpcMethodResponse(a)}},this.onPairingPingRequest=async(i,n)=>{const{id:s}=n;try{this.isValidPing({topic:i}),await this.sendResult(s,i,!0),this.events.emit(qo.ping,{id:s,topic:i})}catch(a){await this.sendError(s,i,a),this.logger.error(a)}},this.onPairingPingResponse=(i,n)=>{const{id:s}=n;setTimeout(()=>{es(n)?this.events.emit(Dt("pairing_ping",s),{}):rn(n)&&this.events.emit(Dt("pairing_ping",s),{error:n.error})},500)},this.onPairingDeleteRequest=async(i,n)=>{const{id:s}=n;try{this.isValidDisconnect({topic:i}),await this.deletePairing(i),this.events.emit(qo.delete,{id:s,topic:i})}catch(a){await this.sendError(s,i,a),this.logger.error(a)}},this.onUnknownRpcMethodRequest=async(i,n)=>{const{id:s,method:a}=n;try{if(this.registeredMethods.includes(a))return;const f=Gt("WC_METHOD_UNSUPPORTED",a);await this.sendError(s,i,f),this.logger.error(f)}catch(f){await this.sendError(s,i,f),this.logger.error(f)}},this.onUnknownRpcMethodResponse=i=>{this.registeredMethods.includes(i)||this.logger.error(Gt("WC_METHOD_UNSUPPORTED",i))},this.isValidPair=(i,n)=>{var s;if(!bi(i)){const{message:f}=xe("MISSING_OR_INVALID",`pair() params: ${i}`);throw n.setError(Ss.malformed_pairing_uri),new Error(f)}if(!hE(i.uri)){const{message:f}=xe("MISSING_OR_INVALID",`pair() uri: ${i.uri}`);throw n.setError(Ss.malformed_pairing_uri),new Error(f)}const a=vb(i?.uri);if(!((s=a?.relay)!=null&&s.protocol)){const{message:f}=xe("MISSING_OR_INVALID","pair() uri#relay-protocol");throw n.setError(Ss.malformed_pairing_uri),new Error(f)}if(!(a!=null&&a.symKey)){const{message:f}=xe("MISSING_OR_INVALID","pair() uri#symKey");throw n.setError(Ss.malformed_pairing_uri),new Error(f)}if(a!=null&&a.expiryTimestamp&&_e.toMiliseconds(a?.expiryTimestamp)<Date.now()){n.setError(Ss.pairing_expired);const{message:f}=xe("EXPIRED","pair() URI has expired. Please try again with a new connection URI.");throw new Error(f)}},this.isValidPing=async i=>{if(!bi(i)){const{message:s}=xe("MISSING_OR_INVALID",`ping() params: ${i}`);throw new Error(s)}const{topic:n}=i;await this.isValidPairingTopic(n)},this.isValidDisconnect=async i=>{if(!bi(i)){const{message:s}=xe("MISSING_OR_INVALID",`disconnect() params: ${i}`);throw new Error(s)}const{topic:n}=i;await this.isValidPairingTopic(n)},this.isValidPairingTopic=async i=>{if(!wr(i,!1)){const{message:n}=xe("MISSING_OR_INVALID",`pairing topic should be a string: ${i}`);throw new Error(n)}if(!this.pairings.keys.includes(i)){const{message:n}=xe("NO_MATCHING_KEY",`pairing topic doesn't exist: ${i}`);throw new Error(n)}if(Ys(this.pairings.get(i).expiry)){await this.deletePairing(i);const{message:n}=xe("EXPIRED",`pairing topic: ${i}`);throw new Error(n)}},this.core=e,this.logger=ci(t,this.name),this.pairings=new ko(this.core,this.logger,this.name,this.storagePrefix)}get context(){return yi(this.logger)}isInitialized(){if(!this.initialized){const{message:e}=xe("NOT_INITIALIZED",this.name);throw new Error(e)}}registerRelayerEvents(){this.core.relayer.on(Lr.message,async e=>{const{topic:t,message:i,transportType:n}=e;if(!this.pairings.keys.includes(t)||n===sr.link_mode||this.ignoredPayloadTypes.includes(this.core.crypto.getPayloadType(i)))return;const s=await this.core.crypto.decode(t,i);try{b0(s)?(this.core.history.set(t,s),this.onRelayEventRequest({topic:t,payload:s})):sh(s)&&(await this.core.history.resolve(s),await this.onRelayEventResponse({topic:t,payload:s}),this.core.history.delete(t,s.id))}catch(a){this.logger.error(a)}})}registerExpirerEvents(){this.core.expirer.on(on.expired,async e=>{const{topic:t}=Gm(e.target);t&&this.pairings.keys.includes(t)&&(await this.deletePairing(t,!0),this.events.emit(qo.expire,{topic:t}))})}}class AP extends jS{constructor(e,t){super(e,t),this.core=e,this.logger=t,this.records=new Map,this.events=new zr.exports.EventEmitter,this.name=mM,this.version=bM,this.cached=[],this.initialized=!1,this.storagePrefix=ts,this.init=async()=>{this.initialized||(this.logger.trace("Initialized"),await this.restore(),this.cached.forEach(i=>this.records.set(i.id,i)),this.cached=[],this.registerEventListeners(),this.initialized=!0)},this.set=(i,n,s)=>{if(this.isInitialized(),this.logger.debug("Setting JSON-RPC request history record"),this.logger.trace({type:"method",method:"set",topic:i,request:n,chainId:s}),this.records.has(n.id))return;const a={id:n.id,topic:i,request:{method:n.method,params:n.params||null},chainId:s,expiry:Ir(_e.THIRTY_DAYS)};this.records.set(a.id,a),this.persist(),this.events.emit(Sn.created,a)},this.resolve=async i=>{if(this.isInitialized(),this.logger.debug("Updating JSON-RPC response history record"),this.logger.trace({type:"method",method:"update",response:i}),!this.records.has(i.id))return;const n=await this.getRecord(i.id);typeof n.response>"u"&&(n.response=rn(i)?{error:i.error}:{result:i.result},this.records.set(n.id,n),this.persist(),this.events.emit(Sn.updated,n))},this.get=async(i,n)=>(this.isInitialized(),this.logger.debug("Getting record"),this.logger.trace({type:"method",method:"get",topic:i,id:n}),await this.getRecord(n)),this.delete=(i,n)=>{this.isInitialized(),this.logger.debug("Deleting record"),this.logger.trace({type:"method",method:"delete",id:n}),this.values.forEach(s=>{if(s.topic===i){if(typeof n<"u"&&s.id!==n)return;this.records.delete(s.id),this.events.emit(Sn.deleted,s)}}),this.persist()},this.exists=async(i,n)=>(this.isInitialized(),this.records.has(n)?(await this.getRecord(n)).topic===i:!1),this.on=(i,n)=>{this.events.on(i,n)},this.once=(i,n)=>{this.events.once(i,n)},this.off=(i,n)=>{this.events.off(i,n)},this.removeListener=(i,n)=>{this.events.removeListener(i,n)},this.logger=ci(t,this.name)}get context(){return yi(this.logger)}get storageKey(){return this.storagePrefix+this.version+this.core.customStoragePrefix+"//"+this.name}get size(){return this.records.size}get keys(){return Array.from(this.records.keys())}get values(){return Array.from(this.records.values())}get pending(){const e=[];return this.values.forEach(t=>{if(typeof t.response<"u")return;const i={topic:t.topic,request:Qs(t.request.method,t.request.params,t.id),chainId:t.chainId};return e.push(i)}),e}async setJsonRpcRecords(e){await this.core.storage.setItem(this.storageKey,e)}async getJsonRpcRecords(){return await this.core.storage.getItem(this.storageKey)}getRecord(e){this.isInitialized();const t=this.records.get(e);if(!t){const{message:i}=xe("NO_MATCHING_KEY",`${this.name}: ${e}`);throw new Error(i)}return t}async persist(){await this.setJsonRpcRecords(this.values),this.events.emit(Sn.sync)}async restore(){try{const e=await this.getJsonRpcRecords();if(typeof e>"u"||!e.length)return;if(this.records.size){const{message:t}=xe("RESTORE_WILL_OVERRIDE",this.name);throw this.logger.error(t),new Error(t)}this.cached=e,this.logger.debug(`Successfully Restored records for ${this.name}`),this.logger.trace({type:"method",method:"restore",records:this.values})}catch(e){this.logger.debug(`Failed to Restore records for ${this.name}`),this.logger.error(e)}}registerEventListeners(){this.events.on(Sn.created,e=>{const t=Sn.created;this.logger.info(`Emitting ${t}`),this.logger.debug({type:"event",event:t,record:e})}),this.events.on(Sn.updated,e=>{const t=Sn.updated;this.logger.info(`Emitting ${t}`),this.logger.debug({type:"event",event:t,record:e})}),this.events.on(Sn.deleted,e=>{const t=Sn.deleted;this.logger.info(`Emitting ${t}`),this.logger.debug({type:"event",event:t,record:e})}),this.core.heartbeat.on(Ha.pulse,()=>{this.cleanup()})}cleanup(){try{this.isInitialized();let e=!1;this.records.forEach(t=>{_e.toMiliseconds(t.expiry||0)-Date.now()<=0&&(this.logger.info(`Deleting expired history log: ${t.id}`),this.records.delete(t.id),this.events.emit(Sn.deleted,t,!1),e=!0)}),e&&this.persist()}catch(e){this.logger.warn(e)}}isInitialized(){if(!this.initialized){const{message:e}=xe("NOT_INITIALIZED",this.name);throw new Error(e)}}}class EP extends JS{constructor(e,t){super(e,t),this.core=e,this.logger=t,this.expirations=new Map,this.events=new zr.exports.EventEmitter,this.name=wM,this.version=yM,this.cached=[],this.initialized=!1,this.storagePrefix=ts,this.init=async()=>{this.initialized||(this.logger.trace("Initialized"),await this.restore(),this.cached.forEach(i=>this.expirations.set(i.target,i)),this.cached=[],this.registerEventListeners(),this.initialized=!0)},this.has=i=>{try{const n=this.formatTarget(i);return typeof this.getExpiration(n)<"u"}catch{return!1}},this.set=(i,n)=>{this.isInitialized();const s=this.formatTarget(i),a={target:s,expiry:n};this.expirations.set(s,a),this.checkExpiry(s,a),this.events.emit(on.created,{target:s,expiration:a})},this.get=i=>{this.isInitialized();const n=this.formatTarget(i);return this.getExpiration(n)},this.del=i=>{if(this.isInitialized(),this.has(i)){const n=this.formatTarget(i),s=this.getExpiration(n);this.expirations.delete(n),this.events.emit(on.deleted,{target:n,expiration:s})}},this.on=(i,n)=>{this.events.on(i,n)},this.once=(i,n)=>{this.events.once(i,n)},this.off=(i,n)=>{this.events.off(i,n)},this.removeListener=(i,n)=>{this.events.removeListener(i,n)},this.logger=ci(t,this.name)}get context(){return yi(this.logger)}get storageKey(){return this.storagePrefix+this.version+this.core.customStoragePrefix+"//"+this.name}get length(){return this.expirations.size}get keys(){return Array.from(this.expirations.keys())}get values(){return Array.from(this.expirations.values())}formatTarget(e){if(typeof e=="string")return nA(e);if(typeof e=="number")return sA(e);const{message:t}=xe("UNKNOWN_TYPE",`Target type: ${typeof e}`);throw new Error(t)}async setExpirations(e){await this.core.storage.setItem(this.storageKey,e)}async getExpirations(){return await this.core.storage.getItem(this.storageKey)}async persist(){await this.setExpirations(this.values),this.events.emit(on.sync)}async restore(){try{const e=await this.getExpirations();if(typeof e>"u"||!e.length)return;if(this.expirations.size){const{message:t}=xe("RESTORE_WILL_OVERRIDE",this.name);throw this.logger.error(t),new Error(t)}this.cached=e,this.logger.debug(`Successfully Restored expirations for ${this.name}`),this.logger.trace({type:"method",method:"restore",expirations:this.values})}catch(e){this.logger.debug(`Failed to Restore expirations for ${this.name}`),this.logger.error(e)}}getExpiration(e){const t=this.expirations.get(e);if(!t){const{message:i}=xe("NO_MATCHING_KEY",`${this.name}: ${e}`);throw this.logger.warn(i),new Error(i)}return t}checkExpiry(e,t){const{expiry:i}=t;_e.toMiliseconds(i)-Date.now()<=0&&this.expire(e,t)}expire(e,t){this.expirations.delete(e),this.events.emit(on.expired,{target:e,expiration:t})}checkExpirations(){this.core.relayer.connected&&this.expirations.forEach((e,t)=>this.checkExpiry(t,e))}registerEventListeners(){this.core.heartbeat.on(Ha.pulse,()=>this.checkExpirations()),this.events.on(on.created,e=>{const t=on.created;this.logger.info(`Emitting ${t}`),this.logger.debug({type:"event",event:t,data:e}),this.persist()}),this.events.on(on.expired,e=>{const t=on.expired;this.logger.info(`Emitting ${t}`),this.logger.debug({type:"event",event:t,data:e}),this.persist()}),this.events.on(on.deleted,e=>{const t=on.deleted;this.logger.info(`Emitting ${t}`),this.logger.debug({type:"event",event:t,data:e}),this.persist()})}isInitialized(){if(!this.initialized){const{message:e}=xe("NOT_INITIALIZED",this.name);throw new Error(e)}}}class SP extends QS{constructor(e,t,i){super(e,t,i),this.core=e,this.logger=t,this.store=i,this.name=_M,this.verifyUrlV3=AM,this.storagePrefix=ts,this.version=s2,this.init=async()=>{var n;this.isDevEnv||(this.publicKey=await this.store.getItem(this.storeKey),this.publicKey&&_e.toMiliseconds((n=this.publicKey)==null?void 0:n.expiresAt)<Date.now()&&(this.logger.debug("verify v2 public key expired"),await this.removePublicKey()))},this.register=async n=>{if(!Wc()||this.isDevEnv)return;const s=window.location.origin,{id:a,decryptedId:f}=n,h=`${this.verifyUrlV3}/attestation?projectId=${this.core.projectId}&origin=${s}&id=${a}&decryptedId=${f}`;try{const u=Oc(),g=this.startAbortTimer(_e.ONE_SECOND*5),w=await new Promise((M,C)=>{const O=()=>{window.removeEventListener("message",j),u.body.removeChild(N),C("attestation aborted")};this.abortController.signal.addEventListener("abort",O);const N=u.createElement("iframe");N.src=h,N.style.display="none",N.addEventListener("error",O,{signal:this.abortController.signal});const j=H=>{if(H.data&&typeof H.data=="string")try{const F=JSON.parse(H.data);if(F.type==="verify_attestation"){if(Jd(F.attestation).payload.id!==a)return;clearInterval(g),u.body.removeChild(N),this.abortController.signal.removeEventListener("abort",O),window.removeEventListener("message",j),M(F.attestation===null?"":F.attestation)}}catch(F){this.logger.warn(F)}};u.body.appendChild(N),window.addEventListener("message",j,{signal:this.abortController.signal})});return this.logger.debug("jwt attestation",w),w}catch(u){this.logger.warn(u)}return""},this.resolve=async n=>{if(this.isDevEnv)return"";const{attestationId:s,hash:a,encryptedId:f}=n;if(s===""){this.logger.debug("resolve: attestationId is empty, skipping");return}if(s){if(Jd(s).payload.id!==f)return;const u=await this.isValidJwtAttestation(s);if(u){if(!u.isVerified){this.logger.warn("resolve: jwt attestation: origin url not verified");return}return u}}if(!a)return;const h=this.getVerifyUrl(n?.verifyUrl);return this.fetchAttestation(a,h)},this.fetchAttestation=async(n,s)=>{this.logger.debug(`resolving attestation: ${n} from url: ${s}`);const a=this.startAbortTimer(_e.ONE_SECOND*5),f=await fetch(`${s}/attestation/${n}?v2Supported=true`,{signal:this.abortController.signal});return clearTimeout(a),f.status===200?await f.json():void 0},this.getVerifyUrl=n=>{let s=n||hf;return EM.includes(s)||(this.logger.info(`verify url: ${s}, not included in trusted list, assigning default: ${hf}`),s=hf),s},this.fetchPublicKey=async()=>{try{this.logger.debug(`fetching public key from: ${this.verifyUrlV3}`);const n=this.startAbortTimer(_e.FIVE_SECONDS),s=await fetch(`${this.verifyUrlV3}/public-key`,{signal:this.abortController.signal});return clearTimeout(n),await s.json()}catch(n){this.logger.warn(n)}},this.persistPublicKey=async n=>{this.logger.debug("persisting public key to local storage",n),await this.store.setItem(this.storeKey,n),this.publicKey=n},this.removePublicKey=async()=>{this.logger.debug("removing verify v2 public key from storage"),await this.store.removeItem(this.storeKey),this.publicKey=void 0},this.isValidJwtAttestation=async n=>{const s=await this.getPublicKey();try{if(s)return this.validateAttestation(n,s)}catch(f){this.logger.error(f),this.logger.warn("error validating attestation")}const a=await this.fetchAndPersistPublicKey();try{if(a)return this.validateAttestation(n,a)}catch(f){this.logger.error(f),this.logger.warn("error validating attestation")}},this.getPublicKey=async()=>this.publicKey?this.publicKey:await this.fetchAndPersistPublicKey(),this.fetchAndPersistPublicKey=async()=>{if(this.fetchPromise)return await this.fetchPromise,this.publicKey;this.fetchPromise=new Promise(async s=>{const a=await this.fetchPublicKey();a&&(await this.persistPublicKey(a),s(a))});const n=await this.fetchPromise;return this.fetchPromise=void 0,n},this.validateAttestation=(n,s)=>{const a=KA(n,s.publicKey),f={hasExpired:_e.toMiliseconds(a.exp)<Date.now(),payload:a};if(f.hasExpired)throw this.logger.warn("resolve: jwt attestation expired"),new Error("JWT attestation expired");return{origin:f.payload.origin,isScam:f.payload.isScam,isVerified:f.payload.isVerified}},this.logger=ci(t,this.name),this.abortController=new AbortController,this.isDevEnv=Qd(),this.init()}get storeKey(){return this.storagePrefix+this.version+this.core.customStoragePrefix+"//verify:public:key"}get context(){return yi(this.logger)}startAbortTimer(e){return this.abortController=new AbortController,setTimeout(()=>this.abortController.abort(),_e.toMiliseconds(e))}}class IP extends ZS{constructor(e,t){super(e,t),this.projectId=e,this.logger=t,this.context=SM,this.registerDeviceToken=async i=>{const{clientId:n,token:s,notificationType:a,enableEncrypted:f=!1}=i,h=`${IM}/${this.projectId}/clients`;await fetch(h,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({client_id:n,type:a,token:s,always_raw:f})})},this.logger=ci(t,this.context)}}var MP=Object.defineProperty,q2=Object.getOwnPropertySymbols,CP=Object.prototype.hasOwnProperty,PP=Object.prototype.propertyIsEnumerable,z2=(r,e,t)=>e in r?MP(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,gf=(r,e)=>{for(var t in e||(e={}))CP.call(e,t)&&z2(r,t,e[t]);if(q2)for(var t of q2(e))PP.call(e,t)&&z2(r,t,e[t]);return r};class DP extends XS{constructor(e,t,i=!0){super(e,t,i),this.core=e,this.logger=t,this.context=CM,this.storagePrefix=ts,this.storageVersion=MM,this.events=new Map,this.shouldPersist=!1,this.init=async()=>{if(!Qd())try{const n={eventId:Jm(),timestamp:Date.now(),domain:this.getAppDomain(),props:{event:"INIT",type:"",properties:{client_id:await this.core.crypto.getClientId(),user_agent:jm(this.core.relayer.protocol,this.core.relayer.version,y0)}}};await this.sendEvent([n])}catch(n){this.logger.warn(n)}},this.createEvent=n=>{const{event:s="ERROR",type:a="",properties:{topic:f,trace:h}}=n,u=Jm(),g=this.core.projectId||"",w=Date.now(),M=gf({eventId:u,timestamp:w,props:{event:s,type:a,properties:{topic:f,trace:h}},bundleId:g,domain:this.getAppDomain()},this.setMethods(u));return this.telemetryEnabled&&(this.events.set(u,M),this.shouldPersist=!0),M},this.getEvent=n=>{const{eventId:s,topic:a}=n;if(s)return this.events.get(s);const f=Array.from(this.events.values()).find(h=>h.props.properties.topic===a);if(f)return gf(gf({},f),this.setMethods(f.eventId))},this.deleteEvent=n=>{const{eventId:s}=n;this.events.delete(s),this.shouldPersist=!0},this.setEventListeners=()=>{this.core.heartbeat.on(Ha.pulse,async()=>{this.shouldPersist&&await this.persist(),this.events.forEach(n=>{_e.fromMiliseconds(Date.now())-_e.fromMiliseconds(n.timestamp)>PM&&(this.events.delete(n.eventId),this.shouldPersist=!0)})})},this.setMethods=n=>({addTrace:s=>this.addTrace(n,s),setError:s=>this.setError(n,s)}),this.addTrace=(n,s)=>{const a=this.events.get(n);a&&(a.props.properties.trace.push(s),this.events.set(n,a),this.shouldPersist=!0)},this.setError=(n,s)=>{const a=this.events.get(n);a&&(a.props.type=s,a.timestamp=Date.now(),this.events.set(n,a),this.shouldPersist=!0)},this.persist=async()=>{await this.core.storage.setItem(this.storageKey,Array.from(this.events.values())),this.shouldPersist=!1},this.restore=async()=>{try{const n=await this.core.storage.getItem(this.storageKey)||[];if(!n.length)return;n.forEach(s=>{this.events.set(s.eventId,gf(gf({},s),this.setMethods(s.eventId)))})}catch(n){this.logger.warn(n)}},this.submit=async()=>{if(!this.telemetryEnabled||this.events.size===0)return;const n=[];for(const[s,a]of this.events)a.props.type&&n.push(a);if(n.length!==0)try{if((await this.sendEvent(n)).ok)for(const s of n)this.events.delete(s.eventId),this.shouldPersist=!0}catch(s){this.logger.warn(s)}},this.sendEvent=async n=>{const s=this.getAppDomain()?"":"&sp=desktop";return await fetch(`${DM}?projectId=${this.core.projectId}&st=events_sdk&sv=js-${y0}${s}`,{method:"POST",body:JSON.stringify(n)})},this.getAppDomain=()=>km().url,this.logger=ci(t,this.context),this.telemetryEnabled=i,i?this.restore().then(async()=>{await this.submit(),this.setEventListeners()}):this.persist()}get storageKey(){return this.storagePrefix+this.storageVersion+this.core.customStoragePrefix+"//"+this.context}}var OP=Object.defineProperty,H2=Object.getOwnPropertySymbols,RP=Object.prototype.hasOwnProperty,TP=Object.prototype.propertyIsEnumerable,k2=(r,e,t)=>e in r?OP(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,j2=(r,e)=>{for(var t in e||(e={}))RP.call(e,t)&&k2(r,t,e[t]);if(H2)for(var t of H2(e))TP.call(e,t)&&k2(r,t,e[t]);return r};class S0 extends kS{constructor(e){var t;super(e),this.protocol=n2,this.version=s2,this.name=oh,this.events=new zr.exports.EventEmitter,this.initialized=!1,this.on=(a,f)=>this.events.on(a,f),this.once=(a,f)=>this.events.once(a,f),this.off=(a,f)=>this.events.off(a,f),this.removeListener=(a,f)=>this.events.removeListener(a,f),this.dispatchEnvelope=({topic:a,message:f,sessionExists:h})=>{if(!a||!f)return;const u={topic:a,message:f,publishedAt:Date.now(),transportType:sr.link_mode};this.relayer.onLinkMessageEvent(u,{sessionExists:h})},this.projectId=e?.projectId,this.relayUrl=e?.relayUrl||f2,this.customStoragePrefix=e!=null&&e.customStoragePrefix?`:${e.customStoragePrefix}`:"";const i=rh({level:typeof e?.logger=="string"&&e.logger?e.logger:QI.logger,name:oh}),{logger:n,chunkLoggerController:s}=HS({opts:i,maxSizeInBytes:e?.maxLogBlobSizeInBytes,loggerOverride:e?.logger});this.logChunkController=s,(t=this.logChunkController)!=null&&t.downloadLogsBlobInBrowser&&(window.downloadLogsBlobInBrowser=async()=>{var a,f;(a=this.logChunkController)!=null&&a.downloadLogsBlobInBrowser&&((f=this.logChunkController)==null||f.downloadLogsBlobInBrowser({clientId:await this.crypto.getClientId()}))}),this.logger=ci(n,this.name),this.heartbeat=new o0,this.crypto=new eP(this,this.logger,e?.keychain),this.history=new AP(this,this.logger),this.expirer=new EP(this,this.logger),this.storage=e!=null&&e.storage?e.storage:new pS(j2(j2({},ZI),e?.storageOptions)),this.relayer=new bP({core:this,logger:this.logger,relayUrl:this.relayUrl,projectId:this.projectId}),this.pairing=new xP(this,this.logger),this.verify=new SP(this,this.logger,this.storage),this.echoClient=new IP(this.projectId||"",this.logger),this.linkModeSupportedApps=[],this.eventClient=new DP(this,this.logger,e?.telemetryEnabled)}static async init(e){const t=new S0(e);await t.initialize();const i=await t.crypto.getClientId();return await t.storage.setItem(hM,i),t}get context(){return yi(this.logger)}async start(){this.initialized||await this.initialize()}async getLogsBlob(){var e;return(e=this.logChunkController)==null?void 0:e.logsToBlob({clientId:await this.crypto.getClientId()})}async addLinkModeSupportedApp(e){this.linkModeSupportedApps.includes(e)||(this.linkModeSupportedApps.push(e),await this.storage.setItem(l2,this.linkModeSupportedApps))}async initialize(){this.logger.trace("Initialized");try{await this.crypto.init(),await this.history.init(),await this.expirer.init(),await this.relayer.init(),await this.heartbeat.init(),await this.pairing.init(),this.linkModeSupportedApps=await this.storage.getItem(l2)||[],this.initialized=!0,this.logger.info("Core Initialization Success")}catch(e){throw this.logger.warn(`Core Initialization Failure at epoch ${Date.now()}`,e),this.logger.error(e.message),e}}}const NP=S0,W2="wc",K2=2,V2="client",I0=`${W2}@${K2}:${V2}:`,M0={name:V2,logger:"error",controller:!1,relayUrl:"wss://relay.walletconnect.org"},G2="WALLETCONNECT_DEEPLINK_CHOICE",$P="proposal",Y2="Proposal expired",LP="session",Wa=_e.SEVEN_DAYS,BP="engine",Br={wc_sessionPropose:{req:{ttl:_e.FIVE_MINUTES,prompt:!0,tag:1100},res:{ttl:_e.FIVE_MINUTES,prompt:!1,tag:1101},reject:{ttl:_e.FIVE_MINUTES,prompt:!1,tag:1120},autoReject:{ttl:_e.FIVE_MINUTES,prompt:!1,tag:1121}},wc_sessionSettle:{req:{ttl:_e.FIVE_MINUTES,prompt:!1,tag:1102},res:{ttl:_e.FIVE_MINUTES,prompt:!1,tag:1103}},wc_sessionUpdate:{req:{ttl:_e.ONE_DAY,prompt:!1,tag:1104},res:{ttl:_e.ONE_DAY,prompt:!1,tag:1105}},wc_sessionExtend:{req:{ttl:_e.ONE_DAY,prompt:!1,tag:1106},res:{ttl:_e.ONE_DAY,prompt:!1,tag:1107}},wc_sessionRequest:{req:{ttl:_e.FIVE_MINUTES,prompt:!0,tag:1108},res:{ttl:_e.FIVE_MINUTES,prompt:!1,tag:1109}},wc_sessionEvent:{req:{ttl:_e.FIVE_MINUTES,prompt:!0,tag:1110},res:{ttl:_e.FIVE_MINUTES,prompt:!1,tag:1111}},wc_sessionDelete:{req:{ttl:_e.ONE_DAY,prompt:!1,tag:1112},res:{ttl:_e.ONE_DAY,prompt:!1,tag:1113}},wc_sessionPing:{req:{ttl:_e.ONE_DAY,prompt:!1,tag:1114},res:{ttl:_e.ONE_DAY,prompt:!1,tag:1115}},wc_sessionAuthenticate:{req:{ttl:_e.ONE_HOUR,prompt:!0,tag:1116},res:{ttl:_e.ONE_HOUR,prompt:!1,tag:1117},reject:{ttl:_e.FIVE_MINUTES,prompt:!1,tag:1118},autoReject:{ttl:_e.FIVE_MINUTES,prompt:!1,tag:1119}}},C0={min:_e.FIVE_MINUTES,max:_e.SEVEN_DAYS},is={idle:"IDLE",active:"ACTIVE"},FP="request",UP=["wc_sessionPropose","wc_sessionRequest","wc_authRequest","wc_sessionAuthenticate"],qP="wc",zP="auth",HP="authKeys",kP="pairingTopics",jP="requests",ch=`${qP}@${1.5}:${zP}:`,fh=`${ch}:PUB_KEY`;var WP=Object.defineProperty,KP=Object.defineProperties,VP=Object.getOwnPropertyDescriptors,J2=Object.getOwnPropertySymbols,GP=Object.prototype.hasOwnProperty,YP=Object.prototype.propertyIsEnumerable,Q2=(r,e,t)=>e in r?WP(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t,pr=(r,e)=>{for(var t in e||(e={}))GP.call(e,t)&&Q2(r,t,e[t]);if(J2)for(var t of J2(e))YP.call(e,t)&&Q2(r,t,e[t]);return r},Mn=(r,e)=>KP(r,VP(e));class JP extends tI{constructor(e){super(e),this.name=BP,this.events=new zr.exports,this.initialized=!1,this.requestQueue={state:is.idle,queue:[]},this.sessionRequestQueue={state:is.idle,queue:[]},this.requestQueueDelay=_e.ONE_SECOND,this.expectedPairingMethodMap=new Map,this.recentlyDeletedMap=new Map,this.recentlyDeletedLimit=200,this.relayMessageCache=[],this.init=async()=>{this.initialized||(await this.cleanup(),this.registerRelayerEvents(),this.registerExpirerEvents(),this.registerPairingEvents(),await this.registerLinkModeListeners(),this.client.core.pairing.register({methods:Object.keys(Br)}),this.initialized=!0,setTimeout(()=>{this.sessionRequestQueue.queue=this.getPendingSessionRequests(),this.processSessionRequestQueue()},_e.toMiliseconds(this.requestQueueDelay)))},this.connect=async t=>{this.isInitialized(),await this.confirmOnlineStateOrThrow();const i=Mn(pr({},t),{requiredNamespaces:t.requiredNamespaces||{},optionalNamespaces:t.optionalNamespaces||{}});await this.isValidConnect(i);const{pairingTopic:n,requiredNamespaces:s,optionalNamespaces:a,sessionProperties:f,relays:h}=i;let u=n,g,w=!1;try{u&&(w=this.client.core.pairing.pairings.get(u).active)}catch(B){throw this.client.logger.error(`connect() -> pairing.get(${u}) failed`),B}if(!u||!w){const{topic:B,uri:z}=await this.client.core.pairing.create();u=B,g=z}if(!u){const{message:B}=xe("NO_MATCHING_KEY",`connect() pairing topic: ${u}`);throw new Error(B)}const M=await this.client.core.crypto.generateKeyPair(),C=Br.wc_sessionPropose.req.ttl||_e.FIVE_MINUTES,O=Ir(C),N=pr({requiredNamespaces:s,optionalNamespaces:a,relays:h??[{protocol:c2}],proposer:{publicKey:M,metadata:this.client.metadata},expiryTimestamp:O,pairingTopic:u},f&&{sessionProperties:f}),{reject:j,resolve:H,done:F}=No(C,Y2);this.events.once(Dt("session_connect"),async({error:B,session:z})=>{if(B)j(B);else if(z){z.self.publicKey=M;const W=Mn(pr({},z),{pairingTopic:N.pairingTopic,requiredNamespaces:N.requiredNamespaces,optionalNamespaces:N.optionalNamespaces,transportType:sr.relay});await this.client.session.set(z.topic,W),await this.setExpiry(z.topic,z.expiry),u&&await this.client.core.pairing.updateMetadata({topic:u,metadata:z.peer.metadata}),this.cleanupDuplicatePairings(W),H(W)}});const G=await this.sendRequest({topic:u,method:"wc_sessionPropose",params:N,throwOnFailedPublish:!0});return await this.setProposal(G,pr({id:G},N)),{uri:g,approval:F}},this.pair=async t=>{this.isInitialized(),await this.confirmOnlineStateOrThrow();try{return await this.client.core.pairing.pair(t)}catch(i){throw this.client.logger.error("pair() failed"),i}},this.approve=async t=>{var i,n,s;const a=this.client.core.eventClient.createEvent({properties:{topic:(i=t?.id)==null?void 0:i.toString(),trace:[In.session_approve_started]}});try{this.isInitialized(),await this.confirmOnlineStateOrThrow()}catch(U){throw a.setError(zo.no_internet_connection),U}try{await this.isValidProposalId(t?.id)}catch(U){throw this.client.logger.error(`approve() -> proposal.get(${t?.id}) failed`),a.setError(zo.proposal_not_found),U}try{await this.isValidApprove(t)}catch(U){throw this.client.logger.error("approve() -> isValidApprove() failed"),a.setError(zo.session_approve_namespace_validation_failure),U}const{id:f,relayProtocol:h,namespaces:u,sessionProperties:g,sessionConfig:w}=t,M=this.client.proposal.get(f);this.client.core.eventClient.deleteEvent({eventId:a.eventId});const{pairingTopic:C,proposer:O,requiredNamespaces:N,optionalNamespaces:j}=M;let H=(n=this.client.core.eventClient)==null?void 0:n.getEvent({topic:C});H||(H=(s=this.client.core.eventClient)==null?void 0:s.createEvent({type:In.session_approve_started,properties:{topic:C,trace:[In.session_approve_started,In.session_namespaces_validation_success]}}));const F=await this.client.core.crypto.generateKeyPair(),G=O.publicKey,B=await this.client.core.crypto.generateSharedKey(F,G),z=pr(pr({relay:{protocol:h??"irn"},namespaces:u,controller:{publicKey:F,metadata:this.client.metadata},expiry:Ir(Wa)},g&&{sessionProperties:g}),w&&{sessionConfig:w}),W=sr.relay;H.addTrace(In.subscribing_session_topic);try{await this.client.core.relayer.subscribe(B,{transportType:W})}catch(U){throw H.setError(zo.subscribe_session_topic_failure),U}H.addTrace(In.subscribe_session_topic_success);const _=Mn(pr({},z),{topic:B,requiredNamespaces:N,optionalNamespaces:j,pairingTopic:C,acknowledged:!1,self:z.controller,peer:{publicKey:O.publicKey,metadata:O.metadata},controller:F,transportType:sr.relay});await this.client.session.set(B,_),H.addTrace(In.store_session);try{H.addTrace(In.publishing_session_settle),await this.sendRequest({topic:B,method:"wc_sessionSettle",params:z,throwOnFailedPublish:!0}).catch(U=>{throw H?.setError(zo.session_settle_publish_failure),U}),H.addTrace(In.session_settle_publish_success),H.addTrace(In.publishing_session_approve),await this.sendResult({id:f,topic:C,result:{relay:{protocol:h??"irn"},responderPublicKey:F},throwOnFailedPublish:!0}).catch(U=>{throw H?.setError(zo.session_approve_publish_failure),U}),H.addTrace(In.session_approve_publish_success)}catch(U){throw this.client.logger.error(U),this.client.session.delete(B,Gt("USER_DISCONNECTED")),await this.client.core.relayer.unsubscribe(B),U}return this.client.core.eventClient.deleteEvent({eventId:H.eventId}),await this.client.core.pairing.updateMetadata({topic:C,metadata:O.metadata}),await this.client.proposal.delete(f,Gt("USER_DISCONNECTED")),await this.client.core.pairing.activate({topic:C}),await this.setExpiry(B,Ir(Wa)),{topic:B,acknowledged:()=>Promise.resolve(this.client.session.get(B))}},this.reject=async t=>{this.isInitialized(),await this.confirmOnlineStateOrThrow();try{await this.isValidReject(t)}catch(a){throw this.client.logger.error("reject() -> isValidReject() failed"),a}const{id:i,reason:n}=t;let s;try{s=this.client.proposal.get(i).pairingTopic}catch(a){throw this.client.logger.error(`reject() -> proposal.get(${i}) failed`),a}s&&(await this.sendError({id:i,topic:s,error:n,rpcOpts:Br.wc_sessionPropose.reject}),await this.client.proposal.delete(i,Gt("USER_DISCONNECTED")))},this.update=async t=>{this.isInitialized(),await this.confirmOnlineStateOrThrow();try{await this.isValidUpdate(t)}catch(w){throw this.client.logger.error("update() -> isValidUpdate() failed"),w}const{topic:i,namespaces:n}=t,{done:s,resolve:a,reject:f}=No(),h=Es(),u=Uo().toString(),g=this.client.session.get(i).namespaces;return this.events.once(Dt("session_update",h),({error:w})=>{w?f(w):a()}),await this.client.session.update(i,{namespaces:n}),await this.sendRequest({topic:i,method:"wc_sessionUpdate",params:{namespaces:n},throwOnFailedPublish:!0,clientRpcId:h,relayRpcId:u}).catch(w=>{this.client.logger.error(w),this.client.session.update(i,{namespaces:g}),f(w)}),{acknowledged:s}},this.extend=async t=>{this.isInitialized(),await this.confirmOnlineStateOrThrow();try{await this.isValidExtend(t)}catch(h){throw this.client.logger.error("extend() -> isValidExtend() failed"),h}const{topic:i}=t,n=Es(),{done:s,resolve:a,reject:f}=No();return this.events.once(Dt("session_extend",n),({error:h})=>{h?f(h):a()}),await this.setExpiry(i,Ir(Wa)),this.sendRequest({topic:i,method:"wc_sessionExtend",params:{},clientRpcId:n,throwOnFailedPublish:!0}).catch(h=>{f(h)}),{acknowledged:s}},this.request=async t=>{this.isInitialized();try{await this.isValidRequest(t)}catch(O){throw this.client.logger.error("request() -> isValidRequest() failed"),O}const{chainId:i,request:n,topic:s,expiry:a=Br.wc_sessionRequest.req.ttl}=t,f=this.client.session.get(s);f?.transportType===sr.relay&&await this.confirmOnlineStateOrThrow();const h=Es(),u=Uo().toString(),{done:g,resolve:w,reject:M}=No(a,"Request expired. Please try again.");this.events.once(Dt("session_request",h),({error:O,result:N})=>{O?M(O):w(N)});const C=this.getAppLinkIfEnabled(f.peer.metadata,f.transportType);return C?(await this.sendRequest({clientRpcId:h,relayRpcId:u,topic:s,method:"wc_sessionRequest",params:{request:Mn(pr({},n),{expiryTimestamp:Ir(a)}),chainId:i},expiry:a,throwOnFailedPublish:!0,appLink:C}).catch(O=>M(O)),this.client.events.emit("session_request_sent",{topic:s,request:n,chainId:i,id:h}),await g()):await Promise.all([new Promise(async O=>{await this.sendRequest({clientRpcId:h,relayRpcId:u,topic:s,method:"wc_sessionRequest",params:{request:Mn(pr({},n),{expiryTimestamp:Ir(a)}),chainId:i},expiry:a,throwOnFailedPublish:!0}).catch(N=>M(N)),this.client.events.emit("session_request_sent",{topic:s,request:n,chainId:i,id:h}),O()}),new Promise(async O=>{var N;if(!((N=f.sessionConfig)!=null&&N.disableDeepLink)){const j=await cA(this.client.core.storage,G2);await oA({id:h,topic:s,wcDeepLink:j})}O()}),g()]).then(O=>O[2])},this.respond=async t=>{this.isInitialized(),await this.isValidRespond(t);const{topic:i,response:n}=t,{id:s}=n,a=this.client.session.get(i);a.transportType===sr.relay&&await this.confirmOnlineStateOrThrow();const f=this.getAppLinkIfEnabled(a.peer.metadata,a.transportType);es(n)?await this.sendResult({id:s,topic:i,result:n.result,throwOnFailedPublish:!0,appLink:f}):rn(n)&&await this.sendError({id:s,topic:i,error:n.error,appLink:f}),this.cleanupAfterResponse(t)},this.ping=async t=>{this.isInitialized(),await this.confirmOnlineStateOrThrow();try{await this.isValidPing(t)}catch(n){throw this.client.logger.error("ping() -> isValidPing() failed"),n}const{topic:i}=t;if(this.client.session.keys.includes(i)){const n=Es(),s=Uo().toString(),{done:a,resolve:f,reject:h}=No();this.events.once(Dt("session_ping",n),({error:u})=>{u?h(u):f()}),await Promise.all([this.sendRequest({topic:i,method:"wc_sessionPing",params:{},throwOnFailedPublish:!0,clientRpcId:n,relayRpcId:s}),a()])}else this.client.core.pairing.pairings.keys.includes(i)&&await this.client.core.pairing.ping({topic:i})},this.emit=async t=>{this.isInitialized(),await this.confirmOnlineStateOrThrow(),await this.isValidEmit(t);const{topic:i,event:n,chainId:s}=t,a=Uo().toString(),f=Es();await this.sendRequest({topic:i,method:"wc_sessionEvent",params:{event:n,chainId:s},throwOnFailedPublish:!0,relayRpcId:a,clientRpcId:f})},this.disconnect=async t=>{this.isInitialized(),await this.confirmOnlineStateOrThrow(),await this.isValidDisconnect(t);const{topic:i}=t;if(this.client.session.keys.includes(i))await this.sendRequest({topic:i,method:"wc_sessionDelete",params:Gt("USER_DISCONNECTED"),throwOnFailedPublish:!0}),await this.deleteSession({topic:i,emitEvent:!1});else if(this.client.core.pairing.pairings.keys.includes(i))await this.client.core.pairing.disconnect({topic:i});else{const{message:n}=xe("MISMATCHED_TOPIC",`Session or pairing topic not found: ${i}`);throw new Error(n)}},this.find=t=>(this.isInitialized(),this.client.session.getAll().filter(i=>fE(i,t))),this.getPendingSessionRequests=()=>this.client.pendingRequest.getAll(),this.authenticate=async(t,i)=>{var n;this.isInitialized(),this.isValidAuthenticate(t);const s=i&&this.client.core.linkModeSupportedApps.includes(i)&&((n=this.client.metadata.redirect)==null?void 0:n.linkMode),a=s?sr.link_mode:sr.relay;a===sr.relay&&await this.confirmOnlineStateOrThrow();const{chains:f,statement:h="",uri:u,domain:g,nonce:w,type:M,exp:C,nbf:O,methods:N=[],expiry:j}=t,H=[...t.resources||[]],{topic:F,uri:G}=await this.client.core.pairing.create({methods:["wc_sessionAuthenticate"],transportType:a});this.client.logger.info({message:"Generated new pairing",pairing:{topic:F,uri:G}});const B=await this.client.core.crypto.generateKeyPair(),z=jl(B);if(await Promise.all([this.client.auth.authKeys.set(fh,{responseTopic:z,publicKey:B}),this.client.auth.pairingTopics.set(z,{topic:z,pairingTopic:F})]),await this.client.core.relayer.subscribe(z,{transportType:a}),this.client.logger.info(`sending request to new pairing topic: ${F}`),N.length>0){const{namespace:D}=qa(f[0]);let S=DA(D,"request",N);kl(H)&&(S=RA(S,H.pop())),H.push(S)}const W=j&&j>Br.wc_sessionAuthenticate.req.ttl?j:Br.wc_sessionAuthenticate.req.ttl,_={authPayload:{type:M??"caip122",chains:f,statement:h,aud:u,domain:g,version:"1",nonce:w,iat:new Date().toISOString(),exp:C,nbf:O,resources:H},requester:{publicKey:B,metadata:this.client.metadata},expiryTimestamp:Ir(W)},U={eip155:{chains:f,methods:[...new Set(["personal_sign",...N])],events:["chainChanged","accountsChanged"]}},ee={requiredNamespaces:{},optionalNamespaces:U,relays:[{protocol:"irn"}],pairingTopic:F,proposer:{publicKey:B,metadata:this.client.metadata},expiryTimestamp:Ir(Br.wc_sessionPropose.req.ttl)},{done:oe,resolve:L,reject:b}=No(W,"Request expired"),m=async({error:D,session:S})=>{if(this.events.off(Dt("session_request",d),l),D)b(D);else if(S){S.self.publicKey=B,await this.client.session.set(S.topic,S),await this.setExpiry(S.topic,S.expiry),F&&await this.client.core.pairing.updateMetadata({topic:F,metadata:S.peer.metadata});const v=this.client.session.get(S.topic);await this.deleteProposal(y),L({session:v})}},l=async D=>{var S,v,A;if(await this.deletePendingAuthRequest(d,{message:"fulfilled",code:0}),D.error){const J=Gt("WC_METHOD_UNSUPPORTED","wc_sessionAuthenticate");return D.error.code===J.code?void 0:(this.events.off(Dt("session_connect"),m),b(D.error.message))}await this.deleteProposal(y),this.events.off(Dt("session_connect"),m);const{cacaos:x,responder:$}=D.result,ae=[],R=[];for(const J of x){await eb({cacao:J,projectId:this.client.core.projectId})||(this.client.logger.error(J,"Signature verification failed"),b(Gt("SESSION_SETTLEMENT_FAILED","Signature verification failed")));const{p:K}=J,E=kl(K.resources),Y=[Xd(K.iss)],re=Hl(K.iss);if(E){const le=ib(E),he=nb(E);ae.push(...le),Y.push(...he)}for(const le of Y)R.push(`${le}:${re}`)}const X=await this.client.core.crypto.generateSharedKey(B,$.publicKey);let V;ae.length>0&&(V={topic:X,acknowledged:!0,self:{publicKey:B,metadata:this.client.metadata},peer:$,controller:$.publicKey,expiry:Ir(Wa),requiredNamespaces:{},optionalNamespaces:{},relay:{protocol:"irn"},pairingTopic:F,namespaces:bb([...new Set(ae)],[...new Set(R)]),transportType:a},await this.client.core.relayer.subscribe(X,{transportType:a}),await this.client.session.set(X,V),F&&await this.client.core.pairing.updateMetadata({topic:F,metadata:$.metadata}),V=this.client.session.get(X)),(S=this.client.metadata.redirect)!=null&&S.linkMode&&(v=$.metadata.redirect)!=null&&v.linkMode&&(A=$.metadata.redirect)!=null&&A.universal&&i&&(this.client.core.addLinkModeSupportedApp($.metadata.redirect.universal),this.client.session.update(X,{transportType:sr.link_mode})),L({auths:x,session:V})},d=Es(),y=Es();this.events.once(Dt("session_connect"),m),this.events.once(Dt("session_request",d),l);let P;try{if(s){const D=Qs("wc_sessionAuthenticate",_,d);this.client.core.history.set(F,D);const S=await this.client.core.crypto.encode("",D,{type:Jc,encoding:Gc});P=Kl(i,F,S)}else await Promise.all([this.sendRequest({topic:F,method:"wc_sessionAuthenticate",params:_,expiry:t.expiry,throwOnFailedPublish:!0,clientRpcId:d}),this.sendRequest({topic:F,method:"wc_sessionPropose",params:ee,expiry:Br.wc_sessionPropose.req.ttl,throwOnFailedPublish:!0,clientRpcId:y})])}catch(D){throw this.events.off(Dt("session_connect"),m),this.events.off(Dt("session_request",d),l),D}return await this.setProposal(y,pr({id:y},ee)),await this.setAuthRequest(d,{request:Mn(pr({},_),{verifyContext:{}}),pairingTopic:F,transportType:a}),{uri:P??G,response:oe}},this.approveSessionAuthenticate=async t=>{const{id:i,auths:n}=t,s=this.client.core.eventClient.createEvent({properties:{topic:i.toString(),trace:[Ho.authenticated_session_approve_started]}});try{this.isInitialized()}catch(j){throw s.setError(uf.no_internet_connection),j}const a=this.getPendingAuthRequest(i);if(!a)throw s.setError(uf.authenticated_session_pending_request_not_found),new Error(`Could not find pending auth request with id ${i}`);const f=a.transportType||sr.relay;f===sr.relay&&await this.confirmOnlineStateOrThrow();const h=a.requester.publicKey,u=await this.client.core.crypto.generateKeyPair(),g=jl(h),w={type:ws,receiverPublicKey:h,senderPublicKey:u},M=[],C=[];for(const j of n){if(!await eb({cacao:j,projectId:this.client.core.projectId})){s.setError(uf.invalid_cacao);const z=Gt("SESSION_SETTLEMENT_FAILED","Signature verification failed");throw await this.sendError({id:i,topic:g,error:z,encodeOpts:w}),new Error(z.message)}s.addTrace(Ho.cacaos_verified);const{p:H}=j,F=kl(H.resources),G=[Xd(H.iss)],B=Hl(H.iss);if(F){const z=ib(F),W=nb(F);M.push(...z),G.push(...W)}for(const z of G)C.push(`${z}:${B}`)}const O=await this.client.core.crypto.generateSharedKey(u,h);s.addTrace(Ho.create_authenticated_session_topic);let N;if(M?.length>0){N={topic:O,acknowledged:!0,self:{publicKey:u,metadata:this.client.metadata},peer:{publicKey:h,metadata:a.requester.metadata},controller:h,expiry:Ir(Wa),authentication:n,requiredNamespaces:{},optionalNamespaces:{},relay:{protocol:"irn"},pairingTopic:a.pairingTopic,namespaces:bb([...new Set(M)],[...new Set(C)]),transportType:f},s.addTrace(Ho.subscribing_authenticated_session_topic);try{await this.client.core.relayer.subscribe(O,{transportType:f})}catch(j){throw s.setError(uf.subscribe_authenticated_session_topic_failure),j}s.addTrace(Ho.subscribe_authenticated_session_topic_success),await this.client.session.set(O,N),s.addTrace(Ho.store_authenticated_session),await this.client.core.pairing.updateMetadata({topic:a.pairingTopic,metadata:a.requester.metadata})}s.addTrace(Ho.publishing_authenticated_session_approve);try{await this.sendResult({topic:g,id:i,result:{cacaos:n,responder:{publicKey:u,metadata:this.client.metadata}},encodeOpts:w,throwOnFailedPublish:!0,appLink:this.getAppLinkIfEnabled(a.requester.metadata,f)})}catch(j){throw s.setError(uf.authenticated_session_approve_publish_failure),j}return await this.client.auth.requests.delete(i,{message:"fulfilled",code:0}),await this.client.core.pairing.activate({topic:a.pairingTopic}),this.client.core.eventClient.deleteEvent({eventId:s.eventId}),{session:N}},this.rejectSessionAuthenticate=async t=>{this.isInitialized();const{id:i,reason:n}=t,s=this.getPendingAuthRequest(i);if(!s)throw new Error(`Could not find pending auth request with id ${i}`);s.transportType===sr.relay&&await this.confirmOnlineStateOrThrow();const a=s.requester.publicKey,f=await this.client.core.crypto.generateKeyPair(),h=jl(a),u={type:ws,receiverPublicKey:a,senderPublicKey:f};await this.sendError({id:i,topic:h,error:n,encodeOpts:u,rpcOpts:Br.wc_sessionAuthenticate.reject,appLink:this.getAppLinkIfEnabled(s.requester.metadata,s.transportType)}),await this.client.auth.requests.delete(i,{message:"rejected",code:0}),await this.client.proposal.delete(i,Gt("USER_DISCONNECTED"))},this.formatAuthMessage=t=>{this.isInitialized();const{request:i,iss:n}=t;return tb(i,n)},this.processRelayMessageCache=()=>{setTimeout(async()=>{if(this.relayMessageCache.length!==0)for(;this.relayMessageCache.length>0;)try{const t=this.relayMessageCache.shift();t&&await this.onRelayMessage(t)}catch(t){this.client.logger.error(t)}},50)},this.cleanupDuplicatePairings=async t=>{if(t.pairingTopic)try{const i=this.client.core.pairing.pairings.get(t.pairingTopic),n=this.client.core.pairing.pairings.getAll().filter(s=>{var a,f;return((a=s.peerMetadata)==null?void 0:a.url)&&((f=s.peerMetadata)==null?void 0:f.url)===t.peer.metadata.url&&s.topic&&s.topic!==i.topic});if(n.length===0)return;this.client.logger.info(`Cleaning up ${n.length} duplicate pairing(s)`),await Promise.all(n.map(s=>this.client.core.pairing.disconnect({topic:s.topic}))),this.client.logger.info("Duplicate pairings clean up finished")}catch(i){this.client.logger.error(i)}},this.deleteSession=async t=>{var i;const{topic:n,expirerHasDeleted:s=!1,emitEvent:a=!0,id:f=0}=t,{self:h}=this.client.session.get(n);await this.client.core.relayer.unsubscribe(n),await this.client.session.delete(n,Gt("USER_DISCONNECTED")),this.addToRecentlyDeleted(n,"session"),this.client.core.crypto.keychain.has(h.publicKey)&&await this.client.core.crypto.deleteKeyPair(h.publicKey),this.client.core.crypto.keychain.has(n)&&await this.client.core.crypto.deleteSymKey(n),s||this.client.core.expirer.del(n),this.client.core.storage.removeItem(G2).catch(u=>this.client.logger.warn(u)),this.getPendingSessionRequests().forEach(u=>{u.topic===n&&this.deletePendingSessionRequest(u.id,Gt("USER_DISCONNECTED"))}),n===((i=this.sessionRequestQueue.queue[0])==null?void 0:i.topic)&&(this.sessionRequestQueue.state=is.idle),a&&this.client.events.emit("session_delete",{id:f,topic:n})},this.deleteProposal=async(t,i)=>{if(i)try{const n=this.client.proposal.get(t),s=this.client.core.eventClient.getEvent({topic:n.pairingTopic});s?.setError(zo.proposal_expired)}catch{}await Promise.all([this.client.proposal.delete(t,Gt("USER_DISCONNECTED")),i?Promise.resolve():this.client.core.expirer.del(t)]),this.addToRecentlyDeleted(t,"proposal")},this.deletePendingSessionRequest=async(t,i,n=!1)=>{await Promise.all([this.client.pendingRequest.delete(t,i),n?Promise.resolve():this.client.core.expirer.del(t)]),this.addToRecentlyDeleted(t,"request"),this.sessionRequestQueue.queue=this.sessionRequestQueue.queue.filter(s=>s.id!==t),n&&(this.sessionRequestQueue.state=is.idle,this.client.events.emit("session_request_expire",{id:t}))},this.deletePendingAuthRequest=async(t,i,n=!1)=>{await Promise.all([this.client.auth.requests.delete(t,i),n?Promise.resolve():this.client.core.expirer.del(t)])},this.setExpiry=async(t,i)=>{this.client.session.keys.includes(t)&&(this.client.core.expirer.set(t,i),await this.client.session.update(t,{expiry:i}))},this.setProposal=async(t,i)=>{this.client.core.expirer.set(t,Ir(Br.wc_sessionPropose.req.ttl)),await this.client.proposal.set(t,i)},this.setAuthRequest=async(t,i)=>{const{request:n,pairingTopic:s,transportType:a=sr.relay}=i;this.client.core.expirer.set(t,n.expiryTimestamp),await this.client.auth.requests.set(t,{authPayload:n.authPayload,requester:n.requester,expiryTimestamp:n.expiryTimestamp,id:t,pairingTopic:s,verifyContext:n.verifyContext,transportType:a})},this.setPendingSessionRequest=async t=>{const{id:i,topic:n,params:s,verifyContext:a}=t,f=s.request.expiryTimestamp||Ir(Br.wc_sessionRequest.req.ttl);this.client.core.expirer.set(i,f),await this.client.pendingRequest.set(i,{id:i,topic:n,params:s,verifyContext:a})},this.sendRequest=async t=>{const{topic:i,method:n,params:s,expiry:a,relayRpcId:f,clientRpcId:h,throwOnFailedPublish:u,appLink:g}=t,w=Qs(n,s,h);let M;const C=!!g;try{const j=C?Gc:Js;M=await this.client.core.crypto.encode(i,w,{encoding:j})}catch(j){throw await this.cleanup(),this.client.logger.error(`sendRequest() -> core.crypto.encode() for topic ${i} failed`),j}let O;if(UP.includes(n)){const j=ys(JSON.stringify(w)),H=ys(M);O=await this.client.core.verify.register({id:H,decryptedId:j})}const N=Br[n].req;if(N.attestation=O,a&&(N.ttl=a),f&&(N.id=f),this.client.core.history.set(i,w),C){const j=Kl(g,i,M);await global.Linking.openURL(j,this.client.name)}else{const j=Br[n].req;a&&(j.ttl=a),f&&(j.id=f),u?(j.internal=Mn(pr({},j.internal),{throwOnFailedPublish:!0}),await this.client.core.relayer.publish(i,M,j)):this.client.core.relayer.publish(i,M,j).catch(H=>this.client.logger.error(H))}return w.id},this.sendResult=async t=>{const{id:i,topic:n,result:s,throwOnFailedPublish:a,encodeOpts:f,appLink:h}=t,u=ih(i,s);let g;const w=h&&typeof(global==null?void 0:global.Linking)<"u";try{const C=w?Gc:Js;g=await this.client.core.crypto.encode(n,u,Mn(pr({},f||{}),{encoding:C}))}catch(C){throw await this.cleanup(),this.client.logger.error(`sendResult() -> core.crypto.encode() for topic ${n} failed`),C}let M;try{M=await this.client.core.history.get(n,i)}catch(C){throw this.client.logger.error(`sendResult() -> history.get(${n}, ${i}) failed`),C}if(w){const C=Kl(h,n,g);await global.Linking.openURL(C,this.client.name)}else{const C=Br[M.request.method].res;a?(C.internal=Mn(pr({},C.internal),{throwOnFailedPublish:!0}),await this.client.core.relayer.publish(n,g,C)):this.client.core.relayer.publish(n,g,C).catch(O=>this.client.logger.error(O))}await this.client.core.history.resolve(u)},this.sendError=async t=>{const{id:i,topic:n,error:s,encodeOpts:a,rpcOpts:f,appLink:h}=t,u=nh(i,s);let g;const w=h&&typeof(global==null?void 0:global.Linking)<"u";try{const C=w?Gc:Js;g=await this.client.core.crypto.encode(n,u,Mn(pr({},a||{}),{encoding:C}))}catch(C){throw await this.cleanup(),this.client.logger.error(`sendError() -> core.crypto.encode() for topic ${n} failed`),C}let M;try{M=await this.client.core.history.get(n,i)}catch(C){throw this.client.logger.error(`sendError() -> history.get(${n}, ${i}) failed`),C}if(w){const C=Kl(h,n,g);await global.Linking.openURL(C,this.client.name)}else{const C=f||Br[M.request.method].res;this.client.core.relayer.publish(n,g,C)}await this.client.core.history.resolve(u)},this.cleanup=async()=>{const t=[],i=[];this.client.session.getAll().forEach(n=>{let s=!1;Ys(n.expiry)&&(s=!0),this.client.core.crypto.keychain.has(n.topic)||(s=!0),s&&t.push(n.topic)}),this.client.proposal.getAll().forEach(n=>{Ys(n.expiryTimestamp)&&i.push(n.id)}),await Promise.all([...t.map(n=>this.deleteSession({topic:n})),...i.map(n=>this.deleteProposal(n))])},this.onRelayEventRequest=async t=>{this.requestQueue.queue.push(t),await this.processRequestsQueue()},this.processRequestsQueue=async()=>{if(this.requestQueue.state===is.active){this.client.logger.info("Request queue already active, skipping...");return}for(this.client.logger.info(`Request queue starting with ${this.requestQueue.queue.length} requests`);this.requestQueue.queue.length>0;){this.requestQueue.state=is.active;const t=this.requestQueue.queue.shift();if(t)try{await this.processRequest(t)}catch(i){this.client.logger.warn(i)}}this.requestQueue.state=is.idle},this.processRequest=async t=>{const{topic:i,payload:n,attestation:s,transportType:a,encryptedId:f}=t,h=n.method;if(!this.shouldIgnorePairingRequest({topic:i,requestMethod:h}))switch(h){case"wc_sessionPropose":return await this.onSessionProposeRequest({topic:i,payload:n,attestation:s,encryptedId:f});case"wc_sessionSettle":return await this.onSessionSettleRequest(i,n);case"wc_sessionUpdate":return await this.onSessionUpdateRequest(i,n);case"wc_sessionExtend":return await this.onSessionExtendRequest(i,n);case"wc_sessionPing":return await this.onSessionPingRequest(i,n);case"wc_sessionDelete":return await this.onSessionDeleteRequest(i,n);case"wc_sessionRequest":return await this.onSessionRequest({topic:i,payload:n,attestation:s,encryptedId:f,transportType:a});case"wc_sessionEvent":return await this.onSessionEventRequest(i,n);case"wc_sessionAuthenticate":return await this.onSessionAuthenticateRequest({topic:i,payload:n,attestation:s,encryptedId:f,transportType:a});default:return this.client.logger.info(`Unsupported request method ${h}`)}},this.onRelayEventResponse=async t=>{const{topic:i,payload:n,transportType:s}=t,a=(await this.client.core.history.get(i,n.id)).request.method;switch(a){case"wc_sessionPropose":return this.onSessionProposeResponse(i,n,s);case"wc_sessionSettle":return this.onSessionSettleResponse(i,n);case"wc_sessionUpdate":return this.onSessionUpdateResponse(i,n);case"wc_sessionExtend":return this.onSessionExtendResponse(i,n);case"wc_sessionPing":return this.onSessionPingResponse(i,n);case"wc_sessionRequest":return this.onSessionRequestResponse(i,n);case"wc_sessionAuthenticate":return this.onSessionAuthenticateResponse(i,n);default:return this.client.logger.info(`Unsupported response method ${a}`)}},this.onRelayEventUnknownPayload=t=>{const{topic:i}=t,{message:n}=xe("MISSING_OR_INVALID",`Decoded payload on topic ${i} is not identifiable as a JSON-RPC request or a response.`);throw new Error(n)},this.shouldIgnorePairingRequest=t=>{const{topic:i,requestMethod:n}=t,s=this.expectedPairingMethodMap.get(i);return!s||s.includes(n)?!1:!!(s.includes("wc_sessionAuthenticate")&&this.client.events.listenerCount("session_authenticate")>0)},this.onSessionProposeRequest=async t=>{const{topic:i,payload:n,attestation:s,encryptedId:a}=t,{params:f,id:h}=n;try{const u=this.client.core.eventClient.getEvent({topic:i});this.client.events.listenerCount("session_proposal")===0&&(console.warn("No listener for session_proposal event"),u?.setError(Ss.proposal_listener_not_found)),this.isValidConnect(pr({},n.params));const g=f.expiryTimestamp||Ir(Br.wc_sessionPropose.req.ttl),w=pr({id:h,pairingTopic:i,expiryTimestamp:g},f);await this.setProposal(h,w);const M=await this.getVerifyContext({attestationId:s,hash:ys(JSON.stringify(n)),encryptedId:a,metadata:w.proposer.metadata});u?.addTrace(rs.emit_session_proposal),this.client.events.emit("session_proposal",{id:h,params:w,verifyContext:M})}catch(u){await this.sendError({id:h,topic:i,error:u,rpcOpts:Br.wc_sessionPropose.autoReject}),this.client.logger.error(u)}},this.onSessionProposeResponse=async(t,i,n)=>{const{id:s}=i;if(es(i)){const{result:a}=i;this.client.logger.trace({type:"method",method:"onSessionProposeResponse",result:a});const f=this.client.proposal.get(s);this.client.logger.trace({type:"method",method:"onSessionProposeResponse",proposal:f});const h=f.proposer.publicKey;this.client.logger.trace({type:"method",method:"onSessionProposeResponse",selfPublicKey:h});const u=a.responderPublicKey;this.client.logger.trace({type:"method",method:"onSessionProposeResponse",peerPublicKey:u});const g=await this.client.core.crypto.generateSharedKey(h,u);this.client.logger.trace({type:"method",method:"onSessionProposeResponse",sessionTopic:g});const w=await this.client.core.relayer.subscribe(g,{transportType:n});this.client.logger.trace({type:"method",method:"onSessionProposeResponse",subscriptionId:w}),await this.client.core.pairing.activate({topic:t})}else if(rn(i)){await this.client.proposal.delete(s,Gt("USER_DISCONNECTED"));const a=Dt("session_connect");if(this.events.listenerCount(a)===0)throw new Error(`emitting ${a} without any listeners, 954`);this.events.emit(Dt("session_connect"),{error:i.error})}},this.onSessionSettleRequest=async(t,i)=>{const{id:n,params:s}=i;try{this.isValidSessionSettleRequest(s);const{relay:a,controller:f,expiry:h,namespaces:u,sessionProperties:g,sessionConfig:w}=i.params,M=Mn(pr(pr({topic:t,relay:a,expiry:h,namespaces:u,acknowledged:!0,pairingTopic:"",requiredNamespaces:{},optionalNamespaces:{},controller:f.publicKey,self:{publicKey:"",metadata:this.client.metadata},peer:{publicKey:f.publicKey,metadata:f.metadata}},g&&{sessionProperties:g}),w&&{sessionConfig:w}),{transportType:sr.relay}),C=Dt("session_connect");if(this.events.listenerCount(C)===0)throw new Error(`emitting ${C} without any listeners 997`);this.events.emit(Dt("session_connect"),{session:M}),await this.sendResult({id:i.id,topic:t,result:!0,throwOnFailedPublish:!0})}catch(a){await this.sendError({id:n,topic:t,error:a}),this.client.logger.error(a)}},this.onSessionSettleResponse=async(t,i)=>{const{id:n}=i;es(i)?(await this.client.session.update(t,{acknowledged:!0}),this.events.emit(Dt("session_approve",n),{})):rn(i)&&(await this.client.session.delete(t,Gt("USER_DISCONNECTED")),this.events.emit(Dt("session_approve",n),{error:i.error}))},this.onSessionUpdateRequest=async(t,i)=>{const{params:n,id:s}=i;try{const a=`${t}_session_update`,f=rf.get(a);if(f&&this.isRequestOutOfSync(f,s)){this.client.logger.warn(`Discarding out of sync request - ${s}`),this.sendError({id:s,topic:t,error:Gt("INVALID_UPDATE_REQUEST")});return}this.isValidUpdate(pr({topic:t},n));try{rf.set(a,s),await this.client.session.update(t,{namespaces:n.namespaces}),await this.sendResult({id:s,topic:t,result:!0,throwOnFailedPublish:!0})}catch(h){throw rf.delete(a),h}this.client.events.emit("session_update",{id:s,topic:t,params:n})}catch(a){await this.sendError({id:s,topic:t,error:a}),this.client.logger.error(a)}},this.isRequestOutOfSync=(t,i)=>i.toString().slice(0,-3)<t.toString().slice(0,-3),this.onSessionUpdateResponse=(t,i)=>{const{id:n}=i,s=Dt("session_update",n);if(this.events.listenerCount(s)===0)throw new Error(`emitting ${s} without any listeners`);es(i)?this.events.emit(Dt("session_update",n),{}):rn(i)&&this.events.emit(Dt("session_update",n),{error:i.error})},this.onSessionExtendRequest=async(t,i)=>{const{id:n}=i;try{this.isValidExtend({topic:t}),await this.setExpiry(t,Ir(Wa)),await this.sendResult({id:n,topic:t,result:!0,throwOnFailedPublish:!0}),this.client.events.emit("session_extend",{id:n,topic:t})}catch(s){await this.sendError({id:n,topic:t,error:s}),this.client.logger.error(s)}},this.onSessionExtendResponse=(t,i)=>{const{id:n}=i,s=Dt("session_extend",n);if(this.events.listenerCount(s)===0)throw new Error(`emitting ${s} without any listeners`);es(i)?this.events.emit(Dt("session_extend",n),{}):rn(i)&&this.events.emit(Dt("session_extend",n),{error:i.error})},this.onSessionPingRequest=async(t,i)=>{const{id:n}=i;try{this.isValidPing({topic:t}),await this.sendResult({id:n,topic:t,result:!0,throwOnFailedPublish:!0}),this.client.events.emit("session_ping",{id:n,topic:t})}catch(s){await this.sendError({id:n,topic:t,error:s}),this.client.logger.error(s)}},this.onSessionPingResponse=(t,i)=>{const{id:n}=i,s=Dt("session_ping",n);if(this.events.listenerCount(s)===0)throw new Error(`emitting ${s} without any listeners`);setTimeout(()=>{es(i)?this.events.emit(Dt("session_ping",n),{}):rn(i)&&this.events.emit(Dt("session_ping",n),{error:i.error})},500)},this.onSessionDeleteRequest=async(t,i)=>{const{id:n}=i;try{this.isValidDisconnect({topic:t,reason:i.params}),Promise.all([new Promise(s=>{this.client.core.relayer.once(Lr.publish,async()=>{s(await this.deleteSession({topic:t,id:n}))})}),this.sendResult({id:n,topic:t,result:!0,throwOnFailedPublish:!0}),this.cleanupPendingSentRequestsForTopic({topic:t,error:Gt("USER_DISCONNECTED")})]).catch(s=>this.client.logger.error(s))}catch(s){this.client.logger.error(s)}},this.onSessionRequest=async t=>{var i,n,s;const{topic:a,payload:f,attestation:h,encryptedId:u,transportType:g}=t,{id:w,params:M}=f;try{await this.isValidRequest(pr({topic:a},M));const C=this.client.session.get(a),O=await this.getVerifyContext({attestationId:h,hash:ys(JSON.stringify(Qs("wc_sessionRequest",M,w))),encryptedId:u,metadata:C.peer.metadata,transportType:g}),N={id:w,topic:a,params:M,verifyContext:O};await this.setPendingSessionRequest(N),g===sr.link_mode&&(i=C.peer.metadata.redirect)!=null&&i.universal&&this.client.core.addLinkModeSupportedApp((n=C.peer.metadata.redirect)==null?void 0:n.universal),(s=this.client.signConfig)!=null&&s.disableRequestQueue?this.emitSessionRequest(N):(this.addSessionRequestToSessionRequestQueue(N),this.processSessionRequestQueue())}catch(C){await this.sendError({id:w,topic:a,error:C}),this.client.logger.error(C)}},this.onSessionRequestResponse=(t,i)=>{const{id:n}=i,s=Dt("session_request",n);if(this.events.listenerCount(s)===0)throw new Error(`emitting ${s} without any listeners`);es(i)?this.events.emit(Dt("session_request",n),{result:i.result}):rn(i)&&this.events.emit(Dt("session_request",n),{error:i.error})},this.onSessionEventRequest=async(t,i)=>{const{id:n,params:s}=i;try{const a=`${t}_session_event_${s.event.name}`,f=rf.get(a);if(f&&this.isRequestOutOfSync(f,n)){this.client.logger.info(`Discarding out of sync request - ${n}`);return}this.isValidEmit(pr({topic:t},s)),this.client.events.emit("session_event",{id:n,topic:t,params:s}),rf.set(a,n)}catch(a){await this.sendError({id:n,topic:t,error:a}),this.client.logger.error(a)}},this.onSessionAuthenticateResponse=(t,i)=>{const{id:n}=i;this.client.logger.trace({type:"method",method:"onSessionAuthenticateResponse",topic:t,payload:i}),es(i)?this.events.emit(Dt("session_request",n),{result:i.result}):rn(i)&&this.events.emit(Dt("session_request",n),{error:i.error})},this.onSessionAuthenticateRequest=async t=>{var i;const{topic:n,payload:s,attestation:a,encryptedId:f,transportType:h}=t;try{const{requester:u,authPayload:g,expiryTimestamp:w}=s.params,M=await this.getVerifyContext({attestationId:a,hash:ys(JSON.stringify(s)),encryptedId:f,metadata:u.metadata,transportType:h}),C={requester:u,pairingTopic:n,id:s.id,authPayload:g,verifyContext:M,expiryTimestamp:w};await this.setAuthRequest(s.id,{request:C,pairingTopic:n,transportType:h}),h===sr.link_mode&&(i=u.metadata.redirect)!=null&&i.universal&&this.client.core.addLinkModeSupportedApp(u.metadata.redirect.universal),this.client.events.emit("session_authenticate",{topic:n,params:s.params,id:s.id,verifyContext:M})}catch(u){this.client.logger.error(u);const g=s.params.requester.publicKey,w=await this.client.core.crypto.generateKeyPair(),M=this.getAppLinkIfEnabled(s.params.requester.metadata,h),C={type:ws,receiverPublicKey:g,senderPublicKey:w};await this.sendError({id:s.id,topic:n,error:u,encodeOpts:C,rpcOpts:Br.wc_sessionAuthenticate.autoReject,appLink:M})}},this.addSessionRequestToSessionRequestQueue=t=>{this.sessionRequestQueue.queue.push(t)},this.cleanupAfterResponse=t=>{this.deletePendingSessionRequest(t.response.id,{message:"fulfilled",code:0}),setTimeout(()=>{this.sessionRequestQueue.state=is.idle,this.processSessionRequestQueue()},_e.toMiliseconds(this.requestQueueDelay))},this.cleanupPendingSentRequestsForTopic=({topic:t,error:i})=>{const n=this.client.core.history.pending;n.length>0&&n.filter(s=>s.topic===t&&s.request.method==="wc_sessionRequest").forEach(s=>{const a=s.request.id,f=Dt("session_request",a);if(this.events.listenerCount(f)===0)throw new Error(`emitting ${f} without any listeners`);this.events.emit(Dt("session_request",s.request.id),{error:i})})},this.processSessionRequestQueue=()=>{if(this.sessionRequestQueue.state===is.active){this.client.logger.info("session request queue is already active.");return}const t=this.sessionRequestQueue.queue[0];if(!t){this.client.logger.info("session request queue is empty.");return}try{this.sessionRequestQueue.state=is.active,this.emitSessionRequest(t)}catch(i){this.client.logger.error(i)}},this.emitSessionRequest=t=>{this.client.events.emit("session_request",t)},this.onPairingCreated=t=>{if(t.methods&&this.expectedPairingMethodMap.set(t.topic,t.methods),t.active)return;const i=this.client.proposal.getAll().find(n=>n.pairingTopic===t.topic);i&&this.onSessionProposeRequest({topic:t.topic,payload:Qs("wc_sessionPropose",{requiredNamespaces:i.requiredNamespaces,optionalNamespaces:i.optionalNamespaces,relays:i.relays,proposer:i.proposer,sessionProperties:i.sessionProperties},i.id)})},this.isValidConnect=async t=>{if(!bi(t)){const{message:h}=xe("MISSING_OR_INVALID",`connect() params: ${JSON.stringify(t)}`);throw new Error(h)}const{pairingTopic:i,requiredNamespaces:n,optionalNamespaces:s,sessionProperties:a,relays:f}=t;if(ai(i)||await this.isValidPairingTopic(i),!_E(f,!0)){const{message:h}=xe("MISSING_OR_INVALID",`connect() relays: ${f}`);throw new Error(h)}!ai(n)&&tf(n)!==0&&this.validateNamespaces(n,"requiredNamespaces"),!ai(s)&&tf(s)!==0&&this.validateNamespaces(s,"optionalNamespaces"),ai(a)||this.validateSessionProps(a,"sessionProperties")},this.validateNamespaces=(t,i)=>{const n=yE(t,"connect()",i);if(n)throw new Error(n.message)},this.isValidApprove=async t=>{if(!bi(t))throw new Error(xe("MISSING_OR_INVALID",`approve() params: ${t}`).message);const{id:i,namespaces:n,relayProtocol:s,sessionProperties:a}=t;this.checkRecentlyDeleted(i),await this.isValidProposalId(i);const f=this.client.proposal.get(i),h=n0(n,"approve()");if(h)throw new Error(h.message);const u=Ab(f.requiredNamespaces,n,"approve()");if(u)throw new Error(u.message);if(!wr(s,!0)){const{message:g}=xe("MISSING_OR_INVALID",`approve() relayProtocol: ${s}`);throw new Error(g)}ai(a)||this.validateSessionProps(a,"sessionProperties")},this.isValidReject=async t=>{if(!bi(t)){const{message:s}=xe("MISSING_OR_INVALID",`reject() params: ${t}`);throw new Error(s)}const{id:i,reason:n}=t;if(this.checkRecentlyDeleted(i),await this.isValidProposalId(i),!AE(n)){const{message:s}=xe("MISSING_OR_INVALID",`reject() reason: ${JSON.stringify(n)}`);throw new Error(s)}},this.isValidSessionSettleRequest=t=>{if(!bi(t)){const{message:u}=xe("MISSING_OR_INVALID",`onSessionSettleRequest() params: ${t}`);throw new Error(u)}const{relay:i,controller:n,namespaces:s,expiry:a}=t;if(!_b(i)){const{message:u}=xe("MISSING_OR_INVALID","onSessionSettleRequest() relay protocol should be a string");throw new Error(u)}const f=pE(n,"onSessionSettleRequest()");if(f)throw new Error(f.message);const h=n0(s,"onSessionSettleRequest()");if(h)throw new Error(h.message);if(Ys(a)){const{message:u}=xe("EXPIRED","onSessionSettleRequest()");throw new Error(u)}},this.isValidUpdate=async t=>{if(!bi(t)){const{message:h}=xe("MISSING_OR_INVALID",`update() params: ${t}`);throw new Error(h)}const{topic:i,namespaces:n}=t;this.checkRecentlyDeleted(i),await this.isValidSessionTopic(i);const s=this.client.session.get(i),a=n0(n,"update()");if(a)throw new Error(a.message);const f=Ab(s.requiredNamespaces,n,"update()");if(f)throw new Error(f.message)},this.isValidExtend=async t=>{if(!bi(t)){const{message:n}=xe("MISSING_OR_INVALID",`extend() params: ${t}`);throw new Error(n)}const{topic:i}=t;this.checkRecentlyDeleted(i),await this.isValidSessionTopic(i)},this.isValidRequest=async t=>{if(!bi(t)){const{message:h}=xe("MISSING_OR_INVALID",`request() params: ${t}`);throw new Error(h)}const{topic:i,request:n,chainId:s,expiry:a}=t;this.checkRecentlyDeleted(i),await this.isValidSessionTopic(i);const{namespaces:f}=this.client.session.get(i);if(!xb(f,s)){const{message:h}=xe("MISSING_OR_INVALID",`request() chainId: ${s}`);throw new Error(h)}if(!EE(n)){const{message:h}=xe("MISSING_OR_INVALID",`request() ${JSON.stringify(n)}`);throw new Error(h)}if(!ME(f,s,n.method)){const{message:h}=xe("MISSING_OR_INVALID",`request() method: ${n.method}`);throw new Error(h)}if(a&&!OE(a,C0)){const{message:h}=xe("MISSING_OR_INVALID",`request() expiry: ${a}. Expiry must be a number (in seconds) between ${C0.min} and ${C0.max}`);throw new Error(h)}},this.isValidRespond=async t=>{var i;if(!bi(t)){const{message:a}=xe("MISSING_OR_INVALID",`respond() params: ${t}`);throw new Error(a)}const{topic:n,response:s}=t;try{await this.isValidSessionTopic(n)}catch(a){throw(i=t?.response)!=null&&i.id&&this.cleanupAfterResponse(t),a}if(!SE(s)){const{message:a}=xe("MISSING_OR_INVALID",`respond() response: ${JSON.stringify(s)}`);throw new Error(a)}},this.isValidPing=async t=>{if(!bi(t)){const{message:n}=xe("MISSING_OR_INVALID",`ping() params: ${t}`);throw new Error(n)}const{topic:i}=t;await this.isValidSessionOrPairingTopic(i)},this.isValidEmit=async t=>{if(!bi(t)){const{message:f}=xe("MISSING_OR_INVALID",`emit() params: ${t}`);throw new Error(f)}const{topic:i,event:n,chainId:s}=t;await this.isValidSessionTopic(i);const{namespaces:a}=this.client.session.get(i);if(!xb(a,s)){const{message:f}=xe("MISSING_OR_INVALID",`emit() chainId: ${s}`);throw new Error(f)}if(!IE(n)){const{message:f}=xe("MISSING_OR_INVALID",`emit() event: ${JSON.stringify(n)}`);throw new Error(f)}if(!CE(a,s,n.name)){const{message:f}=xe("MISSING_OR_INVALID",`emit() event: ${JSON.stringify(n)}`);throw new Error(f)}},this.isValidDisconnect=async t=>{if(!bi(t)){const{message:n}=xe("MISSING_OR_INVALID",`disconnect() params: ${t}`);throw new Error(n)}const{topic:i}=t;await this.isValidSessionOrPairingTopic(i)},this.isValidAuthenticate=t=>{const{chains:i,uri:n,domain:s,nonce:a}=t;if(!Array.isArray(i)||i.length===0)throw new Error("chains is required and must be a non-empty array");if(!wr(n,!1))throw new Error("uri is required parameter");if(!wr(s,!1))throw new Error("domain is required parameter");if(!wr(a,!1))throw new Error("nonce is required parameter");if([...new Set(i.map(h=>qa(h).namespace))].length>1)throw new Error("Multi-namespace requests are not supported. Please request single namespace only.");const{namespace:f}=qa(i[0]);if(f!=="eip155")throw new Error("Only eip155 namespace is supported for authenticated sessions. Please use .connect() for non-eip155 chains.")},this.getVerifyContext=async t=>{const{attestationId:i,hash:n,encryptedId:s,metadata:a,transportType:f}=t,h={verified:{verifyUrl:a.verifyUrl||hf,validation:"UNKNOWN",origin:a.url||""}};try{if(f===sr.link_mode){const g=this.getAppLinkIfEnabled(a,f);return h.verified.validation=g&&new URL(g).origin===new URL(a.url).origin?"VALID":"INVALID",h}const u=await this.client.core.verify.resolve({attestationId:i,hash:n,encryptedId:s,verifyUrl:a.verifyUrl});u&&(h.verified.origin=u.origin,h.verified.isScam=u.isScam,h.verified.validation=u.origin===new URL(a.url).origin?"VALID":"INVALID")}catch(u){this.client.logger.warn(u)}return this.client.logger.debug(`Verify context: ${JSON.stringify(h)}`),h},this.validateSessionProps=(t,i)=>{Object.values(t).forEach(n=>{if(!wr(n,!1)){const{message:s}=xe("MISSING_OR_INVALID",`${i} must be in Record<string, string> format. Received: ${JSON.stringify(n)}`);throw new Error(s)}})},this.getPendingAuthRequest=t=>{const i=this.client.auth.requests.get(t);return typeof i=="object"?i:void 0},this.addToRecentlyDeleted=(t,i)=>{if(this.recentlyDeletedMap.set(t,i),this.recentlyDeletedMap.size>=this.recentlyDeletedLimit){let n=0;const s=this.recentlyDeletedLimit/2;for(const a of this.recentlyDeletedMap.keys()){if(n++>=s)break;this.recentlyDeletedMap.delete(a)}}},this.checkRecentlyDeleted=t=>{const i=this.recentlyDeletedMap.get(t);if(i){const{message:n}=xe("MISSING_OR_INVALID",`Record was recently deleted - ${i}: ${t}`);throw new Error(n)}},this.isLinkModeEnabled=(t,i)=>{var n,s,a,f,h,u,g,w,M;return!t||i!==sr.link_mode?!1:((s=(n=this.client.metadata)==null?void 0:n.redirect)==null?void 0:s.linkMode)===!0&&((f=(a=this.client.metadata)==null?void 0:a.redirect)==null?void 0:f.universal)!==void 0&&((u=(h=this.client.metadata)==null?void 0:h.redirect)==null?void 0:u.universal)!==""&&((g=t?.redirect)==null?void 0:g.universal)!==void 0&&((w=t?.redirect)==null?void 0:w.universal)!==""&&((M=t?.redirect)==null?void 0:M.linkMode)===!0&&this.client.core.linkModeSupportedApps.includes(t.redirect.universal)&&typeof(global==null?void 0:global.Linking)<"u"},this.getAppLinkIfEnabled=(t,i)=>{var n;return this.isLinkModeEnabled(t,i)?(n=t?.redirect)==null?void 0:n.universal:void 0},this.handleLinkModeMessage=({url:t})=>{if(!t||!t.includes("wc_ev")||!t.includes("topic"))return;const i=Ym(t,"topic")||"",n=decodeURIComponent(Ym(t,"wc_ev")||""),s=this.client.session.keys.includes(i);s&&this.client.session.update(i,{transportType:sr.link_mode}),this.client.core.dispatchEnvelope({topic:i,message:n,sessionExists:s})},this.registerLinkModeListeners=async()=>{var t;if(Qd()||Vs()&&(t=this.client.metadata.redirect)!=null&&t.linkMode){const i=global==null?void 0:global.Linking;if(typeof i<"u"){i.addEventListener("url",this.handleLinkModeMessage,this.client.name);const n=await i.getInitialURL();n&&setTimeout(()=>{this.handleLinkModeMessage({url:n})},50)}}}}isInitialized(){if(!this.initialized){const{message:e}=xe("NOT_INITIALIZED",this.name);throw new Error(e)}}async confirmOnlineStateOrThrow(){await this.client.core.relayer.confirmOnlineStateOrThrow()}registerRelayerEvents(){this.client.core.relayer.on(Lr.message,e=>{!this.initialized||this.relayMessageCache.length>0?this.relayMessageCache.push(e):this.onRelayMessage(e)})}async onRelayMessage(e){const{topic:t,message:i,attestation:n,transportType:s}=e,{publicKey:a}=this.client.auth.authKeys.keys.includes(fh)?this.client.auth.authKeys.get(fh):{responseTopic:void 0,publicKey:void 0},f=await this.client.core.crypto.decode(t,i,{receiverPublicKey:a,encoding:s===sr.link_mode?Gc:Js});try{b0(f)?(this.client.core.history.set(t,f),this.onRelayEventRequest({topic:t,payload:f,attestation:n,transportType:s,encryptedId:ys(i)})):sh(f)?(await this.client.core.history.resolve(f),await this.onRelayEventResponse({topic:t,payload:f,transportType:s}),this.client.core.history.delete(t,f.id)):this.onRelayEventUnknownPayload({topic:t,payload:f,transportType:s})}catch(h){this.client.logger.error(h)}}registerExpirerEvents(){this.client.core.expirer.on(on.expired,async e=>{const{topic:t,id:i}=Gm(e.target);if(i&&this.client.pendingRequest.keys.includes(i))return await this.deletePendingSessionRequest(i,xe("EXPIRED"),!0);if(i&&this.client.auth.requests.keys.includes(i))return await this.deletePendingAuthRequest(i,xe("EXPIRED"),!0);t?this.client.session.keys.includes(t)&&(await this.deleteSession({topic:t,expirerHasDeleted:!0}),this.client.events.emit("session_expire",{topic:t})):i&&(await this.deleteProposal(i,!0),this.client.events.emit("proposal_expire",{id:i}))})}registerPairingEvents(){this.client.core.pairing.events.on(qo.create,e=>this.onPairingCreated(e)),this.client.core.pairing.events.on(qo.delete,e=>{this.addToRecentlyDeleted(e.topic,"pairing")})}isValidPairingTopic(e){if(!wr(e,!1)){const{message:t}=xe("MISSING_OR_INVALID",`pairing topic should be a string: ${e}`);throw new Error(t)}if(!this.client.core.pairing.pairings.keys.includes(e)){const{message:t}=xe("NO_MATCHING_KEY",`pairing topic doesn't exist: ${e}`);throw new Error(t)}if(Ys(this.client.core.pairing.pairings.get(e).expiry)){const{message:t}=xe("EXPIRED",`pairing topic: ${e}`);throw new Error(t)}}async isValidSessionTopic(e){if(!wr(e,!1)){const{message:t}=xe("MISSING_OR_INVALID",`session topic should be a string: ${e}`);throw new Error(t)}if(this.checkRecentlyDeleted(e),!this.client.session.keys.includes(e)){const{message:t}=xe("NO_MATCHING_KEY",`session topic doesn't exist: ${e}`);throw new Error(t)}if(Ys(this.client.session.get(e).expiry)){await this.deleteSession({topic:e});const{message:t}=xe("EXPIRED",`session topic: ${e}`);throw new Error(t)}if(!this.client.core.crypto.keychain.has(e)){const{message:t}=xe("MISSING_OR_INVALID",`session topic does not exist in keychain: ${e}`);throw await this.deleteSession({topic:e}),new Error(t)}}async isValidSessionOrPairingTopic(e){if(this.checkRecentlyDeleted(e),this.client.session.keys.includes(e))await this.isValidSessionTopic(e);else if(this.client.core.pairing.pairings.keys.includes(e))this.isValidPairingTopic(e);else if(wr(e,!1)){const{message:t}=xe("NO_MATCHING_KEY",`session or pairing topic doesn't exist: ${e}`);throw new Error(t)}else{const{message:t}=xe("MISSING_OR_INVALID",`session or pairing topic should be a string: ${e}`);throw new Error(t)}}async isValidProposalId(e){if(!xE(e)){const{message:t}=xe("MISSING_OR_INVALID",`proposal id should be a number: ${e}`);throw new Error(t)}if(!this.client.proposal.keys.includes(e)){const{message:t}=xe("NO_MATCHING_KEY",`proposal id doesn't exist: ${e}`);throw new Error(t)}if(Ys(this.client.proposal.get(e).expiryTimestamp)){await this.deleteProposal(e);const{message:t}=xe("EXPIRED",`proposal id: ${e}`);throw new Error(t)}}}class QP extends ko{constructor(e,t){super(e,t,$P,I0),this.core=e,this.logger=t}}class ZP extends ko{constructor(e,t){super(e,t,LP,I0),this.core=e,this.logger=t}}class XP extends ko{constructor(e,t){super(e,t,FP,I0,i=>i.id),this.core=e,this.logger=t}}class eD extends ko{constructor(e,t){super(e,t,HP,ch,()=>fh),this.core=e,this.logger=t}}class tD extends ko{constructor(e,t){super(e,t,kP,ch),this.core=e,this.logger=t}}class rD extends ko{constructor(e,t){super(e,t,jP,ch,i=>i.id),this.core=e,this.logger=t}}class iD{constructor(e,t){this.core=e,this.logger=t,this.authKeys=new eD(this.core,this.logger),this.pairingTopics=new tD(this.core,this.logger),this.requests=new rD(this.core,this.logger)}async init(){await this.authKeys.init(),await this.pairingTopics.init(),await this.requests.init()}}class P0 extends eI{constructor(e){super(e),this.protocol=W2,this.version=K2,this.name=M0.name,this.events=new zr.exports.EventEmitter,this.on=(i,n)=>this.events.on(i,n),this.once=(i,n)=>this.events.once(i,n),this.off=(i,n)=>this.events.off(i,n),this.removeListener=(i,n)=>this.events.removeListener(i,n),this.removeAllListeners=i=>this.events.removeAllListeners(i),this.connect=async i=>{try{return await this.engine.connect(i)}catch(n){throw this.logger.error(n.message),n}},this.pair=async i=>{try{return await this.engine.pair(i)}catch(n){throw this.logger.error(n.message),n}},this.approve=async i=>{try{return await this.engine.approve(i)}catch(n){throw this.logger.error(n.message),n}},this.reject=async i=>{try{return await this.engine.reject(i)}catch(n){throw this.logger.error(n.message),n}},this.update=async i=>{try{return await this.engine.update(i)}catch(n){throw this.logger.error(n.message),n}},this.extend=async i=>{try{return await this.engine.extend(i)}catch(n){throw this.logger.error(n.message),n}},this.request=async i=>{try{return await this.engine.request(i)}catch(n){throw this.logger.error(n.message),n}},this.respond=async i=>{try{return await this.engine.respond(i)}catch(n){throw this.logger.error(n.message),n}},this.ping=async i=>{try{return await this.engine.ping(i)}catch(n){throw this.logger.error(n.message),n}},this.emit=async i=>{try{return await this.engine.emit(i)}catch(n){throw this.logger.error(n.message),n}},this.disconnect=async i=>{try{return await this.engine.disconnect(i)}catch(n){throw this.logger.error(n.message),n}},this.find=i=>{try{return this.engine.find(i)}catch(n){throw this.logger.error(n.message),n}},this.getPendingSessionRequests=()=>{try{return this.engine.getPendingSessionRequests()}catch(i){throw this.logger.error(i.message),i}},this.authenticate=async(i,n)=>{try{return await this.engine.authenticate(i,n)}catch(s){throw this.logger.error(s.message),s}},this.formatAuthMessage=i=>{try{return this.engine.formatAuthMessage(i)}catch(n){throw this.logger.error(n.message),n}},this.approveSessionAuthenticate=async i=>{try{return await this.engine.approveSessionAuthenticate(i)}catch(n){throw this.logger.error(n.message),n}},this.rejectSessionAuthenticate=async i=>{try{return await this.engine.rejectSessionAuthenticate(i)}catch(n){throw this.logger.error(n.message),n}},this.name=e?.name||M0.name,this.metadata=e?.metadata||km(),this.signConfig=e?.signConfig;const t=typeof e?.logger<"u"&&typeof e?.logger!="string"?e.logger:Zn(rh({level:e?.logger||M0.logger}));this.core=e?.core||new NP(e),this.logger=ci(t,this.name),this.session=new ZP(this.core,this.logger),this.proposal=new QP(this.core,this.logger),this.pendingRequest=new XP(this.core,this.logger),this.engine=new JP(this),this.auth=new iD(this.core,this.logger)}static async init(e){const t=new P0(e);return await t.initialize(),t}get context(){return yi(this.logger)}get pairing(){return this.core.pairing.pairings}async initialize(){this.logger.trace("Initialized");try{await this.core.start(),await this.session.init(),await this.proposal.init(),await this.pendingRequest.init(),await this.auth.init(),await this.engine.init(),this.logger.info("SignClient Initialization Success"),setTimeout(()=>{this.engine.processRelayMessageCache()},_e.toMiliseconds(_e.ONE_SECOND))}catch(e){throw this.logger.info("SignClient Initialization Failure"),this.logger.error(e.message),e}}}var D0={exports:{}};/**
44
44
  * @license
45
45
  * Lodash <https://lodash.com/>
46
46
  * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>