@hsuite/native-connect-angular 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (276) hide show
  1. package/README.md +48 -0
  2. package/USAGE_EXAMPLES.md +476 -0
  3. package/assets/wallets/extension.svg +7 -0
  4. package/assets/wallets/hashpack.svg +6 -0
  5. package/assets/wallets/hsuite.svg +11 -0
  6. package/assets/wallets/kabila.svg +11 -0
  7. package/assets/wallets/walletconnect.svg +13 -0
  8. package/coverage/base.css +224 -0
  9. package/coverage/block-navigation.js +87 -0
  10. package/coverage/coverage-summary.json +50 -0
  11. package/coverage/favicon.png +0 -0
  12. package/coverage/index.html +476 -0
  13. package/coverage/lcov-report/base.css +224 -0
  14. package/coverage/lcov-report/block-navigation.js +87 -0
  15. package/coverage/lcov-report/favicon.png +0 -0
  16. package/coverage/lcov-report/index.html +476 -0
  17. package/coverage/lcov-report/lib/components/account-selector/account-actions/account-actions.component.ts.html +868 -0
  18. package/coverage/lcov-report/lib/components/account-selector/account-actions/index.html +116 -0
  19. package/coverage/lcov-report/lib/components/account-selector/account-filter/account-filter.component.ts.html +1288 -0
  20. package/coverage/lcov-report/lib/components/account-selector/account-filter/index.html +116 -0
  21. package/coverage/lcov-report/lib/components/account-selector/account-formatting.service.ts.html +685 -0
  22. package/coverage/lcov-report/lib/components/account-selector/account-grouping.service.ts.html +766 -0
  23. package/coverage/lcov-report/lib/components/account-selector/account-list/account-list.component.ts.html +1495 -0
  24. package/coverage/lcov-report/lib/components/account-selector/account-list/index.html +116 -0
  25. package/coverage/lcov-report/lib/components/account-selector/account-selector.component.ts.html +1495 -0
  26. package/coverage/lcov-report/lib/components/account-selector/account-selector.service.ts.html +1588 -0
  27. package/coverage/lcov-report/lib/components/account-selector/index.html +161 -0
  28. package/coverage/lcov-report/lib/components/wallet-account-display/index.html +116 -0
  29. package/coverage/lcov-report/lib/components/wallet-account-display/wallet-account-display.component.ts.html +505 -0
  30. package/coverage/lcov-report/lib/components/wallet-connect-button/index.html +116 -0
  31. package/coverage/lcov-report/lib/components/wallet-connect-button/wallet-connect-button.component.ts.html +805 -0
  32. package/coverage/lcov-report/lib/components/wallet-connect-prompt/index.html +116 -0
  33. package/coverage/lcov-report/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.ts.html +409 -0
  34. package/coverage/lcov-report/lib/components/wallet-connected-guard/index.html +116 -0
  35. package/coverage/lcov-report/lib/components/wallet-connected-guard/wallet-connected-guard.component.ts.html +304 -0
  36. package/coverage/lcov-report/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.ts.html +436 -0
  37. package/coverage/lcov-report/lib/components/wallet-connection-modal/connection-method-step/index.html +116 -0
  38. package/coverage/lcov-report/lib/components/wallet-connection-modal/index.html +116 -0
  39. package/coverage/lcov-report/lib/components/wallet-connection-modal/qr-pairing-step/index.html +116 -0
  40. package/coverage/lcov-report/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.ts.html +2287 -0
  41. package/coverage/lcov-report/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts.html +2275 -0
  42. package/coverage/lcov-report/lib/components/wallet-session-display/index.html +116 -0
  43. package/coverage/lcov-report/lib/components/wallet-session-display/wallet-session-display.component.ts.html +676 -0
  44. package/coverage/lcov-report/lib/components/wallet-transaction-status/index.html +116 -0
  45. package/coverage/lcov-report/lib/components/wallet-transaction-status/wallet-transaction-status.component.ts.html +703 -0
  46. package/coverage/lcov-report/lib/directives/index.html +146 -0
  47. package/coverage/lcov-report/lib/directives/wallet-connected.directive.ts.html +670 -0
  48. package/coverage/lcov-report/lib/directives/wallet-context.directive.ts.html +547 -0
  49. package/coverage/lcov-report/lib/directives/wallet-events.directive.ts.html +781 -0
  50. package/coverage/lcov-report/lib/hsuite-wallet.module.ts.html +715 -0
  51. package/coverage/lcov-report/lib/index.html +116 -0
  52. package/coverage/lcov-report/lib/models/connection-config.model.ts.html +280 -0
  53. package/coverage/lcov-report/lib/models/index.html +131 -0
  54. package/coverage/lcov-report/lib/models/provider-types.ts.html +577 -0
  55. package/coverage/lcov-report/lib/providers/base-wallet-provider.ts.html +1138 -0
  56. package/coverage/lcov-report/lib/providers/hsuite-native/channel-client.service.ts.html +2671 -0
  57. package/coverage/lcov-report/lib/providers/hsuite-native/index.html +116 -0
  58. package/coverage/lcov-report/lib/providers/hsuite-native-provider.ts.html +2347 -0
  59. package/coverage/lcov-report/lib/providers/index.html +146 -0
  60. package/coverage/lcov-report/lib/providers/p2p-native/index.html +131 -0
  61. package/coverage/lcov-report/lib/providers/p2p-native/p2p-native.provider.ts.html +2254 -0
  62. package/coverage/lcov-report/lib/providers/p2p-native/p2p-session-manager.ts.html +2170 -0
  63. package/coverage/lcov-report/lib/providers/wallet-error-handler.ts.html +1132 -0
  64. package/coverage/lcov-report/lib/providers/walletconnect/core/index.html +176 -0
  65. package/coverage/lcov-report/lib/providers/walletconnect/core/session-health.ts.html +673 -0
  66. package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-client-manager.ts.html +1177 -0
  67. package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-provider.ts.html +2563 -0
  68. package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-session-store.ts.html +904 -0
  69. package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-signing-orchestrator.ts.html +982 -0
  70. package/coverage/lcov-report/lib/providers/walletconnect/signers/hedera-signer.ts.html +1915 -0
  71. package/coverage/lcov-report/lib/providers/walletconnect/signers/index.html +146 -0
  72. package/coverage/lcov-report/lib/providers/walletconnect/signers/signer-factory.ts.html +445 -0
  73. package/coverage/lcov-report/lib/providers/walletconnect/signers/xrpl-signer.ts.html +1519 -0
  74. package/coverage/lcov-report/lib/services/index.html +191 -0
  75. package/coverage/lcov-report/lib/services/logger.service.ts.html +463 -0
  76. package/coverage/lcov-report/lib/services/transaction-builders/base-transaction-builder.service.ts.html +1840 -0
  77. package/coverage/lcov-report/lib/services/transaction-builders/hedera-amount-utils.ts.html +337 -0
  78. package/coverage/lcov-report/lib/services/transaction-builders/hedera-transaction-builder.service.ts.html +3940 -0
  79. package/coverage/lcov-report/lib/services/transaction-builders/index.html +161 -0
  80. package/coverage/lcov-report/lib/services/transaction-builders/xrpl-transaction-builder.service.ts.html +2581 -0
  81. package/coverage/lcov-report/lib/services/transaction.service.ts.html +1123 -0
  82. package/coverage/lcov-report/lib/services/unified-wallet.service.ts.html +2641 -0
  83. package/coverage/lcov-report/lib/services/wallet-context.service.ts.html +637 -0
  84. package/coverage/lcov-report/lib/services/wallet-event-bus.service.ts.html +643 -0
  85. package/coverage/lcov-report/lib/services/wallet-providers.service.ts.html +496 -0
  86. package/coverage/lcov-report/lib/transports/chrome-extension-transport.ts.html +823 -0
  87. package/coverage/lcov-report/lib/transports/index.html +116 -0
  88. package/coverage/lcov-report/lib/utils/index.html +116 -0
  89. package/coverage/lcov-report/lib/utils/ledger-icons.util.ts.html +319 -0
  90. package/coverage/lcov-report/prettify.css +1 -0
  91. package/coverage/lcov-report/prettify.js +2 -0
  92. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  93. package/coverage/lcov-report/sorter.js +210 -0
  94. package/coverage/lcov.info +19252 -0
  95. package/coverage/lib/components/account-selector/account-actions/account-actions.component.ts.html +868 -0
  96. package/coverage/lib/components/account-selector/account-actions/index.html +116 -0
  97. package/coverage/lib/components/account-selector/account-filter/account-filter.component.ts.html +1288 -0
  98. package/coverage/lib/components/account-selector/account-filter/index.html +116 -0
  99. package/coverage/lib/components/account-selector/account-formatting.service.ts.html +685 -0
  100. package/coverage/lib/components/account-selector/account-grouping.service.ts.html +766 -0
  101. package/coverage/lib/components/account-selector/account-list/account-list.component.ts.html +1495 -0
  102. package/coverage/lib/components/account-selector/account-list/index.html +116 -0
  103. package/coverage/lib/components/account-selector/account-selector.component.ts.html +1495 -0
  104. package/coverage/lib/components/account-selector/account-selector.service.ts.html +1588 -0
  105. package/coverage/lib/components/account-selector/index.html +161 -0
  106. package/coverage/lib/components/wallet-account-display/index.html +116 -0
  107. package/coverage/lib/components/wallet-account-display/wallet-account-display.component.ts.html +505 -0
  108. package/coverage/lib/components/wallet-connect-button/index.html +116 -0
  109. package/coverage/lib/components/wallet-connect-button/wallet-connect-button.component.ts.html +805 -0
  110. package/coverage/lib/components/wallet-connect-prompt/index.html +116 -0
  111. package/coverage/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.ts.html +409 -0
  112. package/coverage/lib/components/wallet-connected-guard/index.html +116 -0
  113. package/coverage/lib/components/wallet-connected-guard/wallet-connected-guard.component.ts.html +304 -0
  114. package/coverage/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.ts.html +436 -0
  115. package/coverage/lib/components/wallet-connection-modal/connection-method-step/index.html +116 -0
  116. package/coverage/lib/components/wallet-connection-modal/index.html +116 -0
  117. package/coverage/lib/components/wallet-connection-modal/qr-pairing-step/index.html +116 -0
  118. package/coverage/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.ts.html +2287 -0
  119. package/coverage/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts.html +2275 -0
  120. package/coverage/lib/components/wallet-session-display/index.html +116 -0
  121. package/coverage/lib/components/wallet-session-display/wallet-session-display.component.ts.html +676 -0
  122. package/coverage/lib/components/wallet-transaction-status/index.html +116 -0
  123. package/coverage/lib/components/wallet-transaction-status/wallet-transaction-status.component.ts.html +703 -0
  124. package/coverage/lib/directives/index.html +146 -0
  125. package/coverage/lib/directives/wallet-connected.directive.ts.html +670 -0
  126. package/coverage/lib/directives/wallet-context.directive.ts.html +547 -0
  127. package/coverage/lib/directives/wallet-events.directive.ts.html +781 -0
  128. package/coverage/lib/hsuite-wallet.module.ts.html +715 -0
  129. package/coverage/lib/index.html +116 -0
  130. package/coverage/lib/models/connection-config.model.ts.html +280 -0
  131. package/coverage/lib/models/index.html +131 -0
  132. package/coverage/lib/models/provider-types.ts.html +577 -0
  133. package/coverage/lib/providers/base-wallet-provider.ts.html +1138 -0
  134. package/coverage/lib/providers/hsuite-native/channel-client.service.ts.html +2671 -0
  135. package/coverage/lib/providers/hsuite-native/index.html +116 -0
  136. package/coverage/lib/providers/hsuite-native-provider.ts.html +2347 -0
  137. package/coverage/lib/providers/index.html +146 -0
  138. package/coverage/lib/providers/p2p-native/index.html +131 -0
  139. package/coverage/lib/providers/p2p-native/p2p-native.provider.ts.html +2254 -0
  140. package/coverage/lib/providers/p2p-native/p2p-session-manager.ts.html +2170 -0
  141. package/coverage/lib/providers/wallet-error-handler.ts.html +1132 -0
  142. package/coverage/lib/providers/walletconnect/core/index.html +176 -0
  143. package/coverage/lib/providers/walletconnect/core/session-health.ts.html +673 -0
  144. package/coverage/lib/providers/walletconnect/core/walletconnect-client-manager.ts.html +1177 -0
  145. package/coverage/lib/providers/walletconnect/core/walletconnect-provider.ts.html +2563 -0
  146. package/coverage/lib/providers/walletconnect/core/walletconnect-session-store.ts.html +904 -0
  147. package/coverage/lib/providers/walletconnect/core/walletconnect-signing-orchestrator.ts.html +982 -0
  148. package/coverage/lib/providers/walletconnect/signers/hedera-signer.ts.html +1915 -0
  149. package/coverage/lib/providers/walletconnect/signers/index.html +146 -0
  150. package/coverage/lib/providers/walletconnect/signers/signer-factory.ts.html +445 -0
  151. package/coverage/lib/providers/walletconnect/signers/xrpl-signer.ts.html +1519 -0
  152. package/coverage/lib/services/index.html +191 -0
  153. package/coverage/lib/services/logger.service.ts.html +463 -0
  154. package/coverage/lib/services/transaction-builders/base-transaction-builder.service.ts.html +1840 -0
  155. package/coverage/lib/services/transaction-builders/hedera-amount-utils.ts.html +337 -0
  156. package/coverage/lib/services/transaction-builders/hedera-transaction-builder.service.ts.html +3940 -0
  157. package/coverage/lib/services/transaction-builders/index.html +161 -0
  158. package/coverage/lib/services/transaction-builders/xrpl-transaction-builder.service.ts.html +2581 -0
  159. package/coverage/lib/services/transaction.service.ts.html +1123 -0
  160. package/coverage/lib/services/unified-wallet.service.ts.html +2641 -0
  161. package/coverage/lib/services/wallet-context.service.ts.html +637 -0
  162. package/coverage/lib/services/wallet-event-bus.service.ts.html +643 -0
  163. package/coverage/lib/services/wallet-providers.service.ts.html +496 -0
  164. package/coverage/lib/transports/chrome-extension-transport.ts.html +823 -0
  165. package/coverage/lib/transports/index.html +116 -0
  166. package/coverage/lib/utils/index.html +116 -0
  167. package/coverage/lib/utils/ledger-icons.util.ts.html +319 -0
  168. package/coverage/prettify.css +1 -0
  169. package/coverage/prettify.js +2 -0
  170. package/coverage/sort-arrow-sprite.png +0 -0
  171. package/coverage/sorter.js +210 -0
  172. package/dist/README.md +48 -0
  173. package/dist/fesm2022/hsuite-native-connect-angular.mjs +14592 -0
  174. package/dist/fesm2022/hsuite-native-connect-angular.mjs.map +1 -0
  175. package/dist/index.d.ts +6949 -0
  176. package/examples/minimal-connect.ts +178 -0
  177. package/examples/multi-protocol.ts +495 -0
  178. package/examples/transaction-signing.ts +361 -0
  179. package/jest.config.json +45 -0
  180. package/karma.conf.js +42 -0
  181. package/ng-package.json +20 -0
  182. package/package.json +60 -0
  183. package/src/index.ts +203 -0
  184. package/src/lib/components/account-selector/account-actions/account-actions.component.ts +261 -0
  185. package/src/lib/components/account-selector/account-filter/account-filter.component.ts +401 -0
  186. package/src/lib/components/account-selector/account-formatting.service.ts +200 -0
  187. package/src/lib/components/account-selector/account-grouping.service.ts +227 -0
  188. package/src/lib/components/account-selector/account-list/account-list.component.ts +470 -0
  189. package/src/lib/components/account-selector/account-selector.component.html +135 -0
  190. package/src/lib/components/account-selector/account-selector.component.scss +2039 -0
  191. package/src/lib/components/account-selector/account-selector.component.ts +470 -0
  192. package/src/lib/components/account-selector/account-selector.service.ts +501 -0
  193. package/src/lib/components/wallet-account-display/wallet-account-display.component.html +34 -0
  194. package/src/lib/components/wallet-account-display/wallet-account-display.component.scss +99 -0
  195. package/src/lib/components/wallet-account-display/wallet-account-display.component.ts +140 -0
  196. package/src/lib/components/wallet-connect-button/wallet-connect-button.component.html +14 -0
  197. package/src/lib/components/wallet-connect-button/wallet-connect-button.component.scss +272 -0
  198. package/src/lib/components/wallet-connect-button/wallet-connect-button.component.ts +240 -0
  199. package/src/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.html +24 -0
  200. package/src/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.scss +50 -0
  201. package/src/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.ts +108 -0
  202. package/src/lib/components/wallet-connected-guard/wallet-connected-guard.component.html +24 -0
  203. package/src/lib/components/wallet-connected-guard/wallet-connected-guard.component.ts +73 -0
  204. package/src/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.html +56 -0
  205. package/src/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.scss +218 -0
  206. package/src/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.ts +117 -0
  207. package/src/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.html +94 -0
  208. package/src/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.scss +272 -0
  209. package/src/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.ts +734 -0
  210. package/src/lib/components/wallet-connection-modal/wallet-connection-modal.component.html +197 -0
  211. package/src/lib/components/wallet-connection-modal/wallet-connection-modal.component.scss +678 -0
  212. package/src/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts +730 -0
  213. package/src/lib/components/wallet-session-display/wallet-session-display.component.html +110 -0
  214. package/src/lib/components/wallet-session-display/wallet-session-display.component.scss +179 -0
  215. package/src/lib/components/wallet-session-display/wallet-session-display.component.ts +197 -0
  216. package/src/lib/components/wallet-transaction-status/wallet-transaction-status.component.html +65 -0
  217. package/src/lib/components/wallet-transaction-status/wallet-transaction-status.component.scss +254 -0
  218. package/src/lib/components/wallet-transaction-status/wallet-transaction-status.component.ts +206 -0
  219. package/src/lib/directives/wallet-connected.directive.ts +195 -0
  220. package/src/lib/directives/wallet-context.directive.ts +154 -0
  221. package/src/lib/directives/wallet-events.directive.ts +232 -0
  222. package/src/lib/hsuite-wallet.module.ts +210 -0
  223. package/src/lib/models/connection-config.model.ts +65 -0
  224. package/src/lib/models/provider-types.ts +164 -0
  225. package/src/lib/models/unified-account.model.ts +76 -0
  226. package/src/lib/models/wallet-context.model.ts +121 -0
  227. package/src/lib/models/wallet-events.model.ts +158 -0
  228. package/src/lib/providers/base-wallet-provider.ts +351 -0
  229. package/src/lib/providers/hsuite-native/channel-client.service.spec.ts +73 -0
  230. package/src/lib/providers/hsuite-native/channel-client.service.ts +862 -0
  231. package/src/lib/providers/hsuite-native/index.ts +8 -0
  232. package/src/lib/providers/hsuite-native-provider.ts +754 -0
  233. package/src/lib/providers/mobile-native/mobile-native.provider.spec.ts +19 -0
  234. package/src/lib/providers/p2p-native/index.ts +30 -0
  235. package/src/lib/providers/p2p-native/p2p-native.provider.spec.ts +523 -0
  236. package/src/lib/providers/p2p-native/p2p-native.provider.ts +723 -0
  237. package/src/lib/providers/p2p-native/p2p-session-manager.ts +695 -0
  238. package/src/lib/providers/wallet-error-handler.ts +349 -0
  239. package/src/lib/providers/walletconnect/core/base-signer.interface.ts +122 -0
  240. package/src/lib/providers/walletconnect/core/session-health.ts +196 -0
  241. package/src/lib/providers/walletconnect/core/walletconnect-client-manager.ts +364 -0
  242. package/src/lib/providers/walletconnect/core/walletconnect-provider.integration.spec.ts +348 -0
  243. package/src/lib/providers/walletconnect/core/walletconnect-provider.ts +826 -0
  244. package/src/lib/providers/walletconnect/core/walletconnect-session-store.ts +273 -0
  245. package/src/lib/providers/walletconnect/core/walletconnect-signing-orchestrator.ts +299 -0
  246. package/src/lib/providers/walletconnect/core/walletconnect-types.ts +48 -0
  247. package/src/lib/providers/walletconnect/index.ts +33 -0
  248. package/src/lib/providers/walletconnect/signers/hedera-signer.spec.ts +367 -0
  249. package/src/lib/providers/walletconnect/signers/hedera-signer.ts +610 -0
  250. package/src/lib/providers/walletconnect/signers/signer-factory.spec.ts +62 -0
  251. package/src/lib/providers/walletconnect/signers/signer-factory.ts +120 -0
  252. package/src/lib/providers/walletconnect/signers/xrpl-signer.spec.ts +296 -0
  253. package/src/lib/providers/walletconnect/signers/xrpl-signer.ts +478 -0
  254. package/src/lib/services/logger.service.ts +126 -0
  255. package/src/lib/services/transaction-builders/base-transaction-builder.service.ts +585 -0
  256. package/src/lib/services/transaction-builders/hedera-amount-utils.ts +84 -0
  257. package/src/lib/services/transaction-builders/hedera-transaction-builder.service.spec.ts +741 -0
  258. package/src/lib/services/transaction-builders/hedera-transaction-builder.service.ts +1285 -0
  259. package/src/lib/services/transaction-builders/index.ts +54 -0
  260. package/src/lib/services/transaction-builders/xrpl-transaction-builder.service.spec.ts +937 -0
  261. package/src/lib/services/transaction-builders/xrpl-transaction-builder.service.ts +832 -0
  262. package/src/lib/services/transaction.service.ts +346 -0
  263. package/src/lib/services/unified-wallet.service.spec.ts +1382 -0
  264. package/src/lib/services/unified-wallet.service.ts +852 -0
  265. package/src/lib/services/wallet-context.service.ts +184 -0
  266. package/src/lib/services/wallet-event-bus.service.ts +186 -0
  267. package/src/lib/services/wallet-providers.service.ts +137 -0
  268. package/src/lib/transports/chrome-extension-transport.ts +246 -0
  269. package/src/lib/utils/index.ts +14 -0
  270. package/src/lib/utils/ledger-icons.util.ts +78 -0
  271. package/test/test-setup.ts +21 -0
  272. package/test-setup.ts +63 -0
  273. package/tsconfig.build.json +11 -0
  274. package/tsconfig.json +29 -0
  275. package/tsconfig.spec.json +15 -0
  276. package/vitest.config.ts +48 -0
@@ -0,0 +1,1177 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for lib/providers/walletconnect/core/walletconnect-client-manager.ts</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="../../../../prettify.css" />
9
+ <link rel="stylesheet" href="../../../../base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="../../../../favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(../../../../sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="../../../../index.html">All files</a> / <a href="index.html">lib/providers/walletconnect/core</a> walletconnect-client-manager.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">72.25% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>263/364</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">56% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>14/25</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">70.58% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>12/17</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">72.25% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>263/364</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line medium'></div>
65
+ <pre><table class="coverage">
66
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
+ <a name='L2'></a><a href='#L2'>2</a>
68
+ <a name='L3'></a><a href='#L3'>3</a>
69
+ <a name='L4'></a><a href='#L4'>4</a>
70
+ <a name='L5'></a><a href='#L5'>5</a>
71
+ <a name='L6'></a><a href='#L6'>6</a>
72
+ <a name='L7'></a><a href='#L7'>7</a>
73
+ <a name='L8'></a><a href='#L8'>8</a>
74
+ <a name='L9'></a><a href='#L9'>9</a>
75
+ <a name='L10'></a><a href='#L10'>10</a>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a>
79
+ <a name='L14'></a><a href='#L14'>14</a>
80
+ <a name='L15'></a><a href='#L15'>15</a>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a>
85
+ <a name='L20'></a><a href='#L20'>20</a>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a>
88
+ <a name='L23'></a><a href='#L23'>23</a>
89
+ <a name='L24'></a><a href='#L24'>24</a>
90
+ <a name='L25'></a><a href='#L25'>25</a>
91
+ <a name='L26'></a><a href='#L26'>26</a>
92
+ <a name='L27'></a><a href='#L27'>27</a>
93
+ <a name='L28'></a><a href='#L28'>28</a>
94
+ <a name='L29'></a><a href='#L29'>29</a>
95
+ <a name='L30'></a><a href='#L30'>30</a>
96
+ <a name='L31'></a><a href='#L31'>31</a>
97
+ <a name='L32'></a><a href='#L32'>32</a>
98
+ <a name='L33'></a><a href='#L33'>33</a>
99
+ <a name='L34'></a><a href='#L34'>34</a>
100
+ <a name='L35'></a><a href='#L35'>35</a>
101
+ <a name='L36'></a><a href='#L36'>36</a>
102
+ <a name='L37'></a><a href='#L37'>37</a>
103
+ <a name='L38'></a><a href='#L38'>38</a>
104
+ <a name='L39'></a><a href='#L39'>39</a>
105
+ <a name='L40'></a><a href='#L40'>40</a>
106
+ <a name='L41'></a><a href='#L41'>41</a>
107
+ <a name='L42'></a><a href='#L42'>42</a>
108
+ <a name='L43'></a><a href='#L43'>43</a>
109
+ <a name='L44'></a><a href='#L44'>44</a>
110
+ <a name='L45'></a><a href='#L45'>45</a>
111
+ <a name='L46'></a><a href='#L46'>46</a>
112
+ <a name='L47'></a><a href='#L47'>47</a>
113
+ <a name='L48'></a><a href='#L48'>48</a>
114
+ <a name='L49'></a><a href='#L49'>49</a>
115
+ <a name='L50'></a><a href='#L50'>50</a>
116
+ <a name='L51'></a><a href='#L51'>51</a>
117
+ <a name='L52'></a><a href='#L52'>52</a>
118
+ <a name='L53'></a><a href='#L53'>53</a>
119
+ <a name='L54'></a><a href='#L54'>54</a>
120
+ <a name='L55'></a><a href='#L55'>55</a>
121
+ <a name='L56'></a><a href='#L56'>56</a>
122
+ <a name='L57'></a><a href='#L57'>57</a>
123
+ <a name='L58'></a><a href='#L58'>58</a>
124
+ <a name='L59'></a><a href='#L59'>59</a>
125
+ <a name='L60'></a><a href='#L60'>60</a>
126
+ <a name='L61'></a><a href='#L61'>61</a>
127
+ <a name='L62'></a><a href='#L62'>62</a>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a>
130
+ <a name='L65'></a><a href='#L65'>65</a>
131
+ <a name='L66'></a><a href='#L66'>66</a>
132
+ <a name='L67'></a><a href='#L67'>67</a>
133
+ <a name='L68'></a><a href='#L68'>68</a>
134
+ <a name='L69'></a><a href='#L69'>69</a>
135
+ <a name='L70'></a><a href='#L70'>70</a>
136
+ <a name='L71'></a><a href='#L71'>71</a>
137
+ <a name='L72'></a><a href='#L72'>72</a>
138
+ <a name='L73'></a><a href='#L73'>73</a>
139
+ <a name='L74'></a><a href='#L74'>74</a>
140
+ <a name='L75'></a><a href='#L75'>75</a>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a>
143
+ <a name='L78'></a><a href='#L78'>78</a>
144
+ <a name='L79'></a><a href='#L79'>79</a>
145
+ <a name='L80'></a><a href='#L80'>80</a>
146
+ <a name='L81'></a><a href='#L81'>81</a>
147
+ <a name='L82'></a><a href='#L82'>82</a>
148
+ <a name='L83'></a><a href='#L83'>83</a>
149
+ <a name='L84'></a><a href='#L84'>84</a>
150
+ <a name='L85'></a><a href='#L85'>85</a>
151
+ <a name='L86'></a><a href='#L86'>86</a>
152
+ <a name='L87'></a><a href='#L87'>87</a>
153
+ <a name='L88'></a><a href='#L88'>88</a>
154
+ <a name='L89'></a><a href='#L89'>89</a>
155
+ <a name='L90'></a><a href='#L90'>90</a>
156
+ <a name='L91'></a><a href='#L91'>91</a>
157
+ <a name='L92'></a><a href='#L92'>92</a>
158
+ <a name='L93'></a><a href='#L93'>93</a>
159
+ <a name='L94'></a><a href='#L94'>94</a>
160
+ <a name='L95'></a><a href='#L95'>95</a>
161
+ <a name='L96'></a><a href='#L96'>96</a>
162
+ <a name='L97'></a><a href='#L97'>97</a>
163
+ <a name='L98'></a><a href='#L98'>98</a>
164
+ <a name='L99'></a><a href='#L99'>99</a>
165
+ <a name='L100'></a><a href='#L100'>100</a>
166
+ <a name='L101'></a><a href='#L101'>101</a>
167
+ <a name='L102'></a><a href='#L102'>102</a>
168
+ <a name='L103'></a><a href='#L103'>103</a>
169
+ <a name='L104'></a><a href='#L104'>104</a>
170
+ <a name='L105'></a><a href='#L105'>105</a>
171
+ <a name='L106'></a><a href='#L106'>106</a>
172
+ <a name='L107'></a><a href='#L107'>107</a>
173
+ <a name='L108'></a><a href='#L108'>108</a>
174
+ <a name='L109'></a><a href='#L109'>109</a>
175
+ <a name='L110'></a><a href='#L110'>110</a>
176
+ <a name='L111'></a><a href='#L111'>111</a>
177
+ <a name='L112'></a><a href='#L112'>112</a>
178
+ <a name='L113'></a><a href='#L113'>113</a>
179
+ <a name='L114'></a><a href='#L114'>114</a>
180
+ <a name='L115'></a><a href='#L115'>115</a>
181
+ <a name='L116'></a><a href='#L116'>116</a>
182
+ <a name='L117'></a><a href='#L117'>117</a>
183
+ <a name='L118'></a><a href='#L118'>118</a>
184
+ <a name='L119'></a><a href='#L119'>119</a>
185
+ <a name='L120'></a><a href='#L120'>120</a>
186
+ <a name='L121'></a><a href='#L121'>121</a>
187
+ <a name='L122'></a><a href='#L122'>122</a>
188
+ <a name='L123'></a><a href='#L123'>123</a>
189
+ <a name='L124'></a><a href='#L124'>124</a>
190
+ <a name='L125'></a><a href='#L125'>125</a>
191
+ <a name='L126'></a><a href='#L126'>126</a>
192
+ <a name='L127'></a><a href='#L127'>127</a>
193
+ <a name='L128'></a><a href='#L128'>128</a>
194
+ <a name='L129'></a><a href='#L129'>129</a>
195
+ <a name='L130'></a><a href='#L130'>130</a>
196
+ <a name='L131'></a><a href='#L131'>131</a>
197
+ <a name='L132'></a><a href='#L132'>132</a>
198
+ <a name='L133'></a><a href='#L133'>133</a>
199
+ <a name='L134'></a><a href='#L134'>134</a>
200
+ <a name='L135'></a><a href='#L135'>135</a>
201
+ <a name='L136'></a><a href='#L136'>136</a>
202
+ <a name='L137'></a><a href='#L137'>137</a>
203
+ <a name='L138'></a><a href='#L138'>138</a>
204
+ <a name='L139'></a><a href='#L139'>139</a>
205
+ <a name='L140'></a><a href='#L140'>140</a>
206
+ <a name='L141'></a><a href='#L141'>141</a>
207
+ <a name='L142'></a><a href='#L142'>142</a>
208
+ <a name='L143'></a><a href='#L143'>143</a>
209
+ <a name='L144'></a><a href='#L144'>144</a>
210
+ <a name='L145'></a><a href='#L145'>145</a>
211
+ <a name='L146'></a><a href='#L146'>146</a>
212
+ <a name='L147'></a><a href='#L147'>147</a>
213
+ <a name='L148'></a><a href='#L148'>148</a>
214
+ <a name='L149'></a><a href='#L149'>149</a>
215
+ <a name='L150'></a><a href='#L150'>150</a>
216
+ <a name='L151'></a><a href='#L151'>151</a>
217
+ <a name='L152'></a><a href='#L152'>152</a>
218
+ <a name='L153'></a><a href='#L153'>153</a>
219
+ <a name='L154'></a><a href='#L154'>154</a>
220
+ <a name='L155'></a><a href='#L155'>155</a>
221
+ <a name='L156'></a><a href='#L156'>156</a>
222
+ <a name='L157'></a><a href='#L157'>157</a>
223
+ <a name='L158'></a><a href='#L158'>158</a>
224
+ <a name='L159'></a><a href='#L159'>159</a>
225
+ <a name='L160'></a><a href='#L160'>160</a>
226
+ <a name='L161'></a><a href='#L161'>161</a>
227
+ <a name='L162'></a><a href='#L162'>162</a>
228
+ <a name='L163'></a><a href='#L163'>163</a>
229
+ <a name='L164'></a><a href='#L164'>164</a>
230
+ <a name='L165'></a><a href='#L165'>165</a>
231
+ <a name='L166'></a><a href='#L166'>166</a>
232
+ <a name='L167'></a><a href='#L167'>167</a>
233
+ <a name='L168'></a><a href='#L168'>168</a>
234
+ <a name='L169'></a><a href='#L169'>169</a>
235
+ <a name='L170'></a><a href='#L170'>170</a>
236
+ <a name='L171'></a><a href='#L171'>171</a>
237
+ <a name='L172'></a><a href='#L172'>172</a>
238
+ <a name='L173'></a><a href='#L173'>173</a>
239
+ <a name='L174'></a><a href='#L174'>174</a>
240
+ <a name='L175'></a><a href='#L175'>175</a>
241
+ <a name='L176'></a><a href='#L176'>176</a>
242
+ <a name='L177'></a><a href='#L177'>177</a>
243
+ <a name='L178'></a><a href='#L178'>178</a>
244
+ <a name='L179'></a><a href='#L179'>179</a>
245
+ <a name='L180'></a><a href='#L180'>180</a>
246
+ <a name='L181'></a><a href='#L181'>181</a>
247
+ <a name='L182'></a><a href='#L182'>182</a>
248
+ <a name='L183'></a><a href='#L183'>183</a>
249
+ <a name='L184'></a><a href='#L184'>184</a>
250
+ <a name='L185'></a><a href='#L185'>185</a>
251
+ <a name='L186'></a><a href='#L186'>186</a>
252
+ <a name='L187'></a><a href='#L187'>187</a>
253
+ <a name='L188'></a><a href='#L188'>188</a>
254
+ <a name='L189'></a><a href='#L189'>189</a>
255
+ <a name='L190'></a><a href='#L190'>190</a>
256
+ <a name='L191'></a><a href='#L191'>191</a>
257
+ <a name='L192'></a><a href='#L192'>192</a>
258
+ <a name='L193'></a><a href='#L193'>193</a>
259
+ <a name='L194'></a><a href='#L194'>194</a>
260
+ <a name='L195'></a><a href='#L195'>195</a>
261
+ <a name='L196'></a><a href='#L196'>196</a>
262
+ <a name='L197'></a><a href='#L197'>197</a>
263
+ <a name='L198'></a><a href='#L198'>198</a>
264
+ <a name='L199'></a><a href='#L199'>199</a>
265
+ <a name='L200'></a><a href='#L200'>200</a>
266
+ <a name='L201'></a><a href='#L201'>201</a>
267
+ <a name='L202'></a><a href='#L202'>202</a>
268
+ <a name='L203'></a><a href='#L203'>203</a>
269
+ <a name='L204'></a><a href='#L204'>204</a>
270
+ <a name='L205'></a><a href='#L205'>205</a>
271
+ <a name='L206'></a><a href='#L206'>206</a>
272
+ <a name='L207'></a><a href='#L207'>207</a>
273
+ <a name='L208'></a><a href='#L208'>208</a>
274
+ <a name='L209'></a><a href='#L209'>209</a>
275
+ <a name='L210'></a><a href='#L210'>210</a>
276
+ <a name='L211'></a><a href='#L211'>211</a>
277
+ <a name='L212'></a><a href='#L212'>212</a>
278
+ <a name='L213'></a><a href='#L213'>213</a>
279
+ <a name='L214'></a><a href='#L214'>214</a>
280
+ <a name='L215'></a><a href='#L215'>215</a>
281
+ <a name='L216'></a><a href='#L216'>216</a>
282
+ <a name='L217'></a><a href='#L217'>217</a>
283
+ <a name='L218'></a><a href='#L218'>218</a>
284
+ <a name='L219'></a><a href='#L219'>219</a>
285
+ <a name='L220'></a><a href='#L220'>220</a>
286
+ <a name='L221'></a><a href='#L221'>221</a>
287
+ <a name='L222'></a><a href='#L222'>222</a>
288
+ <a name='L223'></a><a href='#L223'>223</a>
289
+ <a name='L224'></a><a href='#L224'>224</a>
290
+ <a name='L225'></a><a href='#L225'>225</a>
291
+ <a name='L226'></a><a href='#L226'>226</a>
292
+ <a name='L227'></a><a href='#L227'>227</a>
293
+ <a name='L228'></a><a href='#L228'>228</a>
294
+ <a name='L229'></a><a href='#L229'>229</a>
295
+ <a name='L230'></a><a href='#L230'>230</a>
296
+ <a name='L231'></a><a href='#L231'>231</a>
297
+ <a name='L232'></a><a href='#L232'>232</a>
298
+ <a name='L233'></a><a href='#L233'>233</a>
299
+ <a name='L234'></a><a href='#L234'>234</a>
300
+ <a name='L235'></a><a href='#L235'>235</a>
301
+ <a name='L236'></a><a href='#L236'>236</a>
302
+ <a name='L237'></a><a href='#L237'>237</a>
303
+ <a name='L238'></a><a href='#L238'>238</a>
304
+ <a name='L239'></a><a href='#L239'>239</a>
305
+ <a name='L240'></a><a href='#L240'>240</a>
306
+ <a name='L241'></a><a href='#L241'>241</a>
307
+ <a name='L242'></a><a href='#L242'>242</a>
308
+ <a name='L243'></a><a href='#L243'>243</a>
309
+ <a name='L244'></a><a href='#L244'>244</a>
310
+ <a name='L245'></a><a href='#L245'>245</a>
311
+ <a name='L246'></a><a href='#L246'>246</a>
312
+ <a name='L247'></a><a href='#L247'>247</a>
313
+ <a name='L248'></a><a href='#L248'>248</a>
314
+ <a name='L249'></a><a href='#L249'>249</a>
315
+ <a name='L250'></a><a href='#L250'>250</a>
316
+ <a name='L251'></a><a href='#L251'>251</a>
317
+ <a name='L252'></a><a href='#L252'>252</a>
318
+ <a name='L253'></a><a href='#L253'>253</a>
319
+ <a name='L254'></a><a href='#L254'>254</a>
320
+ <a name='L255'></a><a href='#L255'>255</a>
321
+ <a name='L256'></a><a href='#L256'>256</a>
322
+ <a name='L257'></a><a href='#L257'>257</a>
323
+ <a name='L258'></a><a href='#L258'>258</a>
324
+ <a name='L259'></a><a href='#L259'>259</a>
325
+ <a name='L260'></a><a href='#L260'>260</a>
326
+ <a name='L261'></a><a href='#L261'>261</a>
327
+ <a name='L262'></a><a href='#L262'>262</a>
328
+ <a name='L263'></a><a href='#L263'>263</a>
329
+ <a name='L264'></a><a href='#L264'>264</a>
330
+ <a name='L265'></a><a href='#L265'>265</a>
331
+ <a name='L266'></a><a href='#L266'>266</a>
332
+ <a name='L267'></a><a href='#L267'>267</a>
333
+ <a name='L268'></a><a href='#L268'>268</a>
334
+ <a name='L269'></a><a href='#L269'>269</a>
335
+ <a name='L270'></a><a href='#L270'>270</a>
336
+ <a name='L271'></a><a href='#L271'>271</a>
337
+ <a name='L272'></a><a href='#L272'>272</a>
338
+ <a name='L273'></a><a href='#L273'>273</a>
339
+ <a name='L274'></a><a href='#L274'>274</a>
340
+ <a name='L275'></a><a href='#L275'>275</a>
341
+ <a name='L276'></a><a href='#L276'>276</a>
342
+ <a name='L277'></a><a href='#L277'>277</a>
343
+ <a name='L278'></a><a href='#L278'>278</a>
344
+ <a name='L279'></a><a href='#L279'>279</a>
345
+ <a name='L280'></a><a href='#L280'>280</a>
346
+ <a name='L281'></a><a href='#L281'>281</a>
347
+ <a name='L282'></a><a href='#L282'>282</a>
348
+ <a name='L283'></a><a href='#L283'>283</a>
349
+ <a name='L284'></a><a href='#L284'>284</a>
350
+ <a name='L285'></a><a href='#L285'>285</a>
351
+ <a name='L286'></a><a href='#L286'>286</a>
352
+ <a name='L287'></a><a href='#L287'>287</a>
353
+ <a name='L288'></a><a href='#L288'>288</a>
354
+ <a name='L289'></a><a href='#L289'>289</a>
355
+ <a name='L290'></a><a href='#L290'>290</a>
356
+ <a name='L291'></a><a href='#L291'>291</a>
357
+ <a name='L292'></a><a href='#L292'>292</a>
358
+ <a name='L293'></a><a href='#L293'>293</a>
359
+ <a name='L294'></a><a href='#L294'>294</a>
360
+ <a name='L295'></a><a href='#L295'>295</a>
361
+ <a name='L296'></a><a href='#L296'>296</a>
362
+ <a name='L297'></a><a href='#L297'>297</a>
363
+ <a name='L298'></a><a href='#L298'>298</a>
364
+ <a name='L299'></a><a href='#L299'>299</a>
365
+ <a name='L300'></a><a href='#L300'>300</a>
366
+ <a name='L301'></a><a href='#L301'>301</a>
367
+ <a name='L302'></a><a href='#L302'>302</a>
368
+ <a name='L303'></a><a href='#L303'>303</a>
369
+ <a name='L304'></a><a href='#L304'>304</a>
370
+ <a name='L305'></a><a href='#L305'>305</a>
371
+ <a name='L306'></a><a href='#L306'>306</a>
372
+ <a name='L307'></a><a href='#L307'>307</a>
373
+ <a name='L308'></a><a href='#L308'>308</a>
374
+ <a name='L309'></a><a href='#L309'>309</a>
375
+ <a name='L310'></a><a href='#L310'>310</a>
376
+ <a name='L311'></a><a href='#L311'>311</a>
377
+ <a name='L312'></a><a href='#L312'>312</a>
378
+ <a name='L313'></a><a href='#L313'>313</a>
379
+ <a name='L314'></a><a href='#L314'>314</a>
380
+ <a name='L315'></a><a href='#L315'>315</a>
381
+ <a name='L316'></a><a href='#L316'>316</a>
382
+ <a name='L317'></a><a href='#L317'>317</a>
383
+ <a name='L318'></a><a href='#L318'>318</a>
384
+ <a name='L319'></a><a href='#L319'>319</a>
385
+ <a name='L320'></a><a href='#L320'>320</a>
386
+ <a name='L321'></a><a href='#L321'>321</a>
387
+ <a name='L322'></a><a href='#L322'>322</a>
388
+ <a name='L323'></a><a href='#L323'>323</a>
389
+ <a name='L324'></a><a href='#L324'>324</a>
390
+ <a name='L325'></a><a href='#L325'>325</a>
391
+ <a name='L326'></a><a href='#L326'>326</a>
392
+ <a name='L327'></a><a href='#L327'>327</a>
393
+ <a name='L328'></a><a href='#L328'>328</a>
394
+ <a name='L329'></a><a href='#L329'>329</a>
395
+ <a name='L330'></a><a href='#L330'>330</a>
396
+ <a name='L331'></a><a href='#L331'>331</a>
397
+ <a name='L332'></a><a href='#L332'>332</a>
398
+ <a name='L333'></a><a href='#L333'>333</a>
399
+ <a name='L334'></a><a href='#L334'>334</a>
400
+ <a name='L335'></a><a href='#L335'>335</a>
401
+ <a name='L336'></a><a href='#L336'>336</a>
402
+ <a name='L337'></a><a href='#L337'>337</a>
403
+ <a name='L338'></a><a href='#L338'>338</a>
404
+ <a name='L339'></a><a href='#L339'>339</a>
405
+ <a name='L340'></a><a href='#L340'>340</a>
406
+ <a name='L341'></a><a href='#L341'>341</a>
407
+ <a name='L342'></a><a href='#L342'>342</a>
408
+ <a name='L343'></a><a href='#L343'>343</a>
409
+ <a name='L344'></a><a href='#L344'>344</a>
410
+ <a name='L345'></a><a href='#L345'>345</a>
411
+ <a name='L346'></a><a href='#L346'>346</a>
412
+ <a name='L347'></a><a href='#L347'>347</a>
413
+ <a name='L348'></a><a href='#L348'>348</a>
414
+ <a name='L349'></a><a href='#L349'>349</a>
415
+ <a name='L350'></a><a href='#L350'>350</a>
416
+ <a name='L351'></a><a href='#L351'>351</a>
417
+ <a name='L352'></a><a href='#L352'>352</a>
418
+ <a name='L353'></a><a href='#L353'>353</a>
419
+ <a name='L354'></a><a href='#L354'>354</a>
420
+ <a name='L355'></a><a href='#L355'>355</a>
421
+ <a name='L356'></a><a href='#L356'>356</a>
422
+ <a name='L357'></a><a href='#L357'>357</a>
423
+ <a name='L358'></a><a href='#L358'>358</a>
424
+ <a name='L359'></a><a href='#L359'>359</a>
425
+ <a name='L360'></a><a href='#L360'>360</a>
426
+ <a name='L361'></a><a href='#L361'>361</a>
427
+ <a name='L362'></a><a href='#L362'>362</a>
428
+ <a name='L363'></a><a href='#L363'>363</a>
429
+ <a name='L364'></a><a href='#L364'>364</a>
430
+ <a name='L365'></a><a href='#L365'>365</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
431
+ <span class="cline-any cline-yes">1x</span>
432
+ <span class="cline-any cline-yes">1x</span>
433
+ <span class="cline-any cline-yes">1x</span>
434
+ <span class="cline-any cline-yes">1x</span>
435
+ <span class="cline-any cline-yes">1x</span>
436
+ <span class="cline-any cline-yes">1x</span>
437
+ <span class="cline-any cline-yes">1x</span>
438
+ <span class="cline-any cline-yes">1x</span>
439
+ <span class="cline-any cline-yes">1x</span>
440
+ <span class="cline-any cline-yes">1x</span>
441
+ <span class="cline-any cline-yes">1x</span>
442
+ <span class="cline-any cline-yes">1x</span>
443
+ <span class="cline-any cline-yes">1x</span>
444
+ <span class="cline-any cline-yes">1x</span>
445
+ <span class="cline-any cline-yes">1x</span>
446
+ <span class="cline-any cline-yes">1x</span>
447
+ <span class="cline-any cline-yes">1x</span>
448
+ <span class="cline-any cline-yes">1x</span>
449
+ <span class="cline-any cline-yes">1x</span>
450
+ <span class="cline-any cline-yes">1x</span>
451
+ <span class="cline-any cline-yes">1x</span>
452
+ <span class="cline-any cline-yes">1x</span>
453
+ <span class="cline-any cline-yes">1x</span>
454
+ <span class="cline-any cline-yes">1x</span>
455
+ <span class="cline-any cline-yes">1x</span>
456
+ <span class="cline-any cline-yes">1x</span>
457
+ <span class="cline-any cline-yes">1x</span>
458
+ <span class="cline-any cline-yes">1x</span>
459
+ <span class="cline-any cline-yes">1x</span>
460
+ <span class="cline-any cline-yes">1x</span>
461
+ <span class="cline-any cline-yes">1x</span>
462
+ <span class="cline-any cline-yes">1x</span>
463
+ <span class="cline-any cline-yes">1x</span>
464
+ <span class="cline-any cline-yes">1x</span>
465
+ <span class="cline-any cline-yes">1x</span>
466
+ <span class="cline-any cline-yes">1x</span>
467
+ <span class="cline-any cline-yes">1x</span>
468
+ <span class="cline-any cline-yes">1x</span>
469
+ <span class="cline-any cline-yes">1x</span>
470
+ <span class="cline-any cline-yes">1x</span>
471
+ <span class="cline-any cline-yes">1x</span>
472
+ <span class="cline-any cline-yes">1x</span>
473
+ <span class="cline-any cline-yes">1x</span>
474
+ <span class="cline-any cline-yes">1x</span>
475
+ <span class="cline-any cline-yes">1x</span>
476
+ <span class="cline-any cline-yes">1x</span>
477
+ <span class="cline-any cline-yes">1x</span>
478
+ <span class="cline-any cline-yes">1x</span>
479
+ <span class="cline-any cline-yes">1x</span>
480
+ <span class="cline-any cline-yes">1x</span>
481
+ <span class="cline-any cline-yes">1x</span>
482
+ <span class="cline-any cline-yes">1x</span>
483
+ <span class="cline-any cline-yes">16x</span>
484
+ <span class="cline-any cline-yes">16x</span>
485
+ <span class="cline-any cline-yes">16x</span>
486
+ <span class="cline-any cline-yes">16x</span>
487
+ <span class="cline-any cline-yes">16x</span>
488
+ <span class="cline-any cline-yes">16x</span>
489
+ <span class="cline-any cline-yes">16x</span>
490
+ <span class="cline-any cline-yes">16x</span>
491
+ <span class="cline-any cline-yes">16x</span>
492
+ <span class="cline-any cline-yes">16x</span>
493
+ <span class="cline-any cline-yes">16x</span>
494
+ <span class="cline-any cline-yes">16x</span>
495
+ <span class="cline-any cline-yes">16x</span>
496
+ <span class="cline-any cline-yes">13x</span>
497
+ <span class="cline-any cline-no">&nbsp;</span>
498
+ <span class="cline-any cline-no">&nbsp;</span>
499
+ <span class="cline-any cline-yes">13x</span>
500
+ <span class="cline-any cline-yes">13x</span>
501
+ <span class="cline-any cline-yes">13x</span>
502
+ <span class="cline-any cline-yes">13x</span>
503
+ <span class="cline-any cline-yes">13x</span>
504
+ <span class="cline-any cline-yes">13x</span>
505
+ <span class="cline-any cline-yes">13x</span>
506
+ <span class="cline-any cline-yes">13x</span>
507
+ <span class="cline-any cline-yes">13x</span>
508
+ <span class="cline-any cline-yes">13x</span>
509
+ <span class="cline-any cline-yes">13x</span>
510
+ <span class="cline-any cline-yes">13x</span>
511
+ <span class="cline-any cline-yes">13x</span>
512
+ <span class="cline-any cline-yes">12x</span>
513
+ <span class="cline-any cline-yes">12x</span>
514
+ <span class="cline-any cline-yes">12x</span>
515
+ <span class="cline-any cline-yes">12x</span>
516
+ <span class="cline-any cline-yes">12x</span>
517
+ <span class="cline-any cline-yes">12x</span>
518
+ <span class="cline-any cline-yes">13x</span>
519
+ <span class="cline-any cline-yes">16x</span>
520
+ <span class="cline-any cline-yes">16x</span>
521
+ <span class="cline-any cline-yes">16x</span>
522
+ <span class="cline-any cline-yes">16x</span>
523
+ <span class="cline-any cline-yes">16x</span>
524
+ <span class="cline-any cline-yes">16x</span>
525
+ <span class="cline-any cline-no">&nbsp;</span>
526
+ <span class="cline-any cline-no">&nbsp;</span>
527
+ <span class="cline-any cline-no">&nbsp;</span>
528
+ <span class="cline-any cline-no">&nbsp;</span>
529
+ <span class="cline-any cline-no">&nbsp;</span>
530
+ <span class="cline-any cline-yes">16x</span>
531
+ <span class="cline-any cline-yes">16x</span>
532
+ <span class="cline-any cline-yes">16x</span>
533
+ <span class="cline-any cline-yes">16x</span>
534
+ <span class="cline-any cline-yes">16x</span>
535
+ <span class="cline-any cline-yes">32x</span>
536
+ <span class="cline-any cline-yes">32x</span>
537
+ <span class="cline-any cline-yes">16x</span>
538
+ <span class="cline-any cline-yes">16x</span>
539
+ <span class="cline-any cline-yes">16x</span>
540
+ <span class="cline-any cline-yes">16x</span>
541
+ <span class="cline-any cline-yes">16x</span>
542
+ <span class="cline-any cline-yes">16x</span>
543
+ <span class="cline-any cline-yes">16x</span>
544
+ <span class="cline-any cline-yes">16x</span>
545
+ <span class="cline-any cline-yes">16x</span>
546
+ <span class="cline-any cline-yes">16x</span>
547
+ <span class="cline-any cline-yes">16x</span>
548
+ <span class="cline-any cline-yes">16x</span>
549
+ <span class="cline-any cline-yes">16x</span>
550
+ <span class="cline-any cline-yes">16x</span>
551
+ <span class="cline-any cline-no">&nbsp;</span>
552
+ <span class="cline-any cline-no">&nbsp;</span>
553
+ <span class="cline-any cline-no">&nbsp;</span>
554
+ <span class="cline-any cline-no">&nbsp;</span>
555
+ <span class="cline-any cline-no">&nbsp;</span>
556
+ <span class="cline-any cline-no">&nbsp;</span>
557
+ <span class="cline-any cline-no">&nbsp;</span>
558
+ <span class="cline-any cline-no">&nbsp;</span>
559
+ <span class="cline-any cline-no">&nbsp;</span>
560
+ <span class="cline-any cline-yes">16x</span>
561
+ <span class="cline-any cline-yes">16x</span>
562
+ <span class="cline-any cline-yes">16x</span>
563
+ <span class="cline-any cline-yes">16x</span>
564
+ <span class="cline-any cline-yes">16x</span>
565
+ <span class="cline-any cline-yes">16x</span>
566
+ <span class="cline-any cline-no">&nbsp;</span>
567
+ <span class="cline-any cline-no">&nbsp;</span>
568
+ <span class="cline-any cline-no">&nbsp;</span>
569
+ <span class="cline-any cline-no">&nbsp;</span>
570
+ <span class="cline-any cline-no">&nbsp;</span>
571
+ <span class="cline-any cline-yes">16x</span>
572
+ <span class="cline-any cline-yes">16x</span>
573
+ <span class="cline-any cline-yes">16x</span>
574
+ <span class="cline-any cline-yes">16x</span>
575
+ <span class="cline-any cline-yes">16x</span>
576
+ <span class="cline-any cline-yes">16x</span>
577
+ <span class="cline-any cline-yes">12x</span>
578
+ <span class="cline-any cline-no">&nbsp;</span>
579
+ <span class="cline-any cline-no">&nbsp;</span>
580
+ <span class="cline-any cline-yes">12x</span>
581
+ <span class="cline-any cline-yes">12x</span>
582
+ <span class="cline-any cline-yes">12x</span>
583
+ <span class="cline-any cline-yes">12x</span>
584
+ <span class="cline-any cline-yes">12x</span>
585
+ <span class="cline-any cline-yes">12x</span>
586
+ <span class="cline-any cline-yes">16x</span>
587
+ <span class="cline-any cline-yes">16x</span>
588
+ <span class="cline-any cline-yes">16x</span>
589
+ <span class="cline-any cline-yes">16x</span>
590
+ <span class="cline-any cline-yes">16x</span>
591
+ <span class="cline-any cline-yes">16x</span>
592
+ <span class="cline-any cline-yes">16x</span>
593
+ <span class="cline-any cline-yes">12x</span>
594
+ <span class="cline-any cline-yes">12x</span>
595
+ <span class="cline-any cline-yes">12x</span>
596
+ <span class="cline-any cline-yes">12x</span>
597
+ <span class="cline-any cline-yes">12x</span>
598
+ <span class="cline-any cline-yes">12x</span>
599
+ <span class="cline-any cline-yes">16x</span>
600
+ <span class="cline-any cline-yes">16x</span>
601
+ <span class="cline-any cline-yes">16x</span>
602
+ <span class="cline-any cline-yes">16x</span>
603
+ <span class="cline-any cline-yes">16x</span>
604
+ <span class="cline-any cline-yes">17x</span>
605
+ <span class="cline-any cline-yes">16x</span>
606
+ <span class="cline-any cline-yes">16x</span>
607
+ <span class="cline-any cline-yes">17x</span>
608
+ <span class="cline-any cline-yes">16x</span>
609
+ <span class="cline-any cline-yes">16x</span>
610
+ <span class="cline-any cline-yes">16x</span>
611
+ <span class="cline-any cline-yes">16x</span>
612
+ <span class="cline-any cline-yes">16x</span>
613
+ <span class="cline-any cline-yes">16x</span>
614
+ <span class="cline-any cline-yes">16x</span>
615
+ <span class="cline-any cline-yes">16x</span>
616
+ <span class="cline-any cline-yes">16x</span>
617
+ <span class="cline-any cline-yes">12x</span>
618
+ <span class="cline-any cline-yes">12x</span>
619
+ <span class="cline-any cline-yes">12x</span>
620
+ <span class="cline-any cline-yes">12x</span>
621
+ <span class="cline-any cline-yes">12x</span>
622
+ <span class="cline-any cline-yes">12x</span>
623
+ <span class="cline-any cline-yes">12x</span>
624
+ <span class="cline-any cline-no">&nbsp;</span>
625
+ <span class="cline-any cline-no">&nbsp;</span>
626
+ <span class="cline-any cline-yes">12x</span>
627
+ <span class="cline-any cline-yes">12x</span>
628
+ <span class="cline-any cline-yes">12x</span>
629
+ <span class="cline-any cline-yes">12x</span>
630
+ <span class="cline-any cline-yes">12x</span>
631
+ <span class="cline-any cline-yes">12x</span>
632
+ <span class="cline-any cline-yes">12x</span>
633
+ <span class="cline-any cline-yes">12x</span>
634
+ <span class="cline-any cline-yes">12x</span>
635
+ <span class="cline-any cline-yes">12x</span>
636
+ <span class="cline-any cline-yes">12x</span>
637
+ <span class="cline-any cline-yes">12x</span>
638
+ <span class="cline-any cline-yes">12x</span>
639
+ <span class="cline-any cline-yes">12x</span>
640
+ <span class="cline-any cline-yes">12x</span>
641
+ <span class="cline-any cline-yes">12x</span>
642
+ <span class="cline-any cline-yes">16x</span>
643
+ <span class="cline-any cline-yes">16x</span>
644
+ <span class="cline-any cline-yes">16x</span>
645
+ <span class="cline-any cline-yes">16x</span>
646
+ <span class="cline-any cline-yes">16x</span>
647
+ <span class="cline-any cline-yes">16x</span>
648
+ <span class="cline-any cline-yes">16x</span>
649
+ <span class="cline-any cline-yes">16x</span>
650
+ <span class="cline-any cline-yes">16x</span>
651
+ <span class="cline-any cline-yes">4x</span>
652
+ <span class="cline-any cline-no">&nbsp;</span>
653
+ <span class="cline-any cline-no">&nbsp;</span>
654
+ <span class="cline-any cline-yes">4x</span>
655
+ <span class="cline-any cline-yes">4x</span>
656
+ <span class="cline-any cline-yes">4x</span>
657
+ <span class="cline-any cline-yes">4x</span>
658
+ <span class="cline-any cline-yes">4x</span>
659
+ <span class="cline-any cline-yes">16x</span>
660
+ <span class="cline-any cline-yes">16x</span>
661
+ <span class="cline-any cline-yes">16x</span>
662
+ <span class="cline-any cline-yes">16x</span>
663
+ <span class="cline-any cline-yes">16x</span>
664
+ <span class="cline-any cline-yes">16x</span>
665
+ <span class="cline-any cline-yes">16x</span>
666
+ <span class="cline-any cline-yes">12x</span>
667
+ <span class="cline-any cline-no">&nbsp;</span>
668
+ <span class="cline-any cline-no">&nbsp;</span>
669
+ <span class="cline-any cline-yes">12x</span>
670
+ <span class="cline-any cline-yes">12x</span>
671
+ <span class="cline-any cline-yes">16x</span>
672
+ <span class="cline-any cline-yes">16x</span>
673
+ <span class="cline-any cline-yes">16x</span>
674
+ <span class="cline-any cline-yes">16x</span>
675
+ <span class="cline-any cline-yes">16x</span>
676
+ <span class="cline-any cline-yes">16x</span>
677
+ <span class="cline-any cline-yes">16x</span>
678
+ <span class="cline-any cline-yes">16x</span>
679
+ <span class="cline-any cline-yes">16x</span>
680
+ <span class="cline-any cline-yes">16x</span>
681
+ <span class="cline-any cline-yes">16x</span>
682
+ <span class="cline-any cline-yes">16x</span>
683
+ <span class="cline-any cline-yes">16x</span>
684
+ <span class="cline-any cline-yes">16x</span>
685
+ <span class="cline-any cline-yes">16x</span>
686
+ <span class="cline-any cline-yes">16x</span>
687
+ <span class="cline-any cline-yes">16x</span>
688
+ <span class="cline-any cline-yes">16x</span>
689
+ <span class="cline-any cline-yes">16x</span>
690
+ <span class="cline-any cline-no">&nbsp;</span>
691
+ <span class="cline-any cline-no">&nbsp;</span>
692
+ <span class="cline-any cline-no">&nbsp;</span>
693
+ <span class="cline-any cline-no">&nbsp;</span>
694
+ <span class="cline-any cline-no">&nbsp;</span>
695
+ <span class="cline-any cline-no">&nbsp;</span>
696
+ <span class="cline-any cline-no">&nbsp;</span>
697
+ <span class="cline-any cline-no">&nbsp;</span>
698
+ <span class="cline-any cline-no">&nbsp;</span>
699
+ <span class="cline-any cline-no">&nbsp;</span>
700
+ <span class="cline-any cline-no">&nbsp;</span>
701
+ <span class="cline-any cline-no">&nbsp;</span>
702
+ <span class="cline-any cline-no">&nbsp;</span>
703
+ <span class="cline-any cline-no">&nbsp;</span>
704
+ <span class="cline-any cline-no">&nbsp;</span>
705
+ <span class="cline-any cline-no">&nbsp;</span>
706
+ <span class="cline-any cline-no">&nbsp;</span>
707
+ <span class="cline-any cline-no">&nbsp;</span>
708
+ <span class="cline-any cline-no">&nbsp;</span>
709
+ <span class="cline-any cline-no">&nbsp;</span>
710
+ <span class="cline-any cline-no">&nbsp;</span>
711
+ <span class="cline-any cline-no">&nbsp;</span>
712
+ <span class="cline-any cline-no">&nbsp;</span>
713
+ <span class="cline-any cline-no">&nbsp;</span>
714
+ <span class="cline-any cline-no">&nbsp;</span>
715
+ <span class="cline-any cline-no">&nbsp;</span>
716
+ <span class="cline-any cline-no">&nbsp;</span>
717
+ <span class="cline-any cline-no">&nbsp;</span>
718
+ <span class="cline-any cline-no">&nbsp;</span>
719
+ <span class="cline-any cline-no">&nbsp;</span>
720
+ <span class="cline-any cline-no">&nbsp;</span>
721
+ <span class="cline-any cline-no">&nbsp;</span>
722
+ <span class="cline-any cline-no">&nbsp;</span>
723
+ <span class="cline-any cline-no">&nbsp;</span>
724
+ <span class="cline-any cline-no">&nbsp;</span>
725
+ <span class="cline-any cline-no">&nbsp;</span>
726
+ <span class="cline-any cline-no">&nbsp;</span>
727
+ <span class="cline-any cline-no">&nbsp;</span>
728
+ <span class="cline-any cline-no">&nbsp;</span>
729
+ <span class="cline-any cline-no">&nbsp;</span>
730
+ <span class="cline-any cline-no">&nbsp;</span>
731
+ <span class="cline-any cline-no">&nbsp;</span>
732
+ <span class="cline-any cline-no">&nbsp;</span>
733
+ <span class="cline-any cline-no">&nbsp;</span>
734
+ <span class="cline-any cline-no">&nbsp;</span>
735
+ <span class="cline-any cline-no">&nbsp;</span>
736
+ <span class="cline-any cline-no">&nbsp;</span>
737
+ <span class="cline-any cline-no">&nbsp;</span>
738
+ <span class="cline-any cline-no">&nbsp;</span>
739
+ <span class="cline-any cline-no">&nbsp;</span>
740
+ <span class="cline-any cline-no">&nbsp;</span>
741
+ <span class="cline-any cline-no">&nbsp;</span>
742
+ <span class="cline-any cline-no">&nbsp;</span>
743
+ <span class="cline-any cline-no">&nbsp;</span>
744
+ <span class="cline-any cline-no">&nbsp;</span>
745
+ <span class="cline-any cline-no">&nbsp;</span>
746
+ <span class="cline-any cline-no">&nbsp;</span>
747
+ <span class="cline-any cline-no">&nbsp;</span>
748
+ <span class="cline-any cline-no">&nbsp;</span>
749
+ <span class="cline-any cline-no">&nbsp;</span>
750
+ <span class="cline-any cline-yes">16x</span>
751
+ <span class="cline-any cline-yes">16x</span>
752
+ <span class="cline-any cline-yes">16x</span>
753
+ <span class="cline-any cline-yes">16x</span>
754
+ <span class="cline-any cline-yes">16x</span>
755
+ <span class="cline-any cline-yes">16x</span>
756
+ <span class="cline-any cline-yes">16x</span>
757
+ <span class="cline-any cline-yes">16x</span>
758
+ <span class="cline-any cline-yes">16x</span>
759
+ <span class="cline-any cline-yes">16x</span>
760
+ <span class="cline-any cline-yes">16x</span>
761
+ <span class="cline-any cline-yes">16x</span>
762
+ <span class="cline-any cline-no">&nbsp;</span>
763
+ <span class="cline-any cline-no">&nbsp;</span>
764
+ <span class="cline-any cline-yes">16x</span>
765
+ <span class="cline-any cline-yes">16x</span>
766
+ <span class="cline-any cline-yes">16x</span>
767
+ <span class="cline-any cline-yes">16x</span>
768
+ <span class="cline-any cline-yes">13x</span>
769
+ <span class="cline-any cline-yes">13x</span>
770
+ <span class="cline-any cline-yes">13x</span>
771
+ <span class="cline-any cline-no">&nbsp;</span>
772
+ <span class="cline-any cline-no">&nbsp;</span>
773
+ <span class="cline-any cline-yes">13x</span>
774
+ <span class="cline-any cline-yes">16x</span>
775
+ <span class="cline-any cline-yes">16x</span>
776
+ <span class="cline-any cline-yes">16x</span>
777
+ <span class="cline-any cline-yes">16x</span>
778
+ <span class="cline-any cline-yes">16x</span>
779
+ <span class="cline-any cline-no">&nbsp;</span>
780
+ <span class="cline-any cline-no">&nbsp;</span>
781
+ <span class="cline-any cline-yes">16x</span>
782
+ <span class="cline-any cline-yes">16x</span>
783
+ <span class="cline-any cline-yes">16x</span>
784
+ <span class="cline-any cline-yes">16x</span>
785
+ <span class="cline-any cline-yes">16x</span>
786
+ <span class="cline-any cline-yes">16x</span>
787
+ <span class="cline-any cline-no">&nbsp;</span>
788
+ <span class="cline-any cline-no">&nbsp;</span>
789
+ <span class="cline-any cline-no">&nbsp;</span>
790
+ <span class="cline-any cline-no">&nbsp;</span>
791
+ <span class="cline-any cline-no">&nbsp;</span>
792
+ <span class="cline-any cline-no">&nbsp;</span>
793
+ <span class="cline-any cline-yes">16x</span>
794
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/**
795
+ * HSuite Native Connect
796
+ * Copyright 2024-2025 HSuite (https://hsuite.finance)
797
+ *
798
+ * SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0
799
+ *
800
+ * This file is part of HSuite Native Connect. For commercial licensing,
801
+ * visit https://hsuite.finance/licensing
802
+ */
803
+ &nbsp;
804
+ /**
805
+ * @file walletconnect-client-manager.ts
806
+ * @description WalletConnect SignClient lifecycle management
807
+ *
808
+ * Handles:
809
+ * - SignClient initialization with projectId
810
+ * - Client reuse across multiple connections
811
+ * - Session restoration from IndexedDB
812
+ * - Event listener registration
813
+ *
814
+ * Extracted from WalletConnectV2Provider to reduce file size.
815
+ */
816
+ &nbsp;
817
+ import { getLogger } from '@hsuite/native-connect-sdk';
818
+ import { WalletConnectModal } from '@walletconnect/modal';
819
+ import SignClient from '@walletconnect/sign-client';
820
+ &nbsp;
821
+ import { SessionHealthManager } from './session-health';
822
+ &nbsp;
823
+ const logger = getLogger().scoped?.('WCClientManager'<span class="branch-0 cbranch-no" title="branch not covered" >) ?? getLogger();</span>
824
+ &nbsp;
825
+ /**
826
+ * Storage key for persisted projectId
827
+ */
828
+ const STORAGE_KEY_PROJECT_ID = 'hsuite.walletconnect.projectId';
829
+ &nbsp;
830
+ /**
831
+ * WalletConnect app metadata
832
+ */
833
+ export interface WCAppMetadata {
834
+ name: string;
835
+ description: string;
836
+ url: string;
837
+ icons: string[];
838
+ }
839
+ &nbsp;
840
+ /**
841
+ * WalletConnect Client Manager
842
+ *
843
+ * Manages the SignClient instance lifecycle.
844
+ * Handles initialization, session restoration, and cleanup.
845
+ */
846
+ export class WalletConnectClientManager {
847
+ private client?: SignClient;
848
+ private modal?: WalletConnectModal;
849
+ private projectId?: string;
850
+ private sessionHealth?: SessionHealthManager;
851
+ &nbsp;
852
+ /**
853
+ * Initialize or return existing SignClient.
854
+ *
855
+ * @param projectId - WalletConnect Cloud project ID
856
+ * @param metadata - App metadata for wallet display
857
+ * @returns Initialized SignClient instance
858
+ */
859
+ async initialize(projectId: string, metadata: WCAppMetadata): Promise&lt;SignClient&gt; {
860
+ if (this.<span class="branch-0 cbranch-no" title="branch not covered" >client &amp;&amp; this.projectId === projectId) <span class="branch-0 cbranch-no" title="branch not covered" >{</span></span>
861
+ <span class="cstat-no" title="statement not covered" > return this.client;</span>
862
+ <span class="cstat-no" title="statement not covered" > }</span>
863
+ &nbsp;
864
+ logger.debug('Initializing SignClient', { projectId: projectId.substring(0, 8) });
865
+ &nbsp;
866
+ // Store projectId for session restoration
867
+ this.projectId = projectId;
868
+ this.persistProjectId(projectId);
869
+ &nbsp;
870
+ // Use 'fatal' logger to suppress pino noise from WalletConnect SDK
871
+ this.client = await SignClient.init({
872
+ projectId,
873
+ logger: 'fatal',
874
+ metadata,
875
+ });
876
+ &nbsp;
877
+ // Initialize session health manager for relay subscription management
878
+ this.sessionHealth = new SessionHealthManager(this.client);
879
+ &nbsp;
880
+ logger.info('SignClient initialized with session health manager');
881
+ return this.client;
882
+ }
883
+ &nbsp;
884
+ /**
885
+ * Get the current client instance.
886
+ * @throws Error if not initialized
887
+ */
888
+ <span class="fstat-no" title="function not covered" > getClient(): SignClient {</span>
889
+ <span class="cstat-no" title="statement not covered" > if (!this.client) {</span>
890
+ <span class="cstat-no" title="statement not covered" > throw new Error('WalletConnect client not initialized');</span>
891
+ <span class="cstat-no" title="statement not covered" > }</span>
892
+ <span class="cstat-no" title="statement not covered" > return this.client;</span>
893
+ <span class="cstat-no" title="statement not covered" > }</span>
894
+ &nbsp;
895
+ /**
896
+ * Check if client is initialized.
897
+ */
898
+ isInitialized(): boolean {
899
+ return !!this.client;
900
+ }
901
+ &nbsp;
902
+ /**
903
+ * Restore client from stored projectId.
904
+ * Used for session restoration on page reload.
905
+ *
906
+ * @param metadata - App metadata
907
+ * @returns Client if restoration succeeded, undefined otherwise
908
+ */
909
+ async restoreClient(metadata: WCAppMetadata): Promise&lt;SignClient | undefined&gt; {
910
+ const storedProjectId = this.getStoredProjectId();
911
+ if (!storedProjectId) {
912
+ logger.debug('No stored projectId, skipping client restoration');
913
+ return undefined;
914
+ <span class="branch-0 cbranch-no" title="branch not covered" > }</span>
915
+ <span class="cstat-no" title="statement not covered" ></span>
916
+ <span class="cstat-no" title="statement not covered" > try {</span>
917
+ <span class="cstat-no" title="statement not covered" > return await this.initialize(storedProjectId, metadata);</span>
918
+ <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
919
+ <span class="cstat-no" title="statement not covered" > logger.error('Failed to restore client', {</span>
920
+ <span class="cstat-no" title="statement not covered" > error: error instanceof Error ? error.message : String(error),</span>
921
+ <span class="cstat-no" title="statement not covered" > });</span>
922
+ <span class="cstat-no" title="statement not covered" > return undefined;</span>
923
+ <span class="cstat-no" title="statement not covered" > }</span>
924
+ }
925
+ &nbsp;
926
+ /**
927
+ * Get all active sessions from the client.
928
+ */
929
+ <span class="fstat-no" title="function not covered" > getActiveSessions(): any[] {</span>
930
+ <span class="cstat-no" title="statement not covered" > if (!this.client) {</span>
931
+ <span class="cstat-no" title="statement not covered" > return [];</span>
932
+ <span class="cstat-no" title="statement not covered" > }</span>
933
+ <span class="cstat-no" title="statement not covered" > return this.client.session.getAll();</span>
934
+ <span class="cstat-no" title="statement not covered" > }</span>
935
+ &nbsp;
936
+ /**
937
+ * Get a specific session by topic.
938
+ * @param topic
939
+ */
940
+ getSession(topic: string): any | undefined {
941
+ if (!this.client) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
942
+ <span class="cstat-no" title="statement not covered" > return undefined;</span>
943
+ <span class="cstat-no" title="statement not covered" > }</span>
944
+ try {
945
+ return this.client.session.get(topic);
946
+ } catch {
947
+ return undefined;
948
+ }
949
+ }
950
+ &nbsp;
951
+ /**
952
+ * Create and return a modal for QR code display.
953
+ * @param projectId
954
+ * @param chains
955
+ */
956
+ createModal(projectId: string, chains: string[]): WalletConnectModal {
957
+ this.modal = new WalletConnectModal({
958
+ projectId,
959
+ chains,
960
+ });
961
+ return this.modal;
962
+ }
963
+ &nbsp;
964
+ /**
965
+ * Close the modal if open.
966
+ */
967
+ closeModal(): void {
968
+ if (this.modal) {
969
+ this.modal.closeModal();
970
+ }
971
+ }
972
+ &nbsp;
973
+ /**
974
+ * Connect to wallet and get session.
975
+ *
976
+ * @param optionalNamespaces - Namespace configuration
977
+ * @param sessionProperties - Optional session properties (e.g., preferredNetwork)
978
+ * @returns URI and approval promise
979
+ */
980
+ async connect(
981
+ optionalNamespaces: Record&lt;string, any&gt;,
982
+ sessionProperties?: Record&lt;string, string&gt;,
983
+ ): Promise&lt;{
984
+ uri?: string;
985
+ approval: () =&gt; Promise&lt;any&gt;;
986
+ }&gt; {
987
+ if (!this.client) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
988
+ <span class="cstat-no" title="statement not covered" > throw new Error('Client not initialized');</span>
989
+ <span class="cstat-no" title="statement not covered" > }</span>
990
+ &nbsp;
991
+ const connectParams: any = { optionalNamespaces };
992
+ &nbsp;
993
+ // Add session properties if provided
994
+ // This allows passing metadata like preferredNetwork to the wallet
995
+ if (sessionProperties) {
996
+ connectParams.sessionProperties = sessionProperties;
997
+ }
998
+ &nbsp;
999
+ logger.debug('Connecting with params', {
1000
+ namespaces: Object.keys(optionalNamespaces),
1001
+ hasSessionProperties: !!sessionProperties,
1002
+ });
1003
+ &nbsp;
1004
+ return this.client.connect(connectParams);
1005
+ }
1006
+ &nbsp;
1007
+ /**
1008
+ * Disconnect a session.
1009
+ * @param topic
1010
+ * @param reason
1011
+ * @param reason.code
1012
+ * @param reason.message
1013
+ */
1014
+ async disconnect(topic: string, reason?: { code: number; message: string }): Promise&lt;void&gt; {
1015
+ if (!this.client) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
1016
+ <span class="cstat-no" title="statement not covered" > return;</span>
1017
+ <span class="cstat-no" title="statement not covered" > }</span>
1018
+ await this.client.disconnect({
1019
+ topic,
1020
+ reason: <span class="branch-0 cbranch-no" title="branch not covered" >reason || { code: 6000, message: 'User disconnected' },</span>
1021
+ });
1022
+ }
1023
+ &nbsp;
1024
+ /**
1025
+ * Register event listener on the client.
1026
+ * @param event
1027
+ * @param handler
1028
+ */
1029
+ on(event: string, handler: (event: any) =&gt; void): void {
1030
+ if (!this.client) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
1031
+ <span class="cstat-no" title="statement not covered" > return;</span>
1032
+ <span class="cstat-no" title="statement not covered" > }</span>
1033
+ (this.client as any).on(event, handler);
1034
+ }
1035
+ &nbsp;
1036
+ /**
1037
+ * Send a request to a session.
1038
+ *
1039
+ * Features:
1040
+ * - Automatically ensures session health by pinging before the request
1041
+ * - Runs keep-alive pings during long-running requests (e.g., transaction approval)
1042
+ * - Prevents stale relay subscription issues that cause empty error objects
1043
+ *
1044
+ * @param params - Request parameters including topic, chainId, and request data
1045
+ * @param params.expiry - Optional expiry time in seconds (default: 300)
1046
+ * @param params.topic
1047
+ * @param params.chainId
1048
+ * @param params.request
1049
+ * @param params.request.method
1050
+ * @param params.request.params
1051
+ * @returns Promise resolving to the request result
1052
+ */
1053
+ <span class="fstat-no" title="function not covered" > async request&lt;T = unknown&gt;(params: {</span>
1054
+ <span class="cstat-no" title="statement not covered" > topic: string;</span>
1055
+ <span class="cstat-no" title="statement not covered" > chainId: string;</span>
1056
+ <span class="cstat-no" title="statement not covered" > request: { method: string; params: unknown };</span>
1057
+ <span class="cstat-no" title="statement not covered" > expiry?: number;</span>
1058
+ <span class="cstat-no" title="statement not covered" > }): Promise&lt;T&gt; {</span>
1059
+ <span class="cstat-no" title="statement not covered" > if (!this.client) {</span>
1060
+ <span class="cstat-no" title="statement not covered" > throw new Error('Client not initialized');</span>
1061
+ <span class="cstat-no" title="statement not covered" > }</span>
1062
+ <span class="cstat-no" title="statement not covered" ></span>
1063
+ <span class="cstat-no" title="statement not covered" > // Ensure session health before request (transparent to caller)</span>
1064
+ <span class="cstat-no" title="statement not covered" > // This pings the session if needed to refresh relay subscription</span>
1065
+ <span class="cstat-no" title="statement not covered" > if (this.sessionHealth) {</span>
1066
+ <span class="cstat-no" title="statement not covered" > await this.sessionHealth.ensureSessionHealth(params.topic);</span>
1067
+ <span class="cstat-no" title="statement not covered" > }</span>
1068
+ <span class="cstat-no" title="statement not covered" ></span>
1069
+ <span class="cstat-no" title="statement not covered" > // Keep-alive pings during long-running requests (e.g., transaction approval)</span>
1070
+ <span class="cstat-no" title="statement not covered" > // WC relay has ~30s subscription timeout, so we ping every 20s to keep it alive</span>
1071
+ <span class="cstat-no" title="statement not covered" > const KEEP_ALIVE_INTERVAL_MS = 20000;</span>
1072
+ <span class="cstat-no" title="statement not covered" > let keepAliveInterval: ReturnType&lt;typeof setInterval&gt; | undefined;</span>
1073
+ <span class="cstat-no" title="statement not covered" ></span>
1074
+ <span class="cstat-no" title="statement not covered" > const startKeepAlive = () =&gt; {</span>
1075
+ <span class="cstat-no" title="statement not covered" > keepAliveInterval = setInterval(async () =&gt; {</span>
1076
+ <span class="cstat-no" title="statement not covered" > try {</span>
1077
+ <span class="cstat-no" title="statement not covered" > logger.debug('Keep-alive ping during request', {</span>
1078
+ <span class="cstat-no" title="statement not covered" > topic: params.topic?.substring(0, 16) + '...',</span>
1079
+ <span class="cstat-no" title="statement not covered" > method: params.request.method,</span>
1080
+ <span class="cstat-no" title="statement not covered" > });</span>
1081
+ <span class="cstat-no" title="statement not covered" > if (this.client) {</span>
1082
+ <span class="cstat-no" title="statement not covered" > await Promise.race([</span>
1083
+ <span class="cstat-no" title="statement not covered" > this.client.ping({ topic: params.topic }),</span>
1084
+ <span class="cstat-no" title="statement not covered" > new Promise((_, reject) =&gt; setTimeout(() =&gt; reject(new Error('Ping timeout')), 5000)),</span>
1085
+ <span class="cstat-no" title="statement not covered" > ]);</span>
1086
+ <span class="cstat-no" title="statement not covered" > }</span>
1087
+ <span class="cstat-no" title="statement not covered" > } catch (err) {</span>
1088
+ <span class="cstat-no" title="statement not covered" > // Log but don't throw - ping failure during wait is not critical</span>
1089
+ <span class="cstat-no" title="statement not covered" > logger.debug('Keep-alive ping failed (non-critical)', {</span>
1090
+ <span class="cstat-no" title="statement not covered" > error: err instanceof Error ? err.message : String(err),</span>
1091
+ <span class="cstat-no" title="statement not covered" > });</span>
1092
+ <span class="cstat-no" title="statement not covered" > }</span>
1093
+ <span class="cstat-no" title="statement not covered" > }, KEEP_ALIVE_INTERVAL_MS);</span>
1094
+ <span class="cstat-no" title="statement not covered" > };</span>
1095
+ <span class="cstat-no" title="statement not covered" ></span>
1096
+ <span class="cstat-no" title="statement not covered" > const stopKeepAlive = () =&gt; {</span>
1097
+ <span class="cstat-no" title="statement not covered" > if (keepAliveInterval) {</span>
1098
+ <span class="cstat-no" title="statement not covered" > clearInterval(keepAliveInterval);</span>
1099
+ <span class="cstat-no" title="statement not covered" > keepAliveInterval = undefined;</span>
1100
+ <span class="cstat-no" title="statement not covered" > }</span>
1101
+ <span class="cstat-no" title="statement not covered" > };</span>
1102
+ <span class="cstat-no" title="statement not covered" ></span>
1103
+ <span class="cstat-no" title="statement not covered" > // Start keep-alive pings</span>
1104
+ <span class="cstat-no" title="statement not covered" > startKeepAlive();</span>
1105
+ <span class="cstat-no" title="statement not covered" ></span>
1106
+ <span class="cstat-no" title="statement not covered" > try {</span>
1107
+ <span class="cstat-no" title="statement not covered" > const result = await this.client.request&lt;T&gt;(params);</span>
1108
+ <span class="cstat-no" title="statement not covered" > return result;</span>
1109
+ <span class="cstat-no" title="statement not covered" > } finally {</span>
1110
+ <span class="cstat-no" title="statement not covered" > // Always stop keep-alive, whether success or error</span>
1111
+ <span class="cstat-no" title="statement not covered" > stopKeepAlive();</span>
1112
+ <span class="cstat-no" title="statement not covered" > }</span>
1113
+ <span class="cstat-no" title="statement not covered" > }</span>
1114
+ &nbsp;
1115
+ /**
1116
+ * Get the session health manager for advanced operations.
1117
+ *
1118
+ * Use this if you need to:
1119
+ * - Force refresh a subscription
1120
+ * - Clear ping cache
1121
+ * - Access health manager directly
1122
+ *
1123
+ * @returns SessionHealthManager instance or undefined if not initialized
1124
+ */
1125
+ <span class="fstat-no" title="function not covered" > getSessionHealthManager(): SessionHealthManager | undefined {</span>
1126
+ <span class="cstat-no" title="statement not covered" > return this.sessionHealth;</span>
1127
+ <span class="cstat-no" title="statement not covered" > }</span>
1128
+ &nbsp;
1129
+ // ========== STORAGE ==========
1130
+ &nbsp;
1131
+ private persistProjectId(projectId: string): void {
1132
+ try {
1133
+ window.localStorage?.setItem(STORAGE_KEY_PROJECT_ID, projectId);
1134
+ <span class="branch-0 cbranch-no" title="branch not covered" > } catch {</span>
1135
+ <span class="cstat-no" title="statement not covered" > logger.warn('Failed to persist projectId');</span>
1136
+ <span class="cstat-no" title="statement not covered" > }</span>
1137
+ }
1138
+ &nbsp;
1139
+ private getStoredProjectId(): string | null {
1140
+ try {
1141
+ return window.localStorage?.getItem(STORAGE_KEY_PROJECT_ID) ?? null;
1142
+ <span class="branch-0 cbranch-no" title="branch not covered" > } catch {</span>
1143
+ <span class="cstat-no" title="statement not covered" > return null;</span>
1144
+ <span class="cstat-no" title="statement not covered" > }</span>
1145
+ }
1146
+ &nbsp;
1147
+ /**
1148
+ * Clear stored projectId.
1149
+ */
1150
+ <span class="fstat-no" title="function not covered" > clearStoredProjectId(): void {</span>
1151
+ <span class="cstat-no" title="statement not covered" > try {</span>
1152
+ <span class="cstat-no" title="statement not covered" > window.localStorage?.removeItem(STORAGE_KEY_PROJECT_ID);</span>
1153
+ <span class="cstat-no" title="statement not covered" > } catch {</span>
1154
+ <span class="cstat-no" title="statement not covered" > // Ignore</span>
1155
+ <span class="cstat-no" title="statement not covered" > }</span>
1156
+ <span class="cstat-no" title="statement not covered" > }</span>
1157
+ }
1158
+ &nbsp;</pre></td></tr></table></pre>
1159
+
1160
+ <div class='push'></div><!-- for sticky footer -->
1161
+ </div><!-- /wrapper -->
1162
+ <div class='footer quiet pad2 space-top1 center small'>
1163
+ Code coverage generated by
1164
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1165
+ at 2026-06-02T14:30:38.257Z
1166
+ </div>
1167
+ <script src="../../../../prettify.js"></script>
1168
+ <script>
1169
+ window.onload = function () {
1170
+ prettyPrint();
1171
+ };
1172
+ </script>
1173
+ <script src="../../../../sorter.js"></script>
1174
+ <script src="../../../../block-navigation.js"></script>
1175
+ </body>
1176
+ </html>
1177
+