@stakekit/widget 0.0.293 → 0.0.294

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.
Files changed (144) hide show
  1. package/dist/bundle/{DateTime-BBRIKkPv.js → DateTime-CMMZj2i-.js} +54 -54
  2. package/dist/bundle/{assets-vw12jo1v.js → assets-Bc9gJ-IT.js} +6 -6
  3. package/dist/bundle/{cardano-connector-DCWdS4Lt.js → cardano-connector-4FH7sm5s.js} +2 -2
  4. package/dist/bundle/{configured-chains-Bc6_pgMo.js → configured-chains-DF5IpaPp.js} +1 -1
  5. package/dist/bundle/{cosmos-connector-meta-Br67nymZ.js → cosmos-connector-meta-BKRBGzAs.js} +1 -1
  6. package/dist/bundle/index.bundle.js +13834 -13695
  7. package/dist/bundle/{ledger-connector-wZ-AWITi.js → ledger-connector-Em3Ex6Ns.js} +5 -5
  8. package/dist/bundle/{network-D8-Flo2u.js → network-D2ajkWp0.js} +1 -1
  9. package/dist/bundle/{reward-rate-chart-B41r4AU4.js → reward-rate-chart-6q6gJawR.js} +4 -4
  10. package/dist/bundle/{solana-connector-CXe_nU4I.js → solana-connector-DHrdMGZC.js} +3 -3
  11. package/dist/bundle/{stellar-connector-Cdl9Hnba.js → stellar-connector-DkR_jg41.js} +2 -2
  12. package/dist/bundle/{styles.css-BJ7-ORZP.js → styles.css-DQG3ba8V.js} +6 -6
  13. package/dist/bundle/{substrate-connector-DFeFqV_q.js → substrate-connector-CzewVoQ6.js} +1 -1
  14. package/dist/bundle/{ton-connector-CWmOukzn.js → ton-connector-CcahoFeW.js} +3 -3
  15. package/dist/bundle/{transaction-BwhgjU0e.js → transaction-BGiGADTK.js} +1 -1
  16. package/dist/bundle/{transaction-CUoDE6CU.js → transaction-BvpQWKqm.js} +1 -1
  17. package/dist/bundle/{transaction-B8S7Vgaq.js → transaction-CD_QhA6u.js} +2 -2
  18. package/dist/bundle/{transaction-DxrR2BHC.js → transaction-CiEShf7a.js} +1 -1
  19. package/dist/bundle/{tron-connector--M_0_Iy7.js → tron-connector-Dy_36o_J.js} +3 -3
  20. package/dist/bundle/{utils-CoW929-6.js → utils-BMTuLksW.js} +1 -1
  21. package/dist/bundle/{wallet-manager-C3rmOq7t.js → wallet-manager-BLaLHs2U.js} +11 -11
  22. package/dist/package/{DateTime-DJZXpaqx.js → DateTime-CGVpQQm9.js} +24 -2
  23. package/dist/package/{assets-BuIo5TOF.js → assets-CEn8BPdT.js} +1 -1
  24. package/dist/package/{cardano-connector-DIZuipB7.js → cardano-connector-BDWTBXaS.js} +2 -2
  25. package/dist/package/{configured-chains-B6PD9hvx.js → configured-chains-CRuy8tse.js} +1 -1
  26. package/dist/package/{cosmos-connector-meta-CgvZWkLV.js → cosmos-connector-meta-B-ke1Dvw.js} +1 -1
  27. package/dist/package/index.package.js +1682 -1449
  28. package/dist/package/{ledger-connector-B3kEcKjM.js → ledger-connector-BQDRUjOJ.js} +5 -5
  29. package/dist/package/{network-B4Qs3uRl.js → network-K03Uj00V.js} +1 -1
  30. package/dist/package/{reward-rate-chart-B42ZCby7.js → reward-rate-chart-DBx39GdL.js} +2 -2
  31. package/dist/package/{solana-connector-VG2pC1EJ.js → solana-connector-fL70NOkD.js} +3 -3
  32. package/dist/package/{stellar-connector-DO9tJUOg.js → stellar-connector-C_33sqO5.js} +2 -2
  33. package/dist/package/{styles.css-DwJjrmLr.js → styles.css-BOghDWGq.js} +1 -1
  34. package/dist/package/{substrate-connector-P80MVt5T.js → substrate-connector-Cr7LEt2o.js} +1 -1
  35. package/dist/package/{ton-connector-3rqiqNZO.js → ton-connector-81-rUhzX.js} +3 -3
  36. package/dist/package/{transaction-DTbU7sxm.js → transaction-BHIZ9rKF.js} +1 -1
  37. package/dist/package/{transaction-CuMGfUeE.js → transaction-C5e_gCK6.js} +1 -1
  38. package/dist/package/{transaction-V39s0qKU.js → transaction-DMMfLvk1.js} +2 -2
  39. package/dist/package/{transaction-Do_oUKxl.js → transaction-DgdU5pHH.js} +1 -1
  40. package/dist/package/{tron-connector-CKUZFHDh.js → tron-connector-Cuez3U16.js} +3 -3
  41. package/dist/package/{wallet-manager-CioQJQ5H.js → wallet-manager-DWFwmdLb.js} +2 -2
  42. package/dist/website/assets/AlertController-Dd3t1FDe.js +1 -0
  43. package/dist/website/assets/{CaipNetworkUtil-CIgzbD6k.js → CaipNetworkUtil-CyIDQhS0.js} +1 -1
  44. package/dist/website/assets/DateTime-ByC3zr_K.js +1 -0
  45. package/dist/website/assets/{HelpersUtil-BokHy7la.js → HelpersUtil-Bpil3MMz.js} +1 -1
  46. package/dist/website/assets/ModalController-BhWRBcfd.js +5 -0
  47. package/dist/website/assets/{albedo.module-Dn9vkw3f.js → albedo.module-DkOe0Unb.js} +1 -1
  48. package/dist/website/assets/assets-DXO6qW6R.js +2 -0
  49. package/dist/website/assets/{axios-Dl6BaS8Y.js → axios-rFNl7rAx.js} +2 -2
  50. package/dist/website/assets/{base-signer-b1ff2VPI-DF_m1Hx-.js → base-signer-b1ff2VPI-DEykpag5.js} +1 -1
  51. package/dist/website/assets/{basic-Bt_YnOIC.js → basic-By5_muQ4.js} +1 -1
  52. package/dist/website/assets/bignumber-FohbSRh0.js +1 -0
  53. package/dist/website/assets/blakejs-x6iaQxOd.js +3 -0
  54. package/dist/website/assets/bn-Ck4DeaX2.js +1 -0
  55. package/dist/website/assets/{browser-ponyfill-_v4sZCld.js → browser-ponyfill-lHyeX8iJ.js} +1 -1
  56. package/dist/website/assets/{bs58-CiFyCgrv.js → bs58-gzsgdke5.js} +1 -1
  57. package/dist/website/assets/{build-DM4Sawu1.js → build-ClRxYQRR.js} +1 -1
  58. package/dist/website/assets/{build-Butjcagw.js → build-TBrHU398.js} +1 -1
  59. package/dist/website/assets/{build-B5AnTSOq.js → build-Tl3I8dhV.js} +1 -1
  60. package/dist/website/assets/{cardano-connector-BC5bF4Y2.js → cardano-connector-8El4Ztf_.js} +9 -9
  61. package/dist/website/assets/{configured-chains-Bp7rWkOZ.js → configured-chains-DQ_M8-li.js} +1 -1
  62. package/dist/website/assets/core-BiDQVY37.js +2 -0
  63. package/dist/website/assets/{cosmos-connector-meta-CZFaunIB.js → cosmos-connector-meta-DRTieEt0.js} +1 -1
  64. package/dist/website/assets/dist-BVuLBvyS.js +7 -0
  65. package/dist/website/assets/{dist-BKdXTi2f.js → dist-Bo7ZdXT8.js} +3 -3
  66. package/dist/website/assets/{dist-7PipG_eL.js → dist-DlLKQSrv.js} +3 -3
  67. package/dist/website/assets/dist-ZKTSEBXW.js +1 -0
  68. package/dist/website/assets/{elliptic-j9CClrcl.js → elliptic-BdE4gFqn.js} +2 -2
  69. package/dist/website/assets/{esm-DVfwo40P.js → esm-BjyHrLEJ.js} +1 -1
  70. package/dist/website/assets/events-CMzhc0tf.js +1 -0
  71. package/dist/website/assets/{extrinsic-encoding-B3zynq2U.js → extrinsic-encoding-BIj1XBpl.js} +1 -1
  72. package/dist/website/assets/{features-LE43LGiF.js → features-Cy1CFK9a.js} +1 -1
  73. package/dist/website/assets/{fhevm-relayer-DXLb4mIw-bVmGMiQn.js → fhevm-relayer-DXLb4mIw-Bbrz0cha.js} +5 -3
  74. package/dist/website/assets/freighter.module-DsmrpiWT.js +1 -0
  75. package/dist/website/assets/index-7hHJ2eI5.js +558 -0
  76. package/dist/website/assets/index-zFAIWvcU.css +1 -0
  77. package/dist/website/assets/{index.es-D6B6PG3M.js → index.es-BGzDKZr_.js} +1 -1
  78. package/dist/website/assets/index.es-BHs2-Pa6.js +1 -0
  79. package/dist/website/assets/{index.es-wqX1ruQA.js → index.es-Bpga9r91.js} +5 -5
  80. package/dist/website/assets/{kms_lib-mPebVu09.js → kms_lib-BgnOy0xU.js} +1 -1
  81. package/dist/website/assets/{kms_lib-Bh_Z1nH6.js → kms_lib-w0jRi8cP.js} +1 -1
  82. package/dist/website/assets/{ledger-connector-BOOoTKx_.js → ledger-connector-CNNjVgC1.js} +3 -3
  83. package/dist/website/assets/{lib-es-5LFNYQ9J.js → lib-es-DmH9FYVZ.js} +1 -1
  84. package/dist/website/assets/lobstr.module-BUAItZUt.js +1 -0
  85. package/dist/website/assets/{nacl-fast-BI97gFtf.js → nacl-fast-B5R4wpqG.js} +1 -1
  86. package/dist/website/assets/{nacl-util-DCWJejqG.js → nacl-util-6167mj42.js} +1 -1
  87. package/dist/website/assets/{network-CEcIzsgc.js → network-BVzpe0Ii.js} +1 -1
  88. package/dist/website/assets/{polkadot-ledger-transaction-DaDP252u.js → polkadot-ledger-transaction-Dp6EFfyV.js} +1 -1
  89. package/dist/website/assets/registry-BgQw-qJW.js +1 -0
  90. package/dist/website/assets/{reward-rate-chart-COP_M115.js → reward-rate-chart-CO_yI4og.js} +4 -4
  91. package/dist/website/assets/{safe-buffer-Dz6e-rwu.js → safe-buffer-BUgQmBOp.js} +1 -1
  92. package/dist/website/assets/{safe-connector-DG2cXEO5.js → safe-connector-BObu9WgG.js} +2 -2
  93. package/dist/website/assets/{solana-connector-DSpWnxwA.js → solana-connector-CVuV_EKp.js} +1 -1
  94. package/dist/website/assets/{src-Zq1Jw-Sn.js → src-DbdC_Alu.js} +1 -1
  95. package/dist/website/assets/{src-hSPfFTzN.js → src-Dl7INWvU.js} +1 -1
  96. package/dist/website/assets/state-D5Nw1L4F.js +1 -0
  97. package/dist/website/assets/{stellar-connector-BAbbdkSK.js → stellar-connector-Ba7Jcrbg.js} +1 -1
  98. package/dist/website/assets/styles.css-NtRiu07M.js +1 -0
  99. package/dist/website/assets/substrate-connector-hQ3vc47X.js +2 -0
  100. package/dist/website/assets/tfhe-BACovsAk.js +1 -0
  101. package/dist/website/assets/{tfhe-DuWT_ao1.js → tfhe-BSAXrnM6.js} +1 -1
  102. package/dist/website/assets/ton-connector-CU1xiP2u.js +2264 -0
  103. package/dist/website/assets/tracking-variants-CtfEiKNR.js +93 -0
  104. package/dist/website/assets/{transaction-BH4ssPh3.js → transaction-B5hUD0AE.js} +1 -1
  105. package/dist/website/assets/{transaction-BVuftLt1.js → transaction-BWEzzOww.js} +1 -1
  106. package/dist/website/assets/transaction-BmFUkzQv.js +2 -0
  107. package/dist/website/assets/{transaction-1KdJeqcp.js → transaction-C_iyacpP.js} +1 -1
  108. package/dist/website/assets/{tron-connector-CJURHEQe.js → tron-connector-gXtlAAuG.js} +7 -7
  109. package/dist/website/assets/{tx-Bkou_ALe.js → tx-Cosvp39i.js} +1 -1
  110. package/dist/website/assets/{utils-CH0e59XB.js → utils-meUBO1X1.js} +1 -1
  111. package/dist/website/assets/{viem-BQ_7aeKB.js → viem-8-EtcU49.js} +1 -1
  112. package/dist/website/assets/{w3m-modal-BLY--NNS.js → w3m-modal-HS9RLkN8.js} +2 -2
  113. package/dist/website/assets/wallet-manager-BQrZx180.js +5 -0
  114. package/dist/website/assets/{web-4qAQ-Ymk.js → web-azgm2Psf.js} +1 -1
  115. package/dist/website/assets/{wui-list-item-1gzb5UQJ.js → wui-list-item-CfZ1WQql.js} +1 -1
  116. package/dist/website/assets/{xbull.module-B4N1LGQD.js → xbull.module-DQx6rh7x.js} +1 -1
  117. package/dist/website/index.html +19 -19
  118. package/package.json +2 -2
  119. package/dist/website/assets/AlertController-CH5fpr36.js +0 -1
  120. package/dist/website/assets/DateTime-DR7XeJxF.js +0 -1
  121. package/dist/website/assets/ModalController-CWwEAkfw.js +0 -5
  122. package/dist/website/assets/assets-Dk5ppLtc.js +0 -2
  123. package/dist/website/assets/bignumber-CziKLYjt.js +0 -1
  124. package/dist/website/assets/blakejs-Dx-Zt5zT.js +0 -3
  125. package/dist/website/assets/bn-CJG5j3KW.js +0 -1
  126. package/dist/website/assets/core-uatW2d6Y.js +0 -2
  127. package/dist/website/assets/dist-CELdgNh9.js +0 -1
  128. package/dist/website/assets/dist-omv2KNC4.js +0 -5
  129. package/dist/website/assets/events-D2w4OsQJ.js +0 -1
  130. package/dist/website/assets/freighter.module-CaBNS6Y-.js +0 -1
  131. package/dist/website/assets/index-CRRnuuvK.js +0 -540
  132. package/dist/website/assets/index-mVJBJZFp.css +0 -1
  133. package/dist/website/assets/index.es-DCi2xZ1b.js +0 -1
  134. package/dist/website/assets/lobstr.module-GQjJAf8P.js +0 -1
  135. package/dist/website/assets/registry-DVfYVrCY.js +0 -1
  136. package/dist/website/assets/state-B8Vu3fYx.js +0 -1
  137. package/dist/website/assets/styles.css-BK5OO2Hh.js +0 -1
  138. package/dist/website/assets/substrate-connector-CwnGlD2K.js +0 -2
  139. package/dist/website/assets/tfhe-PDJAG8Bv.js +0 -1
  140. package/dist/website/assets/ton-connector-DMNOeieX.js +0 -2264
  141. package/dist/website/assets/tracking-variants-CuRpr0B_.js +0 -85
  142. package/dist/website/assets/transaction-CbxrIerN.js +0 -2
  143. package/dist/website/assets/wallet-manager-D8tOJ1jy.js +0 -5
  144. package/dist/website/mockServiceWorker.js +0 -460
@@ -1,5 +1,5 @@
1
- import{s as e}from"./rolldown-runtime-BcKkbAw3.js";import{n as t,t as n}from"./dist-Cuadm9-o.js";import{n as r,t as i}from"./dist-D6L6gF64.js";import{B as a,D as o,E as s,G as c,L as l,j as u}from"./_u64-BLNH_r32.js";import{i as d,n as f,r as p,s as m,t as h}from"./hmac-DY3QYcUU.js";import{n as g,t as _}from"./sha256-DmRqOOd6.js";import{n as ee,t as te}from"./sha3-DRlIjSdj.js";import{n as v,t as y}from"./esm-CjTnkPtf.js";import{r as b,t as x}from"./dist-CELdgNh9.js";import{n as S,r as C}from"./ed25519-DWgFEKI3.js";import{t as w}from"./events-D2w4OsQJ.js";import{C as T,D as E,E as D,O,S as k,T as A,_ as j,a as M,b as N,c as P,d as F,f as I,g as ne,i as re,k as ie,l as ae,m as oe,n as se,o as ce,r as le,t as ue,u as de,v as fe,w as pe,x as me,y as he}from"./index.es-DCi2xZ1b.js";import{a as ge,c as _e,d as ve,i as ye,l as be,n as L,o as xe,r as Se,s as Ce,t as R,u as we}from"./src-Zq1Jw-Sn.js";import{t as Te}from"./blake2-CL6aokTA.js";import{t as Ee}from"./blakejs-Dx-Zt5zT.js";import{t as De}from"./p256-B9jXkI6_.js";n(),r(),l(),p(),te();var Oe=e(w()),z=ie(),ke=j(),Ae=ne();function je(e){return e instanceof Uint8Array||ArrayBuffer.isView(e)&&e.constructor.name===`Uint8Array`}function Me(e){if(typeof e!=`boolean`)throw Error(`boolean expected, not ${e}`)}function Ne(e){if(!Number.isSafeInteger(e)||e<0)throw Error(`positive integer expected, got `+e)}function B(e,...t){if(!je(e))throw Error(`Uint8Array expected`);if(t.length>0&&!t.includes(e.length))throw Error(`Uint8Array expected of length `+t+`, got length=`+e.length)}function Pe(e,t=!0){if(e.destroyed)throw Error(`Hash instance has been destroyed`);if(t&&e.finished)throw Error(`Hash#digest() has already been called`)}function Fe(e,t){B(e);let n=t.outputLen;if(e.length<n)throw Error(`digestInto() expects output buffer of length at least `+n)}function Ie(e){return new Uint32Array(e.buffer,e.byteOffset,Math.floor(e.byteLength/4))}function Le(...e){for(let t=0;t<e.length;t++)e[t].fill(0)}function Re(e){return new DataView(e.buffer,e.byteOffset,e.byteLength)}var ze=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function Be(e){if(typeof e!=`string`)throw Error(`string expected`);return new Uint8Array(new TextEncoder().encode(e))}function Ve(e){if(typeof e==`string`)e=Be(e);else if(je(e))e=Ye(e);else throw Error(`Uint8Array expected, got `+typeof e);return e}function He(e,t){if(typeof t!=`object`||!t)throw Error(`options must be defined`);return Object.assign(e,t)}function Ue(e,t){if(e.length!==t.length)return!1;let n=0;for(let r=0;r<e.length;r++)n|=e[r]^t[r];return n===0}var We=(e,t)=>{function n(n,...r){if(B(n),!ze)throw Error(`Non little-endian hardware is not yet supported`);if(e.nonceLength!==void 0){let t=r[0];if(!t)throw Error(`nonce / iv required`);e.varSizeNonce?B(t):B(t,e.nonceLength)}let i=e.tagLength;i&&r[1]!==void 0&&B(r[1]);let a=t(n,...r),o=(e,t)=>{if(t!==void 0){if(e!==2)throw Error(`cipher output not supported`);B(t)}},s=!1;return{encrypt(e,t){if(s)throw Error(`cannot encrypt() twice with same key + nonce`);return s=!0,B(e),o(a.encrypt.length,t),a.encrypt(e,t)},decrypt(e,t){if(B(e),i&&e.length<i)throw Error(`invalid ciphertext length: smaller than tagLength=`+i);return o(a.decrypt.length,t),a.decrypt(e,t)}}}return Object.assign(n,e),n};function Ge(e,t,n=!0){if(t===void 0)return new Uint8Array(e);if(t.length!==e)throw Error(`invalid output length, expected `+e+`, got: `+t.length);if(n&&!Je(t))throw Error(`invalid output, must be aligned`);return t}function Ke(e,t,n,r){if(typeof e.setBigUint64==`function`)return e.setBigUint64(t,n,r);let i=BigInt(32),a=BigInt(4294967295),o=Number(n>>i&a),s=Number(n&a),c=r?4:0,l=r?0:4;e.setUint32(t+c,o,r),e.setUint32(t+l,s,r)}function qe(e,t,n){Me(n);let r=new Uint8Array(16),i=Re(r);return Ke(i,0,BigInt(t),n),Ke(i,8,BigInt(e),n),r}function Je(e){return e.byteOffset%4==0}function Ye(e){return Uint8Array.from(e)}var Xe=class extends O{constructor(e){super(),this.opts=e,this.protocol=`wc`,this.version=2}},Ze=class extends O{constructor(e,t){super(),this.core=e,this.logger=t,this.records=new Map}},Qe=class{constructor(e,t){this.logger=e,this.core=t}},$e=class extends O{constructor(e,t){super(),this.relayer=e,this.logger=t}},et=class extends O{constructor(e){super()}},tt=class{constructor(e,t,n,r){this.core=e,this.logger=t,this.name=n}},nt=class extends O{constructor(e,t){super(),this.relayer=e,this.logger=t}},rt=class extends O{constructor(e,t){super(),this.core=e,this.logger=t}},it=class{constructor(e,t,n){this.core=e,this.logger=t,this.store=n}},at=class{constructor(e,t){this.projectId=e,this.logger=t}},ot=class{constructor(e,t,n){this.core=e,this.logger=t,this.telemetryEnabled=n}},st=class{constructor(e){this.opts=e,this.protocol=`wc`,this.version=2}},ct=class{constructor(e){this.client=e}},lt=e=>Uint8Array.from(e.split(``).map(e=>e.charCodeAt(0))),ut=lt(`expand 16-byte k`),dt=lt(`expand 32-byte k`),ft=Ie(ut),pt=Ie(dt);function V(e,t){return e<<t|e>>>32-t}function mt(e){return e.byteOffset%4==0}var ht=64,gt=16,_t=2**32-1,vt=new Uint32Array;function yt(e,t,n,r,i,a,o,s){let c=i.length,l=new Uint8Array(ht),u=Ie(l),d=mt(i)&&mt(a),f=d?Ie(i):vt,p=d?Ie(a):vt;for(let m=0;m<c;o++){if(e(t,n,r,u,o,s),o>=_t)throw Error(`arx: counter overflow`);let h=Math.min(ht,c-m);if(d&&h===ht){let e=m/4;if(m%4!=0)throw Error(`arx: invalid block position`);for(let t=0,n;t<gt;t++)n=e+t,p[n]=f[n]^u[t];m+=ht;continue}for(let e=0,t;e<h;e++)t=m+e,a[t]=i[t]^l[e];m+=h}}function bt(e,t){let{allowShortKeys:n,extendNonceFn:r,counterLength:i,counterRight:a,rounds:o}=He({allowShortKeys:!1,counterLength:8,counterRight:!1,rounds:20},t);if(typeof e!=`function`)throw Error(`core must be a function`);return Ne(i),Ne(o),Me(a),Me(n),(t,s,c,l,u=0)=>{B(t),B(s),B(c);let d=c.length;if(l===void 0&&(l=new Uint8Array(d)),B(l),Ne(u),u<0||u>=_t)throw Error(`arx: counter overflow`);if(l.length<d)throw Error(`arx: output (${l.length}) is shorter than data (${d})`);let f=[],p=t.length,m,h;if(p===32)f.push(m=Ye(t)),h=pt;else if(p===16&&n)m=new Uint8Array(32),m.set(t),m.set(t,16),h=ft,f.push(m);else throw Error(`arx: invalid 32-byte key, got length=${p}`);mt(s)||f.push(s=Ye(s));let g=Ie(m);if(r){if(s.length!==24)throw Error(`arx: extended nonce must be 24 bytes`);r(h,g,Ie(s.subarray(0,16)),g),s=s.subarray(16)}let _=16-i;if(_!==s.length)throw Error(`arx: nonce must be ${_} or 16 bytes`);if(_!==12){let e=new Uint8Array(12);e.set(s,a?0:12-s.length),s=e,f.push(s)}let ee=Ie(s);return yt(e,h,g,ee,c,l,u,o),Le(...f),l}}var H=(e,t)=>e[t++]&255|(e[t++]&255)<<8,xt=class{constructor(e){this.blockLen=16,this.outputLen=16,this.buffer=new Uint8Array(16),this.r=new Uint16Array(10),this.h=new Uint16Array(10),this.pad=new Uint16Array(8),this.pos=0,this.finished=!1,e=Ve(e),B(e,32);let t=H(e,0),n=H(e,2),r=H(e,4),i=H(e,6),a=H(e,8),o=H(e,10),s=H(e,12),c=H(e,14);this.r[0]=t&8191,this.r[1]=(t>>>13|n<<3)&8191,this.r[2]=(n>>>10|r<<6)&7939,this.r[3]=(r>>>7|i<<9)&8191,this.r[4]=(i>>>4|a<<12)&255,this.r[5]=a>>>1&8190,this.r[6]=(a>>>14|o<<2)&8191,this.r[7]=(o>>>11|s<<5)&8065,this.r[8]=(s>>>8|c<<8)&8191,this.r[9]=c>>>5&127;for(let t=0;t<8;t++)this.pad[t]=H(e,16+2*t)}process(e,t,n=!1){let r=n?0:2048,{h:i,r:a}=this,o=a[0],s=a[1],c=a[2],l=a[3],u=a[4],d=a[5],f=a[6],p=a[7],m=a[8],h=a[9],g=H(e,t+0),_=H(e,t+2),ee=H(e,t+4),te=H(e,t+6),v=H(e,t+8),y=H(e,t+10),b=H(e,t+12),x=H(e,t+14),S=i[0]+(g&8191),C=i[1]+((g>>>13|_<<3)&8191),w=i[2]+((_>>>10|ee<<6)&8191),T=i[3]+((ee>>>7|te<<9)&8191),E=i[4]+((te>>>4|v<<12)&8191),D=i[5]+(v>>>1&8191),O=i[6]+((v>>>14|y<<2)&8191),k=i[7]+((y>>>11|b<<5)&8191),A=i[8]+((b>>>8|x<<8)&8191),j=i[9]+(x>>>5|r),M=0,N=M+S*o+5*h*C+5*m*w+5*p*T+5*f*E;M=N>>>13,N&=8191,N+=5*d*D+5*u*O+5*l*k+5*c*A+5*s*j,M+=N>>>13,N&=8191;let P=M+S*s+C*o+5*h*w+5*m*T+5*p*E;M=P>>>13,P&=8191,P+=5*f*D+5*d*O+5*u*k+5*l*A+5*c*j,M+=P>>>13,P&=8191;let F=M+S*c+C*s+w*o+5*h*T+5*m*E;M=F>>>13,F&=8191,F+=5*p*D+5*f*O+5*d*k+5*u*A+5*l*j,M+=F>>>13,F&=8191;let I=M+S*l+C*c+w*s+T*o+5*h*E;M=I>>>13,I&=8191,I+=5*m*D+5*p*O+5*f*k+5*d*A+5*u*j,M+=I>>>13,I&=8191;let ne=M+S*u+C*l+w*c+T*s+E*o;M=ne>>>13,ne&=8191,ne+=5*h*D+5*m*O+5*p*k+5*f*A+5*d*j,M+=ne>>>13,ne&=8191;let re=M+S*d+C*u+w*l+T*c+E*s;M=re>>>13,re&=8191,re+=D*o+5*h*O+5*m*k+5*p*A+5*f*j,M+=re>>>13,re&=8191;let ie=M+S*f+C*d+w*u+T*l+E*c;M=ie>>>13,ie&=8191,ie+=D*s+O*o+5*h*k+5*m*A+5*p*j,M+=ie>>>13,ie&=8191;let ae=M+S*p+C*f+w*d+T*u+E*l;M=ae>>>13,ae&=8191,ae+=D*c+O*s+k*o+5*h*A+5*m*j,M+=ae>>>13,ae&=8191;let oe=M+S*m+C*p+w*f+T*d+E*u;M=oe>>>13,oe&=8191,oe+=D*l+O*c+k*s+A*o+5*h*j,M+=oe>>>13,oe&=8191;let se=M+S*h+C*m+w*p+T*f+E*d;M=se>>>13,se&=8191,se+=D*u+O*l+k*c+A*s+j*o,M+=se>>>13,se&=8191,M=(M<<2)+M|0,M=M+N|0,N=M&8191,M>>>=13,P+=M,i[0]=N,i[1]=P,i[2]=F,i[3]=I,i[4]=ne,i[5]=re,i[6]=ie,i[7]=ae,i[8]=oe,i[9]=se}finalize(){let{h:e,pad:t}=this,n=new Uint16Array(10),r=e[1]>>>13;e[1]&=8191;for(let t=2;t<10;t++)e[t]+=r,r=e[t]>>>13,e[t]&=8191;e[0]+=r*5,r=e[0]>>>13,e[0]&=8191,e[1]+=r,r=e[1]>>>13,e[1]&=8191,e[2]+=r,n[0]=e[0]+5,r=n[0]>>>13,n[0]&=8191;for(let t=1;t<10;t++)n[t]=e[t]+r,r=n[t]>>>13,n[t]&=8191;n[9]-=8192;let i=(r^1)-1;for(let e=0;e<10;e++)n[e]&=i;i=~i;for(let t=0;t<10;t++)e[t]=e[t]&i|n[t];e[0]=(e[0]|e[1]<<13)&65535,e[1]=(e[1]>>>3|e[2]<<10)&65535,e[2]=(e[2]>>>6|e[3]<<7)&65535,e[3]=(e[3]>>>9|e[4]<<4)&65535,e[4]=(e[4]>>>12|e[5]<<1|e[6]<<14)&65535,e[5]=(e[6]>>>2|e[7]<<11)&65535,e[6]=(e[7]>>>5|e[8]<<8)&65535,e[7]=(e[8]>>>8|e[9]<<5)&65535;let a=e[0]+t[0];e[0]=a&65535;for(let n=1;n<8;n++)a=(e[n]+t[n]|0)+(a>>>16)|0,e[n]=a&65535;Le(n)}update(e){Pe(this),e=Ve(e),B(e);let{buffer:t,blockLen:n}=this,r=e.length;for(let i=0;i<r;){let a=Math.min(n-this.pos,r-i);if(a===n){for(;n<=r-i;i+=n)this.process(e,i);continue}t.set(e.subarray(i,i+a),this.pos),this.pos+=a,i+=a,this.pos===n&&(this.process(t,0,!1),this.pos=0)}return this}destroy(){Le(this.h,this.r,this.buffer,this.pad)}digestInto(e){Pe(this),Fe(e,this),this.finished=!0;let{buffer:t,h:n}=this,{pos:r}=this;if(r){for(t[r++]=1;r<16;r++)t[r]=0;this.process(t,0,!0)}this.finalize();let i=0;for(let t=0;t<8;t++)e[i++]=n[t]>>>0,e[i++]=n[t]>>>8;return e}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}};function St(e){let t=(t,n)=>e(n).update(Ve(t)).digest(),n=e(new Uint8Array(32));return t.outputLen=n.outputLen,t.blockLen=n.blockLen,t.create=t=>e(t),t}var Ct=St(e=>new xt(e));function wt(e,t,n,r,i,a=20){let o=e[0],s=e[1],c=e[2],l=e[3],u=t[0],d=t[1],f=t[2],p=t[3],m=t[4],h=t[5],g=t[6],_=t[7],ee=i,te=n[0],v=n[1],y=n[2],b=o,x=s,S=c,C=l,w=u,T=d,E=f,D=p,O=m,k=h,A=g,j=_,M=ee,N=te,P=v,F=y;for(let e=0;e<a;e+=2)b=b+w|0,M=V(M^b,16),O=O+M|0,w=V(w^O,12),b=b+w|0,M=V(M^b,8),O=O+M|0,w=V(w^O,7),x=x+T|0,N=V(N^x,16),k=k+N|0,T=V(T^k,12),x=x+T|0,N=V(N^x,8),k=k+N|0,T=V(T^k,7),S=S+E|0,P=V(P^S,16),A=A+P|0,E=V(E^A,12),S=S+E|0,P=V(P^S,8),A=A+P|0,E=V(E^A,7),C=C+D|0,F=V(F^C,16),j=j+F|0,D=V(D^j,12),C=C+D|0,F=V(F^C,8),j=j+F|0,D=V(D^j,7),b=b+T|0,F=V(F^b,16),A=A+F|0,T=V(T^A,12),b=b+T|0,F=V(F^b,8),A=A+F|0,T=V(T^A,7),x=x+E|0,M=V(M^x,16),j=j+M|0,E=V(E^j,12),x=x+E|0,M=V(M^x,8),j=j+M|0,E=V(E^j,7),S=S+D|0,N=V(N^S,16),O=O+N|0,D=V(D^O,12),S=S+D|0,N=V(N^S,8),O=O+N|0,D=V(D^O,7),C=C+w|0,P=V(P^C,16),k=k+P|0,w=V(w^k,12),C=C+w|0,P=V(P^C,8),k=k+P|0,w=V(w^k,7);let I=0;r[I++]=o+b|0,r[I++]=s+x|0,r[I++]=c+S|0,r[I++]=l+C|0,r[I++]=u+w|0,r[I++]=d+T|0,r[I++]=f+E|0,r[I++]=p+D|0,r[I++]=m+O|0,r[I++]=h+k|0,r[I++]=g+A|0,r[I++]=_+j|0,r[I++]=ee+M|0,r[I++]=te+N|0,r[I++]=v+P|0,r[I++]=y+F|0}var Tt=bt(wt,{counterRight:!1,counterLength:4,allowShortKeys:!1}),Et=new Uint8Array(16),Dt=(e,t)=>{e.update(t);let n=t.length%16;n&&e.update(Et.subarray(n))},Ot=new Uint8Array(32);function kt(e,t,n,r,i){let a=e(t,n,Ot),o=Ct.create(a);i&&Dt(o,i),Dt(o,r);let s=qe(r.length,i?i.length:0,!0);o.update(s);let c=o.digest();return Le(a,s),c}var At=We({blockSize:64,nonceLength:12,tagLength:16},(e=>(t,n,r)=>({encrypt(i,a){let o=i.length;a=Ge(o+16,a,!1),a.set(i);let s=a.subarray(0,-16);e(t,n,s,s,1);let c=kt(e,t,n,s,r);return a.set(c,o),Le(c),a},decrypt(i,a){a=Ge(i.length-16,a,!1);let o=i.subarray(0,-16),s=i.subarray(-16),c=kt(e,t,n,o,r);if(!Ue(s,c))throw Error(`invalid tag`);return a.set(i.subarray(0,-16)),e(t,n,a,a,1),Le(c),a}}))(Tt));f();function jt(e,t,n){return s(e),n===void 0&&(n=new Uint8Array(e.outputLen)),h(e,c(n),c(t))}var Mt=Uint8Array.from([0]),Nt=Uint8Array.of();function Pt(e,t,n,r=32){s(e),o(r);let i=e.outputLen;if(r>255*i)throw Error(`Length should be <= 255*HashLen`);let a=Math.ceil(r/i);n===void 0&&(n=Nt);let c=new Uint8Array(a*i),l=h.create(e,t),d=l._cloneInto(),f=new Uint8Array(l.outputLen);for(let e=0;e<a;e++)Mt[0]=e+1,d.update(e===0?Nt:f).update(n).update(Mt).digestInto(f),c.set(f,i*e),l._cloneInto(d);return l.destroy(),d.destroy(),u(f,Mt),c.slice(0,r)}var Ft=(e,t,n,r,i)=>Pt(e,jt(e,t,n),r,i);l(),_(),S();var It=Ee(),Lt=`:`;function Rt(e){let[t,n]=e.split(Lt);return{namespace:t,reference:n}}function zt(e,t){return e.includes(`:`)?[e]:t.chains||[]}var Bt={INVALID_METHOD:{message:`Invalid method.`,code:1001},INVALID_EVENT:{message:`Invalid event.`,code:1002},INVALID_UPDATE_REQUEST:{message:`Invalid update request.`,code:1003},INVALID_EXTEND_REQUEST:{message:`Invalid extend request.`,code:1004},INVALID_SESSION_SETTLE_REQUEST:{message:`Invalid session settle request.`,code:1005},UNAUTHORIZED_METHOD:{message:`Unauthorized method.`,code:3001},UNAUTHORIZED_EVENT:{message:`Unauthorized event.`,code:3002},UNAUTHORIZED_UPDATE_REQUEST:{message:`Unauthorized update request.`,code:3003},UNAUTHORIZED_EXTEND_REQUEST:{message:`Unauthorized extend request.`,code:3004},USER_REJECTED:{message:`User rejected.`,code:5e3},USER_REJECTED_CHAINS:{message:`User rejected chains.`,code:5001},USER_REJECTED_METHODS:{message:`User rejected methods.`,code:5002},USER_REJECTED_EVENTS:{message:`User rejected events.`,code:5003},UNSUPPORTED_CHAINS:{message:`Unsupported chains.`,code:5100},UNSUPPORTED_METHODS:{message:`Unsupported methods.`,code:5101},UNSUPPORTED_EVENTS:{message:`Unsupported events.`,code:5102},UNSUPPORTED_ACCOUNTS:{message:`Unsupported accounts.`,code:5103},UNSUPPORTED_NAMESPACE_KEY:{message:`Unsupported namespace key.`,code:5104},USER_DISCONNECTED:{message:`User disconnected.`,code:6e3},SESSION_SETTLEMENT_FAILED:{message:`Session settlement failed.`,code:7e3},WC_METHOD_UNSUPPORTED:{message:`Unsupported wc_ method.`,code:10001}},Vt={NOT_INITIALIZED:{message:`Not initialized.`,code:1},NO_MATCHING_KEY:{message:`No matching key.`,code:2},RESTORE_WILL_OVERRIDE:{message:`Restore will override.`,code:3},RESUBSCRIBED:{message:`Resubscribed.`,code:4},MISSING_OR_INVALID:{message:`Missing or invalid.`,code:5},EXPIRED:{message:`Expired.`,code:6},UNKNOWN_TYPE:{message:`Unknown type.`,code:7},MISMATCHED_TOPIC:{message:`Mismatched topic.`,code:8},NON_CONFORMING_NAMESPACES:{message:`Non conforming namespaces.`,code:9}};function U(e,t){let{message:n,code:r}=Vt[e];return{message:t?`${n} ${t}`:n,code:r}}function W(e,t){let{message:n,code:r}=Bt[e];return{message:t?`${n} ${t}`:n,code:r}}var Ht={reactNative:`react-native`,node:`node`,browser:`browser`,unknown:`unknown`};function Ut(){return typeof t<`u`&&typeof t.versions<`u`&&typeof t.versions.node<`u`}function Wt(){return!(0,ke.getDocument)()&&!!(0,ke.getNavigator)()&&navigator.product===`ReactNative`}function Gt(){return Wt()&&typeof i<`u`&&typeof i?.Platform<`u`&&i?.Platform.OS===`android`}function Kt(){return Wt()&&typeof i<`u`&&typeof i?.Platform<`u`&&i?.Platform.OS===`ios`}function qt(){return!Ut()&&!!(0,ke.getNavigator)()&&!!(0,ke.getDocument)()}function Jt(){return Wt()?Ht.reactNative:Ut()?Ht.node:qt()?Ht.browser:Ht.unknown}function Yt(){try{return Wt()&&typeof i<`u`&&typeof i?.Application<`u`?i.Application?.applicationId:void 0}catch{return}}function Xt(e,t){let n=new URLSearchParams(e);return Object.entries(t).sort(([e],[t])=>e.localeCompare(t)).forEach(([e,t])=>{t!=null&&n.set(e,String(t))}),n.toString()}function Zt(e){let t=Qt();try{return e?.url&&t.url&&new URL(e.url).host!==new URL(t.url).host&&(e.url=t.url),e?.icons?.length&&e.icons.length>0&&(e.icons=e.icons.filter(e=>e!==``)),{...t,...e,url:e?.url||t.url,name:e?.name||t.name,description:e?.description||t.description,icons:e?.icons?.length&&e.icons.length>0?e.icons:t.icons}}catch{return e||t}}function Qt(){return(0,Ae.getWindowMetadata)()||{name:``,description:``,url:``,icons:[``]}}function $t(){if(Jt()===Ht.reactNative&&typeof i<`u`&&typeof i?.Platform<`u`){let{OS:e,Version:t}=i.Platform;return[e,t].join(`-`)}let e=fe();if(e===null)return`unknown`;let t=e.os?e.os.replace(` `,``).toLowerCase():`unknown`;return e.type===`browser`?[t,e.name,e.version].join(`-`):[t,e.version].join(`-`)}function en(){let e=Jt();return e===Ht.browser?[e,(0,ke.getLocation)()?.host||`unknown`].join(`:`):e}function tn(e,t,n){let r=$t(),i=en();return[[e,t].join(`-`),[`js`,n].join(`-`),r,i].join(`/`)}function nn({protocol:e,version:t,relayUrl:n,sdkVersion:r,auth:i,projectId:a,useOnCloseEvent:o,bundleId:s,packageName:c}){let l=n.split(`?`),u={auth:i,ua:tn(e,t,r),projectId:a,useOnCloseEvent:o||void 0,packageName:c||void 0,bundleId:s||void 0},d=Xt(l[1]||``,u);return l[0]+`?`+d}function rn(e,t){return e.filter(e=>t.includes(e)).length===e.length}function an(e){return Object.fromEntries(e.entries())}function on(e){return new Map(Object.entries(e))}function sn(e=z.FIVE_MINUTES,t){let n=(0,z.toMiliseconds)(e||z.FIVE_MINUTES),r,i,a,o;return{resolve:e=>{a&&r&&(clearTimeout(a),r(e),o=Promise.resolve(e))},reject:e=>{a&&i&&(clearTimeout(a),i(e))},done:()=>new Promise((e,s)=>{if(o)return e(o);a=setTimeout(()=>{let e=U(`EXPIRED`),n=Error(t||e.message);n.code=e.code,s(n)},n),r=e,i=s})}}function cn(e,t,n){return new Promise(async(r,i)=>{let a=setTimeout(()=>i(Error(n)),t);try{r(await e)}catch(e){i(e)}clearTimeout(a)})}function ln(e,t){if(typeof t==`string`&&t.startsWith(`${e}:`))return t;if(e.toLowerCase()===`topic`){if(typeof t!=`string`)throw Error(`Value must be "string" for expirer target type: topic`);return`topic:${t}`}if(e.toLowerCase()===`id`){if(typeof t!=`number`)throw Error(`Value must be "number" for expirer target type: id`);return`id:${t}`}throw Error(`Unknown expirer target type: ${e}`)}function un(e){return ln(`topic`,e)}function dn(e){return ln(`id`,e)}function fn(e){let[t,n]=e.split(`:`),r={id:void 0,topic:void 0};if(t===`topic`&&typeof n==`string`)r.topic=n;else if(t===`id`&&Number.isInteger(Number(n)))r.id=Number(n);else throw Error(`Invalid target, expected id:number or topic:string, got ${t}:${n}`);return r}function G(e,t){return(0,z.fromMiliseconds)((t||Date.now())+(0,z.toMiliseconds)(e))}function pn(e){return Date.now()>=(0,z.toMiliseconds)(e)}function K(e,t){return`${e}${t?`:${t}`:``}`}function mn(e=[],t=[]){return[...new Set([...e,...t])]}async function hn({id:e,topic:t,wcDeepLink:n}){try{if(!n)return;let r=(typeof n==`string`?JSON.parse(n):n)?.href;if(typeof r!=`string`)return;let a=gn(r,e,t),o=Jt();if(o===Ht.browser){if(!(0,ke.getDocument)()?.hasFocus())return;_n(a)}else o===Ht.reactNative&&typeof i?.Linking<`u`&&await i.Linking.openURL(a)}catch{}}function gn(e,t,n){let r=`requestId=${t}&sessionTopic=${n}`;e.endsWith(`/`)&&(e=e.slice(0,-1));let i=`${e}`;if(e.startsWith(`https://t.me`)){let t=e.includes(`?`)?`&startapp=`:`?startapp=`;i=`${i}${t}${wn(r,!0)}`}else i=`${i}/wc?${r}`;return i}function _n(e){let t=`_self`;Cn()?t=`_top`:(Sn()||e.startsWith(`https://`)||e.startsWith(`http://`))&&(t=`_blank`),window.open(e,t,`noreferrer noopener`)}async function vn(e,t){let n=``;try{if(qt()&&(n=localStorage.getItem(t),n))return n;n=await e.getItem(t)}catch{}return n}function yn(e,t){if(!e.includes(t))return null;let n=e.split(/([&,?,=])/);return n[n.indexOf(t)+2]}function bn(){return typeof crypto<`u`&&crypto?.randomUUID?crypto.randomUUID():`xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx`.replace(/[xy]/gu,e=>{let t=Math.random()*16|0;return(e===`x`?t:t&3|8).toString(16)})}function xn(){return typeof t<`u`&&{}.IS_VITEST===`true`}function Sn(){return typeof window<`u`&&(!!window.TelegramWebviewProxy||!!window.Telegram||!!window.TelegramWebviewProxyProto)}function Cn(){try{return window.self!==window.top}catch{return!1}}function wn(e,t=!1){let n=new TextEncoder().encode(e),r=Array(n.length);for(let e=0;e<n.length;e++)r[e]=String.fromCharCode(n[e]);let i=btoa(r.join(``));return t?i.replace(/[=]/g,``):i}function Tn(e){let t=e+`=`.repeat((4-e.length%4)%4),n=atob(t),r=new Uint8Array(n.length);for(let e=0;e<n.length;e++)r[e]=n.charCodeAt(e);return new TextDecoder().decode(r)}function En(e){return new Promise(t=>setTimeout(t,e))}var Dn=class{constructor({limit:e}){this.limit=e,this.set=new Set}add(e){if(!this.set.has(e)){if(this.set.size>=this.limit){let e=this.set.values().next().value;e&&this.set.delete(e)}this.set.add(e)}}has(e){return this.set.has(e)}},On=`https://rpc.walletconnect.org/v1`;function kn(e){let t=e+`=`.repeat((4-e.length%4)%4),n=atob(t),r=new Uint8Array(n.length);for(let e=0;e<n.length;e++)r[e]=n.charCodeAt(e);return r}var An=/^0x[0-9a-fA-F]{64}$/;function jn(e){return An.test(e)}function Mn(e){let t=new TextEncoder().encode(e),n=new TextEncoder().encode(`Ethereum Signed Message:
2
- ${t.length}`);return`0x`+R(ee(Se([n,t])),`base16`)}async function Nn(e,t,n,r,i,a){switch(n.t){case`eip191`:return await Pn(e,t,n.s);case`eip1271`:return await Fn(e,t,n.s,r,i,a);default:throw Error(`verifySignature failed: Attempted to verify CacaoSignature with unknown type: ${n.t}`)}}function Pn(e,t,n){let r=Ce(n);return xe({payload:Mn(t),signature:r}).toLowerCase()===e.toLowerCase()}async function Fn(e,t,n,r,i,a){let o=Rt(r);if(!o.namespace||!o.reference)throw Error(`isValidEip1271Signature failed: chainId must be in CAIP-2 format, received: ${r}`);try{let o=n.substring(2),s=(o.length/2).toString(16).padStart(64,`0`),c=`0x1626ba7e`+(jn(t)?t:Mn(t)).substring(2)+`0000000000000000000000000000000000000000000000000000000000000040`+s+o,{result:l}=await(await fetch(`${a||On}/?chainId=${r}&projectId=${i}`,{headers:{"Content-Type":`application/json`},method:`POST`,body:JSON.stringify({id:In(),jsonrpc:`2.0`,method:`eth_call`,params:[{to:e,data:c},`latest`]})})).json();return l?l.slice(0,10).toLowerCase()===`0x1626ba7e`:!1}catch{return!1}}function In(){return Date.now()+Math.floor(Math.random()*1e3)}function Ln(e){let t=kn(e),n=t[0];if(n===0)throw Error(`No signatures found`);let r=1+n*64;if(t.length<r)throw Error(`Transaction data too short for claimed signature count`);if(t.length<100)throw Error(`Transaction too short`);let i=t.slice(1,65);return v.encode(i)}function Rn(e){let t=kn(e),n=new TextEncoder().encode(`TransactionData::`),r=new Uint8Array(n.length+t.length);r.set(n),r.set(t,n.length);let i=Te(r,{dkLen:32});return v.encode(i)}function zn(e){let t=new Uint8Array(d(Bn(e)));return v.encode(t)}function Bn(e){if(e instanceof Uint8Array)return e;if(Array.isArray(e))return new Uint8Array(e);if(typeof e==`object`&&e?.data)return new Uint8Array(Object.values(e.data));if(typeof e==`object`&&e)return new Uint8Array(Object.values(e));throw Error(`getNearUint8ArrayFromBytes: Unexpected result type from bytes array`)}function Vn(e){let t=kn(e),n=ye(t).txn;if(!n)throw Error(`Invalid signed transaction: missing 'txn' field`);let r=ge(n),i=new TextEncoder().encode(`TX`),a=Se([i,new Uint8Array(r)]),o=m(a);return y.encode(o).replace(/=+$/,``)}function Hn(e){let t=[],n=BigInt(e);for(;n>=128n;)t.push(Number(n&127n|128n)),n>>=7n;return t.push(Number(n)),new Uint8Array(t)}function Un(e){let t=kn(e.signed.bodyBytes),n=kn(e.signed.authInfoBytes),r=kn(e.signature.signature),i=[];i.push(new Uint8Array([10])),i.push(Hn(t.length)),i.push(t),i.push(new Uint8Array([18])),i.push(Hn(n.length)),i.push(n),i.push(new Uint8Array([26])),i.push(Hn(r.length)),i.push(r);let a=Se(i),o=d(a);return R(o,`base16`).toUpperCase()}var Wn={pubnet:`Public Global Stellar Network ; September 2015`,testnet:`Test SDF Network ; September 2015`},Gn=0,Kn=2,qn=5,Jn=72,Yn=64,Xn=20;function Zn(e,t){return new DataView(e.buffer,e.byteOffset,e.byteLength).getUint32(t,!1)}function Qn(e){for(let t=Xn;t>=0;t--){let n=e.length-4-Jn*t;if(n<4||Zn(e,n)!==t)continue;let r=!0;for(let i=0;i<t;i++)if(Zn(e,n+4+Jn*i+4)!==Yn){r=!1;break}if(r)return n}throw Error(`getStellarTransactionHash: could not locate envelope signature array`)}function $n(e,t){let n=kn(e);if(n.length<8)throw Error(`getStellarTransactionHash: envelope too short`);let r=Zn(n,0),i,a;switch(r){case Gn:i=Kn,a=0;break;case Kn:i=Kn,a=4;break;case qn:i=qn,a=4;break;default:throw Error(`getStellarTransactionHash: unsupported envelope type: ${r}`)}let o=Qn(n),s=t?.split(`:`).pop()??`pubnet`,c=Wn[s];if(!c)throw Error(`getStellarTransactionHash: unknown Stellar network: ${s}`);let l=d(new TextEncoder().encode(c)),u=new Uint8Array([0,0,0,i]),f=Se([l,u,n.slice(a,o)]);return R(d(f),`base16`)}function er(e){let t=[];try{if(typeof e==`string`)return t.push(e),t;if(typeof e!=`object`)return t;e?.id&&t.push(e.id);let n=e?.capabilities?.caip345?.transactionHashes;n&&t.push(...n)}catch{}return t}var tr=`did:pkh:`,nr={eip155:`Ethereum`,solana:`Solana`,bip122:`Bitcoin`},rr=e=>e?nr[e]||e:``,ir=e=>e?.split(`:`),ar=e=>{let t=e&&ir(e);if(t)return e.includes(tr)?t[3]:t[1]},or=e=>{let t=e&&ir(e);if(t)return e.includes(tr)?t[2]:t[0]},sr=e=>{let t=e&&ir(e);if(t)return t[2]+`:`+t[3]},cr=e=>{let t=e&&ir(e);if(t)return t.pop()};async function lr(e){let{cacao:t,projectId:n}=e,{s:r,p:i}=t,a;try{a=dr(i,i.iss)}catch{return!1}let o=cr(i.iss);try{return await Nn(o,a,r,sr(i.iss),n)}catch{return!1}}function ur(e){let{cacao:t,request:n}=e,{p:r}=t;if(r.domain!==n.domain)return{valid:!1,reason:`domain mismatch: requested ${n.domain}, got ${r.domain}`};if(r.nonce!==n.nonce)return{valid:!1,reason:`nonce mismatch: requested ${n.nonce}, got ${r.nonce}`};let i=n.aud||n.uri,a=r.aud||r.uri;if(i&&a!==i)return{valid:!1,reason:`aud mismatch: requested ${i}, got ${a}`};if(n.chains?.length){let e=sr(r.iss);if(!e||!n.chains.includes(e))return{valid:!1,reason:`cacao issued for chain ${e} which was not requested`}}let o=Date.now();if(r.exp){let e=new Date(r.exp).getTime();if(isNaN(e))return{valid:!1,reason:`malformed exp: ${r.exp}`};if(e<o)return{valid:!1,reason:`cacao has expired`}}if(r.nbf){let e=new Date(r.nbf).getTime();if(isNaN(e))return{valid:!1,reason:`malformed nbf: ${r.nbf}`};if(e>o)return{valid:!1,reason:`cacao is not yet valid`}}return{valid:!0}}var dr=(e,t)=>{let n=or(t);if(!n)throw Error(`Invalid issuer: `+t);let r=`${e.domain} wants you to sign in with your ${rr(n)} account:`,i=cr(t);if(!e.aud&&!e.uri)throw Error("Either `aud` or `uri` is required to construct the message");let a=e.statement||void 0,o=`URI: ${e.aud||e.uri}`,s=`Version: ${e.version}`,c=`Chain ID: ${ar(t)}`,l=`Nonce: ${e.nonce}`,u=`Issued At: ${e.iat}`,d=e.exp?`Expiration Time: ${e.exp}`:void 0,f=e.nbf?`Not Before: ${e.nbf}`:void 0,p=e.requestId?`Request ID: ${e.requestId}`:void 0,m=e.resources?`Resources:${e.resources.map(e=>`
1
+ import{s as e}from"./rolldown-runtime-BcKkbAw3.js";import{n as t,t as n}from"./dist-Cuadm9-o.js";import{n as r,t as i}from"./dist-D6L6gF64.js";import{B as a,D as o,E as s,G as c,L as l,j as u}from"./_u64-BLNH_r32.js";import{i as d,n as f,r as p,s as m,t as h}from"./hmac-DY3QYcUU.js";import{n as g,t as _}from"./sha256-DmRqOOd6.js";import{n as ee,t as te}from"./sha3-DRlIjSdj.js";import{n as v,t as y}from"./esm-CjTnkPtf.js";import{r as b,t as x}from"./dist-ZKTSEBXW.js";import{n as S,r as C}from"./ed25519-DWgFEKI3.js";import{t as w}from"./events-CMzhc0tf.js";import{C as T,D as E,E as D,O,S as k,T as A,_ as j,a as M,b as N,c as P,d as F,f as I,g as ne,i as re,k as ie,l as ae,m as oe,n as se,o as ce,r as le,t as ue,u as de,v as fe,w as pe,x as me,y as he}from"./index.es-BHs2-Pa6.js";import{a as ge,c as _e,d as ve,i as ye,l as be,n as L,o as xe,r as Se,s as Ce,t as R,u as we}from"./src-DbdC_Alu.js";import{t as Te}from"./blake2-CL6aokTA.js";import{t as Ee}from"./blakejs-x6iaQxOd.js";import{t as De}from"./p256-B9jXkI6_.js";n(),r(),l(),p(),te();var Oe=e(w()),z=ie(),ke=j(),Ae=ne();function je(e){return e instanceof Uint8Array||ArrayBuffer.isView(e)&&e.constructor.name===`Uint8Array`}function Me(e){if(typeof e!=`boolean`)throw Error(`boolean expected, not ${e}`)}function Ne(e){if(!Number.isSafeInteger(e)||e<0)throw Error(`positive integer expected, got `+e)}function B(e,...t){if(!je(e))throw Error(`Uint8Array expected`);if(t.length>0&&!t.includes(e.length))throw Error(`Uint8Array expected of length `+t+`, got length=`+e.length)}function Pe(e,t=!0){if(e.destroyed)throw Error(`Hash instance has been destroyed`);if(t&&e.finished)throw Error(`Hash#digest() has already been called`)}function Fe(e,t){B(e);let n=t.outputLen;if(e.length<n)throw Error(`digestInto() expects output buffer of length at least `+n)}function Ie(e){return new Uint32Array(e.buffer,e.byteOffset,Math.floor(e.byteLength/4))}function Le(...e){for(let t=0;t<e.length;t++)e[t].fill(0)}function Re(e){return new DataView(e.buffer,e.byteOffset,e.byteLength)}var ze=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68;function Be(e){if(typeof e!=`string`)throw Error(`string expected`);return new Uint8Array(new TextEncoder().encode(e))}function Ve(e){if(typeof e==`string`)e=Be(e);else if(je(e))e=Ye(e);else throw Error(`Uint8Array expected, got `+typeof e);return e}function He(e,t){if(typeof t!=`object`||!t)throw Error(`options must be defined`);return Object.assign(e,t)}function Ue(e,t){if(e.length!==t.length)return!1;let n=0;for(let r=0;r<e.length;r++)n|=e[r]^t[r];return n===0}var We=(e,t)=>{function n(n,...r){if(B(n),!ze)throw Error(`Non little-endian hardware is not yet supported`);if(e.nonceLength!==void 0){let t=r[0];if(!t)throw Error(`nonce / iv required`);e.varSizeNonce?B(t):B(t,e.nonceLength)}let i=e.tagLength;i&&r[1]!==void 0&&B(r[1]);let a=t(n,...r),o=(e,t)=>{if(t!==void 0){if(e!==2)throw Error(`cipher output not supported`);B(t)}},s=!1;return{encrypt(e,t){if(s)throw Error(`cannot encrypt() twice with same key + nonce`);return s=!0,B(e),o(a.encrypt.length,t),a.encrypt(e,t)},decrypt(e,t){if(B(e),i&&e.length<i)throw Error(`invalid ciphertext length: smaller than tagLength=`+i);return o(a.decrypt.length,t),a.decrypt(e,t)}}}return Object.assign(n,e),n};function Ge(e,t,n=!0){if(t===void 0)return new Uint8Array(e);if(t.length!==e)throw Error(`invalid output length, expected `+e+`, got: `+t.length);if(n&&!Je(t))throw Error(`invalid output, must be aligned`);return t}function Ke(e,t,n,r){if(typeof e.setBigUint64==`function`)return e.setBigUint64(t,n,r);let i=BigInt(32),a=BigInt(4294967295),o=Number(n>>i&a),s=Number(n&a),c=r?4:0,l=r?0:4;e.setUint32(t+c,o,r),e.setUint32(t+l,s,r)}function qe(e,t,n){Me(n);let r=new Uint8Array(16),i=Re(r);return Ke(i,0,BigInt(t),n),Ke(i,8,BigInt(e),n),r}function Je(e){return e.byteOffset%4==0}function Ye(e){return Uint8Array.from(e)}var Xe=class extends O{constructor(e){super(),this.opts=e,this.protocol=`wc`,this.version=2}},Ze=class extends O{constructor(e,t){super(),this.core=e,this.logger=t,this.records=new Map}},Qe=class{constructor(e,t){this.logger=e,this.core=t}},$e=class extends O{constructor(e,t){super(),this.relayer=e,this.logger=t}},et=class extends O{constructor(e){super()}},tt=class{constructor(e,t,n,r){this.core=e,this.logger=t,this.name=n}},nt=class extends O{constructor(e,t){super(),this.relayer=e,this.logger=t}},rt=class extends O{constructor(e,t){super(),this.core=e,this.logger=t}},it=class{constructor(e,t,n){this.core=e,this.logger=t,this.store=n}},at=class{constructor(e,t){this.projectId=e,this.logger=t}},ot=class{constructor(e,t,n){this.core=e,this.logger=t,this.telemetryEnabled=n}},st=class{constructor(e){this.opts=e,this.protocol=`wc`,this.version=2}},ct=class{constructor(e){this.client=e}},lt=e=>Uint8Array.from(e.split(``).map(e=>e.charCodeAt(0))),ut=lt(`expand 16-byte k`),dt=lt(`expand 32-byte k`),ft=Ie(ut),pt=Ie(dt);function V(e,t){return e<<t|e>>>32-t}function mt(e){return e.byteOffset%4==0}var ht=64,gt=16,_t=2**32-1,vt=new Uint32Array;function yt(e,t,n,r,i,a,o,s){let c=i.length,l=new Uint8Array(ht),u=Ie(l),d=mt(i)&&mt(a),f=d?Ie(i):vt,p=d?Ie(a):vt;for(let m=0;m<c;o++){if(e(t,n,r,u,o,s),o>=_t)throw Error(`arx: counter overflow`);let h=Math.min(ht,c-m);if(d&&h===ht){let e=m/4;if(m%4!=0)throw Error(`arx: invalid block position`);for(let t=0,n;t<gt;t++)n=e+t,p[n]=f[n]^u[t];m+=ht;continue}for(let e=0,t;e<h;e++)t=m+e,a[t]=i[t]^l[e];m+=h}}function bt(e,t){let{allowShortKeys:n,extendNonceFn:r,counterLength:i,counterRight:a,rounds:o}=He({allowShortKeys:!1,counterLength:8,counterRight:!1,rounds:20},t);if(typeof e!=`function`)throw Error(`core must be a function`);return Ne(i),Ne(o),Me(a),Me(n),(t,s,c,l,u=0)=>{B(t),B(s),B(c);let d=c.length;if(l===void 0&&(l=new Uint8Array(d)),B(l),Ne(u),u<0||u>=_t)throw Error(`arx: counter overflow`);if(l.length<d)throw Error(`arx: output (${l.length}) is shorter than data (${d})`);let f=[],p=t.length,m,h;if(p===32)f.push(m=Ye(t)),h=pt;else if(p===16&&n)m=new Uint8Array(32),m.set(t),m.set(t,16),h=ft,f.push(m);else throw Error(`arx: invalid 32-byte key, got length=${p}`);mt(s)||f.push(s=Ye(s));let g=Ie(m);if(r){if(s.length!==24)throw Error(`arx: extended nonce must be 24 bytes`);r(h,g,Ie(s.subarray(0,16)),g),s=s.subarray(16)}let _=16-i;if(_!==s.length)throw Error(`arx: nonce must be ${_} or 16 bytes`);if(_!==12){let e=new Uint8Array(12);e.set(s,a?0:12-s.length),s=e,f.push(s)}let ee=Ie(s);return yt(e,h,g,ee,c,l,u,o),Le(...f),l}}var H=(e,t)=>e[t++]&255|(e[t++]&255)<<8,xt=class{constructor(e){this.blockLen=16,this.outputLen=16,this.buffer=new Uint8Array(16),this.r=new Uint16Array(10),this.h=new Uint16Array(10),this.pad=new Uint16Array(8),this.pos=0,this.finished=!1,e=Ve(e),B(e,32);let t=H(e,0),n=H(e,2),r=H(e,4),i=H(e,6),a=H(e,8),o=H(e,10),s=H(e,12),c=H(e,14);this.r[0]=t&8191,this.r[1]=(t>>>13|n<<3)&8191,this.r[2]=(n>>>10|r<<6)&7939,this.r[3]=(r>>>7|i<<9)&8191,this.r[4]=(i>>>4|a<<12)&255,this.r[5]=a>>>1&8190,this.r[6]=(a>>>14|o<<2)&8191,this.r[7]=(o>>>11|s<<5)&8065,this.r[8]=(s>>>8|c<<8)&8191,this.r[9]=c>>>5&127;for(let t=0;t<8;t++)this.pad[t]=H(e,16+2*t)}process(e,t,n=!1){let r=n?0:2048,{h:i,r:a}=this,o=a[0],s=a[1],c=a[2],l=a[3],u=a[4],d=a[5],f=a[6],p=a[7],m=a[8],h=a[9],g=H(e,t+0),_=H(e,t+2),ee=H(e,t+4),te=H(e,t+6),v=H(e,t+8),y=H(e,t+10),b=H(e,t+12),x=H(e,t+14),S=i[0]+(g&8191),C=i[1]+((g>>>13|_<<3)&8191),w=i[2]+((_>>>10|ee<<6)&8191),T=i[3]+((ee>>>7|te<<9)&8191),E=i[4]+((te>>>4|v<<12)&8191),D=i[5]+(v>>>1&8191),O=i[6]+((v>>>14|y<<2)&8191),k=i[7]+((y>>>11|b<<5)&8191),A=i[8]+((b>>>8|x<<8)&8191),j=i[9]+(x>>>5|r),M=0,N=M+S*o+5*h*C+5*m*w+5*p*T+5*f*E;M=N>>>13,N&=8191,N+=5*d*D+5*u*O+5*l*k+5*c*A+5*s*j,M+=N>>>13,N&=8191;let P=M+S*s+C*o+5*h*w+5*m*T+5*p*E;M=P>>>13,P&=8191,P+=5*f*D+5*d*O+5*u*k+5*l*A+5*c*j,M+=P>>>13,P&=8191;let F=M+S*c+C*s+w*o+5*h*T+5*m*E;M=F>>>13,F&=8191,F+=5*p*D+5*f*O+5*d*k+5*u*A+5*l*j,M+=F>>>13,F&=8191;let I=M+S*l+C*c+w*s+T*o+5*h*E;M=I>>>13,I&=8191,I+=5*m*D+5*p*O+5*f*k+5*d*A+5*u*j,M+=I>>>13,I&=8191;let ne=M+S*u+C*l+w*c+T*s+E*o;M=ne>>>13,ne&=8191,ne+=5*h*D+5*m*O+5*p*k+5*f*A+5*d*j,M+=ne>>>13,ne&=8191;let re=M+S*d+C*u+w*l+T*c+E*s;M=re>>>13,re&=8191,re+=D*o+5*h*O+5*m*k+5*p*A+5*f*j,M+=re>>>13,re&=8191;let ie=M+S*f+C*d+w*u+T*l+E*c;M=ie>>>13,ie&=8191,ie+=D*s+O*o+5*h*k+5*m*A+5*p*j,M+=ie>>>13,ie&=8191;let ae=M+S*p+C*f+w*d+T*u+E*l;M=ae>>>13,ae&=8191,ae+=D*c+O*s+k*o+5*h*A+5*m*j,M+=ae>>>13,ae&=8191;let oe=M+S*m+C*p+w*f+T*d+E*u;M=oe>>>13,oe&=8191,oe+=D*l+O*c+k*s+A*o+5*h*j,M+=oe>>>13,oe&=8191;let se=M+S*h+C*m+w*p+T*f+E*d;M=se>>>13,se&=8191,se+=D*u+O*l+k*c+A*s+j*o,M+=se>>>13,se&=8191,M=(M<<2)+M|0,M=M+N|0,N=M&8191,M>>>=13,P+=M,i[0]=N,i[1]=P,i[2]=F,i[3]=I,i[4]=ne,i[5]=re,i[6]=ie,i[7]=ae,i[8]=oe,i[9]=se}finalize(){let{h:e,pad:t}=this,n=new Uint16Array(10),r=e[1]>>>13;e[1]&=8191;for(let t=2;t<10;t++)e[t]+=r,r=e[t]>>>13,e[t]&=8191;e[0]+=r*5,r=e[0]>>>13,e[0]&=8191,e[1]+=r,r=e[1]>>>13,e[1]&=8191,e[2]+=r,n[0]=e[0]+5,r=n[0]>>>13,n[0]&=8191;for(let t=1;t<10;t++)n[t]=e[t]+r,r=n[t]>>>13,n[t]&=8191;n[9]-=8192;let i=(r^1)-1;for(let e=0;e<10;e++)n[e]&=i;i=~i;for(let t=0;t<10;t++)e[t]=e[t]&i|n[t];e[0]=(e[0]|e[1]<<13)&65535,e[1]=(e[1]>>>3|e[2]<<10)&65535,e[2]=(e[2]>>>6|e[3]<<7)&65535,e[3]=(e[3]>>>9|e[4]<<4)&65535,e[4]=(e[4]>>>12|e[5]<<1|e[6]<<14)&65535,e[5]=(e[6]>>>2|e[7]<<11)&65535,e[6]=(e[7]>>>5|e[8]<<8)&65535,e[7]=(e[8]>>>8|e[9]<<5)&65535;let a=e[0]+t[0];e[0]=a&65535;for(let n=1;n<8;n++)a=(e[n]+t[n]|0)+(a>>>16)|0,e[n]=a&65535;Le(n)}update(e){Pe(this),e=Ve(e),B(e);let{buffer:t,blockLen:n}=this,r=e.length;for(let i=0;i<r;){let a=Math.min(n-this.pos,r-i);if(a===n){for(;n<=r-i;i+=n)this.process(e,i);continue}t.set(e.subarray(i,i+a),this.pos),this.pos+=a,i+=a,this.pos===n&&(this.process(t,0,!1),this.pos=0)}return this}destroy(){Le(this.h,this.r,this.buffer,this.pad)}digestInto(e){Pe(this),Fe(e,this),this.finished=!0;let{buffer:t,h:n}=this,{pos:r}=this;if(r){for(t[r++]=1;r<16;r++)t[r]=0;this.process(t,0,!0)}this.finalize();let i=0;for(let t=0;t<8;t++)e[i++]=n[t]>>>0,e[i++]=n[t]>>>8;return e}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}};function St(e){let t=(t,n)=>e(n).update(Ve(t)).digest(),n=e(new Uint8Array(32));return t.outputLen=n.outputLen,t.blockLen=n.blockLen,t.create=t=>e(t),t}var Ct=St(e=>new xt(e));function wt(e,t,n,r,i,a=20){let o=e[0],s=e[1],c=e[2],l=e[3],u=t[0],d=t[1],f=t[2],p=t[3],m=t[4],h=t[5],g=t[6],_=t[7],ee=i,te=n[0],v=n[1],y=n[2],b=o,x=s,S=c,C=l,w=u,T=d,E=f,D=p,O=m,k=h,A=g,j=_,M=ee,N=te,P=v,F=y;for(let e=0;e<a;e+=2)b=b+w|0,M=V(M^b,16),O=O+M|0,w=V(w^O,12),b=b+w|0,M=V(M^b,8),O=O+M|0,w=V(w^O,7),x=x+T|0,N=V(N^x,16),k=k+N|0,T=V(T^k,12),x=x+T|0,N=V(N^x,8),k=k+N|0,T=V(T^k,7),S=S+E|0,P=V(P^S,16),A=A+P|0,E=V(E^A,12),S=S+E|0,P=V(P^S,8),A=A+P|0,E=V(E^A,7),C=C+D|0,F=V(F^C,16),j=j+F|0,D=V(D^j,12),C=C+D|0,F=V(F^C,8),j=j+F|0,D=V(D^j,7),b=b+T|0,F=V(F^b,16),A=A+F|0,T=V(T^A,12),b=b+T|0,F=V(F^b,8),A=A+F|0,T=V(T^A,7),x=x+E|0,M=V(M^x,16),j=j+M|0,E=V(E^j,12),x=x+E|0,M=V(M^x,8),j=j+M|0,E=V(E^j,7),S=S+D|0,N=V(N^S,16),O=O+N|0,D=V(D^O,12),S=S+D|0,N=V(N^S,8),O=O+N|0,D=V(D^O,7),C=C+w|0,P=V(P^C,16),k=k+P|0,w=V(w^k,12),C=C+w|0,P=V(P^C,8),k=k+P|0,w=V(w^k,7);let I=0;r[I++]=o+b|0,r[I++]=s+x|0,r[I++]=c+S|0,r[I++]=l+C|0,r[I++]=u+w|0,r[I++]=d+T|0,r[I++]=f+E|0,r[I++]=p+D|0,r[I++]=m+O|0,r[I++]=h+k|0,r[I++]=g+A|0,r[I++]=_+j|0,r[I++]=ee+M|0,r[I++]=te+N|0,r[I++]=v+P|0,r[I++]=y+F|0}var Tt=bt(wt,{counterRight:!1,counterLength:4,allowShortKeys:!1}),Et=new Uint8Array(16),Dt=(e,t)=>{e.update(t);let n=t.length%16;n&&e.update(Et.subarray(n))},Ot=new Uint8Array(32);function kt(e,t,n,r,i){let a=e(t,n,Ot),o=Ct.create(a);i&&Dt(o,i),Dt(o,r);let s=qe(r.length,i?i.length:0,!0);o.update(s);let c=o.digest();return Le(a,s),c}var At=We({blockSize:64,nonceLength:12,tagLength:16},(e=>(t,n,r)=>({encrypt(i,a){let o=i.length;a=Ge(o+16,a,!1),a.set(i);let s=a.subarray(0,-16);e(t,n,s,s,1);let c=kt(e,t,n,s,r);return a.set(c,o),Le(c),a},decrypt(i,a){a=Ge(i.length-16,a,!1);let o=i.subarray(0,-16),s=i.subarray(-16),c=kt(e,t,n,o,r);if(!Ue(s,c))throw Error(`invalid tag`);return a.set(i.subarray(0,-16)),e(t,n,a,a,1),Le(c),a}}))(Tt));f();function jt(e,t,n){return s(e),n===void 0&&(n=new Uint8Array(e.outputLen)),h(e,c(n),c(t))}var Mt=Uint8Array.from([0]),Nt=Uint8Array.of();function Pt(e,t,n,r=32){s(e),o(r);let i=e.outputLen;if(r>255*i)throw Error(`Length should be <= 255*HashLen`);let a=Math.ceil(r/i);n===void 0&&(n=Nt);let c=new Uint8Array(a*i),l=h.create(e,t),d=l._cloneInto(),f=new Uint8Array(l.outputLen);for(let e=0;e<a;e++)Mt[0]=e+1,d.update(e===0?Nt:f).update(n).update(Mt).digestInto(f),c.set(f,i*e),l._cloneInto(d);return l.destroy(),d.destroy(),u(f,Mt),c.slice(0,r)}var Ft=(e,t,n,r,i)=>Pt(e,jt(e,t,n),r,i);l(),_(),S();var It=Ee(),Lt=`:`;function Rt(e){let[t,n]=e.split(Lt);return{namespace:t,reference:n}}function zt(e,t){return e.includes(`:`)?[e]:t.chains||[]}var Bt={INVALID_METHOD:{message:`Invalid method.`,code:1001},INVALID_EVENT:{message:`Invalid event.`,code:1002},INVALID_UPDATE_REQUEST:{message:`Invalid update request.`,code:1003},INVALID_EXTEND_REQUEST:{message:`Invalid extend request.`,code:1004},INVALID_SESSION_SETTLE_REQUEST:{message:`Invalid session settle request.`,code:1005},UNAUTHORIZED_METHOD:{message:`Unauthorized method.`,code:3001},UNAUTHORIZED_EVENT:{message:`Unauthorized event.`,code:3002},UNAUTHORIZED_UPDATE_REQUEST:{message:`Unauthorized update request.`,code:3003},UNAUTHORIZED_EXTEND_REQUEST:{message:`Unauthorized extend request.`,code:3004},USER_REJECTED:{message:`User rejected.`,code:5e3},USER_REJECTED_CHAINS:{message:`User rejected chains.`,code:5001},USER_REJECTED_METHODS:{message:`User rejected methods.`,code:5002},USER_REJECTED_EVENTS:{message:`User rejected events.`,code:5003},UNSUPPORTED_CHAINS:{message:`Unsupported chains.`,code:5100},UNSUPPORTED_METHODS:{message:`Unsupported methods.`,code:5101},UNSUPPORTED_EVENTS:{message:`Unsupported events.`,code:5102},UNSUPPORTED_ACCOUNTS:{message:`Unsupported accounts.`,code:5103},UNSUPPORTED_NAMESPACE_KEY:{message:`Unsupported namespace key.`,code:5104},USER_DISCONNECTED:{message:`User disconnected.`,code:6e3},SESSION_SETTLEMENT_FAILED:{message:`Session settlement failed.`,code:7e3},WC_METHOD_UNSUPPORTED:{message:`Unsupported wc_ method.`,code:10001}},Vt={NOT_INITIALIZED:{message:`Not initialized.`,code:1},NO_MATCHING_KEY:{message:`No matching key.`,code:2},RESTORE_WILL_OVERRIDE:{message:`Restore will override.`,code:3},RESUBSCRIBED:{message:`Resubscribed.`,code:4},MISSING_OR_INVALID:{message:`Missing or invalid.`,code:5},EXPIRED:{message:`Expired.`,code:6},UNKNOWN_TYPE:{message:`Unknown type.`,code:7},MISMATCHED_TOPIC:{message:`Mismatched topic.`,code:8},NON_CONFORMING_NAMESPACES:{message:`Non conforming namespaces.`,code:9}};function U(e,t){let{message:n,code:r}=Vt[e];return{message:t?`${n} ${t}`:n,code:r}}function W(e,t){let{message:n,code:r}=Bt[e];return{message:t?`${n} ${t}`:n,code:r}}var Ht={reactNative:`react-native`,node:`node`,browser:`browser`,unknown:`unknown`};function Ut(){return typeof t<`u`&&typeof t.versions<`u`&&typeof t.versions.node<`u`}function Wt(){return!(0,ke.getDocument)()&&!!(0,ke.getNavigator)()&&navigator.product===`ReactNative`}function Gt(){return Wt()&&typeof i<`u`&&typeof i?.Platform<`u`&&i?.Platform.OS===`android`}function Kt(){return Wt()&&typeof i<`u`&&typeof i?.Platform<`u`&&i?.Platform.OS===`ios`}function qt(){return!Ut()&&!!(0,ke.getNavigator)()&&!!(0,ke.getDocument)()}function Jt(){return Wt()?Ht.reactNative:Ut()?Ht.node:qt()?Ht.browser:Ht.unknown}function Yt(){try{return Wt()&&typeof i<`u`&&typeof i?.Application<`u`?i.Application?.applicationId:void 0}catch{return}}function Xt(e,t){let n=new URLSearchParams(e);return Object.entries(t).sort(([e],[t])=>e.localeCompare(t)).forEach(([e,t])=>{t!=null&&n.set(e,String(t))}),n.toString()}function Zt(e){let t=Qt();try{return e?.url&&t.url&&new URL(e.url).host!==new URL(t.url).host&&(console.warn(`The configured WalletConnect 'metadata.url':${e.url} differs from the actual page url:${t.url}. This is probably unintended and can lead to issues.`),e.url=t.url),e?.icons?.length&&e.icons.length>0&&(e.icons=e.icons.filter(e=>e!==``)),{...t,...e,url:e?.url||t.url,name:e?.name||t.name,description:e?.description||t.description,icons:e?.icons?.length&&e.icons.length>0?e.icons:t.icons}}catch(n){return console.warn(`Error populating app metadata`,n),e||t}}function Qt(){return(0,Ae.getWindowMetadata)()||{name:``,description:``,url:``,icons:[``]}}function $t(){if(Jt()===Ht.reactNative&&typeof i<`u`&&typeof i?.Platform<`u`){let{OS:e,Version:t}=i.Platform;return[e,t].join(`-`)}let e=fe();if(e===null)return`unknown`;let t=e.os?e.os.replace(` `,``).toLowerCase():`unknown`;return e.type===`browser`?[t,e.name,e.version].join(`-`):[t,e.version].join(`-`)}function en(){let e=Jt();return e===Ht.browser?[e,(0,ke.getLocation)()?.host||`unknown`].join(`:`):e}function tn(e,t,n){let r=$t(),i=en();return[[e,t].join(`-`),[`js`,n].join(`-`),r,i].join(`/`)}function nn({protocol:e,version:t,relayUrl:n,sdkVersion:r,auth:i,projectId:a,useOnCloseEvent:o,bundleId:s,packageName:c}){let l=n.split(`?`),u={auth:i,ua:tn(e,t,r),projectId:a,useOnCloseEvent:o||void 0,packageName:c||void 0,bundleId:s||void 0},d=Xt(l[1]||``,u);return l[0]+`?`+d}function rn(e,t){return e.filter(e=>t.includes(e)).length===e.length}function an(e){return Object.fromEntries(e.entries())}function on(e){return new Map(Object.entries(e))}function sn(e=z.FIVE_MINUTES,t){let n=(0,z.toMiliseconds)(e||z.FIVE_MINUTES),r,i,a,o;return{resolve:e=>{a&&r&&(clearTimeout(a),r(e),o=Promise.resolve(e))},reject:e=>{a&&i&&(clearTimeout(a),i(e))},done:()=>new Promise((e,s)=>{if(o)return e(o);a=setTimeout(()=>{let e=U(`EXPIRED`),n=Error(t||e.message);n.code=e.code,s(n)},n),r=e,i=s})}}function cn(e,t,n){return new Promise(async(r,i)=>{let a=setTimeout(()=>i(Error(n)),t);try{r(await e)}catch(e){i(e)}clearTimeout(a)})}function ln(e,t){if(typeof t==`string`&&t.startsWith(`${e}:`))return t;if(e.toLowerCase()===`topic`){if(typeof t!=`string`)throw Error(`Value must be "string" for expirer target type: topic`);return`topic:${t}`}if(e.toLowerCase()===`id`){if(typeof t!=`number`)throw Error(`Value must be "number" for expirer target type: id`);return`id:${t}`}throw Error(`Unknown expirer target type: ${e}`)}function un(e){return ln(`topic`,e)}function dn(e){return ln(`id`,e)}function fn(e){let[t,n]=e.split(`:`),r={id:void 0,topic:void 0};if(t===`topic`&&typeof n==`string`)r.topic=n;else if(t===`id`&&Number.isInteger(Number(n)))r.id=Number(n);else throw Error(`Invalid target, expected id:number or topic:string, got ${t}:${n}`);return r}function G(e,t){return(0,z.fromMiliseconds)((t||Date.now())+(0,z.toMiliseconds)(e))}function pn(e){return Date.now()>=(0,z.toMiliseconds)(e)}function K(e,t){return`${e}${t?`:${t}`:``}`}function mn(e=[],t=[]){return[...new Set([...e,...t])]}async function hn({id:e,topic:t,wcDeepLink:n}){try{if(!n)return;let r=(typeof n==`string`?JSON.parse(n):n)?.href;if(typeof r!=`string`)return;let a=gn(r,e,t),o=Jt();if(o===Ht.browser){if(!(0,ke.getDocument)()?.hasFocus()){console.warn(`Document does not have focus, skipping deeplink.`);return}_n(a)}else o===Ht.reactNative&&typeof i?.Linking<`u`&&await i.Linking.openURL(a)}catch(e){console.error(e)}}function gn(e,t,n){let r=`requestId=${t}&sessionTopic=${n}`;e.endsWith(`/`)&&(e=e.slice(0,-1));let i=`${e}`;if(e.startsWith(`https://t.me`)){let t=e.includes(`?`)?`&startapp=`:`?startapp=`;i=`${i}${t}${wn(r,!0)}`}else i=`${i}/wc?${r}`;return i}function _n(e){let t=`_self`;Cn()?t=`_top`:(Sn()||e.startsWith(`https://`)||e.startsWith(`http://`))&&(t=`_blank`),window.open(e,t,`noreferrer noopener`)}async function vn(e,t){let n=``;try{if(qt()&&(n=localStorage.getItem(t),n))return n;n=await e.getItem(t)}catch(e){console.error(e)}return n}function yn(e,t){if(!e.includes(t))return null;let n=e.split(/([&,?,=])/);return n[n.indexOf(t)+2]}function bn(){return typeof crypto<`u`&&crypto?.randomUUID?crypto.randomUUID():`xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx`.replace(/[xy]/gu,e=>{let t=Math.random()*16|0;return(e===`x`?t:t&3|8).toString(16)})}function xn(){return typeof t<`u`&&{}.IS_VITEST===`true`}function Sn(){return typeof window<`u`&&(!!window.TelegramWebviewProxy||!!window.Telegram||!!window.TelegramWebviewProxyProto)}function Cn(){try{return window.self!==window.top}catch{return!1}}function wn(e,t=!1){let n=new TextEncoder().encode(e),r=Array(n.length);for(let e=0;e<n.length;e++)r[e]=String.fromCharCode(n[e]);let i=btoa(r.join(``));return t?i.replace(/[=]/g,``):i}function Tn(e){let t=e+`=`.repeat((4-e.length%4)%4),n=atob(t),r=new Uint8Array(n.length);for(let e=0;e<n.length;e++)r[e]=n.charCodeAt(e);return new TextDecoder().decode(r)}function En(e){return new Promise(t=>setTimeout(t,e))}var Dn=class{constructor({limit:e}){this.limit=e,this.set=new Set}add(e){if(!this.set.has(e)){if(this.set.size>=this.limit){let e=this.set.values().next().value;e&&this.set.delete(e)}this.set.add(e)}}has(e){return this.set.has(e)}},On=`https://rpc.walletconnect.org/v1`;function kn(e){let t=e+`=`.repeat((4-e.length%4)%4),n=atob(t),r=new Uint8Array(n.length);for(let e=0;e<n.length;e++)r[e]=n.charCodeAt(e);return r}var An=/^0x[0-9a-fA-F]{64}$/;function jn(e){return An.test(e)}function Mn(e){let t=new TextEncoder().encode(e),n=new TextEncoder().encode(`Ethereum Signed Message:
2
+ ${t.length}`);return`0x`+R(ee(Se([n,t])),`base16`)}async function Nn(e,t,n,r,i,a){switch(n.t){case`eip191`:return await Pn(e,t,n.s);case`eip1271`:return await Fn(e,t,n.s,r,i,a);default:throw Error(`verifySignature failed: Attempted to verify CacaoSignature with unknown type: ${n.t}`)}}function Pn(e,t,n){let r=Ce(n);return xe({payload:Mn(t),signature:r}).toLowerCase()===e.toLowerCase()}async function Fn(e,t,n,r,i,a){let o=Rt(r);if(!o.namespace||!o.reference)throw Error(`isValidEip1271Signature failed: chainId must be in CAIP-2 format, received: ${r}`);try{let o=n.substring(2),s=(o.length/2).toString(16).padStart(64,`0`),c=`0x1626ba7e`+(jn(t)?t:Mn(t)).substring(2)+`0000000000000000000000000000000000000000000000000000000000000040`+s+o,{result:l}=await(await fetch(`${a||On}/?chainId=${r}&projectId=${i}`,{headers:{"Content-Type":`application/json`},method:`POST`,body:JSON.stringify({id:In(),jsonrpc:`2.0`,method:`eth_call`,params:[{to:e,data:c},`latest`]})})).json();return l?l.slice(0,10).toLowerCase()===`0x1626ba7e`:!1}catch(e){return console.error(`isValidEip1271Signature: `,e),!1}}function In(){return Date.now()+Math.floor(Math.random()*1e3)}function Ln(e){let t=kn(e),n=t[0];if(n===0)throw Error(`No signatures found`);let r=1+n*64;if(t.length<r)throw Error(`Transaction data too short for claimed signature count`);if(t.length<100)throw Error(`Transaction too short`);let i=t.slice(1,65);return v.encode(i)}function Rn(e){let t=kn(e),n=new TextEncoder().encode(`TransactionData::`),r=new Uint8Array(n.length+t.length);r.set(n),r.set(t,n.length);let i=Te(r,{dkLen:32});return v.encode(i)}function zn(e){let t=new Uint8Array(d(Bn(e)));return v.encode(t)}function Bn(e){if(e instanceof Uint8Array)return e;if(Array.isArray(e))return new Uint8Array(e);if(typeof e==`object`&&e?.data)return new Uint8Array(Object.values(e.data));if(typeof e==`object`&&e)return new Uint8Array(Object.values(e));throw Error(`getNearUint8ArrayFromBytes: Unexpected result type from bytes array`)}function Vn(e){let t=kn(e),n=ye(t).txn;if(!n)throw Error(`Invalid signed transaction: missing 'txn' field`);let r=ge(n),i=new TextEncoder().encode(`TX`),a=Se([i,new Uint8Array(r)]),o=m(a);return y.encode(o).replace(/=+$/,``)}function Hn(e){let t=[],n=BigInt(e);for(;n>=128n;)t.push(Number(n&127n|128n)),n>>=7n;return t.push(Number(n)),new Uint8Array(t)}function Un(e){let t=kn(e.signed.bodyBytes),n=kn(e.signed.authInfoBytes),r=kn(e.signature.signature),i=[];i.push(new Uint8Array([10])),i.push(Hn(t.length)),i.push(t),i.push(new Uint8Array([18])),i.push(Hn(n.length)),i.push(n),i.push(new Uint8Array([26])),i.push(Hn(r.length)),i.push(r);let a=Se(i),o=d(a);return R(o,`base16`).toUpperCase()}var Wn={pubnet:`Public Global Stellar Network ; September 2015`,testnet:`Test SDF Network ; September 2015`},Gn=0,Kn=2,qn=5,Jn=72,Yn=64,Xn=20;function Zn(e,t){return new DataView(e.buffer,e.byteOffset,e.byteLength).getUint32(t,!1)}function Qn(e){for(let t=Xn;t>=0;t--){let n=e.length-4-Jn*t;if(n<4||Zn(e,n)!==t)continue;let r=!0;for(let i=0;i<t;i++)if(Zn(e,n+4+Jn*i+4)!==Yn){r=!1;break}if(r)return n}throw Error(`getStellarTransactionHash: could not locate envelope signature array`)}function $n(e,t){let n=kn(e);if(n.length<8)throw Error(`getStellarTransactionHash: envelope too short`);let r=Zn(n,0),i,a;switch(r){case Gn:i=Kn,a=0;break;case Kn:i=Kn,a=4;break;case qn:i=qn,a=4;break;default:throw Error(`getStellarTransactionHash: unsupported envelope type: ${r}`)}let o=Qn(n),s=t?.split(`:`).pop()??`pubnet`,c=Wn[s];if(!c)throw Error(`getStellarTransactionHash: unknown Stellar network: ${s}`);let l=d(new TextEncoder().encode(c)),u=new Uint8Array([0,0,0,i]),f=Se([l,u,n.slice(a,o)]);return R(d(f),`base16`)}function er(e){let t=[];try{if(typeof e==`string`)return t.push(e),t;if(typeof e!=`object`)return t;e?.id&&t.push(e.id);let n=e?.capabilities?.caip345?.transactionHashes;n&&t.push(...n)}catch(e){console.warn(`getWalletSendCallsHashes failed: `,e)}return t}var tr=`did:pkh:`,nr={eip155:`Ethereum`,solana:`Solana`,bip122:`Bitcoin`},rr=e=>e?nr[e]||e:``,ir=e=>e?.split(`:`),ar=e=>{let t=e&&ir(e);if(t)return e.includes(tr)?t[3]:t[1]},or=e=>{let t=e&&ir(e);if(t)return e.includes(tr)?t[2]:t[0]},sr=e=>{let t=e&&ir(e);if(t)return t[2]+`:`+t[3]},cr=e=>{let t=e&&ir(e);if(t)return t.pop()};async function lr(e){let{cacao:t,projectId:n}=e,{s:r,p:i}=t,a;try{a=dr(i,i.iss)}catch{return!1}let o=cr(i.iss);try{return await Nn(o,a,r,sr(i.iss),n)}catch{return!1}}function ur(e){let{cacao:t,request:n}=e,{p:r}=t;if(r.domain!==n.domain)return{valid:!1,reason:`domain mismatch: requested ${n.domain}, got ${r.domain}`};if(r.nonce!==n.nonce)return{valid:!1,reason:`nonce mismatch: requested ${n.nonce}, got ${r.nonce}`};let i=n.aud||n.uri,a=r.aud||r.uri;if(i&&a!==i)return{valid:!1,reason:`aud mismatch: requested ${i}, got ${a}`};if(n.chains?.length){let e=sr(r.iss);if(!e||!n.chains.includes(e))return{valid:!1,reason:`cacao issued for chain ${e} which was not requested`}}let o=Date.now();if(r.exp){let e=new Date(r.exp).getTime();if(isNaN(e))return{valid:!1,reason:`malformed exp: ${r.exp}`};if(e<o)return{valid:!1,reason:`cacao has expired`}}if(r.nbf){let e=new Date(r.nbf).getTime();if(isNaN(e))return{valid:!1,reason:`malformed nbf: ${r.nbf}`};if(e>o)return{valid:!1,reason:`cacao is not yet valid`}}return{valid:!0}}var dr=(e,t)=>{let n=or(t);if(!n)throw Error(`Invalid issuer: `+t);let r=`${e.domain} wants you to sign in with your ${rr(n)} account:`,i=cr(t);if(!e.aud&&!e.uri)throw Error("Either `aud` or `uri` is required to construct the message");let a=e.statement||void 0,o=`URI: ${e.aud||e.uri}`,s=`Version: ${e.version}`,c=`Chain ID: ${ar(t)}`,l=`Nonce: ${e.nonce}`,u=`Issued At: ${e.iat}`,d=e.exp?`Expiration Time: ${e.exp}`:void 0,f=e.nbf?`Not Before: ${e.nbf}`:void 0,p=e.requestId?`Request ID: ${e.requestId}`:void 0,m=e.resources?`Resources:${e.resources.map(e=>`
3
3
  - ${e}`).join(``)}`:void 0,h=Er(e.resources);if(h){let e=vr(h);a=Cr(a,e)}if(a&&/\r|\n/.test(a))throw Error("Statement must not contain line breaks (`\\r` or `\\n`)");return[r,i,``,a,``,o,s,c,l,u,d,f,p,m].filter(e=>e!=null).join(`
4
4
  `)};function fr(e){let t=JSON.stringify(e),n=new TextEncoder().encode(t),r=Array(n.length);for(let e=0;e<n.length;e++)r[e]=String.fromCharCode(n[e]);return btoa(r.join(``))}function pr(e){let t=e+`=`.repeat((4-e.length%4)%4),n=atob(t),r=new Uint8Array(n.length);for(let e=0;e<n.length;e++)r[e]=n.charCodeAt(e);return JSON.parse(new TextDecoder().decode(r))}function mr(e){if(!e)throw Error(`No recap provided, value is undefined`);if(!e.att)throw Error("No `att` property found");let t=Object.keys(e.att);if(!t?.length)throw Error("No resources found in `att` property");t.forEach(t=>{let n=e.att[t];if(Array.isArray(n)||typeof n!=`object`)throw Error(`Resource must be an object: ${t}`);if(!Object.keys(n).length)throw Error(`Resource object is empty: ${t}`);Object.keys(n).forEach(e=>{let t=n[e];if(!Array.isArray(t))throw Error(`Ability limits ${e} must be an array of objects, found: ${t}`);if(!t.length)throw Error(`Value of ${e} is empty array, must be an array with objects`);t.forEach(t=>{if(typeof t!=`object`)throw Error(`Ability limits (${e}) must be an array of objects, found: ${t}`)})})})}function hr(e,t,n,r={}){return n?.sort((e,t)=>e.localeCompare(t)),{att:{[e]:gr(t,n,r)}}}function gr(e,t,n={}){t=t?.sort((e,t)=>e.localeCompare(t));let r=t.map(t=>({[`${e}/${t}`]:[n]}));return Object.assign({},...r)}function _r(e){return mr(e),`urn:recap:${fr(e).replace(/=/g,``)}`}function vr(e){let t=pr(e.replace(`urn:recap:`,``));return mr(t),t}function yr(e,t,n){return _r(hr(e,t,n))}function br(e){return e&&e.includes(`urn:recap:`)}function xr(e,t){return _r(Sr(vr(e),vr(t)))}function Sr(e,t){mr(e),mr(t);let n=Object.keys(e.att).concat(Object.keys(t.att)).sort((e,t)=>e.localeCompare(t)),r={att:{}};return n.forEach(n=>{Object.keys(e.att?.[n]||{}).concat(Object.keys(t.att?.[n]||{})).sort((e,t)=>e.localeCompare(t)).forEach(i=>{r.att[n]={...r.att[n],[i]:e.att[n]?.[i]||t.att[n]?.[i]}})}),r}function Cr(e=``,t){mr(t);let n=`I further authorize the stated URI to perform the following actions on my behalf: `;if(e.includes(n))return e;let r=[],i=0;Object.keys(t.att).forEach(e=>{let n=Object.keys(t.att[e]).map(e=>({ability:e.split(`/`)[0],action:e.split(`/`)[1]}));n.sort((e,t)=>e.action.localeCompare(t.action));let a={};n.forEach(e=>{a[e.ability]||(a[e.ability]=[]),a[e.ability].push(e.action)});let o=Object.keys(a).map(t=>(i++,`(${i}) '${t}': '${a[t].join(`', '`)}' for '${e}'.`));r.push(o.join(`, `).replace(`.,`,`.`))});let a=`${n}${r.join(` `)}`;return`${e?e+` `:``}${a}`}function wr(e){let t=vr(e);mr(t);let n=t.att?.eip155;return n?Object.keys(n).map(e=>e.split(`/`)[1]):[]}function Tr(e){let t=vr(e);mr(t);let n=[];return Object.values(t.att).forEach(e=>{Object.values(e).forEach(e=>{e?.[0]?.chains&&n.push(e[0].chains)})}),[...new Set(n.flat())]}function Er(e){if(!e)return;let t=e?.[e.length-1];return br(t)?t:void 0}var Dr=`base10`,q=`base16`,J=`base64pad`,Or=`base64url`,kr=`utf8`,Ar=0,jr=1,Mr=12,Nr=32;function Pr(){let e=C.utils.randomPrivateKey(),t=C.getPublicKey(e);return{privateKey:R(e,q),publicKey:R(t,q)}}function Fr(){let e=a(Nr);return R(e,q)}function Ir(e,t){let n=C.getSharedSecret(L(e,q),L(t,q)),r=Ft(g,n,void 0,void 0,Nr);return R(r,q)}function Lr(e){let t=g(L(e,q));return R(t,q)}function Rr(e){let t=g(L(e,kr));return R(t,q)}function zr(e){return L(`${e}`,Dr)}function Br(e){return Number(R(e,Dr))}function Vr(e){return e.replace(/\+/g,`-`).replace(/\//g,`_`).replace(/=/g,``)}function Hr(e){let t=e.replace(/-/g,`+`).replace(/_/g,`/`),n=(4-t.length%4)%4;return t+`=`.repeat(n)}function Ur(e){let t=zr(typeof e.type<`u`?e.type:0);if(Br(t)===1&&typeof e.senderPublicKey>`u`)throw Error(`Missing sender public key for type 1 envelope`);let n=typeof e.senderPublicKey<`u`?L(e.senderPublicKey,q):void 0,r=typeof e.iv<`u`?L(e.iv,q):a(Mr),i=qr({type:t,sealed:At(L(e.symKey,q),r).encrypt(L(e.message,kr)),iv:r,senderPublicKey:n});return e.encoding===`base64url`?Vr(i):i}function Wr(e){let t=L(e.symKey,q),{sealed:n,iv:r}=Jr({encoded:e.encoded,encoding:e.encoding}),i=At(t,r).decrypt(n);if(i===null)throw Error(`Failed to decrypt`);return R(i,kr)}function Gr(e,t){let n=zr(2),r=a(Mr),i=qr({type:n,sealed:L(e,kr),iv:r});return t===`base64url`?Vr(i):i}function Kr(e,t){let{sealed:n}=Jr({encoded:e,encoding:t});return R(n,kr)}function qr(e){if(Br(e.type)===2)return R(Se([e.type,e.sealed]),J);if(Br(e.type)===1){if(typeof e.senderPublicKey>`u`)throw Error(`Missing sender public key for type 1 envelope`);return R(Se([e.type,e.senderPublicKey,e.iv,e.sealed]),J)}return R(Se([e.type,e.iv,e.sealed]),J)}function Jr(e){let t=(e.encoding||`base64pad`)===`base64url`?Hr(e.encoded):e.encoded,n=L(t,J),r=n.slice(Ar,jr),i=jr;if(Br(r)===1){let e=n.slice(i,33),t=n.slice(33,45);return{type:r,sealed:n.slice(45),iv:t,senderPublicKey:e}}if(Br(r)===2)return{type:r,sealed:n.slice(i),iv:a(Mr)};let o=n.slice(i,13);return{type:r,sealed:n.slice(13),iv:o}}function Yr(e,t){let n=Jr({encoded:e,encoding:t?.encoding});return Xr({type:Br(n.type),senderPublicKey:typeof n.senderPublicKey<`u`?R(n.senderPublicKey,q):void 0,receiverPublicKey:t?.receiverPublicKey})}function Xr(e){let t=e?.type||0;if(t===1){if(typeof e?.senderPublicKey>`u`)throw Error(`missing sender public key`);if(typeof e?.receiverPublicKey>`u`)throw Error(`missing receiver public key`)}return{type:t,senderPublicKey:e?.senderPublicKey,receiverPublicKey:e?.receiverPublicKey}}function Zr(e){return e.type===1&&typeof e.senderPublicKey==`string`&&typeof e.receiverPublicKey==`string`}function Qr(e){return e.type===2}function $r(e){let t=L(Hr(e.x),J),n=L(Hr(e.y),J);return Se([new Uint8Array([4]),t,n])}function ei(e,t){let[n,r,i]=e.split(`.`),a=L(Hr(i),J);if(a.length!==64)throw Error(`Invalid signature length`);let o=a.slice(0,32),s=a.slice(32,64),c=`${n}.${r}`,l=g(c),u=$r(t);if(!De.verify(Se([o,s]),l,u))throw Error(`Invalid signature`);return k(e).payload}function ti(e){return e?.relay||{protocol:`irn`}}function ni(e){let t=oe[e];if(typeof t>`u`)throw Error(`Relay Protocol not supported: ${e}`);return t}function ri(e,t=`-`){let n={},r=`relay`+t;return Object.keys(e).forEach(t=>{if(t.startsWith(r)){let i=t.replace(r,``),a=e[t];n[i]=a}}),n}function ii(e){if(!e.includes(`wc:`)){let t=Tn(e);t?.includes(`wc:`)&&(e=t)}e=e.includes(`wc://`)?e.replace(`wc://`,``):e,e=e.includes(`wc:`)?e.replace(`wc:`,``):e;let t=e.indexOf(`:`),n=e.indexOf(`?`)===-1?void 0:e.indexOf(`?`),r=e.substring(0,t),i=e.substring(t+1,n).split(`@`),a=typeof n<`u`?e.substring(n):``,o=new URLSearchParams(a),s=Object.fromEntries(o.entries()),c=typeof s.methods==`string`?s.methods.split(`,`):void 0;return{protocol:r,topic:ai(i[0]),version:parseInt(i[1],10),symKey:s.symKey,relay:ri(s),methods:c,expiryTimestamp:s.expiryTimestamp?parseInt(s.expiryTimestamp,10):void 0}}function ai(e){return e.startsWith(`//`)?e.substring(2):e}function oi(e,t=`-`){let n={};return Object.keys(e).forEach(r=>{let i=r,a=`relay`+t+i;e[i]&&(n[a]=e[i])}),n}function si(e){let t=new URLSearchParams,n={...oi(e.relay),symKey:e.symKey,...e.expiryTimestamp&&{expiryTimestamp:e.expiryTimestamp.toString()},...e.methods&&{methods:e.methods.join(`,`)}};return Object.entries(n).sort(([e],[t])=>e.localeCompare(t)).forEach(([e,n])=>{n!==void 0&&t.append(e,String(n))}),`${e.protocol}:${e.topic}@${e.version}?${t}`}function ci(e,t,n){return`${e}?wc_ev=${n}&topic=${t}`}function li(e){let t=[];return e.forEach(e=>{let[n,r]=e.split(`:`);t.push(`${n}:${r}`)}),t}function ui(e){let t=[];return Object.values(e).forEach(e=>{t.push(...li(e.accounts))}),[...new Set(t)]}function di(e){let t=[];return Object.values(e).forEach(e=>{t.push(...e.methods)}),[...new Set(t)]}function fi(e){let t=[];return Object.values(e).forEach(e=>{t.push(...e.events)}),[...new Set(t)]}function pi(e,t){let n=[];return Object.values(e).forEach(e=>{li(e.accounts).includes(t)&&n.push(...e.methods)}),n}function mi(e,t){let n=[];return Object.values(e).forEach(e=>{li(e.accounts).includes(t)&&n.push(...e.events)}),n}function hi(e){return e.includes(`:`)}function gi(e){return hi(e)?e.split(`:`)[0]:e}function _i(e){let t={};if(!Si(e))return t;for(let[n,r]of Object.entries(e)){let e=hi(n)?[n]:r.chains,i=r.methods||[],a=r.events||[],o=gi(n);t[o]={...t[o],chains:mn(e,t[o]?.chains),methods:mn(i,t[o]?.methods),events:mn(a,t[o]?.events)}}return t}function vi(e){let t={};return e?.forEach(e=>{let[n,r]=e.split(`:`);t[n]||(t[n]={accounts:[],chains:[],events:[],methods:[]}),t[n].accounts.push(e),t[n].chains?.push(`${n}:${r}`)}),t}function yi(e,t){t=t.map(e=>e.replace(`did:pkh:`,``));let n=vi(t);for(let[t,r]of Object.entries(n))r.methods=r.methods?mn(r.methods,e):e,r.events=[`chainChanged`,`accountsChanged`];return n}function bi(e,t){let n=_i(e),r=_i(t),i={},a=Object.keys(n).concat(Object.keys(r));for(let e of a)i[e]={chains:mn(n[e]?.chains,r[e]?.chains),methods:mn(n[e]?.methods,r[e]?.methods),events:mn(n[e]?.events,r[e]?.events)};return i}function xi(e,t){return Array.isArray(e)?typeof t<`u`&&e.length?e.every(t):!0:!1}function Si(e){return Object.getPrototypeOf(e)===Object.prototype&&Object.keys(e).length}function Y(e){return typeof e>`u`}function X(e,t){return t&&Y(e)?!0:typeof e==`string`&&!!e.trim().length}function Ci(e,t){return t&&Y(e)?!0:typeof e==`number`&&!isNaN(e)}function wi(e,t){let{requiredNamespaces:n}=t,r=Object.keys(e.namespaces),i=Object.keys(n),a=!0;return rn(i,r)?(r.forEach(t=>{let{accounts:r,methods:i,events:o}=e.namespaces[t],s=li(r),c=n[t];(!rn(zt(t,c),s)||!rn(c.methods,i)||!rn(c.events,o))&&(a=!1)}),a):!1}function Ti(e){return X(e,!1)&&e.includes(`:`)?e.split(`:`).length===2:!1}function Ei(e){if(X(e,!1)&&e.includes(`:`)){let t=e.split(`:`);if(t.length===3){let e=t[0]+`:`+t[1];return!!t[2]&&Ti(e)}}return!1}function Di(e){function t(e){try{return typeof new URL(e)<`u`}catch{return!1}}try{if(X(e,!1))return t(e)?!0:t(Tn(e))}catch{}return!1}function Oi(e){return e?.proposer?.publicKey}function ki(e){return e?.topic}function Ai(e,t){let n=null;return X(e?.publicKey,!1)||(n=U(`MISSING_OR_INVALID`,`${t} controller public key should be a string`)),n}function ji(e){let t=!0;return xi(e)?e.length&&(t=e.every(e=>X(e,!1))):t=!1,t}function Mi(e,t,n){let r=null;return xi(t)&&t.length?t.forEach(e=>{r||Ti(e)||(r=W(`UNSUPPORTED_CHAINS`,`${n}, chain ${e} should be a string and conform to "namespace:chainId" format`))}):Ti(e)||(r=W(`UNSUPPORTED_CHAINS`,`${n}, chains must be defined as "namespace:chainId" e.g. "eip155:1": {...} in the namespace key OR as an array of CAIP-2 chainIds e.g. eip155: { chains: ["eip155:1", "eip155:5"] }`)),r}function Ni(e,t,n){let r=null;return Object.entries(e).forEach(([e,i])=>{if(r)return;let a=Mi(e,zt(e,i),`${t} ${n}`);a&&(r=a)}),r}function Pi(e,t){let n=null;return xi(e)?e.forEach(e=>{n||Ei(e)||(n=W(`UNSUPPORTED_ACCOUNTS`,`${t}, account ${e} should be a string and conform to "namespace:chainId:address" format`))}):n=W(`UNSUPPORTED_ACCOUNTS`,`${t}, accounts should be an array of strings conforming to "namespace:chainId:address" format`),n}function Fi(e,t){let n=null;return Object.values(e).forEach(e=>{if(n)return;let r=Pi(e?.accounts,`${t} namespace`);r&&(n=r)}),n}function Ii(e,t){let n=null;return ji(e?.methods)?ji(e?.events)||(n=W(`UNSUPPORTED_EVENTS`,`${t}, events should be an array of strings or empty array for no events`)):n=W(`UNSUPPORTED_METHODS`,`${t}, methods should be an array of strings or empty array for no methods`),n}function Li(e,t){let n=null;return Object.values(e).forEach(e=>{if(n)return;let r=Ii(e,`${t}, namespace`);r&&(n=r)}),n}function Ri(e,t,n){let r=null;if(e&&Si(e)){let i=Li(e,t);i&&(r=i);let a=Ni(e,t,n);a&&(r=a)}else r=U(`MISSING_OR_INVALID`,`${t}, ${n} should be an object with data`);return r}function zi(e,t){let n=null;if(e&&Si(e)){let r=Li(e,t);r&&(n=r);let i=Fi(e,t);i&&(n=i)}else n=U(`MISSING_OR_INVALID`,`${t}, namespaces should be an object with data`);return n}function Bi(e){return X(e.protocol,!0)}function Vi(e,t){let n=!1;return t&&!e?n=!0:e&&xi(e)&&e.length&&e.forEach(e=>{n=Bi(e)}),n}function Hi(e){return typeof e==`number`}function Ui(e){return typeof e<`u`&&!0}function Wi(e){return!(!e||typeof e!=`object`||!e.code||!Ci(e.code,!1)||!e.message||!X(e.message,!1))}function Gi(e){return!(Y(e)||!X(e.method,!1))}function Ki(e){return!(Y(e)||Y(e.result)&&Y(e.error)||!Ci(e.id,!1)||!X(e.jsonrpc,!1))}function qi(e){return!(Y(e)||!X(e.name,!1))}function Ji(e,t){return!(!Ti(t)||!ui(e).includes(t))}function Yi(e,t,n){return X(n,!1)?pi(e,t).includes(n):!1}function Xi(e,t,n){return X(n,!1)?mi(e,t).includes(n):!1}function Zi(e,t,n){let r=null,i=Qi(e),a=ea(t),o=Object.keys(i),s=Object.keys(a),c=$i(Object.keys(e)),l=$i(Object.keys(t)),u=c.filter(e=>!l.includes(e));return u.length&&(r=U(`NON_CONFORMING_NAMESPACES`,`${n} namespaces keys don't satisfy requiredNamespaces.
5
5
  Required: ${u.toString()}
@@ -7,4 +7,4 @@ ${t.length}`);return`0x`+R(ee(Se([n,t])),`base16`)}async function Nn(e,t,n,r,i,a
7
7
  Required: ${o.toString()}
8
8
  Approved: ${s.toString()}`)),Object.keys(t).forEach(e=>{if(!e.includes(`:`)||r)return;let i=li(t[e].accounts);i.includes(e)||(r=U(`NON_CONFORMING_NAMESPACES`,`${n} namespaces accounts don't satisfy namespace accounts for ${e}
9
9
  Required: ${e}
10
- Approved: ${i.toString()}`))}),o.forEach(e=>{r||(rn(i[e].methods,a[e].methods)?rn(i[e].events,a[e].events)||(r=U(`NON_CONFORMING_NAMESPACES`,`${n} namespaces events don't satisfy namespace events for ${e}`)):r=U(`NON_CONFORMING_NAMESPACES`,`${n} namespaces methods don't satisfy namespace methods for ${e}`))}),r}function Qi(e){let t={};return Object.keys(e).forEach(n=>{n.includes(`:`)?t[n]=e[n]:e[n].chains?.forEach(r=>{t[r]={methods:e[n].methods,events:e[n].events}})}),t}function $i(e){return[...new Set(e.map(e=>e.includes(`:`)?e.split(`:`)[0]:e))]}function ea(e){let t={};return Object.keys(e).forEach(n=>{n.includes(`:`)?t[n]=e[n]:li(e[n].accounts)?.forEach(r=>{t[r]={accounts:e[n].accounts.filter(e=>e.includes(`${r}:`)),methods:e[n].methods,events:e[n].events}})}),t}function ta(e,t){return Ci(e,!1)&&e<=t.max&&e>=t.min}function na(){let e=Jt();return new Promise(t=>{switch(e){case Ht.browser:t(ra());break;case Ht.reactNative:t(ia());break;case Ht.node:t(aa());break;default:t(!0)}})}function ra(){return qt()&&navigator?.onLine}async function ia(){return Wt()&&typeof i<`u`&&i?.NetInfo?(await i?.NetInfo.fetch())?.isConnected:!0}function aa(){return!0}function oa(e){switch(Jt()){case Ht.browser:sa(e);break;case Ht.reactNative:ca(e);break;case Ht.node:}}function sa(e){!Wt()&&qt()&&(window.addEventListener(`online`,()=>e(!0)),window.addEventListener(`offline`,()=>e(!1)))}function ca(e){Wt()&&typeof i<`u`&&i?.NetInfo&&i?.NetInfo.addEventListener(t=>e(t?.isConnected))}function la(){return qt()&&(0,ke.getDocument)()?(0,ke.getDocument)()?.visibilityState===`visible`:!0}var ua={},da=class{static get(e){return ua[e]}static set(e,t){ua[e]=t}static delete(e){delete ua[e]}};function fa(e){let t=v.decode(e);if(t.length<33)throw Error(`Too short to contain a public key`);return t.slice(1,33)}function pa({publicKey:e,signature:t,payload:n}){let r=ha(n.method),i=128|parseInt(n.version?.toString()||`4`),a=_a(n.address),o=n.era===`00`?new Uint8Array([0]):ha(n.era);if(o.length!==1&&o.length!==2)throw Error(`Invalid era length`);let s=parseInt(n.nonce,16),c=new Uint8Array([s&255,s>>8&255]),l=ya(BigInt(`0x${ga(n.tip)}`)),u=new Uint8Array([0,...e,a,...t,...o,...c,...l,...r]),d=va(u.length+1);return new Uint8Array([...d,i,...u])}function ma(e){let t=ha(e),n=(0,It.blake2b)(t,void 0,32);return`0x`+R(n,`base16`)}function ha(e){return new Uint8Array(e.replace(/^0x/,``).match(/.{1,2}/g).map(e=>parseInt(e,16)))}function ga(e){return e.startsWith(`0x`)?e.slice(2):e}function _a(e){let t=v.decode(e)[0];return t===42?0:t===60?2:1}function va(e){if(e<64)return new Uint8Array([e<<2]);if(e<16384){let t=e<<2|1;return new Uint8Array([t&255,t>>8&255])}if(e<1<<30){let t=e<<2|2;return new Uint8Array([t&255,t>>8&255,t>>16&255,t>>24&255])}throw Error(`Compact encoding > 2^30 not supported`)}function ya(e){if(e<1n<<6n)return new Uint8Array([Number(e<<2n)]);if(e<1n<<14n){let t=e<<2n|1n;return new Uint8Array([Number(t&255n),Number(t>>8n&255n)])}if(e<1n<<30n){let t=e<<2n|2n;return new Uint8Array([Number(t&255n),Number(t>>8n&255n),Number(t>>16n&255n),Number(t>>24n&255n)])}throw Error(`BigInt compact encoding not supported > 2^30`)}function ba(e){let t=ha(e.signature),n=pa({publicKey:fa(e.transaction.address),signature:t,payload:e.transaction});return ma(R(n,`base16`))}var xa=new Set([`TransferFactory_Transfer`,`DelegateProxy_TransferFactory_Transfer`]);function Sa(e){let t=e?.commands;if(!Array.isArray(t))return[];let n=[];for(let e of t){let t=e?.ExerciseCommand;if(!t||!xa.has(t.choice))continue;let r=t.choiceArgument?.transfer;!r?.amount||!r?.instrumentId?.id||n.push({amount:String(r.amount),instrumentId:String(r.instrumentId.id)})}return n}function Ca(e,t){let n=t?.payload?.updateId;if(!n)return[];let r=Sa(e);return r.length===0?[String(n)]:r.map(e=>`${n}:${e.amount}:${e.instrumentId}`)}function wa({logger:e,name:t}){let n=typeof e==`string`?we({opts:{level:e,name:t}}).logger:e;return n.level=typeof e==`string`?e:e.level,n}function Ta(e,t){return e===t||Number.isNaN(e)&&Number.isNaN(t)}function Ea(e){return Object.getOwnPropertySymbols(e).filter(t=>Object.prototype.propertyIsEnumerable.call(e,t))}function Da(e){return e==null?e===void 0?`[object Undefined]`:`[object Null]`:Object.prototype.toString.call(e)}var Oa=`[object RegExp]`,ka=`[object String]`,Aa=`[object Number]`,ja=`[object Boolean]`,Ma=`[object Symbol]`,Na=`[object Date]`,Pa=`[object Map]`,Fa=`[object Set]`,Ia=`[object Array]`,La=`[object Function]`,Ra=`[object ArrayBuffer]`,za=`[object Object]`,Ba=`[object Error]`,Va=`[object DataView]`,Ha=`[object Uint8Array]`,Ua=`[object Uint8ClampedArray]`,Wa=`[object Uint16Array]`,Ga=`[object Uint32Array]`,Ka=`[object BigUint64Array]`,qa=`[object Int8Array]`,Ja=`[object Int16Array]`,Ya=`[object Int32Array]`,Xa=`[object BigInt64Array]`,Za=`[object Float32Array]`,Qa=`[object Float64Array]`;function $a(e){if(!e||typeof e!=`object`)return!1;let t=Object.getPrototypeOf(e);return t!==null&&t!==Object.prototype&&Object.getPrototypeOf(t)!==null?!1:Object.prototype.toString.call(e)===`[object Object]`}b();function eo(e,t,n){return to(e,t,void 0,void 0,void 0,void 0,n)}function to(e,t,n,r,i,a,o){let s=o(e,t,n,r,i,a);if(s!==void 0)return s;if(typeof e==typeof t)switch(typeof e){case`bigint`:case`string`:case`boolean`:case`symbol`:case`undefined`:return e===t;case`number`:return e===t||Object.is(e,t);case`function`:return e===t;case`object`:return no(e,t,a,o)}return no(e,t,a,o)}function no(e,t,n,r){if(Object.is(e,t))return!0;let i=Da(e),a=Da(t);if(i===`[object Arguments]`&&(i=za),a===`[object Arguments]`&&(a=za),i!==a)return!1;switch(i){case ka:return e.toString()===t.toString();case Aa:return Ta(e.valueOf(),t.valueOf());case ja:case Na:case Ma:return Object.is(e.valueOf(),t.valueOf());case Oa:return e.source===t.source&&e.flags===t.flags;case La:return e===t}n??=new Map;let o=n.get(e),s=n.get(t);if(o!=null&&s!=null)return o===t;n.set(e,t),n.set(t,e);try{switch(i){case Pa:if(e.size!==t.size)return!1;for(let[i,a]of e.entries())if(!t.has(i)||!to(a,t.get(i),i,e,t,n,r))return!1;return!0;case Fa:{if(e.size!==t.size)return!1;let i=Array.from(e.values()),a=Array.from(t.values());for(let o=0;o<i.length;o++){let s=i[o],c=a.findIndex(i=>to(s,i,void 0,e,t,n,r));if(c===-1)return!1;a.splice(c,1)}return!0}case Ia:case Ha:case Ua:case Wa:case Ga:case Ka:case qa:case Ja:case Ya:case Xa:case Za:case Qa:if(x!==void 0&&x.isBuffer(e)!==x.isBuffer(t)||e.length!==t.length)return!1;for(let i=0;i<e.length;i++)if(!to(e[i],t[i],i,e,t,n,r))return!1;return!0;case Ra:return e.byteLength===t.byteLength&&no(new Uint8Array(e),new Uint8Array(t),n,r);case Va:return e.byteLength!==t.byteLength||e.byteOffset!==t.byteOffset?!1:no(new Uint8Array(e),new Uint8Array(t),n,r);case Ba:return e.name===t.name&&e.message===t.message;case za:{if(!(no(e.constructor,t.constructor,n,r)||$a(e)&&$a(t)))return!1;let i=[...Object.keys(e),...Ea(e)],a=[...Object.keys(t),...Ea(t)];if(i.length!==a.length)return!1;for(let a=0;a<i.length;a++){let o=i[a],s=e[o];if(!Object.hasOwn(t,o))return!1;let c=t[o];if(!to(s,c,o,e,t,n,r))return!1}return!0}default:return!1}}finally{n.delete(e),n.delete(t)}}function ro(){}function io(e,t){return eo(e,t,ro)}n();var ao=`core`,oo=`wc@2:${ao}:`,so={name:ao,logger:`error`},co={database:`:memory:`},lo=`crypto`,uo=`client_ed25519_seed`,fo=z.ONE_DAY,po=`keychain`,mo=`messages`,ho=z.SIX_HOURS,go=`publisher`,_o=`relayer`,Z={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`},vo={payload:`payload`,connect:`connect`,disconnect:`disconnect`,error:`error`},yo=.1,bo=`2.26.0`,Q={link_mode:`link_mode`,relay:`relay`},xo={inbound:`inbound`,outbound:`outbound`},So=`WALLETCONNECT_CLIENT_ID`,Co={created:`subscription_created`,deleted:`subscription_deleted`,expired:`subscription_expired`,disabled:`subscription_disabled`,sync:`subscription_sync`,resubscribed:`subscription_resubscribed`},wo=`subscription`;z.FIVE_SECONDS*1e3;var To=`pairing`,Eo={wc_pairingDelete:{req:{ttl:z.ONE_DAY,prompt:!1,tag:1e3},res:{ttl:z.ONE_DAY,prompt:!1,tag:1001}},wc_pairingPing:{req:{ttl:z.THIRTY_SECONDS,prompt:!1,tag:1002},res:{ttl:z.THIRTY_SECONDS,prompt:!1,tag:1003}},unregistered_method:{req:{ttl:z.ONE_DAY,prompt:!1,tag:0},res:{ttl:z.ONE_DAY,prompt:!1,tag:0}}},Do={create:`pairing_create`,expire:`pairing_expire`,delete:`pairing_delete`,ping:`pairing_ping`},Oo={created:`history_created`,updated:`history_updated`,deleted:`history_deleted`,sync:`history_sync`},ko=`history`,Ao=`expirer`,jo={created:`expirer_created`,deleted:`expirer_deleted`,expired:`expirer_expired`,sync:`expirer_sync`},Mo=`verify-api`,No=`https://verify.walletconnect.com`,Po=`https://verify.walletconnect.org`,Fo=`${Po}/v3`,Io=[No,Po],Lo=`echo`,Ro=`https://echo.walletconnect.com`,zo={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`},Bo={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`},Vo={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`,session_request_response_started:`session_request_response_started`,session_request_response_validation_success:`session_request_response_validation_success`,session_request_response_publish_started:`session_request_response_publish_started`},Ho={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`,session_request_response_validation_failure:`session_request_response_validation_failure`,session_request_response_publish_failure:`session_request_response_publish_failure`},Uo={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`},Wo={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`},Go=.1,Ko=`event-client`,qo=`https://pulse.walletconnect.org/batch`,Jo=class{constructor(e,t){this.core=e,this.logger=t,this.keychain=new Map,this.name=po,this.version=`0.3`,this.initialized=!1,this.storagePrefix=oo,this.init=async()=>{if(!this.initialized){let e=await this.getKeyChain();typeof e<`u`&&(this.keychain=e),this.initialized=!0}},this.has=e=>(this.isInitialized(),this.keychain.has(e)),this.set=async(e,t)=>{this.isInitialized(),this.keychain.set(e,t),await this.persist()},this.get=e=>{this.isInitialized();let t=this.keychain.get(e);if(typeof t>`u`){let{message:t}=U(`NO_MATCHING_KEY`,`${this.name}: ${e}`);throw Error(t)}return t},this.del=async e=>{this.isInitialized(),this.keychain.delete(e),await this.persist()},this.core=e,this.logger=be(t,this.name)}get context(){return ve(this.logger)}get storageKey(){return this.storagePrefix+this.version+this.core.customStoragePrefix+`//`+this.name}async setKeyChain(e){await this.core.storage.setItem(this.storageKey,an(e))}async getKeyChain(){let e=await this.core.storage.getItem(this.storageKey);return typeof e<`u`?on(e):void 0}async persist(){await this.setKeyChain(this.keychain)}isInitialized(){if(!this.initialized){let{message:e}=U(`NOT_INITIALIZED`,this.name);throw Error(e)}}},Yo=class{constructor(e,t,n){this.core=e,this.logger=t,this.name=lo,this.randomSessionIdentifier=Fr(),this.initialized=!1,this.init=async()=>{this.initialized||=(await this.keychain.init(),!0)},this.hasKeys=e=>(this.isInitialized(),this.keychain.has(e)),this.getClientId=async()=>{if(this.isInitialized(),this.clientId)return this.clientId;let e=await this.getClientSeed(),t=he(e),n=N(t.publicKey);return this.clientId=n,n},this.generateKeyPair=()=>{this.isInitialized();let e=Pr();return this.setPrivateKey(e.publicKey,e.privateKey)},this.signJWT=async e=>{this.isInitialized();let t=await this.getClientSeed(),n=he(t),r=this.randomSessionIdentifier;return await me(r,e,fo,n)},this.generateSharedKey=(e,t,n)=>{this.isInitialized();let r=Ir(this.getPrivateKey(e),t);return this.setSymKey(r,n)},this.setSymKey=async(e,t)=>{this.isInitialized();let n=t||Lr(e);return await this.keychain.set(n,e),n},this.deleteKeyPair=async e=>{this.isInitialized(),await this.keychain.del(e)},this.deleteSymKey=async e=>{this.isInitialized(),await this.keychain.del(e)},this.encode=async(e,t,n)=>{this.isInitialized();let r=Xr(n),i=A(t);if(Qr(r))return Gr(i,n?.encoding);if(Zr(r)){let t=r.senderPublicKey,n=r.receiverPublicKey;e=await this.generateSharedKey(t,n)}let a=this.getSymKey(e),{type:o,senderPublicKey:s}=r;return Ur({type:o,symKey:a,message:i,senderPublicKey:s,encoding:n?.encoding})},this.decode=async(e,t,n)=>{this.isInitialized();let r=Yr(t,n);if(Qr(r)){let e=Kr(t,n?.encoding);return pe(e)}if(Zr(r)){let t=r.receiverPublicKey,n=r.senderPublicKey;e=await this.generateSharedKey(t,n)}try{let r=Wr({symKey:this.getSymKey(e),encoded:t,encoding:n?.encoding});return pe(r)}catch(t){this.logger.error(`Failed to decode message from topic: '${e}', clientId: '${await this.getClientId()}'`),this.logger.error(t)}},this.getPayloadType=(e,t=J)=>Br(Jr({encoded:e,encoding:t}).type),this.getPayloadSenderPublicKey=(e,t=J)=>{let n=Jr({encoded:e,encoding:t});return n.senderPublicKey?R(n.senderPublicKey,q):void 0},this.core=e,this.logger=be(t,this.name),this.keychain=n||new Jo(this.core,this.logger)}get context(){return ve(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(uo)}catch{e=Fr(),await this.keychain.set(uo,e)}return L(e,`base16`)}getSymKey(e){return this.keychain.get(e)}isInitialized(){if(!this.initialized){let{message:e}=U(`NOT_INITIALIZED`,this.name);throw Error(e)}}},Xo=class extends Qe{constructor(e,t){super(e,t),this.logger=e,this.core=t,this.messages=new Map,this.messagesWithoutClientAck=new Map,this.name=mo,this.version=`0.3`,this.initialized=!1,this.storagePrefix=oo,this.init=async()=>{if(!this.initialized){this.logger.trace(`Initialized`);try{let e=await this.getRelayerMessages();typeof e<`u`&&(this.messages=e);let t=await this.getRelayerMessagesWithoutClientAck();typeof t<`u`&&(this.messagesWithoutClientAck=t),this.logger.debug(`Successfully Restored records for ${this.name}`),this.logger.trace({type:`method`,method:`restore`,size:this.messages.size})}catch(e){this.logger.debug(`Failed to Restore records for ${this.name}`),this.logger.error(e)}finally{this.initialized=!0}}},this.set=async(e,t,n)=>{this.isInitialized();let r=Rr(t),i=this.messages.get(e);if(typeof i>`u`&&(i={}),typeof i[r]<`u`)return r;if(i[r]=t,this.messages.set(e,i),n===xo.inbound){let n=this.messagesWithoutClientAck.get(e)||{};this.messagesWithoutClientAck.set(e,{...n,[r]:t})}return await this.persist(),r},this.get=e=>{this.isInitialized();let t=this.messages.get(e);return typeof t>`u`&&(t={}),t},this.getWithoutAck=e=>{this.isInitialized();let t={};for(let n of e){let e=this.messagesWithoutClientAck.get(n)||{};t[n]=Object.values(e)}return t},this.has=(e,t)=>(this.isInitialized(),typeof this.get(e)[Rr(t)]<`u`),this.ack=async(e,t)=>{this.isInitialized();let n=this.messagesWithoutClientAck.get(e);if(typeof n>`u`)return;let r=Rr(t);delete n[r],Object.keys(n).length===0?this.messagesWithoutClientAck.delete(e):this.messagesWithoutClientAck.set(e,n),await this.persist()},this.del=async e=>{this.isInitialized(),this.messages.delete(e),this.messagesWithoutClientAck.delete(e),await this.persist()},this.logger=be(e,this.name),this.core=t}get context(){return ve(this.logger)}get storageKey(){return this.storagePrefix+this.version+this.core.customStoragePrefix+`//`+this.name}get storageKeyWithoutClientAck(){return this.storagePrefix+this.version+this.core.customStoragePrefix+`//`+this.name+`_withoutClientAck`}async setRelayerMessages(e){await this.core.storage.setItem(this.storageKey,an(e))}async setRelayerMessagesWithoutClientAck(e){await this.core.storage.setItem(this.storageKeyWithoutClientAck,an(e))}async getRelayerMessages(){let e=await this.core.storage.getItem(this.storageKey);return typeof e<`u`?on(e):void 0}async getRelayerMessagesWithoutClientAck(){let e=await this.core.storage.getItem(this.storageKeyWithoutClientAck);return typeof e<`u`?on(e):void 0}async persist(){await this.setRelayerMessages(this.messages),await this.setRelayerMessagesWithoutClientAck(this.messagesWithoutClientAck)}isInitialized(){if(!this.initialized){let{message:e}=U(`NOT_INITIALIZED`,this.name);throw Error(e)}}},Zo=class extends $e{constructor(e,t){super(e,t),this.relayer=e,this.logger=t,this.events=new Oe.EventEmitter,this.name=go,this.queue=new Map,this.publishTimeout=(0,z.toMiliseconds)(z.ONE_MINUTE),this.initialPublishTimeout=(0,z.toMiliseconds)(z.ONE_SECOND*15),this.needsTransportRestart=!1,this.publish=async(e,t,n)=>{this.logger.debug(`Publishing Payload`),this.logger.trace({type:`method`,method:`publish`,params:{topic:e,message:t,opts:n}});let r=n?.ttl||ho,i=n?.prompt||!1,a=n?.tag||0,o=n?.id||F().toString(),s=ni(ti().protocol),c={id:o,method:n?.publishMethod||s.publish,params:{topic:e,message:t,ttl:r,prompt:i,tag:a,attestation:n?.attestation,...n?.tvf}},l=`Failed to publish payload, please try again. id:${o} tag:${a}`;try{Y(c.params?.prompt)&&delete c.params?.prompt,Y(c.params?.tag)&&delete c.params?.tag;let r=new Promise(async e=>{let t=({id:n})=>{c.id?.toString()===n.toString()&&(this.removeRequestFromQueue(n),this.relayer.events.removeListener(Z.publish,t),e())};this.relayer.events.on(Z.publish,t);let r=cn(new Promise((e,t)=>{this.rpcPublish(c,n).then(e).catch(e=>{this.logger.warn(e,e?.message),t(e)})}),this.initialPublishTimeout,`Failed initial publish, retrying.... id:${o} tag:${a}`);try{await r,this.events.removeListener(Z.publish,t)}catch(e){this.queue.set(o,{request:c,opts:n,attempt:1}),this.logger.warn(e,e?.message)}});this.logger.trace({type:`method`,method:`publish`,params:{id:o,topic:e,message:t,opts:n}}),await cn(r,this.publishTimeout,l)}catch(e){if(this.logger.debug(`Failed to Publish Payload`),this.logger.error(e),n?.internal?.throwOnFailedPublish)throw e}finally{this.queue.delete(o)}},this.publishCustom=async e=>{this.logger.debug(`Publishing custom payload`),this.logger.trace({type:`method`,method:`publishCustom`,params:e});let{payload:t,opts:n={}}=e,{attestation:r,tvf:i,publishMethod:a,prompt:o,tag:s,ttl:c=z.FIVE_MINUTES}=n,l=n.id||F().toString(),u=ni(ti().protocol),d=a||u.publish,f={id:l,method:d,params:{...t,ttl:c,prompt:o,tag:s,attestation:r,...i}},p=`Failed to publish custom payload, please try again. id:${l} tag:${s}`;try{Y(f.params?.prompt)&&delete f.params?.prompt,Y(f.params?.tag)&&delete f.params?.tag;let e=new Promise(async e=>{let t=({id:n})=>{f.id?.toString()===n.toString()&&(this.removeRequestFromQueue(n),this.relayer.events.removeListener(Z.publish,t),e())};this.relayer.events.on(Z.publish,t);let r=cn(new Promise((e,t)=>{this.rpcPublish(f,n).then(e).catch(e=>{this.logger.warn(e,e?.message),t(e)})}),this.initialPublishTimeout,`Failed initial custom payload publish, retrying.... method:${d} id:${l} tag:${s}`);try{await r,this.events.removeListener(Z.publish,t)}catch(e){this.queue.set(l,{request:f,opts:n,attempt:1}),this.logger.warn(e,e?.message)}});this.logger.trace({type:`method`,method:`publish`,params:{id:l,payload:t,opts:n}}),await cn(e,this.publishTimeout,p)}catch(e){if(this.logger.debug(`Failed to Publish Payload`),this.logger.error(e),n?.internal?.throwOnFailedPublish)throw e}finally{this.queue.delete(l)}},this.on=(e,t)=>{this.events.on(e,t)},this.once=(e,t)=>{this.events.once(e,t)},this.off=(e,t)=>{this.events.off(e,t)},this.removeListener=(e,t)=>{this.events.removeListener(e,t)},this.relayer=e,this.logger=be(t,this.name),this.registerEventListeners()}get context(){return ve(this.logger)}async rpcPublish(e,t){this.logger.debug(`Outgoing Relay Payload`),this.logger.trace({type:`message`,direction:`outgoing`,request:e});let n=await this.relayer.request(e);return this.relayer.events.emit(Z.publish,{...e,...t}),this.logger.debug(`Successfully Published Payload`),n}removeRequestFromQueue(e){this.queue.delete(e)}checkQueue(){this.queue.forEach(async(e,t)=>{let n=e.attempt+1;this.queue.set(t,{...e,attempt:n}),this.logger.warn({},`Publisher: queue->publishing: ${e.request.id}, tag: ${e.request.params?.tag}, attempt: ${n}`),await this.rpcPublish(e.request,e.opts),this.logger.warn({},`Publisher: queue->published: ${e.request.id}`)})}registerEventListeners(){this.relayer.core.heartbeat.on(E.pulse,()=>{if(this.needsTransportRestart){this.needsTransportRestart=!1,this.relayer.events.emit(Z.connection_stalled);return}this.checkQueue()}),this.relayer.on(Z.message_ack,e=>{this.removeRequestFromQueue(e.id.toString())})}},Qo=class{constructor(){this.map=new Map,this.set=(e,t)=>{let n=this.get(e);this.exists(e,t)||this.map.set(e,[...n,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;let n=this.get(e);if(!this.exists(e,t))return;let r=n.filter(e=>e!==t);if(!r.length){this.map.delete(e);return}this.map.set(e,r)},this.clear=()=>{this.map.clear()}}get topics(){return Array.from(this.map.keys())}},$o=class extends nt{constructor(e,t){super(e,t),this.relayer=e,this.logger=t,this.subscriptions=new Map,this.topicMap=new Qo,this.events=new Oe.EventEmitter,this.name=wo,this.version=`0.3`,this.pending=new Map,this.cached=[],this.initialized=!1,this.storagePrefix=oo,this.subscribeTimeout=(0,z.toMiliseconds)(z.ONE_MINUTE),this.initialSubscribeTimeout=(0,z.toMiliseconds)(z.ONE_SECOND*15),this.batchSubscribeTopicsLimit=500,this.init=async()=>{this.initialized||(this.logger.trace(`Initialized`),this.registerEventListeners(),await this.restore()),this.initialized=!0},this.subscribe=async(e,t)=>{this.isInitialized(),this.logger.debug(`Subscribing Topic`),this.logger.trace({type:`method`,method:`subscribe`,params:{topic:e,opts:t}});try{let n=ti(t),r={topic:e,relay:n,transportType:t?.transportType};t?.internal?.skipSubscribe||this.pending.set(e,r);let i=await this.rpcSubscribe(e,n,t);return typeof i==`string`&&(this.onSubscribe(i,r),this.logger.debug(`Successfully Subscribed Topic`),this.logger.trace({type:`method`,method:`subscribe`,params:{topic:e,opts:t}})),i}catch(e){throw this.logger.debug(`Failed to Subscribe Topic`),this.logger.error(e),e}},this.unsubscribe=async(e,t)=>{this.isInitialized(),typeof t?.id<`u`?await this.unsubscribeById(e,t.id,t):await this.unsubscribeByTopic(e,t)},this.isSubscribed=e=>new Promise(t=>{t(this.topicMap.topics.includes(e))}),this.isKnownTopic=e=>new Promise(t=>{t(this.topicMap.topics.includes(e)||this.pending.has(e)||this.cached.some(t=>t.topic===e))}),this.on=(e,t)=>{this.events.on(e,t)},this.once=(e,t)=>{this.events.once(e,t)},this.off=(e,t)=>{this.events.off(e,t)},this.removeListener=(e,t)=>{this.events.removeListener(e,t)},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;let e=[];this.pending.forEach(t=>{e.push(t)}),await this.batchSubscribe(e)},this.registerEventListeners=()=>{this.relayer.core.heartbeat.on(E.pulse,async()=>{await this.checkPending()}),this.events.on(Co.created,async e=>{let t=Co.created;this.logger.info(`Emitting ${t}`),this.logger.debug({type:`event`,event:t,data:e}),await this.persist()}),this.events.on(Co.deleted,async e=>{let t=Co.deleted;this.logger.info(`Emitting ${t}`),this.logger.debug({type:`event`,event:t,data:e}),await this.persist()})},this.relayer=e,this.logger=be(t,this.name),this.clientId=``}get context(){return ve(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}get hasAnyTopics(){return this.topicMap.topics.length>0||this.pending.size>0||this.cached.length>0||this.subscriptions.size>0}hasSubscription(e,t){let n=!1;try{n=this.getSubscription(e).topic===t}catch{}return n}reset(){this.cached=[],this.initialized=!0}onDisable(){this.values.length>0&&(this.cached=this.values),this.subscriptions.clear(),this.topicMap.clear()}async unsubscribeByTopic(e,t){let n=this.topicMap.get(e);await Promise.all(n.map(async n=>await this.unsubscribeById(e,n,t)))}async unsubscribeById(e,t,n){this.logger.debug(`Unsubscribing Topic`),this.logger.trace({type:`method`,method:`unsubscribe`,params:{topic:e,id:t,opts:n}});try{let r=W(`USER_DISCONNECTED`,`${this.name}, ${e}`);await this.onUnsubscribe(e,t,r);let i=ti(n);await this.restartToComplete({topic:e,id:t,relay:i}),await this.rpcUnsubscribe(e,t,i),this.logger.debug(`Successfully Unsubscribed Topic`),this.logger.trace({type:`method`,method:`unsubscribe`,params:{topic:e,id:t,opts:n}})}catch(e){throw this.logger.debug(`Failed to Unsubscribe Topic`),this.logger.error(e),e}}async rpcSubscribe(e,t,n){let r=await this.getSubscriptionId(e);if(n?.internal?.skipSubscribe)return r;(!n||n?.transportType===Q.relay)&&await this.restartToComplete({topic:e,id:e,relay:t});let i={method:ni(t.protocol).subscribe,params:{topic:e}};this.logger.debug(`Outgoing Relay Payload`),this.logger.trace({type:`payload`,direction:`outgoing`,request:i});let a=n?.internal?.throwOnFailedPublish;try{if(n?.transportType===Q.link_mode)return setTimeout(()=>{(this.relayer.connected||this.relayer.connecting)&&this.relayer.request(i).catch(e=>this.logger.warn(e))},(0,z.toMiliseconds)(z.ONE_SECOND)),r;let t=await cn(new Promise(async t=>{let n=r=>{r.topic===e&&(this.events.removeListener(Co.created,n),t(r.id))};this.events.on(Co.created,n);try{let r=await cn(new Promise((e,t)=>{this.relayer.request(i).catch(e=>{this.logger.warn(e,e?.message),t(e)}).then(e)}),this.initialSubscribeTimeout,`Subscribing to ${e} failed, please try again`);this.events.removeListener(Co.created,n),t(r)}catch{}}),this.subscribeTimeout,`Subscribing to ${e} failed, please try again`);if(!t&&a)throw Error(`Subscribing to ${e} failed, please try again`);return t?r:null}catch(e){if(this.logger.debug(`Outgoing Relay Subscribe Payload stalled`),this.relayer.events.emit(Z.connection_stalled),a)throw e}return null}async rpcBatchSubscribe(e){if(!e.length)return!0;let t=e[0].relay,n={method:ni(t.protocol).batchSubscribe,params:{topics:e.map(e=>e.topic)}};this.logger.debug(`Outgoing Relay Payload`),this.logger.trace({type:`payload`,direction:`outgoing`,request:n});try{return await cn(new Promise((e,t)=>{this.relayer.request(n).then(e).catch(e=>{this.logger.warn(e),t(e)})}),this.subscribeTimeout,`rpcBatchSubscribe failed, please try again`),!0}catch{return this.relayer.events.emit(Z.connection_stalled),!1}}async rpcBatchFetchMessages(e){if(!e.length)return;let t=e[0].relay,n={method:ni(t.protocol).batchFetchMessages,params:{topics:e.map(e=>e.topic)}};this.logger.debug(`Outgoing Relay Payload`),this.logger.trace({type:`payload`,direction:`outgoing`,request:n});let r;try{r=await await cn(new Promise((e,t)=>{this.relayer.request(n).catch(e=>{this.logger.warn(e),t(e)}).then(e)}),this.subscribeTimeout,`rpcBatchFetchMessages failed, please try again`)}catch{this.relayer.events.emit(Z.connection_stalled)}return r}rpcUnsubscribe(e,t,n){let r={method:ni(n.protocol).unsubscribe,params:{topic:e,id:t}};return this.logger.debug(`Outgoing Relay Payload`),this.logger.trace({type:`payload`,direction:`outgoing`,request:r}),this.relayer.request(r)}onSubscribe(e,t){this.setSubscription(e,{...t,id:e}),this.pending.delete(t.topic)}onBatchSubscribe(e){e.length&&e.forEach(e=>{this.setSubscription(e.id,{...e}),this.pending.delete(e.topic)})}async onUnsubscribe(e,t,n){this.events.removeAllListeners(t),this.hasSubscription(t,e)&&this.deleteSubscription(t,n),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,{...t}),this.topicMap.set(t.topic,e),this.events.emit(Co.created,t)}getSubscription(e){this.logger.debug(`Getting subscription`),this.logger.trace({type:`method`,method:`getSubscription`,id:e});let t=this.subscriptions.get(e);if(!t){let{message:t}=U(`NO_MATCHING_KEY`,`${this.name}: ${e}`);throw Error(t)}return t}deleteSubscription(e,t){this.logger.debug(`Deleting subscription`),this.logger.trace({type:`method`,method:`deleteSubscription`,id:e,reason:t});let n=this.getSubscription(e);this.subscriptions.delete(e),this.topicMap.delete(n.topic,e),this.events.emit(Co.deleted,{...n,reason:t})}async persist(){await this.setRelayerSubscriptions(this.values),this.events.emit(Co.sync)}async onRestart(){if(this.cached.length){let e=[...this.cached],t=Math.ceil(this.cached.length/this.batchSubscribeTopicsLimit);for(let n=0;n<t;n++){let t=e.splice(0,this.batchSubscribeTopicsLimit);await this.batchSubscribe(t)}}this.events.emit(Co.resubscribed)}async restore(){try{let e=await this.getRelayerSubscriptions();if(typeof e>`u`||!e.length)return;if(this.subscriptions.size&&!e.every(e=>e.topic===this.subscriptions.get(e.id)?.topic)){let{message:e}=U(`RESTORE_WILL_OVERRIDE`,this.name);throw this.logger.error(e),this.logger.error(`${this.name}: ${JSON.stringify(this.values)}`),Error(e)}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){if(e.length){if(!await this.rpcBatchSubscribe(e)){this.logger.warn(`Batch subscribe failed for ${e.length} topics, adding to pending for retry`),e.forEach(e=>{this.pending.set(e.topic,e)});return}this.onBatchSubscribe(await Promise.all(e.map(async e=>({...e,id:await this.getSubscriptionId(e.topic)}))))}}async batchFetchMessages(e){if(!e.length)return;this.logger.trace(`Fetching batch messages for ${e.length} subscriptions`);let t=await this.rpcBatchFetchMessages(e);t&&t.messages&&(await En((0,z.toMiliseconds)(z.ONE_SECOND)),await this.relayer.handleBatchMessageEvents(t.messages))}async onConnect(){await this.restart(),this.reset()}onDisconnect(){this.onDisable()}isInitialized(){if(!this.initialized){let{message:e}=U(`NOT_INITIALIZED`,this.name);throw Error(e)}}async restartToComplete(e){!this.relayer.connected&&!this.relayer.connecting&&(this.cached.push(e),await this.relayer.transportOpen())}async getClientId(){return this.clientId||=await this.relayer.core.crypto.getClientId(),this.clientId}async getSubscriptionId(e){return Rr(e+await this.getClientId())}},es=class extends et{constructor(e){super(e),this.protocol=`wc`,this.version=2,this.events=new Oe.EventEmitter,this.name=_o,this.transportExplicitlyClosed=!1,this.initialized=!1,this.connectionAttemptInProgress=!1,this.hasExperiencedNetworkDisruption=!1,this.heartBeatTimeout=(0,z.toMiliseconds)(z.THIRTY_SECONDS+z.FIVE_SECONDS),this.reconnectInProgress=!1,this.requestsInFlight=[],this.connectTimeout=(0,z.toMiliseconds)(z.ONE_SECOND*15),this.stalledRestartInProgress=!1,this.stalledRestartBackoff=0,this.stalledRestartBaseInterval=(0,z.toMiliseconds)(z.ONE_SECOND*2),this.stalledRestartMaxInterval=(0,z.toMiliseconds)(z.THIRTY_SECONDS),this.request=async e=>{this.logger.debug(`Publishing Request Payload`);let t=e.id||F().toString();await this.toEstablishConnection();try{this.logger.trace({id:t,method:e.method,topic:e.params?.topic},`relayer.request - publishing...`);let n=`${t}:${e.params?.tag||``}`;this.requestsInFlight.push(n);let r=await this.provider.request(e);return this.requestsInFlight=this.requestsInFlight.filter(e=>e!==n),r}catch(e){throw this.logger.debug(`Failed to Publish Request: ${t}`),e}},this.resetPingTimeout=()=>{Ut()&&(clearTimeout(this.pingTimeout),this.pingTimeout=setTimeout(()=>{try{this.logger.debug({},`pingTimeout: Connection stalled, terminating...`),this.provider?.connection?.socket?.terminate?.()}catch(e){this.logger.warn(e,e?.message)}},this.heartBeatTimeout))},this.onPayloadHandler=e=>{this.onProviderPayload(e),this.resetPingTimeout()},this.onConnectHandler=()=>{this.logger.warn({},`Relayer connected 🛜`),this.startPingTimeout(),this.stalledRestartBackoff=0,this.events.emit(Z.connect)},this.onDisconnectHandler=()=>{this.logger.warn({},`Relayer disconnected 🛑`),this.requestsInFlight=[],this.onProviderDisconnect()},this.onProviderErrorHandler=e=>{this.logger.fatal(`Fatal socket error: ${e.message}`),this.events.emit(Z.error,e),this.logger.fatal(`Fatal socket error received, closing transport`),this.transportExplicitlyClosed=!0,clearTimeout(this.reconnectTimeout),this.reconnectTimeout=void 0,this.reconnectInProgress=!1,this.transportClose().catch(e=>this.logger.warn(e))},this.registerProviderListeners=()=>{this.provider.on(vo.payload,this.onPayloadHandler),this.provider.on(vo.connect,this.onConnectHandler),this.provider.on(vo.disconnect,this.onDisconnectHandler),this.provider.on(vo.error,this.onProviderErrorHandler)},this.core=e.core,this.logger=wa({logger:e.logger??`error`,name:this.name}),this.messages=new Xo(this.logger,e.core),this.subscriber=new $o(this,this.logger),this.publisher=new Zo(this,this.logger),this.projectId=e.projectId,this.relayUrl=e.relayUrl||`wss://relay.walletconnect.org`,Gt()?this.packageName=Yt():Kt()&&(this.bundleId=Yt()),this.provider={}}async init(){this.logger.trace(`Initialized`),this.registerEventListeners(),await Promise.all([this.messages.init(),this.subscriber.init()]),this.initialized=!0,this.transportOpen().catch(e=>this.logger.warn(e,e?.message))}get context(){return ve(this.logger)}get connected(){return this.provider?.connection?.socket?.readyState===1}get connecting(){return this.provider?.connection?.socket?.readyState===0||this.connectPromise!==void 0}async publish(e,t,n){this.isInitialized(),await this.publisher.publish(e,t,n),await this.recordMessageEvent({topic:e,message:t,publishedAt:Date.now(),transportType:Q.relay},xo.outbound)}async publishCustom(e){this.isInitialized(),await this.publisher.publishCustom(e)}async subscribe(e,t){this.isInitialized(),(!t?.transportType||t?.transportType===`relay`)&&await this.toEstablishConnection();let n=t?.internal?.throwOnFailedPublish??!0,r=this.subscriber.topicMap.get(e)?.[0]||``,i,a=t=>{t.topic===e&&(this.subscriber.off(Co.created,a),i())};return await Promise.all([new Promise(e=>{i=e,this.subscriber.on(Co.created,a)}),new Promise((i,a)=>{this.subscriber.subscribe(e,{internal:{throwOnFailedPublish:n},...t}).then(e=>{r=e||r,i()}).catch(e=>{n?a(e):i()})})]),r}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 cn(this.provider.disconnect(),2e3,`provider.disconnect()`).catch(()=>this.onProviderDisconnect()):this.onProviderDisconnect()}async transportClose(){this.transportExplicitlyClosed=!0,clearTimeout(this.stalledRestartTimeout),this.stalledRestartInProgress=!1,this.stalledRestartBackoff=0,await this.resetTransport()}async transportOpen(e){if(!this.subscriber.hasAnyTopics){this.logger.info(`Starting WS connection skipped because the client has no topics to work with.`);return}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=this.connect(e).finally(()=>{this.connectPromise=void 0}),await this.connectPromise),!this.connected)throw 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.resetTransport(),await this.transportOpen())}async resetTransport(){this.reconnectInProgress=!0,clearTimeout(this.reconnectTimeout),this.reconnectTimeout=void 0,await this.transportDisconnect(),await this.subscriber.stop(),this.reconnectInProgress=!1}async confirmOnlineStateOrThrow(){if(!await na())throw 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}let t=e.sort((e,t)=>e.publishedAt-t.publishedAt);this.logger.debug(`Batch of ${t.length} message events sorted`);for(let e of t)try{await this.onMessageEvent(e)}catch(e){this.logger.warn(e,`Error while processing batch message event: `+e?.message)}this.logger.trace(`Batch of ${t.length} message events processed`)}async onLinkMessageEvent(e,t){let{topic:n}=e;if(!t.sessionExists){let e={topic:n,expiry:G(z.FIVE_MINUTES),relay:{protocol:`irn`},active:!1};await this.core.pairing.pairings.set(n,e)}this.events.emit(Z.message,e),await this.recordMessageEvent(e,xo.inbound)}async connect(e){await this.confirmOnlineStateOrThrow(),e&&e!==this.relayUrl&&(this.relayUrl=e,await this.transportDisconnect()),this.transportExplicitlyClosed=!1;let t=1;try{for(;t<6;){this.connectionAttemptInProgress=!0;try{if(this.transportExplicitlyClosed)break;this.logger.debug({},`Connecting to ${this.relayUrl}, attempt: ${t}...`),await this.createProvider(),await new Promise((e,t)=>{let n=()=>{t(Error(`Connection interrupted while trying to connect`))};this.provider.once(vo.disconnect,n),cn(this.provider.connect(),this.connectTimeout,`Socket stalled when trying to connect to ${this.relayUrl}`).then(()=>e()).catch(t).finally(()=>{this.provider.off(vo.disconnect,n),clearTimeout(this.reconnectTimeout)})}),await new Promise((e,t)=>{let n=()=>{t(Error(`Connection interrupted while trying to subscribe`))};this.provider.once(vo.disconnect,n),this.subscriber.start().then(e).catch(t).finally(()=>{this.provider.off(vo.disconnect,n)})}),this.hasExperiencedNetworkDisruption=!1}catch(e){await this.subscriber.stop();let t=e;this.logger.warn({},t.message),this.hasExperiencedNetworkDisruption=!0}if(this.connected){this.logger.debug({},`Connected to ${this.relayUrl} successfully on attempt: ${t}`);break}await new Promise(e=>setTimeout(e,(0,z.toMiliseconds)(t*1))),t++}}finally{this.connectionAttemptInProgress=!1,clearTimeout(this.reconnectTimeout),this.reconnectTimeout=void 0,this.reconnectInProgress=!1}}startPingTimeout(){if(Ut())try{this.provider?.connection?.socket?.on(`ping`,()=>{this.resetPingTimeout()}),this.resetPingTimeout()}catch(e){this.logger.warn(e,e?.message)}}async createProvider(){if(this.provider.connection&&(this.unregisterProviderListeners(),this.connected))try{await cn(this.provider.disconnect(),1e3,`Closing previous provider`)}catch{}let e=await this.core.crypto.signJWT(this.relayUrl);this.provider=new se(new ue(nn({sdkVersion:bo,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,t){let{topic:n,message:r}=e;await this.messages.set(n,r,t)}async shouldIgnoreMessageEvent(e){let{topic:t,message:n}=e;if(!n||n.length===0)return this.logger.warn(`Ignoring invalid/empty message: ${n}`),!0;if(!await this.subscriber.isKnownTopic(t))return this.logger.warn(`Ignoring message for unknown topic ${t}`),!0;let r=this.messages.has(t,n);return r&&this.logger.warn(`Ignoring duplicate message: ${n}`),r}async onProviderPayload(e){if(this.logger.debug(`Incoming Relay Payload`),this.logger.trace({type:`payload`,direction:`incoming`,payload:e}),re(e)){if(!e.method.endsWith(`_subscription`))return;let t=e.params,{topic:n,message:r,publishedAt:i,attestation:a}=t.data,o={topic:n,message:r,publishedAt:i,transportType:Q.relay,attestation:a};this.logger.debug(`Emitting Relayer Payload`),this.logger.trace({type:`event`,event:t.id,...o}),this.events.emit(t.id,o),await this.acknowledgePayload(e),await this.onMessageEvent(o)}else M(e)&&this.events.emit(Z.message_ack,e)}async onMessageEvent(e){await this.shouldIgnoreMessageEvent(e)||(await this.recordMessageEvent(e,xo.inbound),this.events.emit(Z.message,e))}async acknowledgePayload(e){let t=de(e.id,!0);await this.provider.connection.send(t)}unregisterProviderListeners(){this.provider.off(vo.payload,this.onPayloadHandler),this.provider.off(vo.connect,this.onConnectHandler),this.provider.off(vo.disconnect,this.onDisconnectHandler),this.provider.off(vo.error,this.onProviderErrorHandler),clearTimeout(this.pingTimeout)}async registerEventListeners(){let e=await na();oa(async t=>{e!==t&&(e=t,t?await this.transportOpen().catch(e=>this.logger.error(e,e?.message)):(this.hasExperiencedNetworkDisruption=!0,await this.transportDisconnect(),this.transportExplicitlyClosed=!1))}),this.core.heartbeat.on(E.pulse,async()=>{if(!this.transportExplicitlyClosed&&!this.connected&&la())try{await this.confirmOnlineStateOrThrow(),await this.transportOpen()}catch(e){this.logger.warn(e,e?.message)}}),this.events.on(Z.connection_stalled,()=>{if(this.transportExplicitlyClosed||this.stalledRestartInProgress)return;this.stalledRestartInProgress=!0;let e=this.stalledRestartBackoff===0?0:Math.min(2**(this.stalledRestartBackoff-1)*this.stalledRestartBaseInterval,this.stalledRestartMaxInterval);this.stalledRestartBackoff++,this.logger.warn(`Connection stalled, restarting transport${e?` in ${e}ms`:``}...`),this.stalledRestartTimeout=setTimeout(async()=>{try{if(this.transportExplicitlyClosed)return;await this.restartTransport()}catch(e){this.logger.error(e,e?.message)}finally{this.stalledRestartInProgress=!1}},e)})}async onProviderDisconnect(){if(clearTimeout(this.pingTimeout),this.events.emit(Z.disconnect),!this.reconnectInProgress){this.reconnectInProgress=!0;try{await this.subscriber.stop()}catch(e){this.logger.warn(e,`subscriber.stop() failed during disconnect`)}if(!this.subscriber.hasAnyTopics||this.transportExplicitlyClosed){this.reconnectInProgress=!1;return}this.reconnectTimeout=setTimeout(async()=>{await this.transportOpen().catch(e=>this.logger.error(e,e?.message)),this.reconnectTimeout=void 0,this.reconnectInProgress=!1},(0,z.toMiliseconds)(yo))}}isInitialized(){if(!this.initialized){let{message:e}=U(`NOT_INITIALIZED`,this.name);throw Error(e)}}async toEstablishConnection(){if(await this.confirmOnlineStateOrThrow(),!this.connected){if(this.connectPromise){await this.connectPromise;return}this.connectPromise=this.connect().finally(()=>{this.connectPromise=void 0}),await this.connectPromise}}},ts=class extends tt{constructor(e,t,n,r=oo,i=void 0){super(e,t,n,r),this.core=e,this.logger=t,this.name=n,this.map=new Map,this.version=`0.3`,this.cached=[],this.initialized=!1,this.storagePrefix=oo,this.recentlyDeleted=[],this.recentlyDeletedLimit=200,this.init=async()=>{this.initialized||=(this.logger.trace(`Initialized`),await this.restore(),this.cached.forEach(e=>{this.getKey&&e!==null&&!Y(e)?this.map.set(this.getKey(e),e):Oi(e)?this.map.set(e.id,e):ki(e)&&this.map.set(e.topic,e)}),this.cached=[],!0)},this.set=async(e,t)=>{this.isInitialized(),this.map.has(e)?await this.update(e,t):(this.logger.debug(`Setting value`),this.logger.trace({type:`method`,method:`set`,key:e,value:t}),this.map.set(e,t),await this.persist())},this.get=e=>(this.isInitialized(),this.logger.debug(`Getting value`),this.logger.trace({type:`method`,method:`get`,key:e}),this.getData(e)),this.getAll=e=>(this.isInitialized(),e?this.values.filter(t=>Object.keys(e).every(n=>io(t[n],e[n]))):this.values),this.update=async(e,t)=>{this.isInitialized(),this.logger.debug(`Updating value`),this.logger.trace({type:`method`,method:`update`,key:e,update:t});let n={...this.getData(e),...t};this.map.set(e,n),await this.persist()},this.delete=async(e,t)=>{this.isInitialized(),this.map.has(e)&&(this.logger.debug(`Deleting value`),this.logger.trace({type:`method`,method:`delete`,key:e,reason:t}),this.map.delete(e),this.addToRecentlyDeleted(e),await this.persist())},this.logger=be(t,this.name),this.storagePrefix=r,this.getKey=i}get context(){return ve(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){let t=this.map.get(e);if(!t){if(this.recentlyDeleted.includes(e)){let{message:t}=U(`MISSING_OR_INVALID`,`Record was recently deleted - ${this.name}: ${e}`);throw this.logger.error(t),Error(t)}let{message:t}=U(`NO_MATCHING_KEY`,`${this.name}: ${e}`);throw this.logger.error(t),Error(t)}return t}async persist(){await this.setDataStore(this.values)}async restore(){try{let e=await this.getDataStore();if(typeof e>`u`||!e.length)return;if(this.map.size){let{message:e}=U(`RESTORE_WILL_OVERRIDE`,this.name);throw this.logger.error(e),Error(e)}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){let{message:e}=U(`NOT_INITIALIZED`,this.name);throw Error(e)}}},ns=class{constructor(e,t){this.core=e,this.logger=t,this.name=To,this.version=`0.3`,this.events=new Oe.default,this.initialized=!1,this.storagePrefix=oo,this.ignoredPayloadTypes=[1],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:e})=>{this.isInitialized(),this.registeredMethods=[...new Set([...this.registeredMethods,...e])]},this.create=async e=>{this.isInitialized();let t=Fr(),n=await this.core.crypto.setSymKey(t),r=G(z.FIVE_MINUTES),i={protocol:`irn`},a={topic:n,expiry:r,relay:i,active:!1,methods:e?.methods},o=si({protocol:this.core.protocol,version:this.core.version,topic:n,symKey:t,relay:i,expiryTimestamp:r,methods:e?.methods});return this.events.emit(Do.create,a),this.core.expirer.set(n,r),await this.pairings.set(n,a),await this.core.relayer.subscribe(n,{transportType:e?.transportType,internal:e?.internal}),{topic:n,uri:o}},this.pair=async e=>{this.isInitialized();let t=this.core.eventClient.createEvent({properties:{topic:e?.uri,trace:[zo.pairing_started]}});this.isValidPair(e,t);let{topic:n,symKey:r,relay:i,expiryTimestamp:a,methods:o}=ii(e.uri);t.props.properties.topic=n,t.addTrace(zo.pairing_uri_validation_success),t.addTrace(zo.pairing_uri_not_expired);let s;if(this.pairings.keys.includes(n)){if(s=this.pairings.get(n),t.addTrace(zo.existing_pairing),s.active)throw t.setError(Bo.active_pairing_already_exists),Error(`Pairing already exists: ${n}. Please try again with a new connection URI.`);t.addTrace(zo.pairing_not_expired)}let c=a||G(z.FIVE_MINUTES),l={topic:n,relay:i,expiry:c,active:!1,methods:o};this.core.expirer.set(n,c),await this.pairings.set(n,l),t.addTrace(zo.store_new_pairing),e.activatePairing&&await this.activate({topic:n}),this.events.emit(Do.create,l),t.addTrace(zo.emit_inactive_pairing),this.core.crypto.keychain.has(n)||await this.core.crypto.setSymKey(r,n),t.addTrace(zo.subscribing_pairing_topic);try{await this.core.relayer.confirmOnlineStateOrThrow()}catch{t.setError(Bo.no_internet_connection)}try{await this.core.relayer.subscribe(n,{relay:i})}catch(e){throw t.setError(Bo.subscribe_pairing_topic_failure),e}return t.addTrace(zo.subscribe_pairing_topic_success),l},this.activate=async({topic:e})=>{this.isInitialized();let t=G(z.FIVE_MINUTES);this.core.expirer.set(e,t),await this.pairings.update(e,{active:!0,expiry:t})},this.ping=async e=>{this.isInitialized(),await this.isValidPing(e),this.logger.warn(`ping() is deprecated and will be removed in the next major release.`);let{topic:t}=e;if(this.pairings.keys.includes(t)){let e=await this.sendRequest(t,`wc_pairingPing`,{}),{done:n,resolve:r,reject:i}=sn();this.events.once(K(`pairing_ping`,e),({error:e})=>{e?i(e):r()}),await n()}},this.updateExpiry=async({topic:e,expiry:t})=>{this.isInitialized(),await this.pairings.update(e,{expiry:t})},this.updateMetadata=async({topic:e,metadata:t})=>{this.isInitialized(),await this.pairings.update(e,{peerMetadata:t})},this.getPairings=()=>(this.isInitialized(),this.pairings.values),this.disconnect=async e=>{this.isInitialized(),await this.isValidDisconnect(e);let{topic:t}=e;this.pairings.keys.includes(t)&&(await this.sendRequest(t,`wc_pairingDelete`,W(`USER_DISCONNECTED`)),await this.deletePairing(t))},this.formatUriFromPairing=e=>{this.isInitialized();let{topic:t,relay:n,expiry:r,methods:i}=e,a=this.core.crypto.keychain.get(t);return si({protocol:this.core.protocol,version:this.core.version,topic:t,symKey:a,relay:n,expiryTimestamp:r,methods:i})},this.sendRequest=async(e,t,n)=>{let r=ae(t,n),i=await this.core.crypto.encode(e,r),a=Eo[t].req;return this.core.history.set(e,r),this.core.relayer.publish(e,i,a),r.id},this.sendResult=async(e,t,n)=>{let r=de(e,n),i=await this.core.crypto.encode(t,r),a=Eo[(await this.core.history.get(t,e)).request.method].res;await this.core.relayer.publish(t,i,a),await this.core.history.resolve(r)},this.sendError=async(e,t,n)=>{let r=P(e,n),i=await this.core.crypto.encode(t,r),a=(await this.core.history.get(t,e)).request.method,o=Eo[a]?Eo[a].res:Eo.unregistered_method.res;await this.core.relayer.publish(t,i,o),await this.core.history.resolve(r)},this.deletePairing=async(e,t)=>{await this.core.relayer.unsubscribe(e),await Promise.all([this.pairings.delete(e,W(`USER_DISCONNECTED`)),this.core.crypto.deleteSymKey(e),t?Promise.resolve():this.core.expirer.del(e)])},this.cleanup=async()=>{let e=this.pairings.getAll().filter(e=>pn(e.expiry));await Promise.all(e.map(e=>this.deletePairing(e.topic)))},this.onRelayEventRequest=async e=>{let{topic:t,payload:n}=e;switch(n.method){case`wc_pairingPing`:return await this.onPairingPingRequest(t,n);case`wc_pairingDelete`:return await this.onPairingDeleteRequest(t,n);default:return await this.onUnknownRpcMethodRequest(t,n)}},this.onRelayEventResponse=async e=>{let{topic:t,payload:n}=e,r=(await this.core.history.get(t,n.id)).request.method;switch(r){case`wc_pairingPing`:return this.onPairingPingResponse(t,n);default:return this.onUnknownRpcMethodResponse(r)}},this.onPairingPingRequest=async(e,t)=>{let{id:n}=t;try{this.isValidPing({topic:e}),await this.sendResult(n,e,!0),this.events.emit(Do.ping,{id:n,topic:e})}catch(t){await this.sendError(n,e,t),this.logger.error(t)}},this.onPairingPingResponse=(e,t)=>{let{id:n}=t;setTimeout(()=>{ce(t)?this.events.emit(K(`pairing_ping`,n),{}):le(t)&&this.events.emit(K(`pairing_ping`,n),{error:t.error})},500)},this.onPairingDeleteRequest=async(e,t)=>{let{id:n}=t;try{this.isValidDisconnect({topic:e}),await this.deletePairing(e),this.events.emit(Do.delete,{id:n,topic:e})}catch(t){await this.sendError(n,e,t),this.logger.error(t)}},this.onUnknownRpcMethodRequest=async(e,t)=>{let{id:n,method:r}=t;try{if(this.registeredMethods.includes(r))return;let t=W(`WC_METHOD_UNSUPPORTED`,r);await this.sendError(n,e,t),this.logger.error(t)}catch(t){await this.sendError(n,e,t),this.logger.error(t)}},this.onUnknownRpcMethodResponse=e=>{this.registeredMethods.includes(e)||this.logger.error(W(`WC_METHOD_UNSUPPORTED`,e))},this.isValidPair=(e,t)=>{if(!Ui(e)){let{message:n}=U(`MISSING_OR_INVALID`,`pair() params: ${e}`);throw t.setError(Bo.malformed_pairing_uri),Error(n)}if(!Di(e.uri)){let{message:n}=U(`MISSING_OR_INVALID`,`pair() uri: ${e.uri}`);throw t.setError(Bo.malformed_pairing_uri),Error(n)}let n=ii(e?.uri);if(!n?.relay?.protocol){let{message:e}=U(`MISSING_OR_INVALID`,`pair() uri#relay-protocol`);throw t.setError(Bo.malformed_pairing_uri),Error(e)}if(!n?.symKey){let{message:e}=U(`MISSING_OR_INVALID`,`pair() uri#symKey`);throw t.setError(Bo.malformed_pairing_uri),Error(e)}if(n?.expiryTimestamp&&(0,z.toMiliseconds)(n?.expiryTimestamp)<Date.now()){t.setError(Bo.pairing_expired);let{message:e}=U(`EXPIRED`,`pair() URI has expired. Please try again with a new connection URI.`);throw Error(e)}},this.isValidPing=async e=>{if(!Ui(e)){let{message:t}=U(`MISSING_OR_INVALID`,`ping() params: ${e}`);throw Error(t)}let{topic:t}=e;await this.isValidPairingTopic(t)},this.isValidDisconnect=async e=>{if(!Ui(e)){let{message:t}=U(`MISSING_OR_INVALID`,`disconnect() params: ${e}`);throw Error(t)}let{topic:t}=e;await this.isValidPairingTopic(t)},this.isValidPairingTopic=async e=>{if(!X(e,!1)){let{message:t}=U(`MISSING_OR_INVALID`,`pairing topic should be a string: ${e}`);throw Error(t)}if(!this.pairings.keys.includes(e)){let{message:t}=U(`NO_MATCHING_KEY`,`pairing topic doesn't exist: ${e}`);throw Error(t)}if(pn(this.pairings.get(e).expiry)){await this.deletePairing(e);let{message:t}=U(`EXPIRED`,`pairing topic: ${e}`);throw Error(t)}},this.core=e,this.logger=be(t,this.name),this.pairings=new ts(this.core,this.logger,this.name,this.storagePrefix)}get context(){return ve(this.logger)}isInitialized(){if(!this.initialized){let{message:e}=U(`NOT_INITIALIZED`,this.name);throw Error(e)}}registerRelayerEvents(){this.core.relayer.on(Z.message,async e=>{let{topic:t,message:n,transportType:r}=e;if(this.pairings.keys.includes(t)&&r!==Q.link_mode){try{if(this.core.crypto.getPayloadType(n,`base64url`)===2){this.logger.warn(`registerRelayerEvents() -> non-link mode TYPE_2 payload ignored: ${n}`);return}}catch{}if(!this.ignoredPayloadTypes.includes(this.core.crypto.getPayloadType(n)))try{let e=await this.core.crypto.decode(t,n);re(e)?(this.core.history.set(t,e),await this.onRelayEventRequest({topic:t,payload:e})):M(e)&&(await this.core.history.resolve(e),await this.onRelayEventResponse({topic:t,payload:e}),this.core.history.delete(t,e.id)),await this.core.relayer.messages.ack(t,n)}catch(e){this.logger.error(e)}}})}registerExpirerEvents(){this.core.expirer.on(jo.expired,async e=>{let{topic:t}=fn(e.target);t&&this.pairings.keys.includes(t)&&(await this.deletePairing(t,!0),this.events.emit(Do.expire,{topic:t}))})}},rs=class extends Ze{constructor(e,t){super(e,t),this.core=e,this.logger=t,this.records=new Map,this.events=new Oe.EventEmitter,this.name=ko,this.version=`0.3`,this.cached=[],this.initialized=!1,this.storagePrefix=oo,this.init=async()=>{this.initialized||=(this.logger.trace(`Initialized`),await this.restore(),this.cached.forEach(e=>this.records.set(e.id,e)),this.cached=[],this.registerEventListeners(),!0)},this.set=(e,t,n)=>{if(this.isInitialized(),this.logger.debug(`Setting JSON-RPC request history record`),this.logger.trace({type:`method`,method:`set`,topic:e,request:t,chainId:n}),this.records.has(t.id))return;let r={id:t.id,topic:e,request:{method:t.method,params:t.params||null},chainId:n,expiry:G(z.THIRTY_DAYS)};this.records.set(r.id,r),this.persist(),this.events.emit(Oo.created,r)},this.resolve=async e=>{if(this.isInitialized(),this.logger.debug(`Updating JSON-RPC response history record`),this.logger.trace({type:`method`,method:`update`,response:e}),!this.records.has(e.id))return;let t=await this.getRecord(e.id);typeof t.response<`u`||(t.response=le(e)?{error:e.error}:{result:e.result},this.records.set(t.id,t),this.persist(),this.events.emit(Oo.updated,t))},this.get=async(e,t)=>(this.isInitialized(),this.logger.debug(`Getting record`),this.logger.trace({type:`method`,method:`get`,topic:e,id:t}),await this.getRecord(t)),this.delete=(e,t)=>{this.isInitialized(),this.logger.debug(`Deleting record`),this.logger.trace({type:`method`,method:`delete`,id:t}),this.values.forEach(n=>{if(n.topic===e){if(typeof t<`u`&&n.id!==t)return;this.records.delete(n.id),this.events.emit(Oo.deleted,n)}}),this.persist()},this.exists=async(e,t)=>(this.isInitialized(),this.records.has(t)?(await this.getRecord(t)).topic===e:!1),this.on=(e,t)=>{this.events.on(e,t)},this.once=(e,t)=>{this.events.once(e,t)},this.off=(e,t)=>{this.events.off(e,t)},this.removeListener=(e,t)=>{this.events.removeListener(e,t)},this.logger=be(t,this.name)}get context(){return ve(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(){let e=[];return this.values.forEach(t=>{if(typeof t.response<`u`)return;let n={topic:t.topic,request:ae(t.request.method,t.request.params,t.id),chainId:t.chainId};return e.push(n)}),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();let t=this.records.get(e);if(!t){let{message:t}=U(`NO_MATCHING_KEY`,`${this.name}: ${e}`);throw Error(t)}return t}async persist(){await this.setJsonRpcRecords(this.values),this.events.emit(Oo.sync)}async restore(){try{let e=await this.getJsonRpcRecords();if(typeof e>`u`||!e.length)return;if(this.records.size){let{message:e}=U(`RESTORE_WILL_OVERRIDE`,this.name);throw this.logger.error(e),Error(e)}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(Oo.created,e=>{let t=Oo.created;this.logger.info(`Emitting ${t}`),this.logger.debug({type:`event`,event:t,record:e})}),this.events.on(Oo.updated,e=>{let t=Oo.updated;this.logger.info(`Emitting ${t}`),this.logger.debug({type:`event`,event:t,record:e})}),this.events.on(Oo.deleted,e=>{let t=Oo.deleted;this.logger.info(`Emitting ${t}`),this.logger.debug({type:`event`,event:t,record:e})}),this.core.heartbeat.on(E.pulse,()=>{this.cleanup()})}cleanup(){try{this.isInitialized();let e=!1;this.records.forEach(t=>{(0,z.toMiliseconds)(t.expiry||0)-Date.now()<=0&&(this.logger.info(`Deleting expired history log: ${t.id}`),this.records.delete(t.id),this.events.emit(Oo.deleted,t,!1),e=!0)}),e&&this.persist()}catch(e){this.logger.warn(e)}}isInitialized(){if(!this.initialized){let{message:e}=U(`NOT_INITIALIZED`,this.name);throw Error(e)}}},is=class extends rt{constructor(e,t){super(e,t),this.core=e,this.logger=t,this.expirations=new Map,this.events=new Oe.EventEmitter,this.name=Ao,this.version=`0.3`,this.cached=[],this.initialized=!1,this.storagePrefix=oo,this.init=async()=>{this.initialized||=(this.logger.trace(`Initialized`),await this.restore(),this.cached.forEach(e=>this.expirations.set(e.target,e)),this.cached=[],this.registerEventListeners(),!0)},this.has=e=>{try{let t=this.formatTarget(e);return typeof this.getExpiration(t)<`u`}catch{return!1}},this.set=(e,t)=>{this.isInitialized();let n=this.formatTarget(e),r={target:n,expiry:t};this.expirations.set(n,r),this.checkExpiry(n,r),this.events.emit(jo.created,{target:n,expiration:r})},this.get=e=>{this.isInitialized();let t=this.formatTarget(e);return this.getExpiration(t)},this.del=e=>{if(this.isInitialized(),this.has(e)){let t=this.formatTarget(e),n=this.getExpiration(t);this.expirations.delete(t),this.events.emit(jo.deleted,{target:t,expiration:n})}},this.on=(e,t)=>{this.events.on(e,t)},this.once=(e,t)=>{this.events.once(e,t)},this.off=(e,t)=>{this.events.off(e,t)},this.removeListener=(e,t)=>{this.events.removeListener(e,t)},this.logger=be(t,this.name)}get context(){return ve(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 un(e);if(typeof e==`number`)return dn(e);let{message:t}=U(`UNKNOWN_TYPE`,`Target type: ${typeof e}`);throw 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(jo.sync)}async restore(){try{let e=await this.getExpirations();if(typeof e>`u`||!e.length)return;if(this.expirations.size){let{message:e}=U(`RESTORE_WILL_OVERRIDE`,this.name);throw this.logger.error(e),Error(e)}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){let t=this.expirations.get(e);if(!t){let{message:t}=U(`NO_MATCHING_KEY`,`${this.name}: ${e}`);throw this.logger.warn(t),Error(t)}return t}checkExpiry(e,t){let{expiry:n}=t;(0,z.toMiliseconds)(n)-Date.now()<=0&&this.expire(e,t)}expire(e,t){this.expirations.delete(e),this.events.emit(jo.expired,{target:e,expiration:t})}checkExpirations(){this.core.relayer.connected&&this.expirations.forEach((e,t)=>this.checkExpiry(t,e))}registerEventListeners(){this.core.heartbeat.on(E.pulse,()=>this.checkExpirations()),this.events.on(jo.created,e=>{let t=jo.created;this.logger.info(`Emitting ${t}`),this.logger.debug({type:`event`,event:t,data:e}),this.persist()}),this.events.on(jo.expired,e=>{let t=jo.expired;this.logger.info(`Emitting ${t}`),this.logger.debug({type:`event`,event:t,data:e}),this.persist()}),this.events.on(jo.deleted,e=>{let t=jo.deleted;this.logger.info(`Emitting ${t}`),this.logger.debug({type:`event`,event:t,data:e}),this.persist()})}isInitialized(){if(!this.initialized){let{message:e}=U(`NOT_INITIALIZED`,this.name);throw Error(e)}}},as=class extends it{constructor(e,t,n){super(e,t,n),this.core=e,this.logger=t,this.store=n,this.name=Mo,this.verifyUrlV3=Fo,this.storagePrefix=oo,this.version=2,this.init=async()=>{this.isDevEnv||(this.publicKey=await this.store.getItem(this.storeKey),this.publicKey&&(0,z.toMiliseconds)(this.publicKey?.expiresAt)<Date.now()&&(this.logger.debug(`verify v2 public key expired`),await this.removePublicKey()))},this.register=async e=>{if(!qt()||this.isDevEnv)return;let t=window.location.origin,{id:n,decryptedId:r}=e,i=`${this.verifyUrlV3}/attestation?projectId=${this.core.projectId}&origin=${t}&id=${n}&decryptedId=${r}`;try{let e=(0,ke.getDocument)(),t=this.startAbortTimer(z.ONE_SECOND*5),r=await new Promise((r,a)=>{let o=()=>{window.removeEventListener(`message`,c),e.body.removeChild(s),a(`attestation aborted`)};this.abortController.signal.addEventListener(`abort`,o);let s=e.createElement(`iframe`);s.src=i,s.style.display=`none`,s.addEventListener(`error`,o,{signal:this.abortController.signal});let c=i=>{if(i.data&&typeof i.data==`string`)try{let a=JSON.parse(i.data);if(a.type===`verify_attestation`){if(k(a.attestation).payload.id!==n)return;clearInterval(t),e.body.removeChild(s),this.abortController.signal.removeEventListener(`abort`,o),window.removeEventListener(`message`,c),r(a.attestation===null?``:a.attestation)}}catch(e){this.logger.warn(e)}};e.body.appendChild(s),window.addEventListener(`message`,c,{signal:this.abortController.signal})});return this.logger.debug(r,`jwt attestation`),r}catch(e){this.logger.warn(e)}return``},this.resolve=async e=>{if(this.isDevEnv)return``;let{attestationId:t,hash:n,encryptedId:r}=e;if(t===``){this.logger.debug(`resolve: attestationId is empty, skipping`);return}if(t){if(k(t).payload.id!==r)return;let e=await this.isValidJwtAttestation(t);if(e){if(!e.isVerified){this.logger.warn(`resolve: jwt attestation: origin url not verified`);return}return e}}if(!n)return;let i=this.getVerifyUrl(e?.verifyUrl);return this.fetchAttestation(n,i)},this.fetchAttestation=async(e,t)=>{this.logger.debug(`resolving attestation: ${e} from url: ${t}`);let n=this.startAbortTimer(z.ONE_SECOND*5),r=await fetch(`${t}/attestation/${e}?v2Supported=true`,{signal:this.abortController.signal});return clearTimeout(n),r.status===200?await r.json():void 0},this.getVerifyUrl=e=>{let t=e||`https://verify.walletconnect.org`;return Io.includes(t)||(this.logger.info(`verify url: ${t}, not included in trusted list, assigning default: https://verify.walletconnect.org`),t=`https://verify.walletconnect.org`),t},this.fetchPublicKey=async()=>{try{this.logger.debug(`fetching public key from: ${this.verifyUrlV3}`);let e=this.startAbortTimer(z.FIVE_SECONDS),t=await fetch(`${this.verifyUrlV3}/public-key`,{signal:this.abortController.signal});return clearTimeout(e),await t.json()}catch(e){this.logger.warn(e)}},this.persistPublicKey=async e=>{this.logger.debug(e,`persisting public key to local storage`),await this.store.setItem(this.storeKey,e),this.publicKey=e},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 e=>{let t=await this.getPublicKey();try{if(t)return this.validateAttestation(e,t)}catch(e){this.logger.error(e),this.logger.warn(`error validating attestation`)}let n=await this.fetchAndPersistPublicKey();try{if(n)return this.validateAttestation(e,n)}catch(e){this.logger.error(e),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 e=>{let t=await this.fetchPublicKey();t&&(await this.persistPublicKey(t),e(t))});let e=await this.fetchPromise;return this.fetchPromise=void 0,e},this.validateAttestation=(e,t)=>{let n=ei(e,t.publicKey),r={hasExpired:(0,z.toMiliseconds)(n.exp)<Date.now(),payload:n};if(r.hasExpired)throw this.logger.warn(`resolve: jwt attestation expired`),Error(`JWT attestation expired`);return{origin:r.payload.origin,isScam:r.payload.isScam,isVerified:r.payload.isVerified}},this.logger=be(t,this.name),this.abortController=new AbortController,this.isDevEnv=xn(),this.init()}get storeKey(){return this.storagePrefix+this.version+this.core.customStoragePrefix+`//verify:public:key`}get context(){return ve(this.logger)}startAbortTimer(e){return this.abortController=new AbortController,setTimeout(()=>this.abortController.abort(),(0,z.toMiliseconds)(e))}},os=class extends at{constructor(e,t){super(e,t),this.projectId=e,this.logger=t,this.context=Lo,this.registerDeviceToken=async e=>{let{clientId:t,token:n,notificationType:r,enableEncrypted:i=!1}=e,a=`${Ro}/${this.projectId}/clients`;await fetch(a,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({client_id:t,type:r,token:n,always_raw:i})})},this.logger=be(t,this.context)}},ss=class extends ot{constructor(e,t,n=!0){super(e,t,n),this.core=e,this.logger=t,this.context=Ko,this.storagePrefix=oo,this.storageVersion=Go,this.events=new Map,this.shouldPersist=!1,this.init=async e=>{if(xn())return;let t=e?.sdk;try{let e={eventId:bn(),timestamp:Date.now(),domain:this.getAppDomain(),props:{event:`INIT`,type:``,properties:{client_id:await this.core.crypto.getClientId(),user_agent:tn(this.core.relayer.protocol,this.core.relayer.version,bo),...t?.name&&t.version?{sdk_name:t.name,sdk_version:t.version}:{}}}};await this.sendEvent([e])}catch(e){this.logger.warn(e)}},this.createEvent=e=>{let{event:t=`ERROR`,type:n=``,properties:{topic:r,trace:i}}=e,a=bn(),o=this.core.projectId||``,s={eventId:a,timestamp:Date.now(),props:{event:t,type:n,properties:{topic:r,trace:i}},bundleId:o,domain:this.getAppDomain(),...this.setMethods(a)};return this.telemetryEnabled&&(this.events.set(a,s),this.shouldPersist=!0),s},this.getEvent=e=>{let{eventId:t,topic:n}=e;if(t)return this.events.get(t);let r=Array.from(this.events.values()).find(e=>e.props.properties.topic===n);if(r)return{...r,...this.setMethods(r.eventId)}},this.deleteEvent=e=>{let{eventId:t}=e;this.events.delete(t),this.shouldPersist=!0},this.setEventListeners=()=>{this.core.heartbeat.on(E.pulse,async()=>{this.shouldPersist&&await this.persist(),this.events.forEach(e=>{(0,z.fromMiliseconds)(Date.now())-(0,z.fromMiliseconds)(e.timestamp)>86400&&(this.events.delete(e.eventId),this.shouldPersist=!0)})})},this.setMethods=e=>({addTrace:t=>this.addTrace(e,t),setError:t=>this.setError(e,t)}),this.addTrace=(e,t)=>{let n=this.events.get(e);n&&(n.props.properties.trace.push(t),this.events.set(e,n),this.shouldPersist=!0)},this.setError=(e,t)=>{let n=this.events.get(e);n&&(n.props.type=t,n.timestamp=Date.now(),this.events.set(e,n),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{let e=await this.core.storage.getItem(this.storageKey)||[];if(!e.length)return;e.forEach(e=>{this.events.set(e.eventId,{...e,...this.setMethods(e.eventId)})})}catch(e){this.logger.warn(e)}},this.submit=async()=>{if(!this.telemetryEnabled||this.events.size===0)return;let e=[];for(let[t,n]of this.events)n.props.type&&e.push(n);if(e.length!==0)try{if((await this.sendEvent(e)).ok)for(let t of e)this.events.delete(t.eventId),this.shouldPersist=!0}catch(e){this.logger.warn(e)}},this.sendEvent=async e=>{let t=this.getAppDomain()?``:`&sp=desktop`;return await fetch(`${qo}?projectId=${this.core.projectId}&st=events_sdk&sv=js-${bo}${t}`,{method:`POST`,body:JSON.stringify(e)})},this.getAppDomain=()=>Qt().url,this.logger=be(t,this.context),this.telemetryEnabled=n,n?this.restore().then(async()=>{await this.submit(),this.setEventListeners()}):this.persist()}get storageKey(){return this.storagePrefix+this.storageVersion+this.core.customStoragePrefix+`//`+this.context}},cs=class e extends Xe{constructor(e){super(e),this.protocol=`wc`,this.version=2,this.name=ao,this.events=new Oe.EventEmitter,this.initialized=!1,this.on=(e,t)=>this.events.on(e,t),this.once=(e,t)=>this.events.once(e,t),this.off=(e,t)=>this.events.off(e,t),this.removeListener=(e,t)=>this.events.removeListener(e,t),this.dispatchEnvelope=({topic:e,message:t,sessionExists:n})=>{if(!e||!t)return;let r={topic:e,message:t,publishedAt:Date.now(),transportType:Q.link_mode};this.relayer.onLinkMessageEvent(r,{sessionExists:n})};let t=this.getGlobalCore(e?.customStoragePrefix);if(t)try{return this.customStoragePrefix=t.customStoragePrefix,this.logger=t.logger,this.heartbeat=t.heartbeat,this.crypto=t.crypto,this.history=t.history,this.expirer=t.expirer,this.storage=t.storage,this.relayer=t.relayer,this.pairing=t.pairing,this.verify=t.verify,this.echoClient=t.echoClient,this.linkModeSupportedApps=t.linkModeSupportedApps,this.eventClient=t.eventClient,this.initialized=t.initialized,this.logChunkController=t.logChunkController,t}catch{}this.projectId=e?.projectId,this.relayUrl=e?.relayUrl||`wss://relay.walletconnect.org`,this.customStoragePrefix=e?.customStoragePrefix?`:${e.customStoragePrefix}`:``;let n=_e({level:typeof e?.logger==`string`&&e.logger?e.logger:so.logger,name:ao}),{logger:r,chunkLoggerController:i}=we({opts:n,maxSizeInBytes:e?.maxLogBlobSizeInBytes,loggerOverride:e?.logger});this.logChunkController=i,this.logChunkController?.downloadLogsBlobInBrowser&&(window.downloadLogsBlobInBrowser=async()=>{this.logChunkController?.downloadLogsBlobInBrowser&&this.logChunkController?.downloadLogsBlobInBrowser({clientId:await this.crypto.getClientId()})}),this.logger=be(r,this.name),this.heartbeat=new D,this.crypto=new Yo(this,this.logger,e?.keychain),this.history=new rs(this,this.logger),this.expirer=new is(this,this.logger),this.storage=e?.storage?e.storage:new T({...co,...e?.storageOptions}),this.relayer=new es({core:this,logger:this.logger,relayUrl:this.relayUrl,projectId:this.projectId}),this.pairing=new ns(this,this.logger),this.verify=new as(this,this.logger,this.storage),this.echoClient=new os(this.projectId||``,this.logger),this.linkModeSupportedApps=[],this.eventClient=new ss(this,this.logger,e?.telemetryEnabled),this.setGlobalCore(this)}static async init(t){let n=new e(t);await n.initialize();let r=await n.crypto.getClientId();return await n.storage.setItem(So,r),n}get context(){return ve(this.logger)}async start(){this.initialized||await this.initialize()}async getLogsBlob(){return this.logChunkController?.logsToBlob({clientId:await this.crypto.getClientId()})}async addLinkModeSupportedApp(e){this.linkModeSupportedApps.includes(e)||(this.linkModeSupportedApps.push(e),await this.storage.setItem(`WALLETCONNECT_LINK_MODE_APPS`,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(`WALLETCONNECT_LINK_MODE_APPS`)||[],this.initialized=!0,this.logger.info(`Core Initialization Success`)}catch(e){throw this.logger.warn(e,`Core Initialization Failure at epoch ${Date.now()}`),this.logger.error(e.message),e}}getGlobalCore(e=``){try{if(this.isGlobalCoreDisabled())return;let t=`_walletConnectCore_${e}`,n=`${t}_count`;return globalThis[n]=(globalThis[n]||0)+1,globalThis[n],globalThis[t]}catch{return}}setGlobalCore(e){try{if(this.isGlobalCoreDisabled())return;let t=`_walletConnectCore_${e.opts?.customStoragePrefix||``}`;globalThis[t]=e}catch{}}isGlobalCoreDisabled(){try{return typeof t<`u`&&{}.DISABLE_GLOBAL_CORE===`true`}catch{return!0}}};r();var ls=`client`,us=`wc@2:${ls}:`,ds={name:ls,logger:`error`,controller:!1,relayUrl:`wss://relay.walletconnect.org`},fs=`WALLETCONNECT_DEEPLINK_CHOICE`,ps=`proposal`,ms=`Proposal expired`,hs=`session`,gs=z.SEVEN_DAYS,_s=`engine`,$={wc_sessionPropose:{req:{ttl:z.FIVE_MINUTES,prompt:!0,tag:1100},res:{ttl:z.FIVE_MINUTES,prompt:!1,tag:1101},reject:{ttl:z.FIVE_MINUTES,prompt:!1,tag:1120},autoReject:{ttl:z.FIVE_MINUTES,prompt:!1,tag:1121}},wc_sessionSettle:{req:{ttl:z.FIVE_MINUTES,prompt:!1,tag:1102},res:{ttl:z.FIVE_MINUTES,prompt:!1,tag:1103}},wc_sessionUpdate:{req:{ttl:z.ONE_DAY,prompt:!1,tag:1104},res:{ttl:z.ONE_DAY,prompt:!1,tag:1105}},wc_sessionExtend:{req:{ttl:z.ONE_DAY,prompt:!1,tag:1106},res:{ttl:z.ONE_DAY,prompt:!1,tag:1107}},wc_sessionRequest:{req:{ttl:z.FIVE_MINUTES*3,prompt:!0,tag:1108},res:{ttl:z.FIVE_MINUTES*3,prompt:!1,tag:1109}},wc_sessionEvent:{req:{ttl:z.FIVE_MINUTES,prompt:!0,tag:1110},res:{ttl:z.FIVE_MINUTES,prompt:!1,tag:1111}},wc_sessionDelete:{req:{ttl:z.ONE_DAY,prompt:!1,tag:1112},res:{ttl:z.ONE_DAY,prompt:!1,tag:1113}},wc_sessionPing:{req:{ttl:z.ONE_DAY,prompt:!1,tag:1114},res:{ttl:z.ONE_DAY,prompt:!1,tag:1115}},wc_sessionAuthenticate:{req:{ttl:z.ONE_HOUR,prompt:!0,tag:1116},res:{ttl:z.ONE_HOUR,prompt:!1,tag:1117},reject:{ttl:z.FIVE_MINUTES,prompt:!1,tag:1118},autoReject:{ttl:z.FIVE_MINUTES,prompt:!1,tag:1119}}},vs={min:z.FIVE_MINUTES,max:z.SEVEN_DAYS},ys={idle:`IDLE`,active:`ACTIVE`},bs={eth_sendTransaction:{key:``},eth_sendRawTransaction:{key:``},wallet_sendCalls:{key:``},solana_signTransaction:{key:`signature`},solana_signAllTransactions:{key:`transactions`},solana_signAndSendTransaction:{key:`signature`},sui_signAndExecuteTransaction:{key:`digest`},sui_signTransaction:{key:``},hedera_signAndExecuteTransaction:{key:`transactionId`},hedera_executeTransaction:{key:`transactionId`},near_signTransaction:{key:``},near_signTransactions:{key:``},tron_signTransaction:{key:`txID`},xrpl_signTransaction:{key:``},xrpl_signTransactionFor:{key:``},algo_signTxn:{key:``},sendTransfer:{key:`txid`},stacks_stxTransfer:{key:`txId`},polkadot_signTransaction:{key:``},cosmos_signDirect:{key:``},canton_prepareSignExecute:{key:``},stellar_signXDR:{key:``},stellar_signAndSubmitXDR:{key:`tx_hash`}},xs=`request`,Ss=[`wc_sessionPropose`,`wc_sessionRequest`,`wc_authRequest`,`wc_sessionAuthenticate`],Cs=`auth`,ws=`authKeys`,Ts=`pairingTopics`,Es=`requests`,Ds=`wc@1.5:${Cs}:`,Os=`${Ds}:PUB_KEY`,ks=class extends ct{constructor(e){super(e),this.name=_s,this.events=new Oe.default,this.initialized=!1,this.requestQueue={state:ys.idle,queue:[]},this.sessionRequestQueue={state:ys.idle,queue:[]},this.emittedSessionRequests=new Dn({limit:500}),this.requestQueueDelay=z.ONE_SECOND,this.expectedPairingMethodMap=new Map,this.recentlyDeletedMap=new Map,this.recentlyDeletedLimit=200,this.relayMessageCache=[],this.pendingSessions=new Map,this.init=async()=>{this.initialized||(await this.cleanup(),this.registerRelayerEvents(),this.registerExpirerEvents(),this.registerPairingEvents(),this.registerSubscriptionCleanup(),await this.registerLinkModeListeners(),this.client.core.pairing.register({methods:Object.keys($)}),this.initialized=!0,setTimeout(async()=>{await this.processPendingMessageEvents(),this.sessionRequestQueue.queue=this.getPendingSessionRequests(),this.processSessionRequestQueue()},(0,z.toMiliseconds)(this.requestQueueDelay)))},this.connect=async e=>{this.isInitialized(),await this.confirmOnlineStateOrThrow();let t={...e,requiredNamespaces:e.requiredNamespaces||{},optionalNamespaces:e.optionalNamespaces||{}};await this.isValidConnect(t),t.optionalNamespaces=bi(t.requiredNamespaces,t.optionalNamespaces),t.requiredNamespaces={};let{pairingTopic:n,requiredNamespaces:r,optionalNamespaces:i,sessionProperties:a,scopedProperties:o,relays:s,authentication:c,walletPay:l}=t,u=c?.[0]?.ttl||$.wc_sessionPropose.req.ttl||z.FIVE_MINUTES;this.validateRequestExpiry(u);let d=n,f,p=!1;try{if(d){let e=this.client.core.pairing.pairings.get(d);this.client.logger.warn(`connect() with existing pairing topic is deprecated and will be removed in the next major release.`),p=e.active}}catch(e){throw this.client.logger.error(`connect() -> pairing.get(${d}) failed`),e}if(!d||!p){let{topic:e,uri:t}=await this.client.core.pairing.create({internal:{skipSubscribe:!0}});d=e,f=t}if(!d){let{message:e}=U(`NO_MATCHING_KEY`,`connect() pairing topic: ${d}`);throw Error(e)}let m=await this.client.core.crypto.generateKeyPair(),h=G(u),g={requiredNamespaces:r,optionalNamespaces:i,relays:s??[{protocol:`irn`}],proposer:{publicKey:m,metadata:this.client.metadata},expiryTimestamp:h,pairingTopic:d,...a&&{sessionProperties:a},...o&&{scopedProperties:o},id:I(),...(c||l)&&{requests:{authentication:c?.map(e=>{let{domain:t,chains:n,nonce:r,uri:i,exp:a,nbf:o,type:s,statement:c,requestId:l,resources:u,signatureTypes:d}=e;return{domain:t,chains:n,nonce:r,type:s??`caip122`,aud:i,version:`1`,iat:new Date().toISOString(),exp:a,nbf:o,statement:c,requestId:l,resources:u,signatureTypes:d}}),walletPay:l}}},_=K(`session_connect`,g.id),{reject:ee,resolve:te,done:v}=sn(u,ms),y=({id:e})=>{if(e===g.id){this.client.events.off(`proposal_expire`,y);let e=this.pendingSessions.get(g.id);if(e){let{sessionTopic:t,publicKey:n}=e;Promise.all([this.client.core.relayer.unsubscribe(t),this.client.core.crypto.keychain.has(t)?this.client.core.crypto.deleteSymKey(t):Promise.resolve(),this.client.core.crypto.keychain.has(n)?this.client.core.crypto.deleteKeyPair(n):Promise.resolve()]).catch(e=>this.client.logger.warn(e))}this.pendingSessions.delete(g.id),this.events.emit(_,{error:{message:ms,code:0}})}};return this.client.events.on(`proposal_expire`,y),this.events.once(_,({error:e,session:t})=>{this.client.events.off(`proposal_expire`,y),e?ee(e):t&&te(t)}),await this.setProposal(g.id,g),await this.sendProposeSession({proposal:g,publishOpts:{internal:{throwOnFailedPublish:!0},tvf:{correlationId:g.id}}}).catch(e=>{throw this.deleteProposal(g.id),e}),{uri:f,approval:v}},this.pair=async e=>{this.isInitialized(),await this.confirmOnlineStateOrThrow();try{return await this.client.core.pairing.pair(e)}catch(e){throw this.client.logger.error(`pair() failed`),e}},this.approve=async e=>{let t=this.client.core.eventClient.createEvent({properties:{topic:e?.id?.toString(),trace:[Vo.session_approve_started]}});try{this.isInitialized(),await this.confirmOnlineStateOrThrow()}catch(e){throw t.setError(Ho.no_internet_connection),e}try{await this.isValidProposalId(e?.id)}catch(n){throw this.client.logger.error(`approve() -> proposal.get(${e?.id}) failed`),t.setError(Ho.proposal_not_found),n}try{await this.isValidApprove(e)}catch(e){throw this.client.logger.error(`approve() -> isValidApprove() failed`),t.setError(Ho.session_approve_namespace_validation_failure),e}let{id:n,relayProtocol:r,namespaces:i,sessionProperties:a,scopedProperties:o,sessionConfig:s,proposalRequestsResponses:c}=e,l=this.client.proposal.get(n);this.client.core.eventClient.deleteEvent({eventId:t.eventId});let{pairingTopic:u,proposer:d,requiredNamespaces:f,optionalNamespaces:p}=l,m=this.client.core.eventClient?.getEvent({topic:u});m||=this.client.core.eventClient?.createEvent({type:Vo.session_approve_started,properties:{topic:u,trace:[Vo.session_approve_started,Vo.session_namespaces_validation_success]}});let h=await this.client.core.crypto.generateKeyPair(),g=d.publicKey,_=await this.client.core.crypto.generateSharedKey(h,g),ee={relay:{protocol:r??`irn`},namespaces:i,controller:{publicKey:h,metadata:this.client.metadata},expiry:G(gs),...a&&{sessionProperties:a},...o&&{scopedProperties:o},...s&&{sessionConfig:s},proposalRequestsResponses:c},te=Q.relay;m.addTrace(Vo.subscribing_session_topic);try{await this.client.core.relayer.subscribe(_,{transportType:te,internal:{skipSubscribe:!0}})}catch(e){throw m.setError(Ho.subscribe_session_topic_failure),e}m.addTrace(Vo.subscribe_session_topic_success);let v={...ee,topic:_,requiredNamespaces:f,optionalNamespaces:p,pairingTopic:u,acknowledged:!1,self:ee.controller,peer:{publicKey:d.publicKey,metadata:d.metadata},controller:h,transportType:Q.relay,authentication:c?.authentication,walletPayResult:c?.walletPay};await this.client.session.set(_,v),m.addTrace(Vo.store_session);try{await this.sendApproveSession({sessionTopic:_,proposal:l,pairingProposalResponse:{relay:{protocol:r??`irn`},responderPublicKey:h},sessionSettleRequest:ee,publishOpts:{internal:{throwOnFailedPublish:!0},tvf:{correlationId:n,...this.getTVFApproveParams(v)}}}),m.addTrace(Vo.session_approve_publish_success)}catch(e){throw this.client.logger.error(e),this.client.session.delete(_,W(`USER_DISCONNECTED`)),await this.client.core.relayer.unsubscribe(_),e}return this.client.core.eventClient.deleteEvent({eventId:m.eventId}),await this.client.core.pairing.updateMetadata({topic:u,metadata:d.metadata}),await this.deleteProposal(n),await this.client.core.pairing.activate({topic:u}),await this.setExpiry(_,G(gs)),{topic:_,acknowledged:()=>Promise.resolve(this.client.session.get(_))}},this.reject=async e=>{this.isInitialized(),await this.confirmOnlineStateOrThrow();try{await this.isValidReject(e)}catch(e){throw this.client.logger.error(`reject() -> isValidReject() failed`),e}let{id:t,reason:n}=e,r;try{r=this.client.proposal.get(t).pairingTopic}catch(e){throw this.client.logger.error(`reject() -> proposal.get(${t}) failed`),e}r&&await this.sendError({id:t,topic:r,error:n,rpcOpts:$.wc_sessionPropose.reject}),await this.deleteProposal(t)},this.update=async e=>{this.isInitialized(),await this.confirmOnlineStateOrThrow();try{await this.isValidUpdate(e)}catch(e){throw this.client.logger.error(`update() -> isValidUpdate() failed`),e}let{topic:t,namespaces:n}=e,r=this.client.session.get(t);if(r.self.publicKey!==r.controller){let{message:e}=W(`UNAUTHORIZED_UPDATE_REQUEST`);throw Error(e)}let{done:i,resolve:a,reject:o}=sn(z.FIVE_MINUTES,`Session update request expired without receiving any acknowledgement`),s=I(),c=F().toString(),l=this.client.session.get(t).namespaces;return this.events.once(K(`session_update`,s),({error:e})=>{e?o(e):a()}),await this.client.session.update(t,{namespaces:n}),await this.sendRequest({topic:t,method:`wc_sessionUpdate`,params:{namespaces:n},throwOnFailedPublish:!0,clientRpcId:s,relayRpcId:c}).catch(e=>{this.client.logger.error(e),this.client.session.update(t,{namespaces:l}),o(e)}),{acknowledged:i}},this.extend=async e=>{this.isInitialized(),await this.confirmOnlineStateOrThrow();try{await this.isValidExtend(e)}catch(e){throw this.client.logger.error(`extend() -> isValidExtend() failed`),e}let{topic:t}=e,n=I(),{done:r,resolve:i,reject:a}=sn(z.FIVE_MINUTES,`Session extend request expired without receiving any acknowledgement`);return this.events.once(K(`session_extend`,n),({error:e})=>{e?a(e):i()}),await this.setExpiry(t,G(gs)),this.sendRequest({topic:t,method:`wc_sessionExtend`,params:{},clientRpcId:n,throwOnFailedPublish:!0}).catch(e=>{a(e)}),{acknowledged:r}},this.request=async e=>{this.isInitialized();try{await this.isValidRequest(e)}catch(e){throw this.client.logger.error(`request() -> isValidRequest() failed`),e}let{chainId:t,request:n,topic:r,expiry:i=$.wc_sessionRequest.req.ttl}=e,a=this.client.session.get(r);a?.transportType===Q.relay&&await this.confirmOnlineStateOrThrow();let o=I(),s=F().toString(),{done:c,resolve:l,reject:u}=sn(i,`Request expired. Please try again.`);this.events.once(K(`session_request`,o),({error:e,result:t})=>{e?u(e):l(t)});let d=`wc_sessionRequest`,f=this.getAppLinkIfEnabled(a.peer.metadata,a.transportType);if(f)return await this.sendRequest({clientRpcId:o,relayRpcId:s,topic:r,method:d,params:{request:{...n,expiryTimestamp:G(i)},chainId:t},expiry:i,throwOnFailedPublish:!0,appLink:f}).catch(e=>u(e)),this.client.events.emit(`session_request_sent`,{topic:r,request:n,chainId:t,id:o}),await c();let p={request:{...n,expiryTimestamp:G(i)},chainId:t};return await Promise.all([new Promise(async e=>{await this.sendRequest({clientRpcId:o,relayRpcId:s,topic:r,method:d,params:p,expiry:i,throwOnFailedPublish:!0,tvf:this.getTVFParams(o,p)}).catch(e=>u(e)),this.client.events.emit(`session_request_sent`,{topic:r,request:n,chainId:t,id:o}),e()}),new Promise(async e=>{if(!a.sessionConfig?.disableDeepLink){let e=await vn(this.client.core.storage,fs);await hn({id:o,topic:r,wcDeepLink:e})}e()}),c()]).then(e=>e[2])},this.respond=async e=>{this.isInitialized();let t=this.client.core.eventClient.createEvent({properties:{topic:e?.topic||e?.response?.id?.toString(),trace:[Vo.session_request_response_started]}});try{await this.isValidRespond(e)}catch(e){throw t.addTrace(e?.message),t.setError(Ho.session_request_response_validation_failure),e}t.addTrace(Vo.session_request_response_validation_success);let{topic:n,response:r}=e,{id:i}=r,a=this.client.session.get(n);a.transportType===Q.relay&&await this.confirmOnlineStateOrThrow();let o=this.getAppLinkIfEnabled(a.peer.metadata,a.transportType);try{t.addTrace(Vo.session_request_response_publish_started),ce(r)?await this.sendResult({id:i,topic:n,result:r.result,throwOnFailedPublish:!0,appLink:o}):le(r)&&await this.sendError({id:i,topic:n,error:r.error,appLink:o}),this.cleanupAfterResponse(e)}catch(e){throw t.addTrace(e?.message),t.setError(Ho.session_request_response_publish_failure),e}},this.ping=async e=>{this.isInitialized(),await this.confirmOnlineStateOrThrow();try{await this.isValidPing(e)}catch(e){throw this.client.logger.error(`ping() -> isValidPing() failed`),e}let{topic:t}=e;if(this.client.session.keys.includes(t)){let e=I(),n=F().toString(),{done:r,resolve:i,reject:a}=sn(z.FIVE_MINUTES,`Ping request expired without receiving any acknowledgement`);this.events.once(K(`session_ping`,e),({error:e})=>{e?a(e):i()}),await Promise.all([this.sendRequest({topic:t,method:`wc_sessionPing`,params:{},throwOnFailedPublish:!0,clientRpcId:e,relayRpcId:n}),r()])}else this.client.core.pairing.pairings.keys.includes(t)&&(this.client.logger.warn(`ping() on pairing topic is deprecated and will be removed in the next major release.`),await this.client.core.pairing.ping({topic:t}))},this.emit=async e=>{this.isInitialized(),await this.confirmOnlineStateOrThrow(),await this.isValidEmit(e);let{topic:t,event:n,chainId:r}=e,i=F().toString(),a=I();await this.sendRequest({topic:t,method:`wc_sessionEvent`,params:{event:n,chainId:r},throwOnFailedPublish:!0,relayRpcId:i,clientRpcId:a})},this.disconnect=async e=>{this.isInitialized(),await this.confirmOnlineStateOrThrow(),await this.isValidDisconnect(e);let{topic:t}=e;if(this.client.session.keys.includes(t))await this.sendRequest({topic:t,method:`wc_sessionDelete`,params:W(`USER_DISCONNECTED`),throwOnFailedPublish:!0}),await this.deleteSession({topic:t,emitEvent:!1});else if(this.client.core.pairing.pairings.keys.includes(t))await this.client.core.pairing.disconnect({topic:t});else{let{message:e}=U(`MISMATCHED_TOPIC`,`Session or pairing topic not found: ${t}`);throw Error(e)}},this.find=e=>(this.isInitialized(),this.client.session.getAll().filter(t=>wi(t,e))),this.getPendingSessionRequests=()=>this.client.pendingRequest.getAll(),this.authenticate=async(e,t)=>{this.isInitialized(),this.isValidAuthenticate(e);let n=t&&this.client.core.linkModeSupportedApps.includes(t)&&this.client.metadata.redirect?.linkMode,r=n?Q.link_mode:Q.relay;r===Q.relay&&await this.confirmOnlineStateOrThrow();let{chains:i,statement:a=``,uri:o,domain:s,nonce:c,type:l,exp:u,nbf:d,methods:f=[],expiry:p}=e,m=[...e.resources||[]],{topic:h,uri:g}=await this.client.core.pairing.create({methods:[`wc_sessionAuthenticate`],transportType:r});if(this.client.logger.info({message:`Generated new pairing`,pairing:{topic:h,uri:g}}),this.client.auth.authKeys.keys.includes(Os)){let{responseTopic:e,publicKey:t}=this.client.auth.authKeys.get(Os);e&&(await this.client.core.relayer.unsubscribe(e).catch(e=>this.client.logger.warn(e)),await this.client.auth.pairingTopics.delete(e,{message:`replaced`,code:0}).catch(e=>this.client.logger.warn(e))),t&&this.client.core.crypto.keychain.has(t)&&await this.client.core.crypto.deleteKeyPair(t)}let _=await this.client.core.crypto.generateKeyPair(),ee=Lr(_);if(await Promise.all([this.client.auth.authKeys.set(Os,{responseTopic:ee,publicKey:_}),this.client.auth.pairingTopics.set(ee,{topic:ee,pairingTopic:h})]),await this.client.core.relayer.subscribe(ee,{transportType:r}),this.client.logger.info(`sending request to new pairing topic: ${h}`),f.length>0){let{namespace:e}=Rt(i[0]),t=yr(e,`request`,f);Er(m)&&(t=xr(t,m.pop())),m.push(t)}let te=p&&p>$.wc_sessionAuthenticate.req.ttl?p:$.wc_sessionAuthenticate.req.ttl,v={authPayload:{type:l??`caip122`,chains:i,statement:a,aud:o,domain:s,version:`1`,nonce:c,iat:new Date().toISOString(),exp:u,nbf:d,resources:m},requester:{publicKey:_,metadata:this.client.metadata},expiryTimestamp:G(te)},y={requiredNamespaces:{},optionalNamespaces:{eip155:{chains:i,methods:[...new Set([`personal_sign`,...f])],events:[`chainChanged`,`accountsChanged`]}},relays:[{protocol:`irn`}],pairingTopic:h,proposer:{publicKey:_,metadata:this.client.metadata},expiryTimestamp:G($.wc_sessionPropose.req.ttl),id:I()},{done:b,resolve:x,reject:S}=sn(te,`Request expired`),C=I(),w=K(`session_connect`,y.id),T=K(`session_request`,C),E=async({error:e,session:t})=>{this.events.off(T,O),e?S(e):t&&x({session:t})},D=async e=>{if(await this.deletePendingAuthRequest(C,{message:`fulfilled`,code:0}),e.error){let t=W(`WC_METHOD_UNSUPPORTED`,`wc_sessionAuthenticate`);return e.error.code===t.code?void 0:(this.events.off(w,E),S(e.error.message))}await this.deleteProposal(y.id),this.events.off(w,E);let{cacaos:n,responder:i}=e.result,a=[],o=[];for(let e of n){if(!await lr({cacao:e,projectId:this.client.core.projectId}))return this.client.logger.error(e,`Signature verification failed`),S(W(`SESSION_SETTLEMENT_FAILED`,`Signature verification failed`));let t=ur({cacao:e,request:v.authPayload});if(!t.valid)return this.client.logger.error(e,`Cacao does not match the request: ${t.reason}`),S(W(`SESSION_SETTLEMENT_FAILED`,`Cacao does not match the request: ${t.reason}`));let{p:n}=e,r=Er(n.resources),i=[sr(n.iss)],s=cr(n.iss);if(r){let e=wr(r),t=Tr(r);a.push(...e),i.push(...t)}for(let e of i)o.push(`${e}:${s}`)}let s=await this.client.core.crypto.generateSharedKey(_,i.publicKey),c;a.length>0&&(c={topic:s,acknowledged:!0,self:{publicKey:_,metadata:this.client.metadata},peer:i,controller:i.publicKey,expiry:G(gs),requiredNamespaces:{},optionalNamespaces:{},relay:{protocol:`irn`},pairingTopic:h,namespaces:yi([...new Set(a)],[...new Set(o)]),transportType:r},await this.client.core.relayer.subscribe(s,{transportType:r}),await this.client.session.set(s,c),h&&await this.client.core.pairing.updateMetadata({topic:h,metadata:i.metadata}),c=this.client.session.get(s)),this.client.metadata.redirect?.linkMode&&i.metadata.redirect?.linkMode&&i.metadata.redirect?.universal&&t&&(this.client.core.addLinkModeSupportedApp(i.metadata.redirect.universal),this.client.session.update(s,{transportType:Q.link_mode})),x({auths:n,session:c})},O=e=>D(e).catch(e=>{this.client.logger.error(e,`Failed to process authenticate response`),S(W(`SESSION_SETTLEMENT_FAILED`,e?.message||`Failed to process authenticate response`))});this.events.once(w,E),this.events.once(T,O);let k;try{if(n){let e=ae(`wc_sessionAuthenticate`,v,C);this.client.core.history.set(h,e),k=ci(t,h,await this.client.core.crypto.encode(``,e,{type:2,encoding:Or}))}else await Promise.all([this.sendRequest({topic:h,method:`wc_sessionAuthenticate`,params:v,expiry:e.expiry,throwOnFailedPublish:!0,clientRpcId:C}),this.sendRequest({topic:h,method:`wc_sessionPropose`,params:y,expiry:$.wc_sessionPropose.req.ttl,throwOnFailedPublish:!0,clientRpcId:y.id})])}catch(e){throw this.events.off(w,E),this.events.off(T,O),e}return await this.setProposal(y.id,y),await this.setAuthRequest(C,{request:{...v,verifyContext:{}},pairingTopic:h,transportType:r}),{uri:k??g,response:b}},this.approveSessionAuthenticate=async e=>{let{id:t,auths:n}=e,r=this.client.core.eventClient.createEvent({properties:{topic:t.toString(),trace:[Uo.authenticated_session_approve_started]}});try{this.isInitialized()}catch(e){throw r.setError(Wo.no_internet_connection),e}let i=this.getPendingAuthRequest(t);if(!i)throw r.setError(Wo.authenticated_session_pending_request_not_found),Error(`Could not find pending auth request with id ${t}`);let a=i.transportType||Q.relay;a===Q.relay&&await this.confirmOnlineStateOrThrow();let o=i.requester.publicKey,s=await this.client.core.crypto.generateKeyPair(),c=Lr(o),l={type:1,receiverPublicKey:o,senderPublicKey:s},u=[],d=[];for(let e of n){if(!await lr({cacao:e,projectId:this.client.core.projectId})){r.setError(Wo.invalid_cacao);let e=W(`SESSION_SETTLEMENT_FAILED`,`Signature verification failed`);throw await this.sendError({id:t,topic:c,error:e,encodeOpts:l}),Error(e.message)}r.addTrace(Uo.cacaos_verified);let{p:n}=e,i=Er(n.resources),a=[sr(n.iss)],o=cr(n.iss);if(i){let e=wr(i),t=Tr(i);u.push(...e),a.push(...t)}for(let e of a)d.push(`${e}:${o}`)}let f=await this.client.core.crypto.generateSharedKey(s,o);r.addTrace(Uo.create_authenticated_session_topic);let p;if(u?.length>0){p={topic:f,acknowledged:!0,self:{publicKey:s,metadata:this.client.metadata},peer:{publicKey:o,metadata:i.requester.metadata},controller:o,expiry:G(gs),authentication:n,requiredNamespaces:{},optionalNamespaces:{},relay:{protocol:`irn`},pairingTopic:i.pairingTopic,namespaces:yi([...new Set(u)],[...new Set(d)]),transportType:a},r.addTrace(Uo.subscribing_authenticated_session_topic);try{await this.client.core.relayer.subscribe(f,{transportType:a})}catch(e){throw r.setError(Wo.subscribe_authenticated_session_topic_failure),e}r.addTrace(Uo.subscribe_authenticated_session_topic_success),await this.client.session.set(f,p),r.addTrace(Uo.store_authenticated_session),await this.client.core.pairing.updateMetadata({topic:i.pairingTopic,metadata:i.requester.metadata})}r.addTrace(Uo.publishing_authenticated_session_approve);try{await this.sendResult({topic:c,id:t,result:{cacaos:n,responder:{publicKey:s,metadata:this.client.metadata}},encodeOpts:l,throwOnFailedPublish:!0,appLink:this.getAppLinkIfEnabled(i.requester.metadata,a)})}catch(e){throw r.setError(Wo.authenticated_session_approve_publish_failure),e}return await this.client.auth.requests.delete(t,{message:`fulfilled`,code:0}),await this.client.core.pairing.activate({topic:i.pairingTopic}),this.client.core.eventClient.deleteEvent({eventId:r.eventId}),{session:p}},this.rejectSessionAuthenticate=async e=>{this.isInitialized();let{id:t,reason:n}=e,r=this.getPendingAuthRequest(t);if(!r)throw Error(`Could not find pending auth request with id ${t}`);r.transportType===Q.relay&&await this.confirmOnlineStateOrThrow();let i=r.requester.publicKey,a=await this.client.core.crypto.generateKeyPair(),o=Lr(i),s={type:1,receiverPublicKey:i,senderPublicKey:a};await this.sendError({id:t,topic:o,error:n,encodeOpts:s,rpcOpts:$.wc_sessionAuthenticate.reject,appLink:this.getAppLinkIfEnabled(r.requester.metadata,r.transportType)}),await this.client.auth.requests.delete(t,{message:`rejected`,code:0}),await this.deleteProposal(t)},this.formatAuthMessage=e=>{this.isInitialized();let{request:t,iss:n}=e;return dr(t,n)},this.processRelayMessageCache=()=>{setTimeout(async()=>{if(this.relayMessageCache.length!==0)for(;this.relayMessageCache.length>0;)try{let e=this.relayMessageCache.shift();e&&await this.onRelayMessage(e)}catch(e){this.client.logger.error(e)}},50)},this.cleanupDuplicatePairings=async e=>{if(e.pairingTopic)try{let t=this.client.core.pairing.pairings.get(e.pairingTopic),n=this.client.core.pairing.pairings.getAll().filter(n=>n.peerMetadata?.url&&n.peerMetadata?.url===e.peer.metadata.url&&n.topic&&n.topic!==t.topic);if(n.length===0)return;this.client.logger.info(`Cleaning up ${n.length} duplicate pairing(s)`),await Promise.all(n.map(e=>this.client.core.pairing.disconnect({topic:e.topic}))),this.client.logger.info(`Duplicate pairings clean up finished`)}catch(e){this.client.logger.error(e)}},this.deleteSession=async e=>{let{topic:t,expirerHasDeleted:n=!1,emitEvent:r=!0,id:i=0}=e,{self:a}=this.client.session.get(t);await this.client.core.relayer.unsubscribe(t),await this.client.session.delete(t,W(`USER_DISCONNECTED`)),this.addToRecentlyDeleted(t,`session`),this.client.core.crypto.keychain.has(a.publicKey)&&await this.client.core.crypto.deleteKeyPair(a.publicKey),this.client.core.crypto.keychain.has(t)&&await this.client.core.crypto.deleteSymKey(t),n||this.client.core.expirer.del(t),this.client.core.storage.removeItem(fs).catch(e=>this.client.logger.warn(e)),t===this.sessionRequestQueue.queue[0]?.topic&&(this.sessionRequestQueue.state=ys.idle),await Promise.all(this.getPendingSessionRequests().filter(e=>e.topic===t).map(e=>this.deletePendingSessionRequest(e.id,W(`USER_DISCONNECTED`)))),r&&this.client.events.emit(`session_delete`,{id:i,topic:t})},this.deleteProposal=async(e,t)=>{if(t)try{let t=this.client.proposal.get(e);this.client.core.eventClient.getEvent({topic:t.pairingTopic})?.setError(Ho.proposal_expired)}catch{}await Promise.all([this.client.proposal.delete(e,W(`USER_DISCONNECTED`)),t?Promise.resolve():this.client.core.expirer.del(e)]),this.addToRecentlyDeleted(e,`proposal`)},this.deletePendingSessionRequest=async(e,t,n=!1)=>{await Promise.all([this.client.pendingRequest.delete(e,t),n?Promise.resolve():this.client.core.expirer.del(e)]),this.addToRecentlyDeleted(e,`request`),this.sessionRequestQueue.queue=this.sessionRequestQueue.queue.filter(t=>t.id!==e),n&&(this.sessionRequestQueue.state=ys.idle,this.client.events.emit(`session_request_expire`,{id:e}))},this.deletePendingAuthRequest=async(e,t,n=!1)=>{await Promise.all([this.client.auth.requests.delete(e,t),n?Promise.resolve():this.client.core.expirer.del(e)])},this.setExpiry=async(e,t)=>{this.client.session.keys.includes(e)&&(this.client.core.expirer.set(e,t),await this.client.session.update(e,{expiry:t}))},this.setProposal=async(e,t)=>{this.client.core.expirer.set(e,G($.wc_sessionPropose.req.ttl)),await this.client.proposal.set(e,t)},this.setAuthRequest=async(e,t)=>{let{request:n,pairingTopic:r,transportType:i=Q.relay}=t;this.client.core.expirer.set(e,n.expiryTimestamp),await this.client.auth.requests.set(e,{authPayload:n.authPayload,requester:n.requester,expiryTimestamp:n.expiryTimestamp,id:e,pairingTopic:r,verifyContext:n.verifyContext,transportType:i})},this.setPendingSessionRequest=async e=>{let{id:t,topic:n,params:r,verifyContext:i}=e,a=r.request.expiryTimestamp||G($.wc_sessionRequest.req.ttl);this.client.core.expirer.set(t,a),await this.client.pendingRequest.set(t,{id:t,topic:n,params:r,verifyContext:i})},this.sendRequest=async e=>{let{topic:t,method:n,params:r,expiry:a,relayRpcId:o,clientRpcId:s,throwOnFailedPublish:c,appLink:l,tvf:u,publishOpts:d={}}=e,f=ae(n,r,s),p,m=!!l;try{let e=m?Or:J;p=await this.client.core.crypto.encode(t,f,{encoding:e})}catch(e){throw await this.cleanup(),this.client.logger.error(`sendRequest() -> core.crypto.encode() for topic ${t} failed`),e}let h;if(Ss.includes(n)){let e=Rr(JSON.stringify(f)),t=Rr(p);h=await this.client.core.verify.register({id:t,decryptedId:e})}let g={...$[n].req,...d};if(g.attestation=h,a&&(g.ttl=a),o&&(g.id=o),this.client.core.history.set(t,f),m){let e=ci(l,t,p);await i.Linking.openURL(e,this.client.name)}else g.tvf={...u,correlationId:f.id},c?(g.internal={...g.internal,throwOnFailedPublish:!0},await this.client.core.relayer.publish(t,p,g)):this.client.core.relayer.publish(t,p,g).catch(e=>this.client.logger.error(e));return f.id},this.sendProposeSession=async e=>{let{proposal:t,publishOpts:n}=e,r=ae(`wc_sessionPropose`,t,t.id);this.client.core.history.set(t.pairingTopic,r);let i=await this.client.core.crypto.encode(t.pairingTopic,r,{encoding:J}),a=Rr(JSON.stringify(r)),o=Rr(i),s=await this.client.core.verify.register({id:o,decryptedId:a});await this.client.core.relayer.publishCustom({payload:{pairingTopic:t.pairingTopic,sessionProposal:i},opts:{...n,publishMethod:`wc_proposeSession`,attestation:s}})},this.sendApproveSession=async e=>{let{sessionTopic:t,pairingProposalResponse:n,proposal:r,sessionSettleRequest:i,publishOpts:a}=e,o=de(r.id,n),s=await this.client.core.crypto.encode(r.pairingTopic,o,{encoding:J}),c=ae(`wc_sessionSettle`,i,a?.id),l=await this.client.core.crypto.encode(t,c,{encoding:J});this.client.core.history.set(t,c),await this.client.core.relayer.publishCustom({payload:{sessionTopic:t,pairingTopic:r.pairingTopic,sessionProposalResponse:s,sessionSettlementRequest:l},opts:{...a,publishMethod:`wc_approveSession`}})},this.sendResult=async e=>{let{id:t,topic:n,result:r,throwOnFailedPublish:a,encodeOpts:o,appLink:s}=e,c=de(t,r),l,u=s&&typeof i?.Linking<`u`;try{let e=u?Or:J;l=await this.client.core.crypto.encode(n,c,{...o||{},encoding:e})}catch(e){throw await this.cleanup(),this.client.logger.error(`sendResult() -> core.crypto.encode() for topic ${n} failed`),e}let d,f;try{d=await this.client.core.history.get(n,t);let e=d.request;try{f=this.getTVFParams(t,e.params,r)}catch(e){this.client.logger.warn(`sendResult() -> getTVFParams() failed: ${e?.message}`)}}catch(e){throw this.client.logger.error(`sendResult() -> history.get(${n}, ${t}) failed`),e}if(u){let e=ci(s,n,l);await i.Linking.openURL(e,this.client.name)}else{let e=$[d.request.method].res;e.tvf={...f,correlationId:t},a?(e.internal={...e.internal,throwOnFailedPublish:!0},await this.client.core.relayer.publish(n,l,e)):this.client.core.relayer.publish(n,l,e).catch(e=>this.client.logger.error(e))}await this.client.core.history.resolve(c)},this.sendError=async e=>{let{id:t,topic:n,error:r,encodeOpts:a,rpcOpts:o,appLink:s}=e,c=P(t,r),l,u=s&&typeof i?.Linking<`u`;try{let e=u?Or:J;l=await this.client.core.crypto.encode(n,c,{...a||{},encoding:e})}catch(e){throw await this.cleanup(),this.client.logger.error(`sendError() -> core.crypto.encode() for topic ${n} failed`),e}let d;try{d=await this.client.core.history.get(n,t)}catch(e){throw this.client.logger.error(`sendError() -> history.get(${n}, ${t}) failed`),e}if(u){let e=ci(s,n,l);await i.Linking.openURL(e,this.client.name)}else{let e=d.request.method,t=o||$[e].res;this.client.core.relayer.publish(n,l,t)}await this.client.core.history.resolve(c)},this.cleanup=async()=>{let e=[],t=[];this.client.session.getAll().forEach(t=>{let n=!1;pn(t.expiry)&&(n=!0),this.client.core.crypto.keychain.has(t.topic)||(n=!0),n&&e.push(t.topic)}),this.client.proposal.getAll().forEach(e=>{pn(e.expiryTimestamp)&&t.push(e.id)}),await Promise.all([...e.map(e=>this.deleteSession({topic:e})),...t.map(e=>this.deleteProposal(e))])},this.onProviderMessageEvent=async e=>{!this.initialized||this.relayMessageCache.length>0?this.relayMessageCache.push(e):await this.onRelayMessage(e)},this.onRelayEventRequest=async e=>{this.requestQueue.queue.push(e),await this.processRequestsQueue()},this.processRequestsQueue=async()=>{if(this.requestQueue.state===ys.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=ys.active;let e=this.requestQueue.queue.shift();if(e)try{await this.processRequest(e)}catch(e){this.client.logger.warn(e)}}this.requestQueue.state=ys.idle},this.processRequest=async e=>{let{topic:t,payload:n,attestation:r,transportType:i,encryptedId:a}=e,o=n.method;if(!this.shouldIgnorePairingRequest({topic:t,requestMethod:o}))switch(o){case`wc_sessionPropose`:return await this.onSessionProposeRequest({topic:t,payload:n,attestation:r,encryptedId:a});case`wc_sessionSettle`:return await this.onSessionSettleRequest(t,n);case`wc_sessionUpdate`:return await this.onSessionUpdateRequest(t,n);case`wc_sessionExtend`:return await this.onSessionExtendRequest(t,n);case`wc_sessionPing`:return await this.onSessionPingRequest(t,n);case`wc_sessionDelete`:return await this.onSessionDeleteRequest(t,n);case`wc_sessionRequest`:return await this.onSessionRequest({topic:t,payload:n,attestation:r,encryptedId:a,transportType:i});case`wc_sessionEvent`:return await this.onSessionEventRequest(t,n);case`wc_sessionAuthenticate`:return await this.onSessionAuthenticateRequest({topic:t,payload:n,attestation:r,encryptedId:a,transportType:i});default:return this.client.logger.info(`Unsupported request method ${o}`)}},this.onRelayEventResponse=async e=>{let{topic:t,payload:n,transportType:r}=e,i=(await this.client.core.history.get(t,n.id)).request.method;switch(i){case`wc_sessionPropose`:return this.onSessionProposeResponse(t,n,r);case`wc_sessionSettle`:return this.onSessionSettleResponse(t,n);case`wc_sessionUpdate`:return this.onSessionUpdateResponse(t,n);case`wc_sessionExtend`:return this.onSessionExtendResponse(t,n);case`wc_sessionPing`:return this.onSessionPingResponse(t,n);case`wc_sessionRequest`:return this.onSessionRequestResponse(t,n);case`wc_sessionAuthenticate`:return this.onSessionAuthenticateResponse(t,n);default:return this.client.logger.info(`Unsupported response method ${i}`)}},this.onRelayEventUnknownPayload=e=>{let{topic:t}=e,{message:n}=U(`MISSING_OR_INVALID`,`Decoded payload on topic ${t} is not identifiable as a JSON-RPC request or a response.`);throw Error(n)},this.shouldIgnorePairingRequest=e=>{let{topic:t,requestMethod:n}=e,r=this.expectedPairingMethodMap.get(t);return!r||r.includes(n)?!1:!!(r.includes(`wc_sessionAuthenticate`)&&this.client.events.listenerCount(`session_authenticate`)>0)},this.onSessionProposeRequest=async e=>{let{topic:t,payload:n,attestation:r,encryptedId:i}=e,{params:a,id:o}=n;try{let e=this.client.core.eventClient.getEvent({topic:t});this.client.events.listenerCount(`session_proposal`)===0&&e?.setError(Bo.proposal_listener_not_found),this.isValidConnect({...n.params});let s={id:o,pairingTopic:t,expiryTimestamp:a.expiryTimestamp||G($.wc_sessionPropose.req.ttl),attestation:r,encryptedId:i,...a};await this.setProposal(o,s);let c=await this.getVerifyContext({attestationId:r,hash:Rr(JSON.stringify(n)),encryptedId:i,metadata:s.proposer.metadata});e?.addTrace(zo.emit_session_proposal),this.client.events.emit(`session_proposal`,{id:o,params:s,verifyContext:c})}catch(e){await this.sendError({id:o,topic:t,error:e,rpcOpts:$.wc_sessionPropose.autoReject}),this.client.logger.error(e)}},this.onSessionProposeResponse=async(e,t,n)=>{let{id:r}=t;if(ce(t)){let{result:i}=t;this.client.logger.trace({type:`method`,method:`onSessionProposeResponse`,result:i});let a=this.client.proposal.get(r);this.client.logger.trace({type:`method`,method:`onSessionProposeResponse`,proposal:a});let o=a.proposer.publicKey;this.client.logger.trace({type:`method`,method:`onSessionProposeResponse`,selfPublicKey:o});let s=i.responderPublicKey;this.client.logger.trace({type:`method`,method:`onSessionProposeResponse`,peerPublicKey:s});let c=await this.client.core.crypto.generateSharedKey(o,s);this.pendingSessions.set(r,{sessionTopic:c,pairingTopic:e,proposalId:r,publicKey:o});let l=await this.client.core.relayer.subscribe(c,{transportType:n});this.client.logger.trace({type:`method`,method:`onSessionProposeResponse`,subscriptionId:l}),await this.client.core.pairing.activate({topic:e})}else if(le(t)){await this.deleteProposal(r);let e=K(`session_connect`,r);if(this.events.listenerCount(e)===0)throw Error(`emitting ${e} without any listeners, 954`);this.events.emit(e,{error:t.error})}},this.onSessionSettleRequest=async(e,t)=>{let{id:n,params:r}=t;try{this.isValidSessionSettleRequest(r);let{relay:n,controller:i,expiry:a,namespaces:o,sessionProperties:s,scopedProperties:c,sessionConfig:l,proposalRequestsResponses:u}=t.params,d=[...this.pendingSessions.values()].find(t=>t.sessionTopic===e);if(!d)return this.client.logger.error(`Pending session not found for topic ${e}`);let f=this.client.proposal.get(d.proposalId),p={topic:e,relay:n,expiry:a,namespaces:o,acknowledged:!0,pairingTopic:d.pairingTopic,requiredNamespaces:f.requiredNamespaces,optionalNamespaces:f.optionalNamespaces,controller:i.publicKey,self:{publicKey:d.publicKey,metadata:this.client.metadata},peer:{publicKey:i.publicKey,metadata:i.metadata},...s&&{sessionProperties:s},...c&&{scopedProperties:c},...l&&{sessionConfig:l},transportType:Q.relay,authentication:u?.authentication,walletPayResult:u?.walletPay};await this.client.session.set(p.topic,p),await this.setExpiry(p.topic,p.expiry),await this.client.core.pairing.updateMetadata({topic:d.pairingTopic,metadata:p.peer.metadata}),this.pendingSessions.delete(d.proposalId),this.deleteProposal(d.proposalId,!1),this.cleanupDuplicatePairings(p),await this.sendResult({id:t.id,topic:e,throwOnFailedPublish:!0,result:!0}),this.client.events.emit(`session_connect`,{session:p}),this.events.emit(K(`session_connect`,d.proposalId),{session:p})}catch(t){await this.sendError({id:n,topic:e,error:t}),this.client.logger.error(t)}},this.onSessionSettleResponse=async(e,t)=>{let{id:n}=t;ce(t)?(await this.client.session.update(e,{acknowledged:!0}),this.events.emit(K(`session_approve`,n),{})):le(t)&&(await this.deleteSession({topic:e,emitEvent:!1}),this.events.emit(K(`session_approve`,n),{error:t.error}))},this.onSessionUpdateRequest=async(e,t)=>{let{params:n,id:r}=t;try{let t=`${e}_session_update`,i=da.get(t);if(i&&this.isRequestOutOfSync(i,r)){this.client.logger.warn(`Discarding out of sync request - ${r}`),this.sendError({id:r,topic:e,error:W(`INVALID_UPDATE_REQUEST`)});return}await this.isValidUpdate({topic:e,...n});let a=this.client.session.get(e);if(a.peer.publicKey!==a.controller)throw W(`UNAUTHORIZED_UPDATE_REQUEST`);try{da.set(t,r),await this.client.session.update(e,{namespaces:n.namespaces}),await this.sendResult({id:r,topic:e,result:!0})}catch(e){throw da.delete(t),e}this.client.events.emit(`session_update`,{id:r,topic:e,params:n})}catch(t){await this.sendError({id:r,topic:e,error:t}),this.client.logger.error(t)}},this.isRequestOutOfSync=(e,t)=>t.toString().slice(0,-3)<e.toString().slice(0,-3),this.onSessionUpdateResponse=(e,t)=>{let{id:n}=t,r=K(`session_update`,n);if(this.events.listenerCount(r)===0)throw Error(`emitting ${r} without any listeners`);ce(t)?this.events.emit(K(`session_update`,n),{}):le(t)&&this.events.emit(K(`session_update`,n),{error:t.error})},this.onSessionExtendRequest=async(e,t)=>{let{id:n}=t;try{await this.isValidExtend({topic:e}),await this.setExpiry(e,G(gs)),await this.sendResult({id:n,topic:e,result:!0}),this.client.events.emit(`session_extend`,{id:n,topic:e})}catch(t){await this.sendError({id:n,topic:e,error:t}),this.client.logger.error(t)}},this.onSessionExtendResponse=(e,t)=>{let{id:n}=t,r=K(`session_extend`,n);if(this.events.listenerCount(r)===0)throw Error(`emitting ${r} without any listeners`);ce(t)?this.events.emit(K(`session_extend`,n),{}):le(t)&&this.events.emit(K(`session_extend`,n),{error:t.error})},this.onSessionPingRequest=async(e,t)=>{let{id:n}=t;try{this.isValidPing({topic:e}),await this.sendResult({id:n,topic:e,result:!0,throwOnFailedPublish:!0}),this.client.events.emit(`session_ping`,{id:n,topic:e})}catch(t){await this.sendError({id:n,topic:e,error:t}),this.client.logger.error(t)}},this.onSessionPingResponse=(e,t)=>{let{id:n}=t,r=K(`session_ping`,n);setTimeout(()=>{if(this.events.listenerCount(r)===0)throw Error(`emitting ${r} without any listeners 2176`);ce(t)?this.events.emit(K(`session_ping`,n),{}):le(t)&&this.events.emit(K(`session_ping`,n),{error:t.error})},500)},this.onSessionDeleteRequest=async(e,t)=>{let{id:n}=t;try{await this.isValidDisconnect({topic:e,reason:t.params}),this.cleanupPendingSentRequestsForTopic({topic:e,error:W(`USER_DISCONNECTED`)}),await this.deleteSession({topic:e,id:n})}catch(e){this.client.logger.error(e)}},this.onSessionRequest=async e=>{let{topic:t,payload:n,attestation:r,encryptedId:i,transportType:a}=e,{id:o,params:s}=n;try{await this.isValidRequest({topic:t,...s});let e=this.client.session.get(t),n={id:o,topic:t,params:s,verifyContext:await this.getVerifyContext({attestationId:r,hash:Rr(JSON.stringify(ae(`wc_sessionRequest`,s,o))),encryptedId:i,metadata:e.peer.metadata,transportType:a})};await this.setPendingSessionRequest(n),a===Q.link_mode&&e.peer.metadata.redirect?.universal&&this.client.core.addLinkModeSupportedApp(e.peer.metadata.redirect?.universal),this.client.signConfig?.disableRequestQueue?this.emitSessionRequest(n):(this.addSessionRequestToSessionRequestQueue(n),this.processSessionRequestQueue())}catch(e){await this.sendError({id:o,topic:t,error:e}),this.client.logger.error(e)}},this.onSessionRequestResponse=(e,t)=>{let{id:n}=t,r=K(`session_request`,n);if(this.events.listenerCount(r)===0)throw Error(`emitting ${r} without any listeners`);ce(t)?this.events.emit(K(`session_request`,n),{result:t.result}):le(t)&&this.events.emit(K(`session_request`,n),{error:t.error})},this.onSessionEventRequest=async(e,t)=>{let{id:n,params:r}=t;try{let t=`${e}_session_event_${r.event.name}`,i=da.get(t);if(i&&this.isRequestOutOfSync(i,n)){this.client.logger.info(`Discarding out of sync request - ${n}`);return}this.isValidEmit({topic:e,...r}),this.client.events.emit(`session_event`,{id:n,topic:e,params:r}),da.set(t,n)}catch(t){await this.sendError({id:n,topic:e,error:t}),this.client.logger.error(t)}},this.onSessionAuthenticateResponse=(e,t)=>{let{id:n}=t;this.client.logger.trace({type:`method`,method:`onSessionAuthenticateResponse`,topic:e,payload:t}),ce(t)?this.events.emit(K(`session_request`,n),{result:t.result}):le(t)&&this.events.emit(K(`session_request`,n),{error:t.error})},this.onSessionAuthenticateRequest=async e=>{let{topic:t,payload:n,attestation:r,encryptedId:i,transportType:a}=e;try{let{requester:e,authPayload:o,expiryTimestamp:s}=n.params,c=await this.getVerifyContext({attestationId:r,hash:Rr(JSON.stringify(n)),encryptedId:i,metadata:e.metadata,transportType:a}),l={requester:e,pairingTopic:t,id:n.id,authPayload:o,verifyContext:c,expiryTimestamp:s};await this.setAuthRequest(n.id,{request:l,pairingTopic:t,transportType:a}),a===Q.link_mode&&e.metadata.redirect?.universal&&this.client.core.addLinkModeSupportedApp(e.metadata.redirect.universal),this.client.events.emit(`session_authenticate`,{topic:t,params:n.params,id:n.id,verifyContext:c})}catch(e){this.client.logger.error(e);let r=n.params.requester.publicKey,i=await this.client.core.crypto.generateKeyPair(),o=this.getAppLinkIfEnabled(n.params.requester.metadata,a),s={type:1,receiverPublicKey:r,senderPublicKey:i};await this.sendError({id:n.id,topic:t,error:e,encodeOpts:s,rpcOpts:$.wc_sessionAuthenticate.autoReject,appLink:o})}},this.addSessionRequestToSessionRequestQueue=e=>{this.sessionRequestQueue.queue.push(e)},this.cleanupAfterResponse=e=>{this.deletePendingSessionRequest(e.response.id,{message:`fulfilled`,code:0}),setTimeout(()=>{this.sessionRequestQueue.state=ys.idle,this.processSessionRequestQueue()},(0,z.toMiliseconds)(this.requestQueueDelay))},this.cleanupPendingSentRequestsForTopic=({topic:e,error:t})=>{let n=this.client.core.history.pending;n.length>0&&n.filter(t=>t.topic===e&&t.request.method===`wc_sessionRequest`).forEach(e=>{this.events.emit(K(`session_request`,e.request.id),{error:t})})},this.processSessionRequestQueue=()=>{if(this.sessionRequestQueue.state===ys.active){this.client.logger.info(`session request queue is already active.`);return}let e=this.sessionRequestQueue.queue[0];if(!e){this.client.logger.info(`session request queue is empty.`);return}try{this.emitSessionRequest(e)}catch(e){this.client.logger.error(e)}},this.emitSessionRequest=e=>{if(this.emittedSessionRequests.has(e.id)){this.client.logger.warn({id:e.id},`Skipping emitting \`session_request\` event for duplicate request. id: ${e.id}`);return}this.sessionRequestQueue.state=ys.active,this.emittedSessionRequests.add(e.id),this.client.events.emit(`session_request`,e)},this.cleanupInProgress=!1,this.cleanupOrphanedSubscriptions=async()=>{let e=this.client.core.relayer.subscriber.topics;if(e.length===0)return;let t=new Set(this.client.session.keys),n=new Set(this.client.core.pairing.pairings.keys),r=new Set([...this.pendingSessions.values()].map(e=>e.sessionTopic)),i;if(this.client.auth.authKeys.keys.includes(Os)){let{responseTopic:e}=this.client.auth.authKeys.get(Os);i=e}for(let a of e)if(!t.has(a)&&!n.has(a)&&!r.has(a)&&a!==i){this.client.logger.info(`Cleaning up orphaned subscriber topic: ${a}`);try{await this.client.core.relayer.subscriber.unsubscribe(a)}catch(e){this.client.logger.warn(e,`Failed to clean up orphaned subscription: ${a}`)}}},this.onPairingCreated=e=>{if(e.methods&&this.expectedPairingMethodMap.set(e.topic,e.methods),e.active)return;let t=this.client.proposal.getAll().find(t=>t.pairingTopic===e.topic);t&&this.onSessionProposeRequest({topic:e.topic,payload:ae(`wc_sessionPropose`,{...t,requiredNamespaces:t.requiredNamespaces,optionalNamespaces:t.optionalNamespaces,relays:t.relays,proposer:t.proposer,sessionProperties:t.sessionProperties,scopedProperties:t.scopedProperties},t.id),attestation:t.attestation,encryptedId:t.encryptedId})},this.isValidConnect=async e=>{if(!Ui(e)){let{message:t}=U(`MISSING_OR_INVALID`,`connect() params: ${JSON.stringify(e)}`);throw Error(t)}let{pairingTopic:t,requiredNamespaces:n,optionalNamespaces:r,sessionProperties:i,scopedProperties:a,relays:o}=e;if(Y(t)||await this.isValidPairingTopic(t),!Vi(o,!0)){let{message:e}=U(`MISSING_OR_INVALID`,`connect() relays: ${o}`);throw Error(e)}if(n&&!Y(n)&&Si(n)!==0&&([`fatal`,`error`,`silent`].includes(this.client.logger.level)||this.client.logger.warn(`requiredNamespaces are deprecated and are automatically assigned to optionalNamespaces`),this.validateNamespaces(n,`requiredNamespaces`)),r&&!Y(r)&&Si(r)!==0&&this.validateNamespaces(r,`optionalNamespaces`),i&&!Y(i)&&this.validateSessionProps(i,`sessionProperties`),a&&!Y(a)){this.validateSessionProps(a,`scopedProperties`);let e=Object.keys(n||{}).concat(Object.keys(r||{}));if(!Object.keys(a).every(t=>e.includes(t.split(`:`)[0])))throw Error(`Scoped properties must be a subset of required/optional namespaces, received: ${JSON.stringify(a)}, required/optional namespaces: ${JSON.stringify(e)}`)}},this.validateNamespaces=(e,t)=>{let n=Ri(e,`connect()`,t);if(n)throw Error(n.message)},this.isValidApprove=async e=>{if(!Ui(e))throw Error(U(`MISSING_OR_INVALID`,`approve() params: ${e}`).message);let{id:t,namespaces:n,relayProtocol:r,sessionProperties:i,scopedProperties:a}=e;this.checkRecentlyDeleted(t),await this.isValidProposalId(t);let o=this.client.proposal.get(t),s=zi(n,`approve()`);if(s)throw Error(s.message);let c=Zi(o.requiredNamespaces,n,`approve()`);if(c)throw Error(c.message);if(!X(r,!0)){let{message:e}=U(`MISSING_OR_INVALID`,`approve() relayProtocol: ${r}`);throw Error(e)}if(i&&!Y(i)&&this.validateSessionProps(i,`sessionProperties`),a&&!Y(a)){this.validateSessionProps(a,`scopedProperties`);let e=new Set(Object.keys(n));if(!Object.keys(a).every(t=>e.has(t.split(`:`)[0])))throw Error(`Scoped properties must be a subset of approved namespaces, received: ${JSON.stringify(a)}, approved namespaces: ${Array.from(e).join(`, `)}`)}},this.isValidReject=async e=>{if(!Ui(e)){let{message:t}=U(`MISSING_OR_INVALID`,`reject() params: ${e}`);throw Error(t)}let{id:t,reason:n}=e;if(this.checkRecentlyDeleted(t),await this.isValidProposalId(t),!Wi(n)){let{message:e}=U(`MISSING_OR_INVALID`,`reject() reason: ${JSON.stringify(n)}`);throw Error(e)}},this.isValidSessionSettleRequest=e=>{if(!Ui(e)){let{message:t}=U(`MISSING_OR_INVALID`,`onSessionSettleRequest() params: ${e}`);throw Error(t)}let{relay:t,controller:n,namespaces:r,expiry:i}=e;if(!Bi(t)){let{message:e}=U(`MISSING_OR_INVALID`,`onSessionSettleRequest() relay protocol should be a string`);throw Error(e)}let a=Ai(n,`onSessionSettleRequest()`);if(a)throw Error(a.message);let o=zi(r,`onSessionSettleRequest()`);if(o)throw Error(o.message);if(pn(i)){let{message:e}=U(`EXPIRED`,`onSessionSettleRequest()`);throw Error(e)}},this.isValidUpdate=async e=>{if(!Ui(e)){let{message:t}=U(`MISSING_OR_INVALID`,`update() params: ${e}`);throw Error(t)}let{topic:t,namespaces:n}=e;this.checkRecentlyDeleted(t),await this.isValidSessionTopic(t);let r=this.client.session.get(t),i=zi(n,`update()`);if(i)throw Error(i.message);let a=Zi(r.requiredNamespaces,n,`update()`);if(a)throw Error(a.message)},this.isValidExtend=async e=>{if(!Ui(e)){let{message:t}=U(`MISSING_OR_INVALID`,`extend() params: ${e}`);throw Error(t)}let{topic:t}=e;this.checkRecentlyDeleted(t),await this.isValidSessionTopic(t)},this.isValidRequest=async e=>{if(!Ui(e)){let{message:t}=U(`MISSING_OR_INVALID`,`request() params: ${e}`);throw Error(t)}let{topic:t,request:n,chainId:r,expiry:i}=e;this.checkRecentlyDeleted(t),await this.isValidSessionTopic(t);let{namespaces:a}=this.client.session.get(t);if(!Ji(a,r)){let{message:e}=U(`MISSING_OR_INVALID`,`request() chainId: ${r}`);throw Error(e)}if(!Gi(n)){let{message:e}=U(`MISSING_OR_INVALID`,`request() ${JSON.stringify(n)}`);throw Error(e)}if(!Yi(a,r,n.method)){let{message:e}=U(`MISSING_OR_INVALID`,`request() method: ${n.method}`);throw Error(e)}this.validateRequestExpiry(i)},this.isValidRespond=async e=>{if(!Ui(e)){let{message:t}=U(`MISSING_OR_INVALID`,`respond() params: ${e}`);throw Error(t)}let{topic:t,response:n}=e;try{await this.isValidSessionTopic(t)}catch(t){throw e?.response?.id&&this.cleanupAfterResponse(e),t}if(!Ki(n)){let{message:e}=U(`MISSING_OR_INVALID`,`respond() response: ${JSON.stringify(n)}`);throw Error(e)}let r=this.client.pendingRequest.get(n.id);if(r.topic!==t){let{message:e}=U(`MISMATCHED_TOPIC`,`Request response topic mismatch. reqId: ${n.id}, expected topic: ${r.topic}, received topic: ${t}`);throw Error(e)}},this.isValidPing=async e=>{if(!Ui(e)){let{message:t}=U(`MISSING_OR_INVALID`,`ping() params: ${e}`);throw Error(t)}let{topic:t}=e;await this.isValidSessionOrPairingTopic(t)},this.isValidEmit=async e=>{if(!Ui(e)){let{message:t}=U(`MISSING_OR_INVALID`,`emit() params: ${e}`);throw Error(t)}let{topic:t,event:n,chainId:r}=e;await this.isValidSessionTopic(t);let{namespaces:i}=this.client.session.get(t);if(!Ji(i,r)){let{message:e}=U(`MISSING_OR_INVALID`,`emit() chainId: ${r}`);throw Error(e)}if(!qi(n)){let{message:e}=U(`MISSING_OR_INVALID`,`emit() event: ${JSON.stringify(n)}`);throw Error(e)}if(!Xi(i,r,n.name)){let{message:e}=U(`MISSING_OR_INVALID`,`emit() event: ${JSON.stringify(n)}`);throw Error(e)}},this.isValidDisconnect=async e=>{if(!Ui(e)){let{message:t}=U(`MISSING_OR_INVALID`,`disconnect() params: ${e}`);throw Error(t)}let{topic:t}=e;await this.isValidSessionOrPairingTopic(t)},this.isValidAuthenticate=e=>{let{chains:t,uri:n,domain:r,nonce:i}=e;if(!Array.isArray(t)||t.length===0)throw Error(`chains is required and must be a non-empty array`);if(!X(n,!1))throw Error(`uri is required parameter`);if(!X(r,!1))throw Error(`domain is required parameter`);if(!X(i,!1))throw Error(`nonce is required parameter`);if([...new Set(t.map(e=>Rt(e).namespace))].length>1)throw Error(`Multi-namespace requests are not supported. Please request single namespace only.`);let{namespace:a}=Rt(t[0]);if(a!==`eip155`)throw Error(`Only eip155 namespace is supported for authenticated sessions. Please use .connect() for non-eip155 chains.`)},this.getVerifyContext=async e=>{let{attestationId:t,hash:n,encryptedId:r,metadata:i,transportType:a}=e,o={verified:{verifyUrl:i.verifyUrl||`https://verify.walletconnect.org`,validation:`UNKNOWN`,origin:i.url||``}};try{if(a===Q.link_mode){let e=this.getAppLinkIfEnabled(i,a);return o.verified.validation=e&&new URL(e).origin===new URL(i.url).origin?`VALID`:`INVALID`,o}let e=await this.client.core.verify.resolve({attestationId:t,hash:n,encryptedId:r,verifyUrl:i.verifyUrl});e&&(o.verified.origin=e.origin,o.verified.isScam=e.isScam,o.verified.validation=e.origin===new URL(i.url).origin?`VALID`:`INVALID`)}catch(e){this.client.logger.warn(e)}return this.client.logger.debug(`Verify context: ${JSON.stringify(o)}`),o},this.validateSessionProps=(e,t)=>{Object.values(e).forEach((n,r)=>{if(n==null){let{message:i}=U(`MISSING_OR_INVALID`,`${t} must contain an existing value for each key. Received: ${n} for key ${Object.keys(e)[r]}`);throw Error(i)}})},this.getPendingAuthRequest=e=>{let t=this.client.auth.requests.get(e);return typeof t==`object`?t:void 0},this.addToRecentlyDeleted=(e,t)=>{if(this.recentlyDeletedMap.set(e,t),this.recentlyDeletedMap.size>=this.recentlyDeletedLimit){let e=0,t=this.recentlyDeletedLimit/2;for(let n of this.recentlyDeletedMap.keys()){if(e++>=t)break;this.recentlyDeletedMap.delete(n)}}},this.checkRecentlyDeleted=e=>{let t=this.recentlyDeletedMap.get(e);if(t){let{message:n}=U(`MISSING_OR_INVALID`,`Record was recently deleted - ${t}: ${e}`);throw Error(n)}},this.isLinkModeEnabled=(e,t)=>!e||t!==Q.link_mode?!1:this.client.metadata?.redirect?.linkMode===!0&&this.client.metadata?.redirect?.universal!==void 0&&this.client.metadata?.redirect?.universal!==``&&e?.redirect?.universal!==void 0&&e?.redirect?.universal!==``&&e?.redirect?.linkMode===!0&&this.client.core.linkModeSupportedApps.includes(e.redirect.universal)&&typeof i?.Linking<`u`,this.getAppLinkIfEnabled=(e,t)=>this.isLinkModeEnabled(e,t)?e?.redirect?.universal:void 0,this.handleLinkModeMessage=({url:e})=>{if(!e||!e.includes(`wc_ev`)||!e.includes(`topic`))return;let t=yn(e,`topic`)||``,n=decodeURIComponent(yn(e,`wc_ev`)||``),r=this.client.session.keys.includes(t);r&&this.client.session.update(t,{transportType:Q.link_mode}),this.client.core.dispatchEnvelope({topic:t,message:n,sessionExists:r})},this.registerLinkModeListeners=async()=>{if(xn()||Wt()&&this.client.metadata.redirect?.linkMode){let e=i?.Linking;if(typeof e<`u`){e.addEventListener(`url`,this.handleLinkModeMessage,this.client.name);let t=await e.getInitialURL();t&&setTimeout(()=>{this.handleLinkModeMessage({url:t})},50)}}},this.getTVFApproveParams=e=>{try{return{approvedChains:ui(e.namespaces),approvedMethods:di(e.namespaces),approvedEvents:fi(e.namespaces),sessionProperties:e.sessionProperties,scopedProperties:e.scopedProperties}}catch(e){return this.client.logger.warn(e,`Error getting TVF approve params`),{}}},this.getTVFParams=(e,t,n)=>{if(!t.request?.method)return{};let r={correlationId:e,rpcMethods:[t.request.method],chainId:t.chainId};try{r.txHashes=this.extractTxHashesFromResult(t.request,n),r.contractAddresses=this.isValidContractData(t.request.params)?[t.request.params?.[0]?.to]:[]}catch(e){this.client.logger.warn(e,`Error getting TVF params`)}return r},this.isValidContractData=e=>{if(!e)return!1;try{let t=e?.data||e?.[0]?.data;if(!t.startsWith(`0x`))return!1;let n=t.slice(2);return/^[0-9a-fA-F]*$/.test(n)?n.length%2==0:!1}catch{}return!1},this.extractTxHashesFromResult=(e,t)=>{try{if(!t)return[];let n=e.method,r=bs[n];if(n===`sui_signTransaction`)return[Rn(t.transactionBytes)];if(n===`near_signTransaction`)return[zn(t)];if(n===`near_signTransactions`)return t.map(e=>zn(e));if(n===`xrpl_signTransactionFor`||n===`xrpl_signTransaction`)return[t.tx_json?.hash];if(n===`polkadot_signTransaction`)return[ba({transaction:e.params.transactionPayload,signature:t.signature})];if(n===`algo_signTxn`)return xi(t)?t.map(e=>Vn(e)):[Vn(t)];if(n===`cosmos_signDirect`)return[Un(t)];if(n===`stellar_signXDR`)return[$n(t.signedXDR,e.params?.chain)];if(n===`wallet_sendCalls`)return er(t);if(n===`canton_prepareSignExecute`)return Ca(e.params,t);if(typeof t==`string`)return[t];let i=t[r.key];if(xi(i))return n===`solana_signAllTransactions`?i.map(e=>Ln(e)):i;if(typeof i==`string`)return[i]}catch(e){this.client.logger.warn(e,`Error extracting tx hashes from result`)}return[]}}async processPendingMessageEvents(){try{let e=this.client.session.keys,t=this.client.core.relayer.messages.getWithoutAck(e);for(let[e,n]of Object.entries(t))for(let t of n)try{await this.onProviderMessageEvent({topic:e,message:t,publishedAt:Date.now()})}catch{this.client.logger.warn(`Error processing pending message event for topic: ${e}, message: ${t}`)}}catch(e){this.client.logger.warn(e,`processPendingMessageEvents failed`)}}isInitialized(){if(!this.initialized){let{message:e}=U(`NOT_INITIALIZED`,this.name);throw Error(e)}}async confirmOnlineStateOrThrow(){await this.client.core.relayer.confirmOnlineStateOrThrow()}registerRelayerEvents(){this.client.core.relayer.on(Z.message,e=>{this.onProviderMessageEvent(e)})}async onRelayMessage(e){let{topic:t,message:n,attestation:r,transportType:i}=e,{publicKey:a}=this.client.auth.authKeys.keys.includes(Os)?this.client.auth.authKeys.get(Os):{publicKey:void 0};try{try{if(i!==Q.link_mode&&this.client.core.crypto.getPayloadType(n,`base64url`)===2){this.client.logger.warn(`onRelayMessage() -> non-link mode TYPE_2 payload ignored: ${n}`);return}}catch{}let e=await this.client.core.crypto.decode(t,n,{receiverPublicKey:a,encoding:i===Q.link_mode?Or:J});re(e)?(this.client.core.history.set(t,e),await this.onRelayEventRequest({topic:t,payload:e,attestation:r,transportType:i,encryptedId:Rr(n)})):M(e)?(await this.client.core.history.resolve(e),await this.onRelayEventResponse({topic:t,payload:e,transportType:i}),this.client.core.history.delete(t,e.id)):(this.client.logger.error(`onRelayMessage() -> unknown payload: ${JSON.stringify(e)}`),await this.onRelayEventUnknownPayload({topic:t,payload:e,transportType:i})),await this.client.core.relayer.messages.ack(t,n)}catch(e){this.client.logger.error(`onRelayMessage() -> failed to process an inbound message: ${n}`),this.client.logger.error(e?.message)}}registerExpirerEvents(){this.client.core.expirer.on(jo.expired,async e=>{let{topic:t,id:n}=fn(e.target);if(n&&this.client.pendingRequest.keys.includes(n))return await this.deletePendingSessionRequest(n,U(`EXPIRED`),!0);if(n&&this.client.auth.requests.keys.includes(n))return await this.deletePendingAuthRequest(n,U(`EXPIRED`),!0);t?this.client.session.keys.includes(t)&&(await this.deleteSession({topic:t,expirerHasDeleted:!0}),this.client.events.emit(`session_expire`,{topic:t})):n&&(await this.deleteProposal(n,!0),this.client.events.emit(`proposal_expire`,{id:n}))})}registerSubscriptionCleanup(){this.client.core.heartbeat.on(`heartbeat_pulse`,async()=>{if(!this.cleanupInProgress){this.cleanupInProgress=!0;try{await this.cleanupOrphanedSubscriptions()}catch(e){this.client.logger.warn(e)}finally{this.cleanupInProgress=!1}}})}registerPairingEvents(){this.client.core.pairing.events.on(Do.create,e=>this.onPairingCreated(e)),this.client.core.pairing.events.on(Do.delete,e=>{this.addToRecentlyDeleted(e.topic,`pairing`)})}isValidPairingTopic(e){if(!X(e,!1)){let{message:t}=U(`MISSING_OR_INVALID`,`pairing topic should be a string: ${e}`);throw Error(t)}if(!this.client.core.pairing.pairings.keys.includes(e)){let{message:t}=U(`NO_MATCHING_KEY`,`pairing topic doesn't exist: ${e}`);throw Error(t)}if(pn(this.client.core.pairing.pairings.get(e).expiry)){let{message:t}=U(`EXPIRED`,`pairing topic: ${e}`);throw Error(t)}}async isValidSessionTopic(e){if(!X(e,!1)){let{message:t}=U(`MISSING_OR_INVALID`,`session topic should be a string: ${e}`);throw Error(t)}if(this.checkRecentlyDeleted(e),!this.client.session.keys.includes(e)){let{message:t}=U(`NO_MATCHING_KEY`,`session topic doesn't exist: ${e}`);throw Error(t)}if(pn(this.client.session.get(e).expiry)){await this.deleteSession({topic:e});let{message:t}=U(`EXPIRED`,`session topic: ${e}`);throw Error(t)}if(!this.client.core.crypto.keychain.has(e)){let{message:t}=U(`MISSING_OR_INVALID`,`session topic does not exist in keychain: ${e}`);throw await this.deleteSession({topic:e}),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(X(e,!1)){let{message:t}=U(`NO_MATCHING_KEY`,`session or pairing topic doesn't exist: ${e}`);throw Error(t)}else{let{message:t}=U(`MISSING_OR_INVALID`,`session or pairing topic should be a string: ${e}`);throw Error(t)}}async isValidProposalId(e){if(!Hi(e)){let{message:t}=U(`MISSING_OR_INVALID`,`proposal id should be a number: ${e}`);throw Error(t)}if(!this.client.proposal.keys.includes(e)){let{message:t}=U(`NO_MATCHING_KEY`,`proposal id doesn't exist: ${e}`);throw Error(t)}if(pn(this.client.proposal.get(e).expiryTimestamp)){await this.deleteProposal(e);let{message:t}=U(`EXPIRED`,`proposal id: ${e}`);throw Error(t)}}validateRequestExpiry(e){if(e&&!ta(e,vs)){let{message:t}=U(`MISSING_OR_INVALID`,`request() expiry: ${e}. Expiry must be a number (in seconds) between ${vs.min} and ${vs.max}`);throw Error(t)}}},As=class extends ts{constructor(e,t){super(e,t,ps,us),this.core=e,this.logger=t}},js=class extends ts{constructor(e,t){super(e,t,hs,us),this.core=e,this.logger=t}},Ms=class extends ts{constructor(e,t){super(e,t,xs,us,e=>e.id),this.core=e,this.logger=t}},Ns=class extends ts{constructor(e,t){super(e,t,ws,Ds,()=>Os),this.core=e,this.logger=t}},Ps=class extends ts{constructor(e,t){super(e,t,Ts,Ds),this.core=e,this.logger=t}},Fs=class extends ts{constructor(e,t){super(e,t,Es,Ds,e=>e.id),this.core=e,this.logger=t}},Is=class{constructor(e,t){this.core=e,this.logger=t,this.authKeys=new Ns(this.core,this.logger),this.pairingTopics=new Ps(this.core,this.logger),this.requests=new Fs(this.core,this.logger)}async init(){await this.authKeys.init(),await this.pairingTopics.init(),await this.requests.init()}},Ls=class e extends st{constructor(e){super(e),this.protocol=`wc`,this.version=2,this.name=ds.name,this.events=new Oe.EventEmitter,this.on=(e,t)=>this.events.on(e,t),this.once=(e,t)=>this.events.once(e,t),this.off=(e,t)=>this.events.off(e,t),this.removeListener=(e,t)=>this.events.removeListener(e,t),this.removeAllListeners=e=>this.events.removeAllListeners(e),this.connect=async e=>{try{return await this.engine.connect(e)}catch(e){throw this.logger.error(e.message),e}},this.pair=async e=>{try{return await this.engine.pair(e)}catch(e){throw this.logger.error(e.message),e}},this.approve=async e=>{try{return await this.engine.approve(e)}catch(e){throw this.logger.error(e.message),e}},this.reject=async e=>{try{return await this.engine.reject(e)}catch(e){throw this.logger.error(e.message),e}},this.update=async e=>{try{return await this.engine.update(e)}catch(e){throw this.logger.error(e.message),e}},this.extend=async e=>{try{return await this.engine.extend(e)}catch(e){throw this.logger.error(e.message),e}},this.request=async e=>{try{return await this.engine.request(e)}catch(e){throw this.logger.error(e.message),e}},this.respond=async e=>{try{return await this.engine.respond(e)}catch(e){throw this.logger.error(e.message),e}},this.ping=async e=>{try{return await this.engine.ping(e)}catch(e){throw this.logger.error(e.message),e}},this.emit=async e=>{try{return await this.engine.emit(e)}catch(e){throw this.logger.error(e.message),e}},this.disconnect=async e=>{try{return await this.engine.disconnect(e)}catch(e){throw this.logger.error(e.message),e}},this.find=e=>{try{return this.engine.find(e)}catch(e){throw this.logger.error(e.message),e}},this.getPendingSessionRequests=()=>{try{return this.engine.getPendingSessionRequests()}catch(e){throw this.logger.error(e.message),e}},this.authenticate=async(e,t)=>{try{return await this.engine.authenticate(e,t)}catch(e){throw this.logger.error(e.message),e}},this.formatAuthMessage=e=>{try{return this.engine.formatAuthMessage(e)}catch(e){throw this.logger.error(e.message),e}},this.approveSessionAuthenticate=async e=>{try{return await this.engine.approveSessionAuthenticate(e)}catch(e){throw this.logger.error(e.message),e}},this.rejectSessionAuthenticate=async e=>{try{return await this.engine.rejectSessionAuthenticate(e)}catch(e){throw this.logger.error(e.message),e}},this.name=e?.name||ds.name,this.metadata=Zt(e?.metadata),this.signConfig=e?.signConfig;let t=wa({logger:e?.logger||ds.logger,name:this.name});this.logger=t,this.core=e?.core||new cs(e),this.session=new js(this.core,this.logger),this.proposal=new As(this.core,this.logger),this.pendingRequest=new Ms(this.core,this.logger),this.engine=new ks(this),this.auth=new Is(this.core,this.logger)}static async init(t){let n=new e(t);return await n.initialize(),n}get context(){return ve(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`)}catch(e){throw this.logger.info(`SignClient Initialization Failure`),this.logger.error(e.message),e}}};export{Ls as SignClient};
10
+ Approved: ${i.toString()}`))}),o.forEach(e=>{r||(rn(i[e].methods,a[e].methods)?rn(i[e].events,a[e].events)||(r=U(`NON_CONFORMING_NAMESPACES`,`${n} namespaces events don't satisfy namespace events for ${e}`)):r=U(`NON_CONFORMING_NAMESPACES`,`${n} namespaces methods don't satisfy namespace methods for ${e}`))}),r}function Qi(e){let t={};return Object.keys(e).forEach(n=>{n.includes(`:`)?t[n]=e[n]:e[n].chains?.forEach(r=>{t[r]={methods:e[n].methods,events:e[n].events}})}),t}function $i(e){return[...new Set(e.map(e=>e.includes(`:`)?e.split(`:`)[0]:e))]}function ea(e){let t={};return Object.keys(e).forEach(n=>{n.includes(`:`)?t[n]=e[n]:li(e[n].accounts)?.forEach(r=>{t[r]={accounts:e[n].accounts.filter(e=>e.includes(`${r}:`)),methods:e[n].methods,events:e[n].events}})}),t}function ta(e,t){return Ci(e,!1)&&e<=t.max&&e>=t.min}function na(){let e=Jt();return new Promise(t=>{switch(e){case Ht.browser:t(ra());break;case Ht.reactNative:t(ia());break;case Ht.node:t(aa());break;default:t(!0)}})}function ra(){return qt()&&navigator?.onLine}async function ia(){return Wt()&&typeof i<`u`&&i?.NetInfo?(await i?.NetInfo.fetch())?.isConnected:!0}function aa(){return!0}function oa(e){switch(Jt()){case Ht.browser:sa(e);break;case Ht.reactNative:ca(e);break;case Ht.node:}}function sa(e){!Wt()&&qt()&&(window.addEventListener(`online`,()=>e(!0)),window.addEventListener(`offline`,()=>e(!1)))}function ca(e){Wt()&&typeof i<`u`&&i?.NetInfo&&i?.NetInfo.addEventListener(t=>e(t?.isConnected))}function la(){return qt()&&(0,ke.getDocument)()?(0,ke.getDocument)()?.visibilityState===`visible`:!0}var ua={},da=class{static get(e){return ua[e]}static set(e,t){ua[e]=t}static delete(e){delete ua[e]}};function fa(e){let t=v.decode(e);if(t.length<33)throw Error(`Too short to contain a public key`);return t.slice(1,33)}function pa({publicKey:e,signature:t,payload:n}){let r=ha(n.method),i=128|parseInt(n.version?.toString()||`4`),a=_a(n.address),o=n.era===`00`?new Uint8Array([0]):ha(n.era);if(o.length!==1&&o.length!==2)throw Error(`Invalid era length`);let s=parseInt(n.nonce,16),c=new Uint8Array([s&255,s>>8&255]),l=ya(BigInt(`0x${ga(n.tip)}`)),u=new Uint8Array([0,...e,a,...t,...o,...c,...l,...r]),d=va(u.length+1);return new Uint8Array([...d,i,...u])}function ma(e){let t=ha(e),n=(0,It.blake2b)(t,void 0,32);return`0x`+R(n,`base16`)}function ha(e){return new Uint8Array(e.replace(/^0x/,``).match(/.{1,2}/g).map(e=>parseInt(e,16)))}function ga(e){return e.startsWith(`0x`)?e.slice(2):e}function _a(e){let t=v.decode(e)[0];return t===42?0:t===60?2:1}function va(e){if(e<64)return new Uint8Array([e<<2]);if(e<16384){let t=e<<2|1;return new Uint8Array([t&255,t>>8&255])}if(e<1<<30){let t=e<<2|2;return new Uint8Array([t&255,t>>8&255,t>>16&255,t>>24&255])}throw Error(`Compact encoding > 2^30 not supported`)}function ya(e){if(e<1n<<6n)return new Uint8Array([Number(e<<2n)]);if(e<1n<<14n){let t=e<<2n|1n;return new Uint8Array([Number(t&255n),Number(t>>8n&255n)])}if(e<1n<<30n){let t=e<<2n|2n;return new Uint8Array([Number(t&255n),Number(t>>8n&255n),Number(t>>16n&255n),Number(t>>24n&255n)])}throw Error(`BigInt compact encoding not supported > 2^30`)}function ba(e){let t=ha(e.signature),n=pa({publicKey:fa(e.transaction.address),signature:t,payload:e.transaction});return ma(R(n,`base16`))}var xa=new Set([`TransferFactory_Transfer`,`DelegateProxy_TransferFactory_Transfer`]);function Sa(e){let t=e?.commands;if(!Array.isArray(t))return[];let n=[];for(let e of t){let t=e?.ExerciseCommand;if(!t||!xa.has(t.choice))continue;let r=t.choiceArgument?.transfer;!r?.amount||!r?.instrumentId?.id||n.push({amount:String(r.amount),instrumentId:String(r.instrumentId.id)})}return n}function Ca(e,t){let n=t?.payload?.updateId;if(!n)return[];let r=Sa(e);return r.length===0?[String(n)]:r.map(e=>`${n}:${e.amount}:${e.instrumentId}`)}function wa({logger:e,name:t}){let n=typeof e==`string`?we({opts:{level:e,name:t}}).logger:e;return n.level=typeof e==`string`?e:e.level,n}function Ta(e,t){return e===t||Number.isNaN(e)&&Number.isNaN(t)}function Ea(e){return Object.getOwnPropertySymbols(e).filter(t=>Object.prototype.propertyIsEnumerable.call(e,t))}function Da(e){return e==null?e===void 0?`[object Undefined]`:`[object Null]`:Object.prototype.toString.call(e)}var Oa=`[object RegExp]`,ka=`[object String]`,Aa=`[object Number]`,ja=`[object Boolean]`,Ma=`[object Symbol]`,Na=`[object Date]`,Pa=`[object Map]`,Fa=`[object Set]`,Ia=`[object Array]`,La=`[object Function]`,Ra=`[object ArrayBuffer]`,za=`[object Object]`,Ba=`[object Error]`,Va=`[object DataView]`,Ha=`[object Uint8Array]`,Ua=`[object Uint8ClampedArray]`,Wa=`[object Uint16Array]`,Ga=`[object Uint32Array]`,Ka=`[object BigUint64Array]`,qa=`[object Int8Array]`,Ja=`[object Int16Array]`,Ya=`[object Int32Array]`,Xa=`[object BigInt64Array]`,Za=`[object Float32Array]`,Qa=`[object Float64Array]`;function $a(e){if(!e||typeof e!=`object`)return!1;let t=Object.getPrototypeOf(e);return t!==null&&t!==Object.prototype&&Object.getPrototypeOf(t)!==null?!1:Object.prototype.toString.call(e)===`[object Object]`}b();function eo(e,t,n){return to(e,t,void 0,void 0,void 0,void 0,n)}function to(e,t,n,r,i,a,o){let s=o(e,t,n,r,i,a);if(s!==void 0)return s;if(typeof e==typeof t)switch(typeof e){case`bigint`:case`string`:case`boolean`:case`symbol`:case`undefined`:return e===t;case`number`:return e===t||Object.is(e,t);case`function`:return e===t;case`object`:return no(e,t,a,o)}return no(e,t,a,o)}function no(e,t,n,r){if(Object.is(e,t))return!0;let i=Da(e),a=Da(t);if(i===`[object Arguments]`&&(i=za),a===`[object Arguments]`&&(a=za),i!==a)return!1;switch(i){case ka:return e.toString()===t.toString();case Aa:return Ta(e.valueOf(),t.valueOf());case ja:case Na:case Ma:return Object.is(e.valueOf(),t.valueOf());case Oa:return e.source===t.source&&e.flags===t.flags;case La:return e===t}n??=new Map;let o=n.get(e),s=n.get(t);if(o!=null&&s!=null)return o===t;n.set(e,t),n.set(t,e);try{switch(i){case Pa:if(e.size!==t.size)return!1;for(let[i,a]of e.entries())if(!t.has(i)||!to(a,t.get(i),i,e,t,n,r))return!1;return!0;case Fa:{if(e.size!==t.size)return!1;let i=Array.from(e.values()),a=Array.from(t.values());for(let o=0;o<i.length;o++){let s=i[o],c=a.findIndex(i=>to(s,i,void 0,e,t,n,r));if(c===-1)return!1;a.splice(c,1)}return!0}case Ia:case Ha:case Ua:case Wa:case Ga:case Ka:case qa:case Ja:case Ya:case Xa:case Za:case Qa:if(x!==void 0&&x.isBuffer(e)!==x.isBuffer(t)||e.length!==t.length)return!1;for(let i=0;i<e.length;i++)if(!to(e[i],t[i],i,e,t,n,r))return!1;return!0;case Ra:return e.byteLength===t.byteLength&&no(new Uint8Array(e),new Uint8Array(t),n,r);case Va:return e.byteLength!==t.byteLength||e.byteOffset!==t.byteOffset?!1:no(new Uint8Array(e),new Uint8Array(t),n,r);case Ba:return e.name===t.name&&e.message===t.message;case za:{if(!(no(e.constructor,t.constructor,n,r)||$a(e)&&$a(t)))return!1;let i=[...Object.keys(e),...Ea(e)],a=[...Object.keys(t),...Ea(t)];if(i.length!==a.length)return!1;for(let a=0;a<i.length;a++){let o=i[a],s=e[o];if(!Object.hasOwn(t,o))return!1;let c=t[o];if(!to(s,c,o,e,t,n,r))return!1}return!0}default:return!1}}finally{n.delete(e),n.delete(t)}}function ro(){}function io(e,t){return eo(e,t,ro)}n();var ao=`core`,oo=`wc@2:${ao}:`,so={name:ao,logger:`error`},co={database:`:memory:`},lo=`crypto`,uo=`client_ed25519_seed`,fo=z.ONE_DAY,po=`keychain`,mo=`messages`,ho=z.SIX_HOURS,go=`publisher`,_o=`relayer`,Z={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`},vo={payload:`payload`,connect:`connect`,disconnect:`disconnect`,error:`error`},yo=.1,bo=`2.26.0`,Q={link_mode:`link_mode`,relay:`relay`},xo={inbound:`inbound`,outbound:`outbound`},So=`WALLETCONNECT_CLIENT_ID`,Co={created:`subscription_created`,deleted:`subscription_deleted`,expired:`subscription_expired`,disabled:`subscription_disabled`,sync:`subscription_sync`,resubscribed:`subscription_resubscribed`},wo=`subscription`;z.FIVE_SECONDS*1e3;var To=`pairing`,Eo={wc_pairingDelete:{req:{ttl:z.ONE_DAY,prompt:!1,tag:1e3},res:{ttl:z.ONE_DAY,prompt:!1,tag:1001}},wc_pairingPing:{req:{ttl:z.THIRTY_SECONDS,prompt:!1,tag:1002},res:{ttl:z.THIRTY_SECONDS,prompt:!1,tag:1003}},unregistered_method:{req:{ttl:z.ONE_DAY,prompt:!1,tag:0},res:{ttl:z.ONE_DAY,prompt:!1,tag:0}}},Do={create:`pairing_create`,expire:`pairing_expire`,delete:`pairing_delete`,ping:`pairing_ping`},Oo={created:`history_created`,updated:`history_updated`,deleted:`history_deleted`,sync:`history_sync`},ko=`history`,Ao=`expirer`,jo={created:`expirer_created`,deleted:`expirer_deleted`,expired:`expirer_expired`,sync:`expirer_sync`},Mo=`verify-api`,No=`https://verify.walletconnect.com`,Po=`https://verify.walletconnect.org`,Fo=`${Po}/v3`,Io=[No,Po],Lo=`echo`,Ro=`https://echo.walletconnect.com`,zo={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`},Bo={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`},Vo={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`,session_request_response_started:`session_request_response_started`,session_request_response_validation_success:`session_request_response_validation_success`,session_request_response_publish_started:`session_request_response_publish_started`},Ho={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`,session_request_response_validation_failure:`session_request_response_validation_failure`,session_request_response_publish_failure:`session_request_response_publish_failure`},Uo={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`},Wo={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`},Go=.1,Ko=`event-client`,qo=`https://pulse.walletconnect.org/batch`,Jo=class{constructor(e,t){this.core=e,this.logger=t,this.keychain=new Map,this.name=po,this.version=`0.3`,this.initialized=!1,this.storagePrefix=oo,this.init=async()=>{if(!this.initialized){let e=await this.getKeyChain();typeof e<`u`&&(this.keychain=e),this.initialized=!0}},this.has=e=>(this.isInitialized(),this.keychain.has(e)),this.set=async(e,t)=>{this.isInitialized(),this.keychain.set(e,t),await this.persist()},this.get=e=>{this.isInitialized();let t=this.keychain.get(e);if(typeof t>`u`){let{message:t}=U(`NO_MATCHING_KEY`,`${this.name}: ${e}`);throw Error(t)}return t},this.del=async e=>{this.isInitialized(),this.keychain.delete(e),await this.persist()},this.core=e,this.logger=be(t,this.name)}get context(){return ve(this.logger)}get storageKey(){return this.storagePrefix+this.version+this.core.customStoragePrefix+`//`+this.name}async setKeyChain(e){await this.core.storage.setItem(this.storageKey,an(e))}async getKeyChain(){let e=await this.core.storage.getItem(this.storageKey);return typeof e<`u`?on(e):void 0}async persist(){await this.setKeyChain(this.keychain)}isInitialized(){if(!this.initialized){let{message:e}=U(`NOT_INITIALIZED`,this.name);throw Error(e)}}},Yo=class{constructor(e,t,n){this.core=e,this.logger=t,this.name=lo,this.randomSessionIdentifier=Fr(),this.initialized=!1,this.init=async()=>{this.initialized||=(await this.keychain.init(),!0)},this.hasKeys=e=>(this.isInitialized(),this.keychain.has(e)),this.getClientId=async()=>{if(this.isInitialized(),this.clientId)return this.clientId;let e=await this.getClientSeed(),t=he(e),n=N(t.publicKey);return this.clientId=n,n},this.generateKeyPair=()=>{this.isInitialized();let e=Pr();return this.setPrivateKey(e.publicKey,e.privateKey)},this.signJWT=async e=>{this.isInitialized();let t=await this.getClientSeed(),n=he(t),r=this.randomSessionIdentifier;return await me(r,e,fo,n)},this.generateSharedKey=(e,t,n)=>{this.isInitialized();let r=Ir(this.getPrivateKey(e),t);return this.setSymKey(r,n)},this.setSymKey=async(e,t)=>{this.isInitialized();let n=t||Lr(e);return await this.keychain.set(n,e),n},this.deleteKeyPair=async e=>{this.isInitialized(),await this.keychain.del(e)},this.deleteSymKey=async e=>{this.isInitialized(),await this.keychain.del(e)},this.encode=async(e,t,n)=>{this.isInitialized();let r=Xr(n),i=A(t);if(Qr(r))return Gr(i,n?.encoding);if(Zr(r)){let t=r.senderPublicKey,n=r.receiverPublicKey;e=await this.generateSharedKey(t,n)}let a=this.getSymKey(e),{type:o,senderPublicKey:s}=r;return Ur({type:o,symKey:a,message:i,senderPublicKey:s,encoding:n?.encoding})},this.decode=async(e,t,n)=>{this.isInitialized();let r=Yr(t,n);if(Qr(r)){let e=Kr(t,n?.encoding);return pe(e)}if(Zr(r)){let t=r.receiverPublicKey,n=r.senderPublicKey;e=await this.generateSharedKey(t,n)}try{let r=Wr({symKey:this.getSymKey(e),encoded:t,encoding:n?.encoding});return pe(r)}catch(t){this.logger.error(`Failed to decode message from topic: '${e}', clientId: '${await this.getClientId()}'`),this.logger.error(t)}},this.getPayloadType=(e,t=J)=>Br(Jr({encoded:e,encoding:t}).type),this.getPayloadSenderPublicKey=(e,t=J)=>{let n=Jr({encoded:e,encoding:t});return n.senderPublicKey?R(n.senderPublicKey,q):void 0},this.core=e,this.logger=be(t,this.name),this.keychain=n||new Jo(this.core,this.logger)}get context(){return ve(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(uo)}catch{e=Fr(),await this.keychain.set(uo,e)}return L(e,`base16`)}getSymKey(e){return this.keychain.get(e)}isInitialized(){if(!this.initialized){let{message:e}=U(`NOT_INITIALIZED`,this.name);throw Error(e)}}},Xo=class extends Qe{constructor(e,t){super(e,t),this.logger=e,this.core=t,this.messages=new Map,this.messagesWithoutClientAck=new Map,this.name=mo,this.version=`0.3`,this.initialized=!1,this.storagePrefix=oo,this.init=async()=>{if(!this.initialized){this.logger.trace(`Initialized`);try{let e=await this.getRelayerMessages();typeof e<`u`&&(this.messages=e);let t=await this.getRelayerMessagesWithoutClientAck();typeof t<`u`&&(this.messagesWithoutClientAck=t),this.logger.debug(`Successfully Restored records for ${this.name}`),this.logger.trace({type:`method`,method:`restore`,size:this.messages.size})}catch(e){this.logger.debug(`Failed to Restore records for ${this.name}`),this.logger.error(e)}finally{this.initialized=!0}}},this.set=async(e,t,n)=>{this.isInitialized();let r=Rr(t),i=this.messages.get(e);if(typeof i>`u`&&(i={}),typeof i[r]<`u`)return r;if(i[r]=t,this.messages.set(e,i),n===xo.inbound){let n=this.messagesWithoutClientAck.get(e)||{};this.messagesWithoutClientAck.set(e,{...n,[r]:t})}return await this.persist(),r},this.get=e=>{this.isInitialized();let t=this.messages.get(e);return typeof t>`u`&&(t={}),t},this.getWithoutAck=e=>{this.isInitialized();let t={};for(let n of e){let e=this.messagesWithoutClientAck.get(n)||{};t[n]=Object.values(e)}return t},this.has=(e,t)=>(this.isInitialized(),typeof this.get(e)[Rr(t)]<`u`),this.ack=async(e,t)=>{this.isInitialized();let n=this.messagesWithoutClientAck.get(e);if(typeof n>`u`)return;let r=Rr(t);delete n[r],Object.keys(n).length===0?this.messagesWithoutClientAck.delete(e):this.messagesWithoutClientAck.set(e,n),await this.persist()},this.del=async e=>{this.isInitialized(),this.messages.delete(e),this.messagesWithoutClientAck.delete(e),await this.persist()},this.logger=be(e,this.name),this.core=t}get context(){return ve(this.logger)}get storageKey(){return this.storagePrefix+this.version+this.core.customStoragePrefix+`//`+this.name}get storageKeyWithoutClientAck(){return this.storagePrefix+this.version+this.core.customStoragePrefix+`//`+this.name+`_withoutClientAck`}async setRelayerMessages(e){await this.core.storage.setItem(this.storageKey,an(e))}async setRelayerMessagesWithoutClientAck(e){await this.core.storage.setItem(this.storageKeyWithoutClientAck,an(e))}async getRelayerMessages(){let e=await this.core.storage.getItem(this.storageKey);return typeof e<`u`?on(e):void 0}async getRelayerMessagesWithoutClientAck(){let e=await this.core.storage.getItem(this.storageKeyWithoutClientAck);return typeof e<`u`?on(e):void 0}async persist(){await this.setRelayerMessages(this.messages),await this.setRelayerMessagesWithoutClientAck(this.messagesWithoutClientAck)}isInitialized(){if(!this.initialized){let{message:e}=U(`NOT_INITIALIZED`,this.name);throw Error(e)}}},Zo=class extends $e{constructor(e,t){super(e,t),this.relayer=e,this.logger=t,this.events=new Oe.EventEmitter,this.name=go,this.queue=new Map,this.publishTimeout=(0,z.toMiliseconds)(z.ONE_MINUTE),this.initialPublishTimeout=(0,z.toMiliseconds)(z.ONE_SECOND*15),this.needsTransportRestart=!1,this.publish=async(e,t,n)=>{this.logger.debug(`Publishing Payload`),this.logger.trace({type:`method`,method:`publish`,params:{topic:e,message:t,opts:n}});let r=n?.ttl||ho,i=n?.prompt||!1,a=n?.tag||0,o=n?.id||F().toString(),s=ni(ti().protocol),c={id:o,method:n?.publishMethod||s.publish,params:{topic:e,message:t,ttl:r,prompt:i,tag:a,attestation:n?.attestation,...n?.tvf}},l=`Failed to publish payload, please try again. id:${o} tag:${a}`;try{Y(c.params?.prompt)&&delete c.params?.prompt,Y(c.params?.tag)&&delete c.params?.tag;let r=new Promise(async e=>{let t=({id:n})=>{c.id?.toString()===n.toString()&&(this.removeRequestFromQueue(n),this.relayer.events.removeListener(Z.publish,t),e())};this.relayer.events.on(Z.publish,t);let r=cn(new Promise((e,t)=>{this.rpcPublish(c,n).then(e).catch(e=>{this.logger.warn(e,e?.message),t(e)})}),this.initialPublishTimeout,`Failed initial publish, retrying.... id:${o} tag:${a}`);try{await r,this.events.removeListener(Z.publish,t)}catch(e){this.queue.set(o,{request:c,opts:n,attempt:1}),this.logger.warn(e,e?.message)}});this.logger.trace({type:`method`,method:`publish`,params:{id:o,topic:e,message:t,opts:n}}),await cn(r,this.publishTimeout,l)}catch(e){if(this.logger.debug(`Failed to Publish Payload`),this.logger.error(e),n?.internal?.throwOnFailedPublish)throw e}finally{this.queue.delete(o)}},this.publishCustom=async e=>{this.logger.debug(`Publishing custom payload`),this.logger.trace({type:`method`,method:`publishCustom`,params:e});let{payload:t,opts:n={}}=e,{attestation:r,tvf:i,publishMethod:a,prompt:o,tag:s,ttl:c=z.FIVE_MINUTES}=n,l=n.id||F().toString(),u=ni(ti().protocol),d=a||u.publish,f={id:l,method:d,params:{...t,ttl:c,prompt:o,tag:s,attestation:r,...i}},p=`Failed to publish custom payload, please try again. id:${l} tag:${s}`;try{Y(f.params?.prompt)&&delete f.params?.prompt,Y(f.params?.tag)&&delete f.params?.tag;let e=new Promise(async e=>{let t=({id:n})=>{f.id?.toString()===n.toString()&&(this.removeRequestFromQueue(n),this.relayer.events.removeListener(Z.publish,t),e())};this.relayer.events.on(Z.publish,t);let r=cn(new Promise((e,t)=>{this.rpcPublish(f,n).then(e).catch(e=>{this.logger.warn(e,e?.message),t(e)})}),this.initialPublishTimeout,`Failed initial custom payload publish, retrying.... method:${d} id:${l} tag:${s}`);try{await r,this.events.removeListener(Z.publish,t)}catch(e){this.queue.set(l,{request:f,opts:n,attempt:1}),this.logger.warn(e,e?.message)}});this.logger.trace({type:`method`,method:`publish`,params:{id:l,payload:t,opts:n}}),await cn(e,this.publishTimeout,p)}catch(e){if(this.logger.debug(`Failed to Publish Payload`),this.logger.error(e),n?.internal?.throwOnFailedPublish)throw e}finally{this.queue.delete(l)}},this.on=(e,t)=>{this.events.on(e,t)},this.once=(e,t)=>{this.events.once(e,t)},this.off=(e,t)=>{this.events.off(e,t)},this.removeListener=(e,t)=>{this.events.removeListener(e,t)},this.relayer=e,this.logger=be(t,this.name),this.registerEventListeners()}get context(){return ve(this.logger)}async rpcPublish(e,t){this.logger.debug(`Outgoing Relay Payload`),this.logger.trace({type:`message`,direction:`outgoing`,request:e});let n=await this.relayer.request(e);return this.relayer.events.emit(Z.publish,{...e,...t}),this.logger.debug(`Successfully Published Payload`),n}removeRequestFromQueue(e){this.queue.delete(e)}checkQueue(){this.queue.forEach(async(e,t)=>{let n=e.attempt+1;this.queue.set(t,{...e,attempt:n}),this.logger.warn({},`Publisher: queue->publishing: ${e.request.id}, tag: ${e.request.params?.tag}, attempt: ${n}`),await this.rpcPublish(e.request,e.opts),this.logger.warn({},`Publisher: queue->published: ${e.request.id}`)})}registerEventListeners(){this.relayer.core.heartbeat.on(E.pulse,()=>{if(this.needsTransportRestart){this.needsTransportRestart=!1,this.relayer.events.emit(Z.connection_stalled);return}this.checkQueue()}),this.relayer.on(Z.message_ack,e=>{this.removeRequestFromQueue(e.id.toString())})}},Qo=class{constructor(){this.map=new Map,this.set=(e,t)=>{let n=this.get(e);this.exists(e,t)||this.map.set(e,[...n,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;let n=this.get(e);if(!this.exists(e,t))return;let r=n.filter(e=>e!==t);if(!r.length){this.map.delete(e);return}this.map.set(e,r)},this.clear=()=>{this.map.clear()}}get topics(){return Array.from(this.map.keys())}},$o=class extends nt{constructor(e,t){super(e,t),this.relayer=e,this.logger=t,this.subscriptions=new Map,this.topicMap=new Qo,this.events=new Oe.EventEmitter,this.name=wo,this.version=`0.3`,this.pending=new Map,this.cached=[],this.initialized=!1,this.storagePrefix=oo,this.subscribeTimeout=(0,z.toMiliseconds)(z.ONE_MINUTE),this.initialSubscribeTimeout=(0,z.toMiliseconds)(z.ONE_SECOND*15),this.batchSubscribeTopicsLimit=500,this.init=async()=>{this.initialized||(this.logger.trace(`Initialized`),this.registerEventListeners(),await this.restore()),this.initialized=!0},this.subscribe=async(e,t)=>{this.isInitialized(),this.logger.debug(`Subscribing Topic`),this.logger.trace({type:`method`,method:`subscribe`,params:{topic:e,opts:t}});try{let n=ti(t),r={topic:e,relay:n,transportType:t?.transportType};t?.internal?.skipSubscribe||this.pending.set(e,r);let i=await this.rpcSubscribe(e,n,t);return typeof i==`string`&&(this.onSubscribe(i,r),this.logger.debug(`Successfully Subscribed Topic`),this.logger.trace({type:`method`,method:`subscribe`,params:{topic:e,opts:t}})),i}catch(e){throw this.logger.debug(`Failed to Subscribe Topic`),this.logger.error(e),e}},this.unsubscribe=async(e,t)=>{this.isInitialized(),typeof t?.id<`u`?await this.unsubscribeById(e,t.id,t):await this.unsubscribeByTopic(e,t)},this.isSubscribed=e=>new Promise(t=>{t(this.topicMap.topics.includes(e))}),this.isKnownTopic=e=>new Promise(t=>{t(this.topicMap.topics.includes(e)||this.pending.has(e)||this.cached.some(t=>t.topic===e))}),this.on=(e,t)=>{this.events.on(e,t)},this.once=(e,t)=>{this.events.once(e,t)},this.off=(e,t)=>{this.events.off(e,t)},this.removeListener=(e,t)=>{this.events.removeListener(e,t)},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;let e=[];this.pending.forEach(t=>{e.push(t)}),await this.batchSubscribe(e)},this.registerEventListeners=()=>{this.relayer.core.heartbeat.on(E.pulse,async()=>{await this.checkPending()}),this.events.on(Co.created,async e=>{let t=Co.created;this.logger.info(`Emitting ${t}`),this.logger.debug({type:`event`,event:t,data:e}),await this.persist()}),this.events.on(Co.deleted,async e=>{let t=Co.deleted;this.logger.info(`Emitting ${t}`),this.logger.debug({type:`event`,event:t,data:e}),await this.persist()})},this.relayer=e,this.logger=be(t,this.name),this.clientId=``}get context(){return ve(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}get hasAnyTopics(){return this.topicMap.topics.length>0||this.pending.size>0||this.cached.length>0||this.subscriptions.size>0}hasSubscription(e,t){let n=!1;try{n=this.getSubscription(e).topic===t}catch{}return n}reset(){this.cached=[],this.initialized=!0}onDisable(){this.values.length>0&&(this.cached=this.values),this.subscriptions.clear(),this.topicMap.clear()}async unsubscribeByTopic(e,t){let n=this.topicMap.get(e);await Promise.all(n.map(async n=>await this.unsubscribeById(e,n,t)))}async unsubscribeById(e,t,n){this.logger.debug(`Unsubscribing Topic`),this.logger.trace({type:`method`,method:`unsubscribe`,params:{topic:e,id:t,opts:n}});try{let r=W(`USER_DISCONNECTED`,`${this.name}, ${e}`);await this.onUnsubscribe(e,t,r);let i=ti(n);await this.restartToComplete({topic:e,id:t,relay:i}),await this.rpcUnsubscribe(e,t,i),this.logger.debug(`Successfully Unsubscribed Topic`),this.logger.trace({type:`method`,method:`unsubscribe`,params:{topic:e,id:t,opts:n}})}catch(e){throw this.logger.debug(`Failed to Unsubscribe Topic`),this.logger.error(e),e}}async rpcSubscribe(e,t,n){let r=await this.getSubscriptionId(e);if(n?.internal?.skipSubscribe)return r;(!n||n?.transportType===Q.relay)&&await this.restartToComplete({topic:e,id:e,relay:t});let i={method:ni(t.protocol).subscribe,params:{topic:e}};this.logger.debug(`Outgoing Relay Payload`),this.logger.trace({type:`payload`,direction:`outgoing`,request:i});let a=n?.internal?.throwOnFailedPublish;try{if(n?.transportType===Q.link_mode)return setTimeout(()=>{(this.relayer.connected||this.relayer.connecting)&&this.relayer.request(i).catch(e=>this.logger.warn(e))},(0,z.toMiliseconds)(z.ONE_SECOND)),r;let t=await cn(new Promise(async t=>{let n=r=>{r.topic===e&&(this.events.removeListener(Co.created,n),t(r.id))};this.events.on(Co.created,n);try{let r=await cn(new Promise((e,t)=>{this.relayer.request(i).catch(e=>{this.logger.warn(e,e?.message),t(e)}).then(e)}),this.initialSubscribeTimeout,`Subscribing to ${e} failed, please try again`);this.events.removeListener(Co.created,n),t(r)}catch{}}),this.subscribeTimeout,`Subscribing to ${e} failed, please try again`);if(!t&&a)throw Error(`Subscribing to ${e} failed, please try again`);return t?r:null}catch(e){if(this.logger.debug(`Outgoing Relay Subscribe Payload stalled`),this.relayer.events.emit(Z.connection_stalled),a)throw e}return null}async rpcBatchSubscribe(e){if(!e.length)return!0;let t=e[0].relay,n={method:ni(t.protocol).batchSubscribe,params:{topics:e.map(e=>e.topic)}};this.logger.debug(`Outgoing Relay Payload`),this.logger.trace({type:`payload`,direction:`outgoing`,request:n});try{return await cn(new Promise((e,t)=>{this.relayer.request(n).then(e).catch(e=>{this.logger.warn(e),t(e)})}),this.subscribeTimeout,`rpcBatchSubscribe failed, please try again`),!0}catch{return this.relayer.events.emit(Z.connection_stalled),!1}}async rpcBatchFetchMessages(e){if(!e.length)return;let t=e[0].relay,n={method:ni(t.protocol).batchFetchMessages,params:{topics:e.map(e=>e.topic)}};this.logger.debug(`Outgoing Relay Payload`),this.logger.trace({type:`payload`,direction:`outgoing`,request:n});let r;try{r=await await cn(new Promise((e,t)=>{this.relayer.request(n).catch(e=>{this.logger.warn(e),t(e)}).then(e)}),this.subscribeTimeout,`rpcBatchFetchMessages failed, please try again`)}catch{this.relayer.events.emit(Z.connection_stalled)}return r}rpcUnsubscribe(e,t,n){let r={method:ni(n.protocol).unsubscribe,params:{topic:e,id:t}};return this.logger.debug(`Outgoing Relay Payload`),this.logger.trace({type:`payload`,direction:`outgoing`,request:r}),this.relayer.request(r)}onSubscribe(e,t){this.setSubscription(e,{...t,id:e}),this.pending.delete(t.topic)}onBatchSubscribe(e){e.length&&e.forEach(e=>{this.setSubscription(e.id,{...e}),this.pending.delete(e.topic)})}async onUnsubscribe(e,t,n){this.events.removeAllListeners(t),this.hasSubscription(t,e)&&this.deleteSubscription(t,n),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,{...t}),this.topicMap.set(t.topic,e),this.events.emit(Co.created,t)}getSubscription(e){this.logger.debug(`Getting subscription`),this.logger.trace({type:`method`,method:`getSubscription`,id:e});let t=this.subscriptions.get(e);if(!t){let{message:t}=U(`NO_MATCHING_KEY`,`${this.name}: ${e}`);throw Error(t)}return t}deleteSubscription(e,t){this.logger.debug(`Deleting subscription`),this.logger.trace({type:`method`,method:`deleteSubscription`,id:e,reason:t});let n=this.getSubscription(e);this.subscriptions.delete(e),this.topicMap.delete(n.topic,e),this.events.emit(Co.deleted,{...n,reason:t})}async persist(){await this.setRelayerSubscriptions(this.values),this.events.emit(Co.sync)}async onRestart(){if(this.cached.length){let e=[...this.cached],t=Math.ceil(this.cached.length/this.batchSubscribeTopicsLimit);for(let n=0;n<t;n++){let t=e.splice(0,this.batchSubscribeTopicsLimit);await this.batchSubscribe(t)}}this.events.emit(Co.resubscribed)}async restore(){try{let e=await this.getRelayerSubscriptions();if(typeof e>`u`||!e.length)return;if(this.subscriptions.size&&!e.every(e=>e.topic===this.subscriptions.get(e.id)?.topic)){let{message:e}=U(`RESTORE_WILL_OVERRIDE`,this.name);throw this.logger.error(e),this.logger.error(`${this.name}: ${JSON.stringify(this.values)}`),Error(e)}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){if(e.length){if(!await this.rpcBatchSubscribe(e)){this.logger.warn(`Batch subscribe failed for ${e.length} topics, adding to pending for retry`),e.forEach(e=>{this.pending.set(e.topic,e)});return}this.onBatchSubscribe(await Promise.all(e.map(async e=>({...e,id:await this.getSubscriptionId(e.topic)}))))}}async batchFetchMessages(e){if(!e.length)return;this.logger.trace(`Fetching batch messages for ${e.length} subscriptions`);let t=await this.rpcBatchFetchMessages(e);t&&t.messages&&(await En((0,z.toMiliseconds)(z.ONE_SECOND)),await this.relayer.handleBatchMessageEvents(t.messages))}async onConnect(){await this.restart(),this.reset()}onDisconnect(){this.onDisable()}isInitialized(){if(!this.initialized){let{message:e}=U(`NOT_INITIALIZED`,this.name);throw Error(e)}}async restartToComplete(e){!this.relayer.connected&&!this.relayer.connecting&&(this.cached.push(e),await this.relayer.transportOpen())}async getClientId(){return this.clientId||=await this.relayer.core.crypto.getClientId(),this.clientId}async getSubscriptionId(e){return Rr(e+await this.getClientId())}},es=class extends et{constructor(e){super(e),this.protocol=`wc`,this.version=2,this.events=new Oe.EventEmitter,this.name=_o,this.transportExplicitlyClosed=!1,this.initialized=!1,this.connectionAttemptInProgress=!1,this.hasExperiencedNetworkDisruption=!1,this.heartBeatTimeout=(0,z.toMiliseconds)(z.THIRTY_SECONDS+z.FIVE_SECONDS),this.reconnectInProgress=!1,this.requestsInFlight=[],this.connectTimeout=(0,z.toMiliseconds)(z.ONE_SECOND*15),this.stalledRestartInProgress=!1,this.stalledRestartBackoff=0,this.stalledRestartBaseInterval=(0,z.toMiliseconds)(z.ONE_SECOND*2),this.stalledRestartMaxInterval=(0,z.toMiliseconds)(z.THIRTY_SECONDS),this.request=async e=>{this.logger.debug(`Publishing Request Payload`);let t=e.id||F().toString();await this.toEstablishConnection();try{this.logger.trace({id:t,method:e.method,topic:e.params?.topic},`relayer.request - publishing...`);let n=`${t}:${e.params?.tag||``}`;this.requestsInFlight.push(n);let r=await this.provider.request(e);return this.requestsInFlight=this.requestsInFlight.filter(e=>e!==n),r}catch(e){throw this.logger.debug(`Failed to Publish Request: ${t}`),e}},this.resetPingTimeout=()=>{Ut()&&(clearTimeout(this.pingTimeout),this.pingTimeout=setTimeout(()=>{try{this.logger.debug({},`pingTimeout: Connection stalled, terminating...`),this.provider?.connection?.socket?.terminate?.()}catch(e){this.logger.warn(e,e?.message)}},this.heartBeatTimeout))},this.onPayloadHandler=e=>{this.onProviderPayload(e),this.resetPingTimeout()},this.onConnectHandler=()=>{this.logger.warn({},`Relayer connected 🛜`),this.startPingTimeout(),this.stalledRestartBackoff=0,this.events.emit(Z.connect)},this.onDisconnectHandler=()=>{this.logger.warn({},`Relayer disconnected 🛑`),this.requestsInFlight=[],this.onProviderDisconnect()},this.onProviderErrorHandler=e=>{this.logger.fatal(`Fatal socket error: ${e.message}`),this.events.emit(Z.error,e),this.logger.fatal(`Fatal socket error received, closing transport`),this.transportExplicitlyClosed=!0,clearTimeout(this.reconnectTimeout),this.reconnectTimeout=void 0,this.reconnectInProgress=!1,this.transportClose().catch(e=>this.logger.warn(e))},this.registerProviderListeners=()=>{this.provider.on(vo.payload,this.onPayloadHandler),this.provider.on(vo.connect,this.onConnectHandler),this.provider.on(vo.disconnect,this.onDisconnectHandler),this.provider.on(vo.error,this.onProviderErrorHandler)},this.core=e.core,this.logger=wa({logger:e.logger??`error`,name:this.name}),this.messages=new Xo(this.logger,e.core),this.subscriber=new $o(this,this.logger),this.publisher=new Zo(this,this.logger),this.projectId=e.projectId,this.relayUrl=e.relayUrl||`wss://relay.walletconnect.org`,Gt()?this.packageName=Yt():Kt()&&(this.bundleId=Yt()),this.provider={}}async init(){this.logger.trace(`Initialized`),this.registerEventListeners(),await Promise.all([this.messages.init(),this.subscriber.init()]),this.initialized=!0,this.transportOpen().catch(e=>this.logger.warn(e,e?.message))}get context(){return ve(this.logger)}get connected(){return this.provider?.connection?.socket?.readyState===1}get connecting(){return this.provider?.connection?.socket?.readyState===0||this.connectPromise!==void 0}async publish(e,t,n){this.isInitialized(),await this.publisher.publish(e,t,n),await this.recordMessageEvent({topic:e,message:t,publishedAt:Date.now(),transportType:Q.relay},xo.outbound)}async publishCustom(e){this.isInitialized(),await this.publisher.publishCustom(e)}async subscribe(e,t){this.isInitialized(),(!t?.transportType||t?.transportType===`relay`)&&await this.toEstablishConnection();let n=t?.internal?.throwOnFailedPublish??!0,r=this.subscriber.topicMap.get(e)?.[0]||``,i,a=t=>{t.topic===e&&(this.subscriber.off(Co.created,a),i())};return await Promise.all([new Promise(e=>{i=e,this.subscriber.on(Co.created,a)}),new Promise((i,a)=>{this.subscriber.subscribe(e,{internal:{throwOnFailedPublish:n},...t}).then(e=>{r=e||r,i()}).catch(e=>{n?a(e):i()})})]),r}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 cn(this.provider.disconnect(),2e3,`provider.disconnect()`).catch(()=>this.onProviderDisconnect()):this.onProviderDisconnect()}async transportClose(){this.transportExplicitlyClosed=!0,clearTimeout(this.stalledRestartTimeout),this.stalledRestartInProgress=!1,this.stalledRestartBackoff=0,await this.resetTransport()}async transportOpen(e){if(!this.subscriber.hasAnyTopics){this.logger.info(`Starting WS connection skipped because the client has no topics to work with.`);return}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=this.connect(e).finally(()=>{this.connectPromise=void 0}),await this.connectPromise),!this.connected)throw 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.resetTransport(),await this.transportOpen())}async resetTransport(){this.reconnectInProgress=!0,clearTimeout(this.reconnectTimeout),this.reconnectTimeout=void 0,await this.transportDisconnect(),await this.subscriber.stop(),this.reconnectInProgress=!1}async confirmOnlineStateOrThrow(){if(!await na())throw 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}let t=e.sort((e,t)=>e.publishedAt-t.publishedAt);this.logger.debug(`Batch of ${t.length} message events sorted`);for(let e of t)try{await this.onMessageEvent(e)}catch(e){this.logger.warn(e,`Error while processing batch message event: `+e?.message)}this.logger.trace(`Batch of ${t.length} message events processed`)}async onLinkMessageEvent(e,t){let{topic:n}=e;if(!t.sessionExists){let e={topic:n,expiry:G(z.FIVE_MINUTES),relay:{protocol:`irn`},active:!1};await this.core.pairing.pairings.set(n,e)}this.events.emit(Z.message,e),await this.recordMessageEvent(e,xo.inbound)}async connect(e){await this.confirmOnlineStateOrThrow(),e&&e!==this.relayUrl&&(this.relayUrl=e,await this.transportDisconnect()),this.transportExplicitlyClosed=!1;let t=1;try{for(;t<6;){this.connectionAttemptInProgress=!0;try{if(this.transportExplicitlyClosed)break;this.logger.debug({},`Connecting to ${this.relayUrl}, attempt: ${t}...`),await this.createProvider(),await new Promise((e,t)=>{let n=()=>{t(Error(`Connection interrupted while trying to connect`))};this.provider.once(vo.disconnect,n),cn(this.provider.connect(),this.connectTimeout,`Socket stalled when trying to connect to ${this.relayUrl}`).then(()=>e()).catch(t).finally(()=>{this.provider.off(vo.disconnect,n),clearTimeout(this.reconnectTimeout)})}),await new Promise((e,t)=>{let n=()=>{t(Error(`Connection interrupted while trying to subscribe`))};this.provider.once(vo.disconnect,n),this.subscriber.start().then(e).catch(t).finally(()=>{this.provider.off(vo.disconnect,n)})}),this.hasExperiencedNetworkDisruption=!1}catch(e){await this.subscriber.stop();let t=e;this.logger.warn({},t.message),this.hasExperiencedNetworkDisruption=!0}if(this.connected){this.logger.debug({},`Connected to ${this.relayUrl} successfully on attempt: ${t}`);break}await new Promise(e=>setTimeout(e,(0,z.toMiliseconds)(t*1))),t++}}finally{this.connectionAttemptInProgress=!1,clearTimeout(this.reconnectTimeout),this.reconnectTimeout=void 0,this.reconnectInProgress=!1}}startPingTimeout(){if(Ut())try{this.provider?.connection?.socket?.on(`ping`,()=>{this.resetPingTimeout()}),this.resetPingTimeout()}catch(e){this.logger.warn(e,e?.message)}}async createProvider(){if(this.provider.connection&&(this.unregisterProviderListeners(),this.connected))try{await cn(this.provider.disconnect(),1e3,`Closing previous provider`)}catch{}let e=await this.core.crypto.signJWT(this.relayUrl);this.provider=new se(new ue(nn({sdkVersion:bo,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,t){let{topic:n,message:r}=e;await this.messages.set(n,r,t)}async shouldIgnoreMessageEvent(e){let{topic:t,message:n}=e;if(!n||n.length===0)return this.logger.warn(`Ignoring invalid/empty message: ${n}`),!0;if(!await this.subscriber.isKnownTopic(t))return this.logger.warn(`Ignoring message for unknown topic ${t}`),!0;let r=this.messages.has(t,n);return r&&this.logger.warn(`Ignoring duplicate message: ${n}`),r}async onProviderPayload(e){if(this.logger.debug(`Incoming Relay Payload`),this.logger.trace({type:`payload`,direction:`incoming`,payload:e}),re(e)){if(!e.method.endsWith(`_subscription`))return;let t=e.params,{topic:n,message:r,publishedAt:i,attestation:a}=t.data,o={topic:n,message:r,publishedAt:i,transportType:Q.relay,attestation:a};this.logger.debug(`Emitting Relayer Payload`),this.logger.trace({type:`event`,event:t.id,...o}),this.events.emit(t.id,o),await this.acknowledgePayload(e),await this.onMessageEvent(o)}else M(e)&&this.events.emit(Z.message_ack,e)}async onMessageEvent(e){await this.shouldIgnoreMessageEvent(e)||(await this.recordMessageEvent(e,xo.inbound),this.events.emit(Z.message,e))}async acknowledgePayload(e){let t=de(e.id,!0);await this.provider.connection.send(t)}unregisterProviderListeners(){this.provider.off(vo.payload,this.onPayloadHandler),this.provider.off(vo.connect,this.onConnectHandler),this.provider.off(vo.disconnect,this.onDisconnectHandler),this.provider.off(vo.error,this.onProviderErrorHandler),clearTimeout(this.pingTimeout)}async registerEventListeners(){let e=await na();oa(async t=>{e!==t&&(e=t,t?await this.transportOpen().catch(e=>this.logger.error(e,e?.message)):(this.hasExperiencedNetworkDisruption=!0,await this.transportDisconnect(),this.transportExplicitlyClosed=!1))}),this.core.heartbeat.on(E.pulse,async()=>{if(!this.transportExplicitlyClosed&&!this.connected&&la())try{await this.confirmOnlineStateOrThrow(),await this.transportOpen()}catch(e){this.logger.warn(e,e?.message)}}),this.events.on(Z.connection_stalled,()=>{if(this.transportExplicitlyClosed||this.stalledRestartInProgress)return;this.stalledRestartInProgress=!0;let e=this.stalledRestartBackoff===0?0:Math.min(2**(this.stalledRestartBackoff-1)*this.stalledRestartBaseInterval,this.stalledRestartMaxInterval);this.stalledRestartBackoff++,this.logger.warn(`Connection stalled, restarting transport${e?` in ${e}ms`:``}...`),this.stalledRestartTimeout=setTimeout(async()=>{try{if(this.transportExplicitlyClosed)return;await this.restartTransport()}catch(e){this.logger.error(e,e?.message)}finally{this.stalledRestartInProgress=!1}},e)})}async onProviderDisconnect(){if(clearTimeout(this.pingTimeout),this.events.emit(Z.disconnect),!this.reconnectInProgress){this.reconnectInProgress=!0;try{await this.subscriber.stop()}catch(e){this.logger.warn(e,`subscriber.stop() failed during disconnect`)}if(!this.subscriber.hasAnyTopics||this.transportExplicitlyClosed){this.reconnectInProgress=!1;return}this.reconnectTimeout=setTimeout(async()=>{await this.transportOpen().catch(e=>this.logger.error(e,e?.message)),this.reconnectTimeout=void 0,this.reconnectInProgress=!1},(0,z.toMiliseconds)(yo))}}isInitialized(){if(!this.initialized){let{message:e}=U(`NOT_INITIALIZED`,this.name);throw Error(e)}}async toEstablishConnection(){if(await this.confirmOnlineStateOrThrow(),!this.connected){if(this.connectPromise){await this.connectPromise;return}this.connectPromise=this.connect().finally(()=>{this.connectPromise=void 0}),await this.connectPromise}}},ts=class extends tt{constructor(e,t,n,r=oo,i=void 0){super(e,t,n,r),this.core=e,this.logger=t,this.name=n,this.map=new Map,this.version=`0.3`,this.cached=[],this.initialized=!1,this.storagePrefix=oo,this.recentlyDeleted=[],this.recentlyDeletedLimit=200,this.init=async()=>{this.initialized||=(this.logger.trace(`Initialized`),await this.restore(),this.cached.forEach(e=>{this.getKey&&e!==null&&!Y(e)?this.map.set(this.getKey(e),e):Oi(e)?this.map.set(e.id,e):ki(e)&&this.map.set(e.topic,e)}),this.cached=[],!0)},this.set=async(e,t)=>{this.isInitialized(),this.map.has(e)?await this.update(e,t):(this.logger.debug(`Setting value`),this.logger.trace({type:`method`,method:`set`,key:e,value:t}),this.map.set(e,t),await this.persist())},this.get=e=>(this.isInitialized(),this.logger.debug(`Getting value`),this.logger.trace({type:`method`,method:`get`,key:e}),this.getData(e)),this.getAll=e=>(this.isInitialized(),e?this.values.filter(t=>Object.keys(e).every(n=>io(t[n],e[n]))):this.values),this.update=async(e,t)=>{this.isInitialized(),this.logger.debug(`Updating value`),this.logger.trace({type:`method`,method:`update`,key:e,update:t});let n={...this.getData(e),...t};this.map.set(e,n),await this.persist()},this.delete=async(e,t)=>{this.isInitialized(),this.map.has(e)&&(this.logger.debug(`Deleting value`),this.logger.trace({type:`method`,method:`delete`,key:e,reason:t}),this.map.delete(e),this.addToRecentlyDeleted(e),await this.persist())},this.logger=be(t,this.name),this.storagePrefix=r,this.getKey=i}get context(){return ve(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){let t=this.map.get(e);if(!t){if(this.recentlyDeleted.includes(e)){let{message:t}=U(`MISSING_OR_INVALID`,`Record was recently deleted - ${this.name}: ${e}`);throw this.logger.error(t),Error(t)}let{message:t}=U(`NO_MATCHING_KEY`,`${this.name}: ${e}`);throw this.logger.error(t),Error(t)}return t}async persist(){await this.setDataStore(this.values)}async restore(){try{let e=await this.getDataStore();if(typeof e>`u`||!e.length)return;if(this.map.size){let{message:e}=U(`RESTORE_WILL_OVERRIDE`,this.name);throw this.logger.error(e),Error(e)}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){let{message:e}=U(`NOT_INITIALIZED`,this.name);throw Error(e)}}},ns=class{constructor(e,t){this.core=e,this.logger=t,this.name=To,this.version=`0.3`,this.events=new Oe.default,this.initialized=!1,this.storagePrefix=oo,this.ignoredPayloadTypes=[1],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:e})=>{this.isInitialized(),this.registeredMethods=[...new Set([...this.registeredMethods,...e])]},this.create=async e=>{this.isInitialized();let t=Fr(),n=await this.core.crypto.setSymKey(t),r=G(z.FIVE_MINUTES),i={protocol:`irn`},a={topic:n,expiry:r,relay:i,active:!1,methods:e?.methods},o=si({protocol:this.core.protocol,version:this.core.version,topic:n,symKey:t,relay:i,expiryTimestamp:r,methods:e?.methods});return this.events.emit(Do.create,a),this.core.expirer.set(n,r),await this.pairings.set(n,a),await this.core.relayer.subscribe(n,{transportType:e?.transportType,internal:e?.internal}),{topic:n,uri:o}},this.pair=async e=>{this.isInitialized();let t=this.core.eventClient.createEvent({properties:{topic:e?.uri,trace:[zo.pairing_started]}});this.isValidPair(e,t);let{topic:n,symKey:r,relay:i,expiryTimestamp:a,methods:o}=ii(e.uri);t.props.properties.topic=n,t.addTrace(zo.pairing_uri_validation_success),t.addTrace(zo.pairing_uri_not_expired);let s;if(this.pairings.keys.includes(n)){if(s=this.pairings.get(n),t.addTrace(zo.existing_pairing),s.active)throw t.setError(Bo.active_pairing_already_exists),Error(`Pairing already exists: ${n}. Please try again with a new connection URI.`);t.addTrace(zo.pairing_not_expired)}let c=a||G(z.FIVE_MINUTES),l={topic:n,relay:i,expiry:c,active:!1,methods:o};this.core.expirer.set(n,c),await this.pairings.set(n,l),t.addTrace(zo.store_new_pairing),e.activatePairing&&await this.activate({topic:n}),this.events.emit(Do.create,l),t.addTrace(zo.emit_inactive_pairing),this.core.crypto.keychain.has(n)||await this.core.crypto.setSymKey(r,n),t.addTrace(zo.subscribing_pairing_topic);try{await this.core.relayer.confirmOnlineStateOrThrow()}catch{t.setError(Bo.no_internet_connection)}try{await this.core.relayer.subscribe(n,{relay:i})}catch(e){throw t.setError(Bo.subscribe_pairing_topic_failure),e}return t.addTrace(zo.subscribe_pairing_topic_success),l},this.activate=async({topic:e})=>{this.isInitialized();let t=G(z.FIVE_MINUTES);this.core.expirer.set(e,t),await this.pairings.update(e,{active:!0,expiry:t})},this.ping=async e=>{this.isInitialized(),await this.isValidPing(e),this.logger.warn(`ping() is deprecated and will be removed in the next major release.`);let{topic:t}=e;if(this.pairings.keys.includes(t)){let e=await this.sendRequest(t,`wc_pairingPing`,{}),{done:n,resolve:r,reject:i}=sn();this.events.once(K(`pairing_ping`,e),({error:e})=>{e?i(e):r()}),await n()}},this.updateExpiry=async({topic:e,expiry:t})=>{this.isInitialized(),await this.pairings.update(e,{expiry:t})},this.updateMetadata=async({topic:e,metadata:t})=>{this.isInitialized(),await this.pairings.update(e,{peerMetadata:t})},this.getPairings=()=>(this.isInitialized(),this.pairings.values),this.disconnect=async e=>{this.isInitialized(),await this.isValidDisconnect(e);let{topic:t}=e;this.pairings.keys.includes(t)&&(await this.sendRequest(t,`wc_pairingDelete`,W(`USER_DISCONNECTED`)),await this.deletePairing(t))},this.formatUriFromPairing=e=>{this.isInitialized();let{topic:t,relay:n,expiry:r,methods:i}=e,a=this.core.crypto.keychain.get(t);return si({protocol:this.core.protocol,version:this.core.version,topic:t,symKey:a,relay:n,expiryTimestamp:r,methods:i})},this.sendRequest=async(e,t,n)=>{let r=ae(t,n),i=await this.core.crypto.encode(e,r),a=Eo[t].req;return this.core.history.set(e,r),this.core.relayer.publish(e,i,a),r.id},this.sendResult=async(e,t,n)=>{let r=de(e,n),i=await this.core.crypto.encode(t,r),a=Eo[(await this.core.history.get(t,e)).request.method].res;await this.core.relayer.publish(t,i,a),await this.core.history.resolve(r)},this.sendError=async(e,t,n)=>{let r=P(e,n),i=await this.core.crypto.encode(t,r),a=(await this.core.history.get(t,e)).request.method,o=Eo[a]?Eo[a].res:Eo.unregistered_method.res;await this.core.relayer.publish(t,i,o),await this.core.history.resolve(r)},this.deletePairing=async(e,t)=>{await this.core.relayer.unsubscribe(e),await Promise.all([this.pairings.delete(e,W(`USER_DISCONNECTED`)),this.core.crypto.deleteSymKey(e),t?Promise.resolve():this.core.expirer.del(e)])},this.cleanup=async()=>{let e=this.pairings.getAll().filter(e=>pn(e.expiry));await Promise.all(e.map(e=>this.deletePairing(e.topic)))},this.onRelayEventRequest=async e=>{let{topic:t,payload:n}=e;switch(n.method){case`wc_pairingPing`:return await this.onPairingPingRequest(t,n);case`wc_pairingDelete`:return await this.onPairingDeleteRequest(t,n);default:return await this.onUnknownRpcMethodRequest(t,n)}},this.onRelayEventResponse=async e=>{let{topic:t,payload:n}=e,r=(await this.core.history.get(t,n.id)).request.method;switch(r){case`wc_pairingPing`:return this.onPairingPingResponse(t,n);default:return this.onUnknownRpcMethodResponse(r)}},this.onPairingPingRequest=async(e,t)=>{let{id:n}=t;try{this.isValidPing({topic:e}),await this.sendResult(n,e,!0),this.events.emit(Do.ping,{id:n,topic:e})}catch(t){await this.sendError(n,e,t),this.logger.error(t)}},this.onPairingPingResponse=(e,t)=>{let{id:n}=t;setTimeout(()=>{ce(t)?this.events.emit(K(`pairing_ping`,n),{}):le(t)&&this.events.emit(K(`pairing_ping`,n),{error:t.error})},500)},this.onPairingDeleteRequest=async(e,t)=>{let{id:n}=t;try{this.isValidDisconnect({topic:e}),await this.deletePairing(e),this.events.emit(Do.delete,{id:n,topic:e})}catch(t){await this.sendError(n,e,t),this.logger.error(t)}},this.onUnknownRpcMethodRequest=async(e,t)=>{let{id:n,method:r}=t;try{if(this.registeredMethods.includes(r))return;let t=W(`WC_METHOD_UNSUPPORTED`,r);await this.sendError(n,e,t),this.logger.error(t)}catch(t){await this.sendError(n,e,t),this.logger.error(t)}},this.onUnknownRpcMethodResponse=e=>{this.registeredMethods.includes(e)||this.logger.error(W(`WC_METHOD_UNSUPPORTED`,e))},this.isValidPair=(e,t)=>{if(!Ui(e)){let{message:n}=U(`MISSING_OR_INVALID`,`pair() params: ${e}`);throw t.setError(Bo.malformed_pairing_uri),Error(n)}if(!Di(e.uri)){let{message:n}=U(`MISSING_OR_INVALID`,`pair() uri: ${e.uri}`);throw t.setError(Bo.malformed_pairing_uri),Error(n)}let n=ii(e?.uri);if(!n?.relay?.protocol){let{message:e}=U(`MISSING_OR_INVALID`,`pair() uri#relay-protocol`);throw t.setError(Bo.malformed_pairing_uri),Error(e)}if(!n?.symKey){let{message:e}=U(`MISSING_OR_INVALID`,`pair() uri#symKey`);throw t.setError(Bo.malformed_pairing_uri),Error(e)}if(n?.expiryTimestamp&&(0,z.toMiliseconds)(n?.expiryTimestamp)<Date.now()){t.setError(Bo.pairing_expired);let{message:e}=U(`EXPIRED`,`pair() URI has expired. Please try again with a new connection URI.`);throw Error(e)}},this.isValidPing=async e=>{if(!Ui(e)){let{message:t}=U(`MISSING_OR_INVALID`,`ping() params: ${e}`);throw Error(t)}let{topic:t}=e;await this.isValidPairingTopic(t)},this.isValidDisconnect=async e=>{if(!Ui(e)){let{message:t}=U(`MISSING_OR_INVALID`,`disconnect() params: ${e}`);throw Error(t)}let{topic:t}=e;await this.isValidPairingTopic(t)},this.isValidPairingTopic=async e=>{if(!X(e,!1)){let{message:t}=U(`MISSING_OR_INVALID`,`pairing topic should be a string: ${e}`);throw Error(t)}if(!this.pairings.keys.includes(e)){let{message:t}=U(`NO_MATCHING_KEY`,`pairing topic doesn't exist: ${e}`);throw Error(t)}if(pn(this.pairings.get(e).expiry)){await this.deletePairing(e);let{message:t}=U(`EXPIRED`,`pairing topic: ${e}`);throw Error(t)}},this.core=e,this.logger=be(t,this.name),this.pairings=new ts(this.core,this.logger,this.name,this.storagePrefix)}get context(){return ve(this.logger)}isInitialized(){if(!this.initialized){let{message:e}=U(`NOT_INITIALIZED`,this.name);throw Error(e)}}registerRelayerEvents(){this.core.relayer.on(Z.message,async e=>{let{topic:t,message:n,transportType:r}=e;if(this.pairings.keys.includes(t)&&r!==Q.link_mode){try{if(this.core.crypto.getPayloadType(n,`base64url`)===2){this.logger.warn(`registerRelayerEvents() -> non-link mode TYPE_2 payload ignored: ${n}`);return}}catch{}if(!this.ignoredPayloadTypes.includes(this.core.crypto.getPayloadType(n)))try{let e=await this.core.crypto.decode(t,n);re(e)?(this.core.history.set(t,e),await this.onRelayEventRequest({topic:t,payload:e})):M(e)&&(await this.core.history.resolve(e),await this.onRelayEventResponse({topic:t,payload:e}),this.core.history.delete(t,e.id)),await this.core.relayer.messages.ack(t,n)}catch(e){this.logger.error(e)}}})}registerExpirerEvents(){this.core.expirer.on(jo.expired,async e=>{let{topic:t}=fn(e.target);t&&this.pairings.keys.includes(t)&&(await this.deletePairing(t,!0),this.events.emit(Do.expire,{topic:t}))})}},rs=class extends Ze{constructor(e,t){super(e,t),this.core=e,this.logger=t,this.records=new Map,this.events=new Oe.EventEmitter,this.name=ko,this.version=`0.3`,this.cached=[],this.initialized=!1,this.storagePrefix=oo,this.init=async()=>{this.initialized||=(this.logger.trace(`Initialized`),await this.restore(),this.cached.forEach(e=>this.records.set(e.id,e)),this.cached=[],this.registerEventListeners(),!0)},this.set=(e,t,n)=>{if(this.isInitialized(),this.logger.debug(`Setting JSON-RPC request history record`),this.logger.trace({type:`method`,method:`set`,topic:e,request:t,chainId:n}),this.records.has(t.id))return;let r={id:t.id,topic:e,request:{method:t.method,params:t.params||null},chainId:n,expiry:G(z.THIRTY_DAYS)};this.records.set(r.id,r),this.persist(),this.events.emit(Oo.created,r)},this.resolve=async e=>{if(this.isInitialized(),this.logger.debug(`Updating JSON-RPC response history record`),this.logger.trace({type:`method`,method:`update`,response:e}),!this.records.has(e.id))return;let t=await this.getRecord(e.id);typeof t.response<`u`||(t.response=le(e)?{error:e.error}:{result:e.result},this.records.set(t.id,t),this.persist(),this.events.emit(Oo.updated,t))},this.get=async(e,t)=>(this.isInitialized(),this.logger.debug(`Getting record`),this.logger.trace({type:`method`,method:`get`,topic:e,id:t}),await this.getRecord(t)),this.delete=(e,t)=>{this.isInitialized(),this.logger.debug(`Deleting record`),this.logger.trace({type:`method`,method:`delete`,id:t}),this.values.forEach(n=>{if(n.topic===e){if(typeof t<`u`&&n.id!==t)return;this.records.delete(n.id),this.events.emit(Oo.deleted,n)}}),this.persist()},this.exists=async(e,t)=>(this.isInitialized(),this.records.has(t)?(await this.getRecord(t)).topic===e:!1),this.on=(e,t)=>{this.events.on(e,t)},this.once=(e,t)=>{this.events.once(e,t)},this.off=(e,t)=>{this.events.off(e,t)},this.removeListener=(e,t)=>{this.events.removeListener(e,t)},this.logger=be(t,this.name)}get context(){return ve(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(){let e=[];return this.values.forEach(t=>{if(typeof t.response<`u`)return;let n={topic:t.topic,request:ae(t.request.method,t.request.params,t.id),chainId:t.chainId};return e.push(n)}),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();let t=this.records.get(e);if(!t){let{message:t}=U(`NO_MATCHING_KEY`,`${this.name}: ${e}`);throw Error(t)}return t}async persist(){await this.setJsonRpcRecords(this.values),this.events.emit(Oo.sync)}async restore(){try{let e=await this.getJsonRpcRecords();if(typeof e>`u`||!e.length)return;if(this.records.size){let{message:e}=U(`RESTORE_WILL_OVERRIDE`,this.name);throw this.logger.error(e),Error(e)}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(Oo.created,e=>{let t=Oo.created;this.logger.info(`Emitting ${t}`),this.logger.debug({type:`event`,event:t,record:e})}),this.events.on(Oo.updated,e=>{let t=Oo.updated;this.logger.info(`Emitting ${t}`),this.logger.debug({type:`event`,event:t,record:e})}),this.events.on(Oo.deleted,e=>{let t=Oo.deleted;this.logger.info(`Emitting ${t}`),this.logger.debug({type:`event`,event:t,record:e})}),this.core.heartbeat.on(E.pulse,()=>{this.cleanup()})}cleanup(){try{this.isInitialized();let e=!1;this.records.forEach(t=>{(0,z.toMiliseconds)(t.expiry||0)-Date.now()<=0&&(this.logger.info(`Deleting expired history log: ${t.id}`),this.records.delete(t.id),this.events.emit(Oo.deleted,t,!1),e=!0)}),e&&this.persist()}catch(e){this.logger.warn(e)}}isInitialized(){if(!this.initialized){let{message:e}=U(`NOT_INITIALIZED`,this.name);throw Error(e)}}},is=class extends rt{constructor(e,t){super(e,t),this.core=e,this.logger=t,this.expirations=new Map,this.events=new Oe.EventEmitter,this.name=Ao,this.version=`0.3`,this.cached=[],this.initialized=!1,this.storagePrefix=oo,this.init=async()=>{this.initialized||=(this.logger.trace(`Initialized`),await this.restore(),this.cached.forEach(e=>this.expirations.set(e.target,e)),this.cached=[],this.registerEventListeners(),!0)},this.has=e=>{try{let t=this.formatTarget(e);return typeof this.getExpiration(t)<`u`}catch{return!1}},this.set=(e,t)=>{this.isInitialized();let n=this.formatTarget(e),r={target:n,expiry:t};this.expirations.set(n,r),this.checkExpiry(n,r),this.events.emit(jo.created,{target:n,expiration:r})},this.get=e=>{this.isInitialized();let t=this.formatTarget(e);return this.getExpiration(t)},this.del=e=>{if(this.isInitialized(),this.has(e)){let t=this.formatTarget(e),n=this.getExpiration(t);this.expirations.delete(t),this.events.emit(jo.deleted,{target:t,expiration:n})}},this.on=(e,t)=>{this.events.on(e,t)},this.once=(e,t)=>{this.events.once(e,t)},this.off=(e,t)=>{this.events.off(e,t)},this.removeListener=(e,t)=>{this.events.removeListener(e,t)},this.logger=be(t,this.name)}get context(){return ve(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 un(e);if(typeof e==`number`)return dn(e);let{message:t}=U(`UNKNOWN_TYPE`,`Target type: ${typeof e}`);throw 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(jo.sync)}async restore(){try{let e=await this.getExpirations();if(typeof e>`u`||!e.length)return;if(this.expirations.size){let{message:e}=U(`RESTORE_WILL_OVERRIDE`,this.name);throw this.logger.error(e),Error(e)}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){let t=this.expirations.get(e);if(!t){let{message:t}=U(`NO_MATCHING_KEY`,`${this.name}: ${e}`);throw this.logger.warn(t),Error(t)}return t}checkExpiry(e,t){let{expiry:n}=t;(0,z.toMiliseconds)(n)-Date.now()<=0&&this.expire(e,t)}expire(e,t){this.expirations.delete(e),this.events.emit(jo.expired,{target:e,expiration:t})}checkExpirations(){this.core.relayer.connected&&this.expirations.forEach((e,t)=>this.checkExpiry(t,e))}registerEventListeners(){this.core.heartbeat.on(E.pulse,()=>this.checkExpirations()),this.events.on(jo.created,e=>{let t=jo.created;this.logger.info(`Emitting ${t}`),this.logger.debug({type:`event`,event:t,data:e}),this.persist()}),this.events.on(jo.expired,e=>{let t=jo.expired;this.logger.info(`Emitting ${t}`),this.logger.debug({type:`event`,event:t,data:e}),this.persist()}),this.events.on(jo.deleted,e=>{let t=jo.deleted;this.logger.info(`Emitting ${t}`),this.logger.debug({type:`event`,event:t,data:e}),this.persist()})}isInitialized(){if(!this.initialized){let{message:e}=U(`NOT_INITIALIZED`,this.name);throw Error(e)}}},as=class extends it{constructor(e,t,n){super(e,t,n),this.core=e,this.logger=t,this.store=n,this.name=Mo,this.verifyUrlV3=Fo,this.storagePrefix=oo,this.version=2,this.init=async()=>{this.isDevEnv||(this.publicKey=await this.store.getItem(this.storeKey),this.publicKey&&(0,z.toMiliseconds)(this.publicKey?.expiresAt)<Date.now()&&(this.logger.debug(`verify v2 public key expired`),await this.removePublicKey()))},this.register=async e=>{if(!qt()||this.isDevEnv)return;let t=window.location.origin,{id:n,decryptedId:r}=e,i=`${this.verifyUrlV3}/attestation?projectId=${this.core.projectId}&origin=${t}&id=${n}&decryptedId=${r}`;try{let e=(0,ke.getDocument)(),t=this.startAbortTimer(z.ONE_SECOND*5),r=await new Promise((r,a)=>{let o=()=>{window.removeEventListener(`message`,c),e.body.removeChild(s),a(`attestation aborted`)};this.abortController.signal.addEventListener(`abort`,o);let s=e.createElement(`iframe`);s.src=i,s.style.display=`none`,s.addEventListener(`error`,o,{signal:this.abortController.signal});let c=i=>{if(i.data&&typeof i.data==`string`)try{let a=JSON.parse(i.data);if(a.type===`verify_attestation`){if(k(a.attestation).payload.id!==n)return;clearInterval(t),e.body.removeChild(s),this.abortController.signal.removeEventListener(`abort`,o),window.removeEventListener(`message`,c),r(a.attestation===null?``:a.attestation)}}catch(e){this.logger.warn(e)}};e.body.appendChild(s),window.addEventListener(`message`,c,{signal:this.abortController.signal})});return this.logger.debug(r,`jwt attestation`),r}catch(e){this.logger.warn(e)}return``},this.resolve=async e=>{if(this.isDevEnv)return``;let{attestationId:t,hash:n,encryptedId:r}=e;if(t===``){this.logger.debug(`resolve: attestationId is empty, skipping`);return}if(t){if(k(t).payload.id!==r)return;let e=await this.isValidJwtAttestation(t);if(e){if(!e.isVerified){this.logger.warn(`resolve: jwt attestation: origin url not verified`);return}return e}}if(!n)return;let i=this.getVerifyUrl(e?.verifyUrl);return this.fetchAttestation(n,i)},this.fetchAttestation=async(e,t)=>{this.logger.debug(`resolving attestation: ${e} from url: ${t}`);let n=this.startAbortTimer(z.ONE_SECOND*5),r=await fetch(`${t}/attestation/${e}?v2Supported=true`,{signal:this.abortController.signal});return clearTimeout(n),r.status===200?await r.json():void 0},this.getVerifyUrl=e=>{let t=e||`https://verify.walletconnect.org`;return Io.includes(t)||(this.logger.info(`verify url: ${t}, not included in trusted list, assigning default: https://verify.walletconnect.org`),t=`https://verify.walletconnect.org`),t},this.fetchPublicKey=async()=>{try{this.logger.debug(`fetching public key from: ${this.verifyUrlV3}`);let e=this.startAbortTimer(z.FIVE_SECONDS),t=await fetch(`${this.verifyUrlV3}/public-key`,{signal:this.abortController.signal});return clearTimeout(e),await t.json()}catch(e){this.logger.warn(e)}},this.persistPublicKey=async e=>{this.logger.debug(e,`persisting public key to local storage`),await this.store.setItem(this.storeKey,e),this.publicKey=e},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 e=>{let t=await this.getPublicKey();try{if(t)return this.validateAttestation(e,t)}catch(e){this.logger.error(e),this.logger.warn(`error validating attestation`)}let n=await this.fetchAndPersistPublicKey();try{if(n)return this.validateAttestation(e,n)}catch(e){this.logger.error(e),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 e=>{let t=await this.fetchPublicKey();t&&(await this.persistPublicKey(t),e(t))});let e=await this.fetchPromise;return this.fetchPromise=void 0,e},this.validateAttestation=(e,t)=>{let n=ei(e,t.publicKey),r={hasExpired:(0,z.toMiliseconds)(n.exp)<Date.now(),payload:n};if(r.hasExpired)throw this.logger.warn(`resolve: jwt attestation expired`),Error(`JWT attestation expired`);return{origin:r.payload.origin,isScam:r.payload.isScam,isVerified:r.payload.isVerified}},this.logger=be(t,this.name),this.abortController=new AbortController,this.isDevEnv=xn(),this.init()}get storeKey(){return this.storagePrefix+this.version+this.core.customStoragePrefix+`//verify:public:key`}get context(){return ve(this.logger)}startAbortTimer(e){return this.abortController=new AbortController,setTimeout(()=>this.abortController.abort(),(0,z.toMiliseconds)(e))}},os=class extends at{constructor(e,t){super(e,t),this.projectId=e,this.logger=t,this.context=Lo,this.registerDeviceToken=async e=>{let{clientId:t,token:n,notificationType:r,enableEncrypted:i=!1}=e,a=`${Ro}/${this.projectId}/clients`;await fetch(a,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({client_id:t,type:r,token:n,always_raw:i})})},this.logger=be(t,this.context)}},ss=class extends ot{constructor(e,t,n=!0){super(e,t,n),this.core=e,this.logger=t,this.context=Ko,this.storagePrefix=oo,this.storageVersion=Go,this.events=new Map,this.shouldPersist=!1,this.init=async e=>{if(xn())return;let t=e?.sdk;try{let e={eventId:bn(),timestamp:Date.now(),domain:this.getAppDomain(),props:{event:`INIT`,type:``,properties:{client_id:await this.core.crypto.getClientId(),user_agent:tn(this.core.relayer.protocol,this.core.relayer.version,bo),...t?.name&&t.version?{sdk_name:t.name,sdk_version:t.version}:{}}}};await this.sendEvent([e])}catch(e){this.logger.warn(e)}},this.createEvent=e=>{let{event:t=`ERROR`,type:n=``,properties:{topic:r,trace:i}}=e,a=bn(),o=this.core.projectId||``,s={eventId:a,timestamp:Date.now(),props:{event:t,type:n,properties:{topic:r,trace:i}},bundleId:o,domain:this.getAppDomain(),...this.setMethods(a)};return this.telemetryEnabled&&(this.events.set(a,s),this.shouldPersist=!0),s},this.getEvent=e=>{let{eventId:t,topic:n}=e;if(t)return this.events.get(t);let r=Array.from(this.events.values()).find(e=>e.props.properties.topic===n);if(r)return{...r,...this.setMethods(r.eventId)}},this.deleteEvent=e=>{let{eventId:t}=e;this.events.delete(t),this.shouldPersist=!0},this.setEventListeners=()=>{this.core.heartbeat.on(E.pulse,async()=>{this.shouldPersist&&await this.persist(),this.events.forEach(e=>{(0,z.fromMiliseconds)(Date.now())-(0,z.fromMiliseconds)(e.timestamp)>86400&&(this.events.delete(e.eventId),this.shouldPersist=!0)})})},this.setMethods=e=>({addTrace:t=>this.addTrace(e,t),setError:t=>this.setError(e,t)}),this.addTrace=(e,t)=>{let n=this.events.get(e);n&&(n.props.properties.trace.push(t),this.events.set(e,n),this.shouldPersist=!0)},this.setError=(e,t)=>{let n=this.events.get(e);n&&(n.props.type=t,n.timestamp=Date.now(),this.events.set(e,n),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{let e=await this.core.storage.getItem(this.storageKey)||[];if(!e.length)return;e.forEach(e=>{this.events.set(e.eventId,{...e,...this.setMethods(e.eventId)})})}catch(e){this.logger.warn(e)}},this.submit=async()=>{if(!this.telemetryEnabled||this.events.size===0)return;let e=[];for(let[t,n]of this.events)n.props.type&&e.push(n);if(e.length!==0)try{if((await this.sendEvent(e)).ok)for(let t of e)this.events.delete(t.eventId),this.shouldPersist=!0}catch(e){this.logger.warn(e)}},this.sendEvent=async e=>{let t=this.getAppDomain()?``:`&sp=desktop`;return await fetch(`${qo}?projectId=${this.core.projectId}&st=events_sdk&sv=js-${bo}${t}`,{method:`POST`,body:JSON.stringify(e)})},this.getAppDomain=()=>Qt().url,this.logger=be(t,this.context),this.telemetryEnabled=n,n?this.restore().then(async()=>{await this.submit(),this.setEventListeners()}):this.persist()}get storageKey(){return this.storagePrefix+this.storageVersion+this.core.customStoragePrefix+`//`+this.context}},cs=class e extends Xe{constructor(e){super(e),this.protocol=`wc`,this.version=2,this.name=ao,this.events=new Oe.EventEmitter,this.initialized=!1,this.on=(e,t)=>this.events.on(e,t),this.once=(e,t)=>this.events.once(e,t),this.off=(e,t)=>this.events.off(e,t),this.removeListener=(e,t)=>this.events.removeListener(e,t),this.dispatchEnvelope=({topic:e,message:t,sessionExists:n})=>{if(!e||!t)return;let r={topic:e,message:t,publishedAt:Date.now(),transportType:Q.link_mode};this.relayer.onLinkMessageEvent(r,{sessionExists:n})};let t=this.getGlobalCore(e?.customStoragePrefix);if(t)try{return this.customStoragePrefix=t.customStoragePrefix,this.logger=t.logger,this.heartbeat=t.heartbeat,this.crypto=t.crypto,this.history=t.history,this.expirer=t.expirer,this.storage=t.storage,this.relayer=t.relayer,this.pairing=t.pairing,this.verify=t.verify,this.echoClient=t.echoClient,this.linkModeSupportedApps=t.linkModeSupportedApps,this.eventClient=t.eventClient,this.initialized=t.initialized,this.logChunkController=t.logChunkController,t}catch(e){console.warn(`Failed to copy global core`,e)}this.projectId=e?.projectId,this.relayUrl=e?.relayUrl||`wss://relay.walletconnect.org`,this.customStoragePrefix=e?.customStoragePrefix?`:${e.customStoragePrefix}`:``;let n=_e({level:typeof e?.logger==`string`&&e.logger?e.logger:so.logger,name:ao}),{logger:r,chunkLoggerController:i}=we({opts:n,maxSizeInBytes:e?.maxLogBlobSizeInBytes,loggerOverride:e?.logger});this.logChunkController=i,this.logChunkController?.downloadLogsBlobInBrowser&&(window.downloadLogsBlobInBrowser=async()=>{this.logChunkController?.downloadLogsBlobInBrowser&&this.logChunkController?.downloadLogsBlobInBrowser({clientId:await this.crypto.getClientId()})}),this.logger=be(r,this.name),this.heartbeat=new D,this.crypto=new Yo(this,this.logger,e?.keychain),this.history=new rs(this,this.logger),this.expirer=new is(this,this.logger),this.storage=e?.storage?e.storage:new T({...co,...e?.storageOptions}),this.relayer=new es({core:this,logger:this.logger,relayUrl:this.relayUrl,projectId:this.projectId}),this.pairing=new ns(this,this.logger),this.verify=new as(this,this.logger,this.storage),this.echoClient=new os(this.projectId||``,this.logger),this.linkModeSupportedApps=[],this.eventClient=new ss(this,this.logger,e?.telemetryEnabled),this.setGlobalCore(this)}static async init(t){let n=new e(t);await n.initialize();let r=await n.crypto.getClientId();return await n.storage.setItem(So,r),n}get context(){return ve(this.logger)}async start(){this.initialized||await this.initialize()}async getLogsBlob(){return this.logChunkController?.logsToBlob({clientId:await this.crypto.getClientId()})}async addLinkModeSupportedApp(e){this.linkModeSupportedApps.includes(e)||(this.linkModeSupportedApps.push(e),await this.storage.setItem(`WALLETCONNECT_LINK_MODE_APPS`,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(`WALLETCONNECT_LINK_MODE_APPS`)||[],this.initialized=!0,this.logger.info(`Core Initialization Success`)}catch(e){throw this.logger.warn(e,`Core Initialization Failure at epoch ${Date.now()}`),this.logger.error(e.message),e}}getGlobalCore(e=``){try{if(this.isGlobalCoreDisabled())return;let t=`_walletConnectCore_${e}`,n=`${t}_count`;return globalThis[n]=(globalThis[n]||0)+1,globalThis[n]>1&&console.warn(`WalletConnect Core is already initialized. This is probably a mistake and can lead to unexpected behavior. Init() was called ${globalThis[n]} times.`),globalThis[t]}catch(e){console.warn(`Failed to get global WalletConnect core`,e);return}}setGlobalCore(e){try{if(this.isGlobalCoreDisabled())return;let t=`_walletConnectCore_${e.opts?.customStoragePrefix||``}`;globalThis[t]=e}catch(e){console.warn(`Failed to set global WalletConnect core`,e)}}isGlobalCoreDisabled(){try{return typeof t<`u`&&{}.DISABLE_GLOBAL_CORE===`true`}catch{return!0}}};r();var ls=`client`,us=`wc@2:${ls}:`,ds={name:ls,logger:`error`,controller:!1,relayUrl:`wss://relay.walletconnect.org`},fs=`WALLETCONNECT_DEEPLINK_CHOICE`,ps=`proposal`,ms=`Proposal expired`,hs=`session`,gs=z.SEVEN_DAYS,_s=`engine`,$={wc_sessionPropose:{req:{ttl:z.FIVE_MINUTES,prompt:!0,tag:1100},res:{ttl:z.FIVE_MINUTES,prompt:!1,tag:1101},reject:{ttl:z.FIVE_MINUTES,prompt:!1,tag:1120},autoReject:{ttl:z.FIVE_MINUTES,prompt:!1,tag:1121}},wc_sessionSettle:{req:{ttl:z.FIVE_MINUTES,prompt:!1,tag:1102},res:{ttl:z.FIVE_MINUTES,prompt:!1,tag:1103}},wc_sessionUpdate:{req:{ttl:z.ONE_DAY,prompt:!1,tag:1104},res:{ttl:z.ONE_DAY,prompt:!1,tag:1105}},wc_sessionExtend:{req:{ttl:z.ONE_DAY,prompt:!1,tag:1106},res:{ttl:z.ONE_DAY,prompt:!1,tag:1107}},wc_sessionRequest:{req:{ttl:z.FIVE_MINUTES*3,prompt:!0,tag:1108},res:{ttl:z.FIVE_MINUTES*3,prompt:!1,tag:1109}},wc_sessionEvent:{req:{ttl:z.FIVE_MINUTES,prompt:!0,tag:1110},res:{ttl:z.FIVE_MINUTES,prompt:!1,tag:1111}},wc_sessionDelete:{req:{ttl:z.ONE_DAY,prompt:!1,tag:1112},res:{ttl:z.ONE_DAY,prompt:!1,tag:1113}},wc_sessionPing:{req:{ttl:z.ONE_DAY,prompt:!1,tag:1114},res:{ttl:z.ONE_DAY,prompt:!1,tag:1115}},wc_sessionAuthenticate:{req:{ttl:z.ONE_HOUR,prompt:!0,tag:1116},res:{ttl:z.ONE_HOUR,prompt:!1,tag:1117},reject:{ttl:z.FIVE_MINUTES,prompt:!1,tag:1118},autoReject:{ttl:z.FIVE_MINUTES,prompt:!1,tag:1119}}},vs={min:z.FIVE_MINUTES,max:z.SEVEN_DAYS},ys={idle:`IDLE`,active:`ACTIVE`},bs={eth_sendTransaction:{key:``},eth_sendRawTransaction:{key:``},wallet_sendCalls:{key:``},solana_signTransaction:{key:`signature`},solana_signAllTransactions:{key:`transactions`},solana_signAndSendTransaction:{key:`signature`},sui_signAndExecuteTransaction:{key:`digest`},sui_signTransaction:{key:``},hedera_signAndExecuteTransaction:{key:`transactionId`},hedera_executeTransaction:{key:`transactionId`},near_signTransaction:{key:``},near_signTransactions:{key:``},tron_signTransaction:{key:`txID`},xrpl_signTransaction:{key:``},xrpl_signTransactionFor:{key:``},algo_signTxn:{key:``},sendTransfer:{key:`txid`},stacks_stxTransfer:{key:`txId`},polkadot_signTransaction:{key:``},cosmos_signDirect:{key:``},canton_prepareSignExecute:{key:``},stellar_signXDR:{key:``},stellar_signAndSubmitXDR:{key:`tx_hash`}},xs=`request`,Ss=[`wc_sessionPropose`,`wc_sessionRequest`,`wc_authRequest`,`wc_sessionAuthenticate`],Cs=`auth`,ws=`authKeys`,Ts=`pairingTopics`,Es=`requests`,Ds=`wc@1.5:${Cs}:`,Os=`${Ds}:PUB_KEY`,ks=class extends ct{constructor(e){super(e),this.name=_s,this.events=new Oe.default,this.initialized=!1,this.requestQueue={state:ys.idle,queue:[]},this.sessionRequestQueue={state:ys.idle,queue:[]},this.emittedSessionRequests=new Dn({limit:500}),this.requestQueueDelay=z.ONE_SECOND,this.expectedPairingMethodMap=new Map,this.recentlyDeletedMap=new Map,this.recentlyDeletedLimit=200,this.relayMessageCache=[],this.pendingSessions=new Map,this.init=async()=>{this.initialized||(await this.cleanup(),this.registerRelayerEvents(),this.registerExpirerEvents(),this.registerPairingEvents(),this.registerSubscriptionCleanup(),await this.registerLinkModeListeners(),this.client.core.pairing.register({methods:Object.keys($)}),this.initialized=!0,setTimeout(async()=>{await this.processPendingMessageEvents(),this.sessionRequestQueue.queue=this.getPendingSessionRequests(),this.processSessionRequestQueue()},(0,z.toMiliseconds)(this.requestQueueDelay)))},this.connect=async e=>{this.isInitialized(),await this.confirmOnlineStateOrThrow();let t={...e,requiredNamespaces:e.requiredNamespaces||{},optionalNamespaces:e.optionalNamespaces||{}};await this.isValidConnect(t),t.optionalNamespaces=bi(t.requiredNamespaces,t.optionalNamespaces),t.requiredNamespaces={};let{pairingTopic:n,requiredNamespaces:r,optionalNamespaces:i,sessionProperties:a,scopedProperties:o,relays:s,authentication:c,walletPay:l}=t,u=c?.[0]?.ttl||$.wc_sessionPropose.req.ttl||z.FIVE_MINUTES;this.validateRequestExpiry(u);let d=n,f,p=!1;try{if(d){let e=this.client.core.pairing.pairings.get(d);this.client.logger.warn(`connect() with existing pairing topic is deprecated and will be removed in the next major release.`),p=e.active}}catch(e){throw this.client.logger.error(`connect() -> pairing.get(${d}) failed`),e}if(!d||!p){let{topic:e,uri:t}=await this.client.core.pairing.create({internal:{skipSubscribe:!0}});d=e,f=t}if(!d){let{message:e}=U(`NO_MATCHING_KEY`,`connect() pairing topic: ${d}`);throw Error(e)}let m=await this.client.core.crypto.generateKeyPair(),h=G(u),g={requiredNamespaces:r,optionalNamespaces:i,relays:s??[{protocol:`irn`}],proposer:{publicKey:m,metadata:this.client.metadata},expiryTimestamp:h,pairingTopic:d,...a&&{sessionProperties:a},...o&&{scopedProperties:o},id:I(),...(c||l)&&{requests:{authentication:c?.map(e=>{let{domain:t,chains:n,nonce:r,uri:i,exp:a,nbf:o,type:s,statement:c,requestId:l,resources:u,signatureTypes:d}=e;return{domain:t,chains:n,nonce:r,type:s??`caip122`,aud:i,version:`1`,iat:new Date().toISOString(),exp:a,nbf:o,statement:c,requestId:l,resources:u,signatureTypes:d}}),walletPay:l}}},_=K(`session_connect`,g.id),{reject:ee,resolve:te,done:v}=sn(u,ms),y=({id:e})=>{if(e===g.id){this.client.events.off(`proposal_expire`,y);let e=this.pendingSessions.get(g.id);if(e){let{sessionTopic:t,publicKey:n}=e;Promise.all([this.client.core.relayer.unsubscribe(t),this.client.core.crypto.keychain.has(t)?this.client.core.crypto.deleteSymKey(t):Promise.resolve(),this.client.core.crypto.keychain.has(n)?this.client.core.crypto.deleteKeyPair(n):Promise.resolve()]).catch(e=>this.client.logger.warn(e))}this.pendingSessions.delete(g.id),this.events.emit(_,{error:{message:ms,code:0}})}};return this.client.events.on(`proposal_expire`,y),this.events.once(_,({error:e,session:t})=>{this.client.events.off(`proposal_expire`,y),e?ee(e):t&&te(t)}),await this.setProposal(g.id,g),await this.sendProposeSession({proposal:g,publishOpts:{internal:{throwOnFailedPublish:!0},tvf:{correlationId:g.id}}}).catch(e=>{throw this.deleteProposal(g.id),e}),{uri:f,approval:v}},this.pair=async e=>{this.isInitialized(),await this.confirmOnlineStateOrThrow();try{return await this.client.core.pairing.pair(e)}catch(e){throw this.client.logger.error(`pair() failed`),e}},this.approve=async e=>{let t=this.client.core.eventClient.createEvent({properties:{topic:e?.id?.toString(),trace:[Vo.session_approve_started]}});try{this.isInitialized(),await this.confirmOnlineStateOrThrow()}catch(e){throw t.setError(Ho.no_internet_connection),e}try{await this.isValidProposalId(e?.id)}catch(n){throw this.client.logger.error(`approve() -> proposal.get(${e?.id}) failed`),t.setError(Ho.proposal_not_found),n}try{await this.isValidApprove(e)}catch(e){throw this.client.logger.error(`approve() -> isValidApprove() failed`),t.setError(Ho.session_approve_namespace_validation_failure),e}let{id:n,relayProtocol:r,namespaces:i,sessionProperties:a,scopedProperties:o,sessionConfig:s,proposalRequestsResponses:c}=e,l=this.client.proposal.get(n);this.client.core.eventClient.deleteEvent({eventId:t.eventId});let{pairingTopic:u,proposer:d,requiredNamespaces:f,optionalNamespaces:p}=l,m=this.client.core.eventClient?.getEvent({topic:u});m||=this.client.core.eventClient?.createEvent({type:Vo.session_approve_started,properties:{topic:u,trace:[Vo.session_approve_started,Vo.session_namespaces_validation_success]}});let h=await this.client.core.crypto.generateKeyPair(),g=d.publicKey,_=await this.client.core.crypto.generateSharedKey(h,g),ee={relay:{protocol:r??`irn`},namespaces:i,controller:{publicKey:h,metadata:this.client.metadata},expiry:G(gs),...a&&{sessionProperties:a},...o&&{scopedProperties:o},...s&&{sessionConfig:s},proposalRequestsResponses:c},te=Q.relay;m.addTrace(Vo.subscribing_session_topic);try{await this.client.core.relayer.subscribe(_,{transportType:te,internal:{skipSubscribe:!0}})}catch(e){throw m.setError(Ho.subscribe_session_topic_failure),e}m.addTrace(Vo.subscribe_session_topic_success);let v={...ee,topic:_,requiredNamespaces:f,optionalNamespaces:p,pairingTopic:u,acknowledged:!1,self:ee.controller,peer:{publicKey:d.publicKey,metadata:d.metadata},controller:h,transportType:Q.relay,authentication:c?.authentication,walletPayResult:c?.walletPay};await this.client.session.set(_,v),m.addTrace(Vo.store_session);try{await this.sendApproveSession({sessionTopic:_,proposal:l,pairingProposalResponse:{relay:{protocol:r??`irn`},responderPublicKey:h},sessionSettleRequest:ee,publishOpts:{internal:{throwOnFailedPublish:!0},tvf:{correlationId:n,...this.getTVFApproveParams(v)}}}),m.addTrace(Vo.session_approve_publish_success)}catch(e){throw this.client.logger.error(e),this.client.session.delete(_,W(`USER_DISCONNECTED`)),await this.client.core.relayer.unsubscribe(_),e}return this.client.core.eventClient.deleteEvent({eventId:m.eventId}),await this.client.core.pairing.updateMetadata({topic:u,metadata:d.metadata}),await this.deleteProposal(n),await this.client.core.pairing.activate({topic:u}),await this.setExpiry(_,G(gs)),{topic:_,acknowledged:()=>Promise.resolve(this.client.session.get(_))}},this.reject=async e=>{this.isInitialized(),await this.confirmOnlineStateOrThrow();try{await this.isValidReject(e)}catch(e){throw this.client.logger.error(`reject() -> isValidReject() failed`),e}let{id:t,reason:n}=e,r;try{r=this.client.proposal.get(t).pairingTopic}catch(e){throw this.client.logger.error(`reject() -> proposal.get(${t}) failed`),e}r&&await this.sendError({id:t,topic:r,error:n,rpcOpts:$.wc_sessionPropose.reject}),await this.deleteProposal(t)},this.update=async e=>{this.isInitialized(),await this.confirmOnlineStateOrThrow();try{await this.isValidUpdate(e)}catch(e){throw this.client.logger.error(`update() -> isValidUpdate() failed`),e}let{topic:t,namespaces:n}=e,r=this.client.session.get(t);if(r.self.publicKey!==r.controller){let{message:e}=W(`UNAUTHORIZED_UPDATE_REQUEST`);throw Error(e)}let{done:i,resolve:a,reject:o}=sn(z.FIVE_MINUTES,`Session update request expired without receiving any acknowledgement`),s=I(),c=F().toString(),l=this.client.session.get(t).namespaces;return this.events.once(K(`session_update`,s),({error:e})=>{e?o(e):a()}),await this.client.session.update(t,{namespaces:n}),await this.sendRequest({topic:t,method:`wc_sessionUpdate`,params:{namespaces:n},throwOnFailedPublish:!0,clientRpcId:s,relayRpcId:c}).catch(e=>{this.client.logger.error(e),this.client.session.update(t,{namespaces:l}),o(e)}),{acknowledged:i}},this.extend=async e=>{this.isInitialized(),await this.confirmOnlineStateOrThrow();try{await this.isValidExtend(e)}catch(e){throw this.client.logger.error(`extend() -> isValidExtend() failed`),e}let{topic:t}=e,n=I(),{done:r,resolve:i,reject:a}=sn(z.FIVE_MINUTES,`Session extend request expired without receiving any acknowledgement`);return this.events.once(K(`session_extend`,n),({error:e})=>{e?a(e):i()}),await this.setExpiry(t,G(gs)),this.sendRequest({topic:t,method:`wc_sessionExtend`,params:{},clientRpcId:n,throwOnFailedPublish:!0}).catch(e=>{a(e)}),{acknowledged:r}},this.request=async e=>{this.isInitialized();try{await this.isValidRequest(e)}catch(e){throw this.client.logger.error(`request() -> isValidRequest() failed`),e}let{chainId:t,request:n,topic:r,expiry:i=$.wc_sessionRequest.req.ttl}=e,a=this.client.session.get(r);a?.transportType===Q.relay&&await this.confirmOnlineStateOrThrow();let o=I(),s=F().toString(),{done:c,resolve:l,reject:u}=sn(i,`Request expired. Please try again.`);this.events.once(K(`session_request`,o),({error:e,result:t})=>{e?u(e):l(t)});let d=`wc_sessionRequest`,f=this.getAppLinkIfEnabled(a.peer.metadata,a.transportType);if(f)return await this.sendRequest({clientRpcId:o,relayRpcId:s,topic:r,method:d,params:{request:{...n,expiryTimestamp:G(i)},chainId:t},expiry:i,throwOnFailedPublish:!0,appLink:f}).catch(e=>u(e)),this.client.events.emit(`session_request_sent`,{topic:r,request:n,chainId:t,id:o}),await c();let p={request:{...n,expiryTimestamp:G(i)},chainId:t};return await Promise.all([new Promise(async e=>{await this.sendRequest({clientRpcId:o,relayRpcId:s,topic:r,method:d,params:p,expiry:i,throwOnFailedPublish:!0,tvf:this.getTVFParams(o,p)}).catch(e=>u(e)),this.client.events.emit(`session_request_sent`,{topic:r,request:n,chainId:t,id:o}),e()}),new Promise(async e=>{if(!a.sessionConfig?.disableDeepLink){let e=await vn(this.client.core.storage,fs);await hn({id:o,topic:r,wcDeepLink:e})}e()}),c()]).then(e=>e[2])},this.respond=async e=>{this.isInitialized();let t=this.client.core.eventClient.createEvent({properties:{topic:e?.topic||e?.response?.id?.toString(),trace:[Vo.session_request_response_started]}});try{await this.isValidRespond(e)}catch(e){throw t.addTrace(e?.message),t.setError(Ho.session_request_response_validation_failure),e}t.addTrace(Vo.session_request_response_validation_success);let{topic:n,response:r}=e,{id:i}=r,a=this.client.session.get(n);a.transportType===Q.relay&&await this.confirmOnlineStateOrThrow();let o=this.getAppLinkIfEnabled(a.peer.metadata,a.transportType);try{t.addTrace(Vo.session_request_response_publish_started),ce(r)?await this.sendResult({id:i,topic:n,result:r.result,throwOnFailedPublish:!0,appLink:o}):le(r)&&await this.sendError({id:i,topic:n,error:r.error,appLink:o}),this.cleanupAfterResponse(e)}catch(e){throw t.addTrace(e?.message),t.setError(Ho.session_request_response_publish_failure),e}},this.ping=async e=>{this.isInitialized(),await this.confirmOnlineStateOrThrow();try{await this.isValidPing(e)}catch(e){throw this.client.logger.error(`ping() -> isValidPing() failed`),e}let{topic:t}=e;if(this.client.session.keys.includes(t)){let e=I(),n=F().toString(),{done:r,resolve:i,reject:a}=sn(z.FIVE_MINUTES,`Ping request expired without receiving any acknowledgement`);this.events.once(K(`session_ping`,e),({error:e})=>{e?a(e):i()}),await Promise.all([this.sendRequest({topic:t,method:`wc_sessionPing`,params:{},throwOnFailedPublish:!0,clientRpcId:e,relayRpcId:n}),r()])}else this.client.core.pairing.pairings.keys.includes(t)&&(this.client.logger.warn(`ping() on pairing topic is deprecated and will be removed in the next major release.`),await this.client.core.pairing.ping({topic:t}))},this.emit=async e=>{this.isInitialized(),await this.confirmOnlineStateOrThrow(),await this.isValidEmit(e);let{topic:t,event:n,chainId:r}=e,i=F().toString(),a=I();await this.sendRequest({topic:t,method:`wc_sessionEvent`,params:{event:n,chainId:r},throwOnFailedPublish:!0,relayRpcId:i,clientRpcId:a})},this.disconnect=async e=>{this.isInitialized(),await this.confirmOnlineStateOrThrow(),await this.isValidDisconnect(e);let{topic:t}=e;if(this.client.session.keys.includes(t))await this.sendRequest({topic:t,method:`wc_sessionDelete`,params:W(`USER_DISCONNECTED`),throwOnFailedPublish:!0}),await this.deleteSession({topic:t,emitEvent:!1});else if(this.client.core.pairing.pairings.keys.includes(t))await this.client.core.pairing.disconnect({topic:t});else{let{message:e}=U(`MISMATCHED_TOPIC`,`Session or pairing topic not found: ${t}`);throw Error(e)}},this.find=e=>(this.isInitialized(),this.client.session.getAll().filter(t=>wi(t,e))),this.getPendingSessionRequests=()=>this.client.pendingRequest.getAll(),this.authenticate=async(e,t)=>{this.isInitialized(),this.isValidAuthenticate(e);let n=t&&this.client.core.linkModeSupportedApps.includes(t)&&this.client.metadata.redirect?.linkMode,r=n?Q.link_mode:Q.relay;r===Q.relay&&await this.confirmOnlineStateOrThrow();let{chains:i,statement:a=``,uri:o,domain:s,nonce:c,type:l,exp:u,nbf:d,methods:f=[],expiry:p}=e,m=[...e.resources||[]],{topic:h,uri:g}=await this.client.core.pairing.create({methods:[`wc_sessionAuthenticate`],transportType:r});if(this.client.logger.info({message:`Generated new pairing`,pairing:{topic:h,uri:g}}),this.client.auth.authKeys.keys.includes(Os)){let{responseTopic:e,publicKey:t}=this.client.auth.authKeys.get(Os);e&&(await this.client.core.relayer.unsubscribe(e).catch(e=>this.client.logger.warn(e)),await this.client.auth.pairingTopics.delete(e,{message:`replaced`,code:0}).catch(e=>this.client.logger.warn(e))),t&&this.client.core.crypto.keychain.has(t)&&await this.client.core.crypto.deleteKeyPair(t)}let _=await this.client.core.crypto.generateKeyPair(),ee=Lr(_);if(await Promise.all([this.client.auth.authKeys.set(Os,{responseTopic:ee,publicKey:_}),this.client.auth.pairingTopics.set(ee,{topic:ee,pairingTopic:h})]),await this.client.core.relayer.subscribe(ee,{transportType:r}),this.client.logger.info(`sending request to new pairing topic: ${h}`),f.length>0){let{namespace:e}=Rt(i[0]),t=yr(e,`request`,f);Er(m)&&(t=xr(t,m.pop())),m.push(t)}let te=p&&p>$.wc_sessionAuthenticate.req.ttl?p:$.wc_sessionAuthenticate.req.ttl,v={authPayload:{type:l??`caip122`,chains:i,statement:a,aud:o,domain:s,version:`1`,nonce:c,iat:new Date().toISOString(),exp:u,nbf:d,resources:m},requester:{publicKey:_,metadata:this.client.metadata},expiryTimestamp:G(te)},y={requiredNamespaces:{},optionalNamespaces:{eip155:{chains:i,methods:[...new Set([`personal_sign`,...f])],events:[`chainChanged`,`accountsChanged`]}},relays:[{protocol:`irn`}],pairingTopic:h,proposer:{publicKey:_,metadata:this.client.metadata},expiryTimestamp:G($.wc_sessionPropose.req.ttl),id:I()},{done:b,resolve:x,reject:S}=sn(te,`Request expired`),C=I(),w=K(`session_connect`,y.id),T=K(`session_request`,C),E=async({error:e,session:t})=>{this.events.off(T,O),e?S(e):t&&x({session:t})},D=async e=>{if(await this.deletePendingAuthRequest(C,{message:`fulfilled`,code:0}),e.error){let t=W(`WC_METHOD_UNSUPPORTED`,`wc_sessionAuthenticate`);return e.error.code===t.code?void 0:(this.events.off(w,E),S(e.error.message))}await this.deleteProposal(y.id),this.events.off(w,E);let{cacaos:n,responder:i}=e.result,a=[],o=[];for(let e of n){if(!await lr({cacao:e,projectId:this.client.core.projectId}))return this.client.logger.error(e,`Signature verification failed`),S(W(`SESSION_SETTLEMENT_FAILED`,`Signature verification failed`));let t=ur({cacao:e,request:v.authPayload});if(!t.valid)return this.client.logger.error(e,`Cacao does not match the request: ${t.reason}`),S(W(`SESSION_SETTLEMENT_FAILED`,`Cacao does not match the request: ${t.reason}`));let{p:n}=e,r=Er(n.resources),i=[sr(n.iss)],s=cr(n.iss);if(r){let e=wr(r),t=Tr(r);a.push(...e),i.push(...t)}for(let e of i)o.push(`${e}:${s}`)}let s=await this.client.core.crypto.generateSharedKey(_,i.publicKey),c;a.length>0&&(c={topic:s,acknowledged:!0,self:{publicKey:_,metadata:this.client.metadata},peer:i,controller:i.publicKey,expiry:G(gs),requiredNamespaces:{},optionalNamespaces:{},relay:{protocol:`irn`},pairingTopic:h,namespaces:yi([...new Set(a)],[...new Set(o)]),transportType:r},await this.client.core.relayer.subscribe(s,{transportType:r}),await this.client.session.set(s,c),h&&await this.client.core.pairing.updateMetadata({topic:h,metadata:i.metadata}),c=this.client.session.get(s)),this.client.metadata.redirect?.linkMode&&i.metadata.redirect?.linkMode&&i.metadata.redirect?.universal&&t&&(this.client.core.addLinkModeSupportedApp(i.metadata.redirect.universal),this.client.session.update(s,{transportType:Q.link_mode})),x({auths:n,session:c})},O=e=>D(e).catch(e=>{this.client.logger.error(e,`Failed to process authenticate response`),S(W(`SESSION_SETTLEMENT_FAILED`,e?.message||`Failed to process authenticate response`))});this.events.once(w,E),this.events.once(T,O);let k;try{if(n){let e=ae(`wc_sessionAuthenticate`,v,C);this.client.core.history.set(h,e),k=ci(t,h,await this.client.core.crypto.encode(``,e,{type:2,encoding:Or}))}else await Promise.all([this.sendRequest({topic:h,method:`wc_sessionAuthenticate`,params:v,expiry:e.expiry,throwOnFailedPublish:!0,clientRpcId:C}),this.sendRequest({topic:h,method:`wc_sessionPropose`,params:y,expiry:$.wc_sessionPropose.req.ttl,throwOnFailedPublish:!0,clientRpcId:y.id})])}catch(e){throw this.events.off(w,E),this.events.off(T,O),e}return await this.setProposal(y.id,y),await this.setAuthRequest(C,{request:{...v,verifyContext:{}},pairingTopic:h,transportType:r}),{uri:k??g,response:b}},this.approveSessionAuthenticate=async e=>{let{id:t,auths:n}=e,r=this.client.core.eventClient.createEvent({properties:{topic:t.toString(),trace:[Uo.authenticated_session_approve_started]}});try{this.isInitialized()}catch(e){throw r.setError(Wo.no_internet_connection),e}let i=this.getPendingAuthRequest(t);if(!i)throw r.setError(Wo.authenticated_session_pending_request_not_found),Error(`Could not find pending auth request with id ${t}`);let a=i.transportType||Q.relay;a===Q.relay&&await this.confirmOnlineStateOrThrow();let o=i.requester.publicKey,s=await this.client.core.crypto.generateKeyPair(),c=Lr(o),l={type:1,receiverPublicKey:o,senderPublicKey:s},u=[],d=[];for(let e of n){if(!await lr({cacao:e,projectId:this.client.core.projectId})){r.setError(Wo.invalid_cacao);let e=W(`SESSION_SETTLEMENT_FAILED`,`Signature verification failed`);throw await this.sendError({id:t,topic:c,error:e,encodeOpts:l}),Error(e.message)}r.addTrace(Uo.cacaos_verified);let{p:n}=e,i=Er(n.resources),a=[sr(n.iss)],o=cr(n.iss);if(i){let e=wr(i),t=Tr(i);u.push(...e),a.push(...t)}for(let e of a)d.push(`${e}:${o}`)}let f=await this.client.core.crypto.generateSharedKey(s,o);r.addTrace(Uo.create_authenticated_session_topic);let p;if(u?.length>0){p={topic:f,acknowledged:!0,self:{publicKey:s,metadata:this.client.metadata},peer:{publicKey:o,metadata:i.requester.metadata},controller:o,expiry:G(gs),authentication:n,requiredNamespaces:{},optionalNamespaces:{},relay:{protocol:`irn`},pairingTopic:i.pairingTopic,namespaces:yi([...new Set(u)],[...new Set(d)]),transportType:a},r.addTrace(Uo.subscribing_authenticated_session_topic);try{await this.client.core.relayer.subscribe(f,{transportType:a})}catch(e){throw r.setError(Wo.subscribe_authenticated_session_topic_failure),e}r.addTrace(Uo.subscribe_authenticated_session_topic_success),await this.client.session.set(f,p),r.addTrace(Uo.store_authenticated_session),await this.client.core.pairing.updateMetadata({topic:i.pairingTopic,metadata:i.requester.metadata})}r.addTrace(Uo.publishing_authenticated_session_approve);try{await this.sendResult({topic:c,id:t,result:{cacaos:n,responder:{publicKey:s,metadata:this.client.metadata}},encodeOpts:l,throwOnFailedPublish:!0,appLink:this.getAppLinkIfEnabled(i.requester.metadata,a)})}catch(e){throw r.setError(Wo.authenticated_session_approve_publish_failure),e}return await this.client.auth.requests.delete(t,{message:`fulfilled`,code:0}),await this.client.core.pairing.activate({topic:i.pairingTopic}),this.client.core.eventClient.deleteEvent({eventId:r.eventId}),{session:p}},this.rejectSessionAuthenticate=async e=>{this.isInitialized();let{id:t,reason:n}=e,r=this.getPendingAuthRequest(t);if(!r)throw Error(`Could not find pending auth request with id ${t}`);r.transportType===Q.relay&&await this.confirmOnlineStateOrThrow();let i=r.requester.publicKey,a=await this.client.core.crypto.generateKeyPair(),o=Lr(i),s={type:1,receiverPublicKey:i,senderPublicKey:a};await this.sendError({id:t,topic:o,error:n,encodeOpts:s,rpcOpts:$.wc_sessionAuthenticate.reject,appLink:this.getAppLinkIfEnabled(r.requester.metadata,r.transportType)}),await this.client.auth.requests.delete(t,{message:`rejected`,code:0}),await this.deleteProposal(t)},this.formatAuthMessage=e=>{this.isInitialized();let{request:t,iss:n}=e;return dr(t,n)},this.processRelayMessageCache=()=>{setTimeout(async()=>{if(this.relayMessageCache.length!==0)for(;this.relayMessageCache.length>0;)try{let e=this.relayMessageCache.shift();e&&await this.onRelayMessage(e)}catch(e){this.client.logger.error(e)}},50)},this.cleanupDuplicatePairings=async e=>{if(e.pairingTopic)try{let t=this.client.core.pairing.pairings.get(e.pairingTopic),n=this.client.core.pairing.pairings.getAll().filter(n=>n.peerMetadata?.url&&n.peerMetadata?.url===e.peer.metadata.url&&n.topic&&n.topic!==t.topic);if(n.length===0)return;this.client.logger.info(`Cleaning up ${n.length} duplicate pairing(s)`),await Promise.all(n.map(e=>this.client.core.pairing.disconnect({topic:e.topic}))),this.client.logger.info(`Duplicate pairings clean up finished`)}catch(e){this.client.logger.error(e)}},this.deleteSession=async e=>{let{topic:t,expirerHasDeleted:n=!1,emitEvent:r=!0,id:i=0}=e,{self:a}=this.client.session.get(t);await this.client.core.relayer.unsubscribe(t),await this.client.session.delete(t,W(`USER_DISCONNECTED`)),this.addToRecentlyDeleted(t,`session`),this.client.core.crypto.keychain.has(a.publicKey)&&await this.client.core.crypto.deleteKeyPair(a.publicKey),this.client.core.crypto.keychain.has(t)&&await this.client.core.crypto.deleteSymKey(t),n||this.client.core.expirer.del(t),this.client.core.storage.removeItem(fs).catch(e=>this.client.logger.warn(e)),t===this.sessionRequestQueue.queue[0]?.topic&&(this.sessionRequestQueue.state=ys.idle),await Promise.all(this.getPendingSessionRequests().filter(e=>e.topic===t).map(e=>this.deletePendingSessionRequest(e.id,W(`USER_DISCONNECTED`)))),r&&this.client.events.emit(`session_delete`,{id:i,topic:t})},this.deleteProposal=async(e,t)=>{if(t)try{let t=this.client.proposal.get(e);this.client.core.eventClient.getEvent({topic:t.pairingTopic})?.setError(Ho.proposal_expired)}catch{}await Promise.all([this.client.proposal.delete(e,W(`USER_DISCONNECTED`)),t?Promise.resolve():this.client.core.expirer.del(e)]),this.addToRecentlyDeleted(e,`proposal`)},this.deletePendingSessionRequest=async(e,t,n=!1)=>{await Promise.all([this.client.pendingRequest.delete(e,t),n?Promise.resolve():this.client.core.expirer.del(e)]),this.addToRecentlyDeleted(e,`request`),this.sessionRequestQueue.queue=this.sessionRequestQueue.queue.filter(t=>t.id!==e),n&&(this.sessionRequestQueue.state=ys.idle,this.client.events.emit(`session_request_expire`,{id:e}))},this.deletePendingAuthRequest=async(e,t,n=!1)=>{await Promise.all([this.client.auth.requests.delete(e,t),n?Promise.resolve():this.client.core.expirer.del(e)])},this.setExpiry=async(e,t)=>{this.client.session.keys.includes(e)&&(this.client.core.expirer.set(e,t),await this.client.session.update(e,{expiry:t}))},this.setProposal=async(e,t)=>{this.client.core.expirer.set(e,G($.wc_sessionPropose.req.ttl)),await this.client.proposal.set(e,t)},this.setAuthRequest=async(e,t)=>{let{request:n,pairingTopic:r,transportType:i=Q.relay}=t;this.client.core.expirer.set(e,n.expiryTimestamp),await this.client.auth.requests.set(e,{authPayload:n.authPayload,requester:n.requester,expiryTimestamp:n.expiryTimestamp,id:e,pairingTopic:r,verifyContext:n.verifyContext,transportType:i})},this.setPendingSessionRequest=async e=>{let{id:t,topic:n,params:r,verifyContext:i}=e,a=r.request.expiryTimestamp||G($.wc_sessionRequest.req.ttl);this.client.core.expirer.set(t,a),await this.client.pendingRequest.set(t,{id:t,topic:n,params:r,verifyContext:i})},this.sendRequest=async e=>{let{topic:t,method:n,params:r,expiry:a,relayRpcId:o,clientRpcId:s,throwOnFailedPublish:c,appLink:l,tvf:u,publishOpts:d={}}=e,f=ae(n,r,s),p,m=!!l;try{let e=m?Or:J;p=await this.client.core.crypto.encode(t,f,{encoding:e})}catch(e){throw await this.cleanup(),this.client.logger.error(`sendRequest() -> core.crypto.encode() for topic ${t} failed`),e}let h;if(Ss.includes(n)){let e=Rr(JSON.stringify(f)),t=Rr(p);h=await this.client.core.verify.register({id:t,decryptedId:e})}let g={...$[n].req,...d};if(g.attestation=h,a&&(g.ttl=a),o&&(g.id=o),this.client.core.history.set(t,f),m){let e=ci(l,t,p);await i.Linking.openURL(e,this.client.name)}else g.tvf={...u,correlationId:f.id},c?(g.internal={...g.internal,throwOnFailedPublish:!0},await this.client.core.relayer.publish(t,p,g)):this.client.core.relayer.publish(t,p,g).catch(e=>this.client.logger.error(e));return f.id},this.sendProposeSession=async e=>{let{proposal:t,publishOpts:n}=e,r=ae(`wc_sessionPropose`,t,t.id);this.client.core.history.set(t.pairingTopic,r);let i=await this.client.core.crypto.encode(t.pairingTopic,r,{encoding:J}),a=Rr(JSON.stringify(r)),o=Rr(i),s=await this.client.core.verify.register({id:o,decryptedId:a});await this.client.core.relayer.publishCustom({payload:{pairingTopic:t.pairingTopic,sessionProposal:i},opts:{...n,publishMethod:`wc_proposeSession`,attestation:s}})},this.sendApproveSession=async e=>{let{sessionTopic:t,pairingProposalResponse:n,proposal:r,sessionSettleRequest:i,publishOpts:a}=e,o=de(r.id,n),s=await this.client.core.crypto.encode(r.pairingTopic,o,{encoding:J}),c=ae(`wc_sessionSettle`,i,a?.id),l=await this.client.core.crypto.encode(t,c,{encoding:J});this.client.core.history.set(t,c),await this.client.core.relayer.publishCustom({payload:{sessionTopic:t,pairingTopic:r.pairingTopic,sessionProposalResponse:s,sessionSettlementRequest:l},opts:{...a,publishMethod:`wc_approveSession`}})},this.sendResult=async e=>{let{id:t,topic:n,result:r,throwOnFailedPublish:a,encodeOpts:o,appLink:s}=e,c=de(t,r),l,u=s&&typeof i?.Linking<`u`;try{let e=u?Or:J;l=await this.client.core.crypto.encode(n,c,{...o||{},encoding:e})}catch(e){throw await this.cleanup(),this.client.logger.error(`sendResult() -> core.crypto.encode() for topic ${n} failed`),e}let d,f;try{d=await this.client.core.history.get(n,t);let e=d.request;try{f=this.getTVFParams(t,e.params,r)}catch(e){this.client.logger.warn(`sendResult() -> getTVFParams() failed: ${e?.message}`)}}catch(e){throw this.client.logger.error(`sendResult() -> history.get(${n}, ${t}) failed`),e}if(u){let e=ci(s,n,l);await i.Linking.openURL(e,this.client.name)}else{let e=$[d.request.method].res;e.tvf={...f,correlationId:t},a?(e.internal={...e.internal,throwOnFailedPublish:!0},await this.client.core.relayer.publish(n,l,e)):this.client.core.relayer.publish(n,l,e).catch(e=>this.client.logger.error(e))}await this.client.core.history.resolve(c)},this.sendError=async e=>{let{id:t,topic:n,error:r,encodeOpts:a,rpcOpts:o,appLink:s}=e,c=P(t,r),l,u=s&&typeof i?.Linking<`u`;try{let e=u?Or:J;l=await this.client.core.crypto.encode(n,c,{...a||{},encoding:e})}catch(e){throw await this.cleanup(),this.client.logger.error(`sendError() -> core.crypto.encode() for topic ${n} failed`),e}let d;try{d=await this.client.core.history.get(n,t)}catch(e){throw this.client.logger.error(`sendError() -> history.get(${n}, ${t}) failed`),e}if(u){let e=ci(s,n,l);await i.Linking.openURL(e,this.client.name)}else{let e=d.request.method,t=o||$[e].res;this.client.core.relayer.publish(n,l,t)}await this.client.core.history.resolve(c)},this.cleanup=async()=>{let e=[],t=[];this.client.session.getAll().forEach(t=>{let n=!1;pn(t.expiry)&&(n=!0),this.client.core.crypto.keychain.has(t.topic)||(n=!0),n&&e.push(t.topic)}),this.client.proposal.getAll().forEach(e=>{pn(e.expiryTimestamp)&&t.push(e.id)}),await Promise.all([...e.map(e=>this.deleteSession({topic:e})),...t.map(e=>this.deleteProposal(e))])},this.onProviderMessageEvent=async e=>{!this.initialized||this.relayMessageCache.length>0?this.relayMessageCache.push(e):await this.onRelayMessage(e)},this.onRelayEventRequest=async e=>{this.requestQueue.queue.push(e),await this.processRequestsQueue()},this.processRequestsQueue=async()=>{if(this.requestQueue.state===ys.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=ys.active;let e=this.requestQueue.queue.shift();if(e)try{await this.processRequest(e)}catch(e){this.client.logger.warn(e)}}this.requestQueue.state=ys.idle},this.processRequest=async e=>{let{topic:t,payload:n,attestation:r,transportType:i,encryptedId:a}=e,o=n.method;if(!this.shouldIgnorePairingRequest({topic:t,requestMethod:o}))switch(o){case`wc_sessionPropose`:return await this.onSessionProposeRequest({topic:t,payload:n,attestation:r,encryptedId:a});case`wc_sessionSettle`:return await this.onSessionSettleRequest(t,n);case`wc_sessionUpdate`:return await this.onSessionUpdateRequest(t,n);case`wc_sessionExtend`:return await this.onSessionExtendRequest(t,n);case`wc_sessionPing`:return await this.onSessionPingRequest(t,n);case`wc_sessionDelete`:return await this.onSessionDeleteRequest(t,n);case`wc_sessionRequest`:return await this.onSessionRequest({topic:t,payload:n,attestation:r,encryptedId:a,transportType:i});case`wc_sessionEvent`:return await this.onSessionEventRequest(t,n);case`wc_sessionAuthenticate`:return await this.onSessionAuthenticateRequest({topic:t,payload:n,attestation:r,encryptedId:a,transportType:i});default:return this.client.logger.info(`Unsupported request method ${o}`)}},this.onRelayEventResponse=async e=>{let{topic:t,payload:n,transportType:r}=e,i=(await this.client.core.history.get(t,n.id)).request.method;switch(i){case`wc_sessionPropose`:return this.onSessionProposeResponse(t,n,r);case`wc_sessionSettle`:return this.onSessionSettleResponse(t,n);case`wc_sessionUpdate`:return this.onSessionUpdateResponse(t,n);case`wc_sessionExtend`:return this.onSessionExtendResponse(t,n);case`wc_sessionPing`:return this.onSessionPingResponse(t,n);case`wc_sessionRequest`:return this.onSessionRequestResponse(t,n);case`wc_sessionAuthenticate`:return this.onSessionAuthenticateResponse(t,n);default:return this.client.logger.info(`Unsupported response method ${i}`)}},this.onRelayEventUnknownPayload=e=>{let{topic:t}=e,{message:n}=U(`MISSING_OR_INVALID`,`Decoded payload on topic ${t} is not identifiable as a JSON-RPC request or a response.`);throw Error(n)},this.shouldIgnorePairingRequest=e=>{let{topic:t,requestMethod:n}=e,r=this.expectedPairingMethodMap.get(t);return!r||r.includes(n)?!1:!!(r.includes(`wc_sessionAuthenticate`)&&this.client.events.listenerCount(`session_authenticate`)>0)},this.onSessionProposeRequest=async e=>{let{topic:t,payload:n,attestation:r,encryptedId:i}=e,{params:a,id:o}=n;try{let e=this.client.core.eventClient.getEvent({topic:t});this.client.events.listenerCount(`session_proposal`)===0&&(console.warn(`No listener for session_proposal event`),e?.setError(Bo.proposal_listener_not_found)),this.isValidConnect({...n.params});let s={id:o,pairingTopic:t,expiryTimestamp:a.expiryTimestamp||G($.wc_sessionPropose.req.ttl),attestation:r,encryptedId:i,...a};await this.setProposal(o,s);let c=await this.getVerifyContext({attestationId:r,hash:Rr(JSON.stringify(n)),encryptedId:i,metadata:s.proposer.metadata});e?.addTrace(zo.emit_session_proposal),this.client.events.emit(`session_proposal`,{id:o,params:s,verifyContext:c})}catch(e){await this.sendError({id:o,topic:t,error:e,rpcOpts:$.wc_sessionPropose.autoReject}),this.client.logger.error(e)}},this.onSessionProposeResponse=async(e,t,n)=>{let{id:r}=t;if(ce(t)){let{result:i}=t;this.client.logger.trace({type:`method`,method:`onSessionProposeResponse`,result:i});let a=this.client.proposal.get(r);this.client.logger.trace({type:`method`,method:`onSessionProposeResponse`,proposal:a});let o=a.proposer.publicKey;this.client.logger.trace({type:`method`,method:`onSessionProposeResponse`,selfPublicKey:o});let s=i.responderPublicKey;this.client.logger.trace({type:`method`,method:`onSessionProposeResponse`,peerPublicKey:s});let c=await this.client.core.crypto.generateSharedKey(o,s);this.pendingSessions.set(r,{sessionTopic:c,pairingTopic:e,proposalId:r,publicKey:o});let l=await this.client.core.relayer.subscribe(c,{transportType:n});this.client.logger.trace({type:`method`,method:`onSessionProposeResponse`,subscriptionId:l}),await this.client.core.pairing.activate({topic:e})}else if(le(t)){await this.deleteProposal(r);let e=K(`session_connect`,r);if(this.events.listenerCount(e)===0)throw Error(`emitting ${e} without any listeners, 954`);this.events.emit(e,{error:t.error})}},this.onSessionSettleRequest=async(e,t)=>{let{id:n,params:r}=t;try{this.isValidSessionSettleRequest(r);let{relay:n,controller:i,expiry:a,namespaces:o,sessionProperties:s,scopedProperties:c,sessionConfig:l,proposalRequestsResponses:u}=t.params,d=[...this.pendingSessions.values()].find(t=>t.sessionTopic===e);if(!d)return this.client.logger.error(`Pending session not found for topic ${e}`);let f=this.client.proposal.get(d.proposalId),p={topic:e,relay:n,expiry:a,namespaces:o,acknowledged:!0,pairingTopic:d.pairingTopic,requiredNamespaces:f.requiredNamespaces,optionalNamespaces:f.optionalNamespaces,controller:i.publicKey,self:{publicKey:d.publicKey,metadata:this.client.metadata},peer:{publicKey:i.publicKey,metadata:i.metadata},...s&&{sessionProperties:s},...c&&{scopedProperties:c},...l&&{sessionConfig:l},transportType:Q.relay,authentication:u?.authentication,walletPayResult:u?.walletPay};await this.client.session.set(p.topic,p),await this.setExpiry(p.topic,p.expiry),await this.client.core.pairing.updateMetadata({topic:d.pairingTopic,metadata:p.peer.metadata}),this.pendingSessions.delete(d.proposalId),this.deleteProposal(d.proposalId,!1),this.cleanupDuplicatePairings(p),await this.sendResult({id:t.id,topic:e,throwOnFailedPublish:!0,result:!0}),this.client.events.emit(`session_connect`,{session:p}),this.events.emit(K(`session_connect`,d.proposalId),{session:p})}catch(t){await this.sendError({id:n,topic:e,error:t}),this.client.logger.error(t)}},this.onSessionSettleResponse=async(e,t)=>{let{id:n}=t;ce(t)?(await this.client.session.update(e,{acknowledged:!0}),this.events.emit(K(`session_approve`,n),{})):le(t)&&(await this.deleteSession({topic:e,emitEvent:!1}),this.events.emit(K(`session_approve`,n),{error:t.error}))},this.onSessionUpdateRequest=async(e,t)=>{let{params:n,id:r}=t;try{let t=`${e}_session_update`,i=da.get(t);if(i&&this.isRequestOutOfSync(i,r)){this.client.logger.warn(`Discarding out of sync request - ${r}`),this.sendError({id:r,topic:e,error:W(`INVALID_UPDATE_REQUEST`)});return}await this.isValidUpdate({topic:e,...n});let a=this.client.session.get(e);if(a.peer.publicKey!==a.controller)throw W(`UNAUTHORIZED_UPDATE_REQUEST`);try{da.set(t,r),await this.client.session.update(e,{namespaces:n.namespaces}),await this.sendResult({id:r,topic:e,result:!0})}catch(e){throw da.delete(t),e}this.client.events.emit(`session_update`,{id:r,topic:e,params:n})}catch(t){await this.sendError({id:r,topic:e,error:t}),this.client.logger.error(t)}},this.isRequestOutOfSync=(e,t)=>t.toString().slice(0,-3)<e.toString().slice(0,-3),this.onSessionUpdateResponse=(e,t)=>{let{id:n}=t,r=K(`session_update`,n);if(this.events.listenerCount(r)===0)throw Error(`emitting ${r} without any listeners`);ce(t)?this.events.emit(K(`session_update`,n),{}):le(t)&&this.events.emit(K(`session_update`,n),{error:t.error})},this.onSessionExtendRequest=async(e,t)=>{let{id:n}=t;try{await this.isValidExtend({topic:e}),await this.setExpiry(e,G(gs)),await this.sendResult({id:n,topic:e,result:!0}),this.client.events.emit(`session_extend`,{id:n,topic:e})}catch(t){await this.sendError({id:n,topic:e,error:t}),this.client.logger.error(t)}},this.onSessionExtendResponse=(e,t)=>{let{id:n}=t,r=K(`session_extend`,n);if(this.events.listenerCount(r)===0)throw Error(`emitting ${r} without any listeners`);ce(t)?this.events.emit(K(`session_extend`,n),{}):le(t)&&this.events.emit(K(`session_extend`,n),{error:t.error})},this.onSessionPingRequest=async(e,t)=>{let{id:n}=t;try{this.isValidPing({topic:e}),await this.sendResult({id:n,topic:e,result:!0,throwOnFailedPublish:!0}),this.client.events.emit(`session_ping`,{id:n,topic:e})}catch(t){await this.sendError({id:n,topic:e,error:t}),this.client.logger.error(t)}},this.onSessionPingResponse=(e,t)=>{let{id:n}=t,r=K(`session_ping`,n);setTimeout(()=>{if(this.events.listenerCount(r)===0)throw Error(`emitting ${r} without any listeners 2176`);ce(t)?this.events.emit(K(`session_ping`,n),{}):le(t)&&this.events.emit(K(`session_ping`,n),{error:t.error})},500)},this.onSessionDeleteRequest=async(e,t)=>{let{id:n}=t;try{await this.isValidDisconnect({topic:e,reason:t.params}),this.cleanupPendingSentRequestsForTopic({topic:e,error:W(`USER_DISCONNECTED`)}),await this.deleteSession({topic:e,id:n})}catch(e){this.client.logger.error(e)}},this.onSessionRequest=async e=>{let{topic:t,payload:n,attestation:r,encryptedId:i,transportType:a}=e,{id:o,params:s}=n;try{await this.isValidRequest({topic:t,...s});let e=this.client.session.get(t),n={id:o,topic:t,params:s,verifyContext:await this.getVerifyContext({attestationId:r,hash:Rr(JSON.stringify(ae(`wc_sessionRequest`,s,o))),encryptedId:i,metadata:e.peer.metadata,transportType:a})};await this.setPendingSessionRequest(n),a===Q.link_mode&&e.peer.metadata.redirect?.universal&&this.client.core.addLinkModeSupportedApp(e.peer.metadata.redirect?.universal),this.client.signConfig?.disableRequestQueue?this.emitSessionRequest(n):(this.addSessionRequestToSessionRequestQueue(n),this.processSessionRequestQueue())}catch(e){await this.sendError({id:o,topic:t,error:e}),this.client.logger.error(e)}},this.onSessionRequestResponse=(e,t)=>{let{id:n}=t,r=K(`session_request`,n);if(this.events.listenerCount(r)===0)throw Error(`emitting ${r} without any listeners`);ce(t)?this.events.emit(K(`session_request`,n),{result:t.result}):le(t)&&this.events.emit(K(`session_request`,n),{error:t.error})},this.onSessionEventRequest=async(e,t)=>{let{id:n,params:r}=t;try{let t=`${e}_session_event_${r.event.name}`,i=da.get(t);if(i&&this.isRequestOutOfSync(i,n)){this.client.logger.info(`Discarding out of sync request - ${n}`);return}this.isValidEmit({topic:e,...r}),this.client.events.emit(`session_event`,{id:n,topic:e,params:r}),da.set(t,n)}catch(t){await this.sendError({id:n,topic:e,error:t}),this.client.logger.error(t)}},this.onSessionAuthenticateResponse=(e,t)=>{let{id:n}=t;this.client.logger.trace({type:`method`,method:`onSessionAuthenticateResponse`,topic:e,payload:t}),ce(t)?this.events.emit(K(`session_request`,n),{result:t.result}):le(t)&&this.events.emit(K(`session_request`,n),{error:t.error})},this.onSessionAuthenticateRequest=async e=>{let{topic:t,payload:n,attestation:r,encryptedId:i,transportType:a}=e;try{let{requester:e,authPayload:o,expiryTimestamp:s}=n.params,c=await this.getVerifyContext({attestationId:r,hash:Rr(JSON.stringify(n)),encryptedId:i,metadata:e.metadata,transportType:a}),l={requester:e,pairingTopic:t,id:n.id,authPayload:o,verifyContext:c,expiryTimestamp:s};await this.setAuthRequest(n.id,{request:l,pairingTopic:t,transportType:a}),a===Q.link_mode&&e.metadata.redirect?.universal&&this.client.core.addLinkModeSupportedApp(e.metadata.redirect.universal),this.client.events.emit(`session_authenticate`,{topic:t,params:n.params,id:n.id,verifyContext:c})}catch(e){this.client.logger.error(e);let r=n.params.requester.publicKey,i=await this.client.core.crypto.generateKeyPair(),o=this.getAppLinkIfEnabled(n.params.requester.metadata,a),s={type:1,receiverPublicKey:r,senderPublicKey:i};await this.sendError({id:n.id,topic:t,error:e,encodeOpts:s,rpcOpts:$.wc_sessionAuthenticate.autoReject,appLink:o})}},this.addSessionRequestToSessionRequestQueue=e=>{this.sessionRequestQueue.queue.push(e)},this.cleanupAfterResponse=e=>{this.deletePendingSessionRequest(e.response.id,{message:`fulfilled`,code:0}),setTimeout(()=>{this.sessionRequestQueue.state=ys.idle,this.processSessionRequestQueue()},(0,z.toMiliseconds)(this.requestQueueDelay))},this.cleanupPendingSentRequestsForTopic=({topic:e,error:t})=>{let n=this.client.core.history.pending;n.length>0&&n.filter(t=>t.topic===e&&t.request.method===`wc_sessionRequest`).forEach(e=>{this.events.emit(K(`session_request`,e.request.id),{error:t})})},this.processSessionRequestQueue=()=>{if(this.sessionRequestQueue.state===ys.active){this.client.logger.info(`session request queue is already active.`);return}let e=this.sessionRequestQueue.queue[0];if(!e){this.client.logger.info(`session request queue is empty.`);return}try{this.emitSessionRequest(e)}catch(e){this.client.logger.error(e)}},this.emitSessionRequest=e=>{if(this.emittedSessionRequests.has(e.id)){this.client.logger.warn({id:e.id},`Skipping emitting \`session_request\` event for duplicate request. id: ${e.id}`);return}this.sessionRequestQueue.state=ys.active,this.emittedSessionRequests.add(e.id),this.client.events.emit(`session_request`,e)},this.cleanupInProgress=!1,this.cleanupOrphanedSubscriptions=async()=>{let e=this.client.core.relayer.subscriber.topics;if(e.length===0)return;let t=new Set(this.client.session.keys),n=new Set(this.client.core.pairing.pairings.keys),r=new Set([...this.pendingSessions.values()].map(e=>e.sessionTopic)),i;if(this.client.auth.authKeys.keys.includes(Os)){let{responseTopic:e}=this.client.auth.authKeys.get(Os);i=e}for(let a of e)if(!t.has(a)&&!n.has(a)&&!r.has(a)&&a!==i){this.client.logger.info(`Cleaning up orphaned subscriber topic: ${a}`);try{await this.client.core.relayer.subscriber.unsubscribe(a)}catch(e){this.client.logger.warn(e,`Failed to clean up orphaned subscription: ${a}`)}}},this.onPairingCreated=e=>{if(e.methods&&this.expectedPairingMethodMap.set(e.topic,e.methods),e.active)return;let t=this.client.proposal.getAll().find(t=>t.pairingTopic===e.topic);t&&this.onSessionProposeRequest({topic:e.topic,payload:ae(`wc_sessionPropose`,{...t,requiredNamespaces:t.requiredNamespaces,optionalNamespaces:t.optionalNamespaces,relays:t.relays,proposer:t.proposer,sessionProperties:t.sessionProperties,scopedProperties:t.scopedProperties},t.id),attestation:t.attestation,encryptedId:t.encryptedId})},this.isValidConnect=async e=>{if(!Ui(e)){let{message:t}=U(`MISSING_OR_INVALID`,`connect() params: ${JSON.stringify(e)}`);throw Error(t)}let{pairingTopic:t,requiredNamespaces:n,optionalNamespaces:r,sessionProperties:i,scopedProperties:a,relays:o}=e;if(Y(t)||await this.isValidPairingTopic(t),!Vi(o,!0)){let{message:e}=U(`MISSING_OR_INVALID`,`connect() relays: ${o}`);throw Error(e)}if(n&&!Y(n)&&Si(n)!==0){let e=`requiredNamespaces are deprecated and are automatically assigned to optionalNamespaces`;[`fatal`,`error`,`silent`].includes(this.client.logger.level)?console.warn(e):this.client.logger.warn(e),this.validateNamespaces(n,`requiredNamespaces`)}if(r&&!Y(r)&&Si(r)!==0&&this.validateNamespaces(r,`optionalNamespaces`),i&&!Y(i)&&this.validateSessionProps(i,`sessionProperties`),a&&!Y(a)){this.validateSessionProps(a,`scopedProperties`);let e=Object.keys(n||{}).concat(Object.keys(r||{}));if(!Object.keys(a).every(t=>e.includes(t.split(`:`)[0])))throw Error(`Scoped properties must be a subset of required/optional namespaces, received: ${JSON.stringify(a)}, required/optional namespaces: ${JSON.stringify(e)}`)}},this.validateNamespaces=(e,t)=>{let n=Ri(e,`connect()`,t);if(n)throw Error(n.message)},this.isValidApprove=async e=>{if(!Ui(e))throw Error(U(`MISSING_OR_INVALID`,`approve() params: ${e}`).message);let{id:t,namespaces:n,relayProtocol:r,sessionProperties:i,scopedProperties:a}=e;this.checkRecentlyDeleted(t),await this.isValidProposalId(t);let o=this.client.proposal.get(t),s=zi(n,`approve()`);if(s)throw Error(s.message);let c=Zi(o.requiredNamespaces,n,`approve()`);if(c)throw Error(c.message);if(!X(r,!0)){let{message:e}=U(`MISSING_OR_INVALID`,`approve() relayProtocol: ${r}`);throw Error(e)}if(i&&!Y(i)&&this.validateSessionProps(i,`sessionProperties`),a&&!Y(a)){this.validateSessionProps(a,`scopedProperties`);let e=new Set(Object.keys(n));if(!Object.keys(a).every(t=>e.has(t.split(`:`)[0])))throw Error(`Scoped properties must be a subset of approved namespaces, received: ${JSON.stringify(a)}, approved namespaces: ${Array.from(e).join(`, `)}`)}},this.isValidReject=async e=>{if(!Ui(e)){let{message:t}=U(`MISSING_OR_INVALID`,`reject() params: ${e}`);throw Error(t)}let{id:t,reason:n}=e;if(this.checkRecentlyDeleted(t),await this.isValidProposalId(t),!Wi(n)){let{message:e}=U(`MISSING_OR_INVALID`,`reject() reason: ${JSON.stringify(n)}`);throw Error(e)}},this.isValidSessionSettleRequest=e=>{if(!Ui(e)){let{message:t}=U(`MISSING_OR_INVALID`,`onSessionSettleRequest() params: ${e}`);throw Error(t)}let{relay:t,controller:n,namespaces:r,expiry:i}=e;if(!Bi(t)){let{message:e}=U(`MISSING_OR_INVALID`,`onSessionSettleRequest() relay protocol should be a string`);throw Error(e)}let a=Ai(n,`onSessionSettleRequest()`);if(a)throw Error(a.message);let o=zi(r,`onSessionSettleRequest()`);if(o)throw Error(o.message);if(pn(i)){let{message:e}=U(`EXPIRED`,`onSessionSettleRequest()`);throw Error(e)}},this.isValidUpdate=async e=>{if(!Ui(e)){let{message:t}=U(`MISSING_OR_INVALID`,`update() params: ${e}`);throw Error(t)}let{topic:t,namespaces:n}=e;this.checkRecentlyDeleted(t),await this.isValidSessionTopic(t);let r=this.client.session.get(t),i=zi(n,`update()`);if(i)throw Error(i.message);let a=Zi(r.requiredNamespaces,n,`update()`);if(a)throw Error(a.message)},this.isValidExtend=async e=>{if(!Ui(e)){let{message:t}=U(`MISSING_OR_INVALID`,`extend() params: ${e}`);throw Error(t)}let{topic:t}=e;this.checkRecentlyDeleted(t),await this.isValidSessionTopic(t)},this.isValidRequest=async e=>{if(!Ui(e)){let{message:t}=U(`MISSING_OR_INVALID`,`request() params: ${e}`);throw Error(t)}let{topic:t,request:n,chainId:r,expiry:i}=e;this.checkRecentlyDeleted(t),await this.isValidSessionTopic(t);let{namespaces:a}=this.client.session.get(t);if(!Ji(a,r)){let{message:e}=U(`MISSING_OR_INVALID`,`request() chainId: ${r}`);throw Error(e)}if(!Gi(n)){let{message:e}=U(`MISSING_OR_INVALID`,`request() ${JSON.stringify(n)}`);throw Error(e)}if(!Yi(a,r,n.method)){let{message:e}=U(`MISSING_OR_INVALID`,`request() method: ${n.method}`);throw Error(e)}this.validateRequestExpiry(i)},this.isValidRespond=async e=>{if(!Ui(e)){let{message:t}=U(`MISSING_OR_INVALID`,`respond() params: ${e}`);throw Error(t)}let{topic:t,response:n}=e;try{await this.isValidSessionTopic(t)}catch(t){throw e?.response?.id&&this.cleanupAfterResponse(e),t}if(!Ki(n)){let{message:e}=U(`MISSING_OR_INVALID`,`respond() response: ${JSON.stringify(n)}`);throw Error(e)}let r=this.client.pendingRequest.get(n.id);if(r.topic!==t){let{message:e}=U(`MISMATCHED_TOPIC`,`Request response topic mismatch. reqId: ${n.id}, expected topic: ${r.topic}, received topic: ${t}`);throw Error(e)}},this.isValidPing=async e=>{if(!Ui(e)){let{message:t}=U(`MISSING_OR_INVALID`,`ping() params: ${e}`);throw Error(t)}let{topic:t}=e;await this.isValidSessionOrPairingTopic(t)},this.isValidEmit=async e=>{if(!Ui(e)){let{message:t}=U(`MISSING_OR_INVALID`,`emit() params: ${e}`);throw Error(t)}let{topic:t,event:n,chainId:r}=e;await this.isValidSessionTopic(t);let{namespaces:i}=this.client.session.get(t);if(!Ji(i,r)){let{message:e}=U(`MISSING_OR_INVALID`,`emit() chainId: ${r}`);throw Error(e)}if(!qi(n)){let{message:e}=U(`MISSING_OR_INVALID`,`emit() event: ${JSON.stringify(n)}`);throw Error(e)}if(!Xi(i,r,n.name)){let{message:e}=U(`MISSING_OR_INVALID`,`emit() event: ${JSON.stringify(n)}`);throw Error(e)}},this.isValidDisconnect=async e=>{if(!Ui(e)){let{message:t}=U(`MISSING_OR_INVALID`,`disconnect() params: ${e}`);throw Error(t)}let{topic:t}=e;await this.isValidSessionOrPairingTopic(t)},this.isValidAuthenticate=e=>{let{chains:t,uri:n,domain:r,nonce:i}=e;if(!Array.isArray(t)||t.length===0)throw Error(`chains is required and must be a non-empty array`);if(!X(n,!1))throw Error(`uri is required parameter`);if(!X(r,!1))throw Error(`domain is required parameter`);if(!X(i,!1))throw Error(`nonce is required parameter`);if([...new Set(t.map(e=>Rt(e).namespace))].length>1)throw Error(`Multi-namespace requests are not supported. Please request single namespace only.`);let{namespace:a}=Rt(t[0]);if(a!==`eip155`)throw Error(`Only eip155 namespace is supported for authenticated sessions. Please use .connect() for non-eip155 chains.`)},this.getVerifyContext=async e=>{let{attestationId:t,hash:n,encryptedId:r,metadata:i,transportType:a}=e,o={verified:{verifyUrl:i.verifyUrl||`https://verify.walletconnect.org`,validation:`UNKNOWN`,origin:i.url||``}};try{if(a===Q.link_mode){let e=this.getAppLinkIfEnabled(i,a);return o.verified.validation=e&&new URL(e).origin===new URL(i.url).origin?`VALID`:`INVALID`,o}let e=await this.client.core.verify.resolve({attestationId:t,hash:n,encryptedId:r,verifyUrl:i.verifyUrl});e&&(o.verified.origin=e.origin,o.verified.isScam=e.isScam,o.verified.validation=e.origin===new URL(i.url).origin?`VALID`:`INVALID`)}catch(e){this.client.logger.warn(e)}return this.client.logger.debug(`Verify context: ${JSON.stringify(o)}`),o},this.validateSessionProps=(e,t)=>{Object.values(e).forEach((n,r)=>{if(n==null){let{message:i}=U(`MISSING_OR_INVALID`,`${t} must contain an existing value for each key. Received: ${n} for key ${Object.keys(e)[r]}`);throw Error(i)}})},this.getPendingAuthRequest=e=>{let t=this.client.auth.requests.get(e);return typeof t==`object`?t:void 0},this.addToRecentlyDeleted=(e,t)=>{if(this.recentlyDeletedMap.set(e,t),this.recentlyDeletedMap.size>=this.recentlyDeletedLimit){let e=0,t=this.recentlyDeletedLimit/2;for(let n of this.recentlyDeletedMap.keys()){if(e++>=t)break;this.recentlyDeletedMap.delete(n)}}},this.checkRecentlyDeleted=e=>{let t=this.recentlyDeletedMap.get(e);if(t){let{message:n}=U(`MISSING_OR_INVALID`,`Record was recently deleted - ${t}: ${e}`);throw Error(n)}},this.isLinkModeEnabled=(e,t)=>!e||t!==Q.link_mode?!1:this.client.metadata?.redirect?.linkMode===!0&&this.client.metadata?.redirect?.universal!==void 0&&this.client.metadata?.redirect?.universal!==``&&e?.redirect?.universal!==void 0&&e?.redirect?.universal!==``&&e?.redirect?.linkMode===!0&&this.client.core.linkModeSupportedApps.includes(e.redirect.universal)&&typeof i?.Linking<`u`,this.getAppLinkIfEnabled=(e,t)=>this.isLinkModeEnabled(e,t)?e?.redirect?.universal:void 0,this.handleLinkModeMessage=({url:e})=>{if(!e||!e.includes(`wc_ev`)||!e.includes(`topic`))return;let t=yn(e,`topic`)||``,n=decodeURIComponent(yn(e,`wc_ev`)||``),r=this.client.session.keys.includes(t);r&&this.client.session.update(t,{transportType:Q.link_mode}),this.client.core.dispatchEnvelope({topic:t,message:n,sessionExists:r})},this.registerLinkModeListeners=async()=>{if(xn()||Wt()&&this.client.metadata.redirect?.linkMode){let e=i?.Linking;if(typeof e<`u`){e.addEventListener(`url`,this.handleLinkModeMessage,this.client.name);let t=await e.getInitialURL();t&&setTimeout(()=>{this.handleLinkModeMessage({url:t})},50)}}},this.getTVFApproveParams=e=>{try{return{approvedChains:ui(e.namespaces),approvedMethods:di(e.namespaces),approvedEvents:fi(e.namespaces),sessionProperties:e.sessionProperties,scopedProperties:e.scopedProperties}}catch(e){return this.client.logger.warn(e,`Error getting TVF approve params`),{}}},this.getTVFParams=(e,t,n)=>{if(!t.request?.method)return{};let r={correlationId:e,rpcMethods:[t.request.method],chainId:t.chainId};try{r.txHashes=this.extractTxHashesFromResult(t.request,n),r.contractAddresses=this.isValidContractData(t.request.params)?[t.request.params?.[0]?.to]:[]}catch(e){this.client.logger.warn(e,`Error getting TVF params`)}return r},this.isValidContractData=e=>{if(!e)return!1;try{let t=e?.data||e?.[0]?.data;if(!t.startsWith(`0x`))return!1;let n=t.slice(2);return/^[0-9a-fA-F]*$/.test(n)?n.length%2==0:!1}catch{}return!1},this.extractTxHashesFromResult=(e,t)=>{try{if(!t)return[];let n=e.method,r=bs[n];if(n===`sui_signTransaction`)return[Rn(t.transactionBytes)];if(n===`near_signTransaction`)return[zn(t)];if(n===`near_signTransactions`)return t.map(e=>zn(e));if(n===`xrpl_signTransactionFor`||n===`xrpl_signTransaction`)return[t.tx_json?.hash];if(n===`polkadot_signTransaction`)return[ba({transaction:e.params.transactionPayload,signature:t.signature})];if(n===`algo_signTxn`)return xi(t)?t.map(e=>Vn(e)):[Vn(t)];if(n===`cosmos_signDirect`)return[Un(t)];if(n===`stellar_signXDR`)return[$n(t.signedXDR,e.params?.chain)];if(n===`wallet_sendCalls`)return er(t);if(n===`canton_prepareSignExecute`)return Ca(e.params,t);if(typeof t==`string`)return[t];let i=t[r.key];if(xi(i))return n===`solana_signAllTransactions`?i.map(e=>Ln(e)):i;if(typeof i==`string`)return[i]}catch(e){this.client.logger.warn(e,`Error extracting tx hashes from result`)}return[]}}async processPendingMessageEvents(){try{let e=this.client.session.keys,t=this.client.core.relayer.messages.getWithoutAck(e);for(let[e,n]of Object.entries(t))for(let t of n)try{await this.onProviderMessageEvent({topic:e,message:t,publishedAt:Date.now()})}catch{this.client.logger.warn(`Error processing pending message event for topic: ${e}, message: ${t}`)}}catch(e){this.client.logger.warn(e,`processPendingMessageEvents failed`)}}isInitialized(){if(!this.initialized){let{message:e}=U(`NOT_INITIALIZED`,this.name);throw Error(e)}}async confirmOnlineStateOrThrow(){await this.client.core.relayer.confirmOnlineStateOrThrow()}registerRelayerEvents(){this.client.core.relayer.on(Z.message,e=>{this.onProviderMessageEvent(e)})}async onRelayMessage(e){let{topic:t,message:n,attestation:r,transportType:i}=e,{publicKey:a}=this.client.auth.authKeys.keys.includes(Os)?this.client.auth.authKeys.get(Os):{publicKey:void 0};try{try{if(i!==Q.link_mode&&this.client.core.crypto.getPayloadType(n,`base64url`)===2){this.client.logger.warn(`onRelayMessage() -> non-link mode TYPE_2 payload ignored: ${n}`);return}}catch{}let e=await this.client.core.crypto.decode(t,n,{receiverPublicKey:a,encoding:i===Q.link_mode?Or:J});re(e)?(this.client.core.history.set(t,e),await this.onRelayEventRequest({topic:t,payload:e,attestation:r,transportType:i,encryptedId:Rr(n)})):M(e)?(await this.client.core.history.resolve(e),await this.onRelayEventResponse({topic:t,payload:e,transportType:i}),this.client.core.history.delete(t,e.id)):(this.client.logger.error(`onRelayMessage() -> unknown payload: ${JSON.stringify(e)}`),await this.onRelayEventUnknownPayload({topic:t,payload:e,transportType:i})),await this.client.core.relayer.messages.ack(t,n)}catch(e){this.client.logger.error(`onRelayMessage() -> failed to process an inbound message: ${n}`),this.client.logger.error(e?.message)}}registerExpirerEvents(){this.client.core.expirer.on(jo.expired,async e=>{let{topic:t,id:n}=fn(e.target);if(n&&this.client.pendingRequest.keys.includes(n))return await this.deletePendingSessionRequest(n,U(`EXPIRED`),!0);if(n&&this.client.auth.requests.keys.includes(n))return await this.deletePendingAuthRequest(n,U(`EXPIRED`),!0);t?this.client.session.keys.includes(t)&&(await this.deleteSession({topic:t,expirerHasDeleted:!0}),this.client.events.emit(`session_expire`,{topic:t})):n&&(await this.deleteProposal(n,!0),this.client.events.emit(`proposal_expire`,{id:n}))})}registerSubscriptionCleanup(){this.client.core.heartbeat.on(`heartbeat_pulse`,async()=>{if(!this.cleanupInProgress){this.cleanupInProgress=!0;try{await this.cleanupOrphanedSubscriptions()}catch(e){this.client.logger.warn(e)}finally{this.cleanupInProgress=!1}}})}registerPairingEvents(){this.client.core.pairing.events.on(Do.create,e=>this.onPairingCreated(e)),this.client.core.pairing.events.on(Do.delete,e=>{this.addToRecentlyDeleted(e.topic,`pairing`)})}isValidPairingTopic(e){if(!X(e,!1)){let{message:t}=U(`MISSING_OR_INVALID`,`pairing topic should be a string: ${e}`);throw Error(t)}if(!this.client.core.pairing.pairings.keys.includes(e)){let{message:t}=U(`NO_MATCHING_KEY`,`pairing topic doesn't exist: ${e}`);throw Error(t)}if(pn(this.client.core.pairing.pairings.get(e).expiry)){let{message:t}=U(`EXPIRED`,`pairing topic: ${e}`);throw Error(t)}}async isValidSessionTopic(e){if(!X(e,!1)){let{message:t}=U(`MISSING_OR_INVALID`,`session topic should be a string: ${e}`);throw Error(t)}if(this.checkRecentlyDeleted(e),!this.client.session.keys.includes(e)){let{message:t}=U(`NO_MATCHING_KEY`,`session topic doesn't exist: ${e}`);throw Error(t)}if(pn(this.client.session.get(e).expiry)){await this.deleteSession({topic:e});let{message:t}=U(`EXPIRED`,`session topic: ${e}`);throw Error(t)}if(!this.client.core.crypto.keychain.has(e)){let{message:t}=U(`MISSING_OR_INVALID`,`session topic does not exist in keychain: ${e}`);throw await this.deleteSession({topic:e}),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(X(e,!1)){let{message:t}=U(`NO_MATCHING_KEY`,`session or pairing topic doesn't exist: ${e}`);throw Error(t)}else{let{message:t}=U(`MISSING_OR_INVALID`,`session or pairing topic should be a string: ${e}`);throw Error(t)}}async isValidProposalId(e){if(!Hi(e)){let{message:t}=U(`MISSING_OR_INVALID`,`proposal id should be a number: ${e}`);throw Error(t)}if(!this.client.proposal.keys.includes(e)){let{message:t}=U(`NO_MATCHING_KEY`,`proposal id doesn't exist: ${e}`);throw Error(t)}if(pn(this.client.proposal.get(e).expiryTimestamp)){await this.deleteProposal(e);let{message:t}=U(`EXPIRED`,`proposal id: ${e}`);throw Error(t)}}validateRequestExpiry(e){if(e&&!ta(e,vs)){let{message:t}=U(`MISSING_OR_INVALID`,`request() expiry: ${e}. Expiry must be a number (in seconds) between ${vs.min} and ${vs.max}`);throw Error(t)}}},As=class extends ts{constructor(e,t){super(e,t,ps,us),this.core=e,this.logger=t}},js=class extends ts{constructor(e,t){super(e,t,hs,us),this.core=e,this.logger=t}},Ms=class extends ts{constructor(e,t){super(e,t,xs,us,e=>e.id),this.core=e,this.logger=t}},Ns=class extends ts{constructor(e,t){super(e,t,ws,Ds,()=>Os),this.core=e,this.logger=t}},Ps=class extends ts{constructor(e,t){super(e,t,Ts,Ds),this.core=e,this.logger=t}},Fs=class extends ts{constructor(e,t){super(e,t,Es,Ds,e=>e.id),this.core=e,this.logger=t}},Is=class{constructor(e,t){this.core=e,this.logger=t,this.authKeys=new Ns(this.core,this.logger),this.pairingTopics=new Ps(this.core,this.logger),this.requests=new Fs(this.core,this.logger)}async init(){await this.authKeys.init(),await this.pairingTopics.init(),await this.requests.init()}},Ls=class e extends st{constructor(e){super(e),this.protocol=`wc`,this.version=2,this.name=ds.name,this.events=new Oe.EventEmitter,this.on=(e,t)=>this.events.on(e,t),this.once=(e,t)=>this.events.once(e,t),this.off=(e,t)=>this.events.off(e,t),this.removeListener=(e,t)=>this.events.removeListener(e,t),this.removeAllListeners=e=>this.events.removeAllListeners(e),this.connect=async e=>{try{return await this.engine.connect(e)}catch(e){throw this.logger.error(e.message),e}},this.pair=async e=>{try{return await this.engine.pair(e)}catch(e){throw this.logger.error(e.message),e}},this.approve=async e=>{try{return await this.engine.approve(e)}catch(e){throw this.logger.error(e.message),e}},this.reject=async e=>{try{return await this.engine.reject(e)}catch(e){throw this.logger.error(e.message),e}},this.update=async e=>{try{return await this.engine.update(e)}catch(e){throw this.logger.error(e.message),e}},this.extend=async e=>{try{return await this.engine.extend(e)}catch(e){throw this.logger.error(e.message),e}},this.request=async e=>{try{return await this.engine.request(e)}catch(e){throw this.logger.error(e.message),e}},this.respond=async e=>{try{return await this.engine.respond(e)}catch(e){throw this.logger.error(e.message),e}},this.ping=async e=>{try{return await this.engine.ping(e)}catch(e){throw this.logger.error(e.message),e}},this.emit=async e=>{try{return await this.engine.emit(e)}catch(e){throw this.logger.error(e.message),e}},this.disconnect=async e=>{try{return await this.engine.disconnect(e)}catch(e){throw this.logger.error(e.message),e}},this.find=e=>{try{return this.engine.find(e)}catch(e){throw this.logger.error(e.message),e}},this.getPendingSessionRequests=()=>{try{return this.engine.getPendingSessionRequests()}catch(e){throw this.logger.error(e.message),e}},this.authenticate=async(e,t)=>{try{return console.warn("[WalletConnect] `authenticate` is deprecated and will be removed in a future release. Use `connect()`'s `authentication` instead to establish an authenticated session."),await this.engine.authenticate(e,t)}catch(e){throw this.logger.error(e.message),e}},this.formatAuthMessage=e=>{try{return this.engine.formatAuthMessage(e)}catch(e){throw this.logger.error(e.message),e}},this.approveSessionAuthenticate=async e=>{try{return await this.engine.approveSessionAuthenticate(e)}catch(e){throw this.logger.error(e.message),e}},this.rejectSessionAuthenticate=async e=>{try{return await this.engine.rejectSessionAuthenticate(e)}catch(e){throw this.logger.error(e.message),e}},this.name=e?.name||ds.name,this.metadata=Zt(e?.metadata),this.signConfig=e?.signConfig;let t=wa({logger:e?.logger||ds.logger,name:this.name});this.logger=t,this.core=e?.core||new cs(e),this.session=new js(this.core,this.logger),this.proposal=new As(this.core,this.logger),this.pendingRequest=new Ms(this.core,this.logger),this.engine=new ks(this),this.auth=new Is(this.core,this.logger)}static async init(t){let n=new e(t);return await n.initialize(),n}get context(){return ve(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`)}catch(e){throw this.logger.info(`SignClient Initialization Failure`),this.logger.error(e.message),e}}};export{Ls as SignClient};