@hsuite/native-connect-angular 1.0.0 → 2.1.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 (162) hide show
  1. package/coverage/coverage-summary.json +49 -49
  2. package/coverage/index.html +122 -122
  3. package/coverage/lcov-report/index.html +122 -122
  4. package/coverage/lcov-report/lib/components/account-selector/account-actions/account-actions.component.ts.html +1 -1
  5. package/coverage/lcov-report/lib/components/account-selector/account-actions/index.html +1 -1
  6. package/coverage/lcov-report/lib/components/account-selector/account-filter/account-filter.component.ts.html +1 -1
  7. package/coverage/lcov-report/lib/components/account-selector/account-filter/index.html +1 -1
  8. package/coverage/lcov-report/lib/components/account-selector/account-formatting.service.ts.html +1 -1
  9. package/coverage/lcov-report/lib/components/account-selector/account-grouping.service.ts.html +1 -1
  10. package/coverage/lcov-report/lib/components/account-selector/account-list/account-list.component.ts.html +1 -1
  11. package/coverage/lcov-report/lib/components/account-selector/account-list/index.html +1 -1
  12. package/coverage/lcov-report/lib/components/account-selector/account-selector.component.ts.html +1 -1
  13. package/coverage/lcov-report/lib/components/account-selector/account-selector.service.ts.html +1 -1
  14. package/coverage/lcov-report/lib/components/account-selector/index.html +1 -1
  15. package/coverage/lcov-report/lib/components/wallet-account-display/index.html +1 -1
  16. package/coverage/lcov-report/lib/components/wallet-account-display/wallet-account-display.component.ts.html +1 -1
  17. package/coverage/lcov-report/lib/components/wallet-connect-button/index.html +21 -21
  18. package/coverage/lcov-report/lib/components/wallet-connect-button/wallet-connect-button.component.ts.html +475 -451
  19. package/coverage/lcov-report/lib/components/wallet-connect-prompt/index.html +1 -1
  20. package/coverage/lcov-report/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.ts.html +1 -1
  21. package/coverage/lcov-report/lib/components/wallet-connected-guard/index.html +1 -1
  22. package/coverage/lcov-report/lib/components/wallet-connected-guard/wallet-connected-guard.component.ts.html +1 -1
  23. package/coverage/lcov-report/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.ts.html +148 -148
  24. package/coverage/lcov-report/lib/components/wallet-connection-modal/connection-method-step/index.html +17 -17
  25. package/coverage/lcov-report/lib/components/wallet-connection-modal/index.html +21 -21
  26. package/coverage/lcov-report/lib/components/wallet-connection-modal/qr-pairing-step/index.html +17 -17
  27. package/coverage/lcov-report/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.ts.html +838 -838
  28. package/coverage/lcov-report/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts.html +1182 -987
  29. package/coverage/lcov-report/lib/components/wallet-session-display/index.html +1 -1
  30. package/coverage/lcov-report/lib/components/wallet-session-display/wallet-session-display.component.ts.html +1 -1
  31. package/coverage/lcov-report/lib/components/wallet-transaction-status/index.html +1 -1
  32. package/coverage/lcov-report/lib/components/wallet-transaction-status/wallet-transaction-status.component.ts.html +1 -1
  33. package/coverage/lcov-report/lib/directives/index.html +1 -1
  34. package/coverage/lcov-report/lib/directives/wallet-connected.directive.ts.html +1 -1
  35. package/coverage/lcov-report/lib/directives/wallet-context.directive.ts.html +1 -1
  36. package/coverage/lcov-report/lib/directives/wallet-events.directive.ts.html +1 -1
  37. package/coverage/lcov-report/lib/hsuite-wallet.module.ts.html +1 -1
  38. package/coverage/lcov-report/lib/index.html +1 -1
  39. package/coverage/lcov-report/lib/models/connection-config.model.ts.html +1 -1
  40. package/coverage/lcov-report/lib/models/index.html +1 -1
  41. package/coverage/lcov-report/lib/models/provider-types.ts.html +1 -1
  42. package/coverage/lcov-report/lib/providers/base-wallet-provider.ts.html +20 -20
  43. package/coverage/lcov-report/lib/providers/hsuite-native/channel-client.service.ts.html +637 -637
  44. package/coverage/lcov-report/lib/providers/hsuite-native/index.html +19 -19
  45. package/coverage/lcov-report/lib/providers/hsuite-native-provider.ts.html +1 -1
  46. package/coverage/lcov-report/lib/providers/index.html +18 -18
  47. package/coverage/lcov-report/lib/providers/p2p-native/index.html +20 -20
  48. package/coverage/lcov-report/lib/providers/p2p-native/p2p-native.provider.ts.html +993 -993
  49. package/coverage/lcov-report/lib/providers/p2p-native/p2p-session-manager.ts.html +1 -1
  50. package/coverage/lcov-report/lib/providers/wallet-error-handler.ts.html +1 -1
  51. package/coverage/lcov-report/lib/providers/walletconnect/core/index.html +65 -65
  52. package/coverage/lcov-report/lib/providers/walletconnect/core/session-health.ts.html +240 -240
  53. package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-client-manager.ts.html +559 -559
  54. package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-provider.ts.html +1104 -1104
  55. package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-session-store.ts.html +493 -493
  56. package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-signing-orchestrator.ts.html +366 -366
  57. package/coverage/lcov-report/lib/providers/walletconnect/signers/hedera-signer.ts.html +730 -730
  58. package/coverage/lcov-report/lib/providers/walletconnect/signers/index.html +43 -43
  59. package/coverage/lcov-report/lib/providers/walletconnect/signers/signer-factory.ts.html +234 -234
  60. package/coverage/lcov-report/lib/providers/walletconnect/signers/xrpl-signer.ts.html +650 -650
  61. package/coverage/lcov-report/lib/services/index.html +31 -31
  62. package/coverage/lcov-report/lib/services/logger.service.ts.html +4 -4
  63. package/coverage/lcov-report/lib/services/transaction-builders/base-transaction-builder.service.ts.html +1 -1
  64. package/coverage/lcov-report/lib/services/transaction-builders/hedera-amount-utils.ts.html +155 -155
  65. package/coverage/lcov-report/lib/services/transaction-builders/hedera-transaction-builder.service.ts.html +2156 -2156
  66. package/coverage/lcov-report/lib/services/transaction-builders/index.html +43 -43
  67. package/coverage/lcov-report/lib/services/transaction-builders/xrpl-transaction-builder.service.ts.html +1674 -1674
  68. package/coverage/lcov-report/lib/services/transaction.service.ts.html +4 -7
  69. package/coverage/lcov-report/lib/services/unified-wallet.service.ts.html +7 -10
  70. package/coverage/lcov-report/lib/services/wallet-context.service.ts.html +1 -1
  71. package/coverage/lcov-report/lib/services/wallet-event-bus.service.ts.html +249 -249
  72. package/coverage/lcov-report/lib/services/wallet-providers.service.ts.html +4 -7
  73. package/coverage/lcov-report/lib/transports/chrome-extension-transport.ts.html +1 -1
  74. package/coverage/lcov-report/lib/transports/index.html +1 -1
  75. package/coverage/lcov-report/lib/utils/index.html +1 -1
  76. package/coverage/lcov-report/lib/utils/ledger-icons.util.ts.html +1 -1
  77. package/coverage/lcov.info +14420 -14977
  78. package/coverage/lib/components/account-selector/account-actions/account-actions.component.ts.html +1 -1
  79. package/coverage/lib/components/account-selector/account-actions/index.html +1 -1
  80. package/coverage/lib/components/account-selector/account-filter/account-filter.component.ts.html +1 -1
  81. package/coverage/lib/components/account-selector/account-filter/index.html +1 -1
  82. package/coverage/lib/components/account-selector/account-formatting.service.ts.html +1 -1
  83. package/coverage/lib/components/account-selector/account-grouping.service.ts.html +1 -1
  84. package/coverage/lib/components/account-selector/account-list/account-list.component.ts.html +1 -1
  85. package/coverage/lib/components/account-selector/account-list/index.html +1 -1
  86. package/coverage/lib/components/account-selector/account-selector.component.ts.html +1 -1
  87. package/coverage/lib/components/account-selector/account-selector.service.ts.html +1 -1
  88. package/coverage/lib/components/account-selector/index.html +1 -1
  89. package/coverage/lib/components/wallet-account-display/index.html +1 -1
  90. package/coverage/lib/components/wallet-account-display/wallet-account-display.component.ts.html +1 -1
  91. package/coverage/lib/components/wallet-connect-button/index.html +21 -21
  92. package/coverage/lib/components/wallet-connect-button/wallet-connect-button.component.ts.html +475 -451
  93. package/coverage/lib/components/wallet-connect-prompt/index.html +1 -1
  94. package/coverage/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.ts.html +1 -1
  95. package/coverage/lib/components/wallet-connected-guard/index.html +1 -1
  96. package/coverage/lib/components/wallet-connected-guard/wallet-connected-guard.component.ts.html +1 -1
  97. package/coverage/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.ts.html +148 -148
  98. package/coverage/lib/components/wallet-connection-modal/connection-method-step/index.html +17 -17
  99. package/coverage/lib/components/wallet-connection-modal/index.html +21 -21
  100. package/coverage/lib/components/wallet-connection-modal/qr-pairing-step/index.html +17 -17
  101. package/coverage/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.ts.html +838 -838
  102. package/coverage/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts.html +1182 -987
  103. package/coverage/lib/components/wallet-session-display/index.html +1 -1
  104. package/coverage/lib/components/wallet-session-display/wallet-session-display.component.ts.html +1 -1
  105. package/coverage/lib/components/wallet-transaction-status/index.html +1 -1
  106. package/coverage/lib/components/wallet-transaction-status/wallet-transaction-status.component.ts.html +1 -1
  107. package/coverage/lib/directives/index.html +1 -1
  108. package/coverage/lib/directives/wallet-connected.directive.ts.html +1 -1
  109. package/coverage/lib/directives/wallet-context.directive.ts.html +1 -1
  110. package/coverage/lib/directives/wallet-events.directive.ts.html +1 -1
  111. package/coverage/lib/hsuite-wallet.module.ts.html +1 -1
  112. package/coverage/lib/index.html +1 -1
  113. package/coverage/lib/models/connection-config.model.ts.html +1 -1
  114. package/coverage/lib/models/index.html +1 -1
  115. package/coverage/lib/models/provider-types.ts.html +1 -1
  116. package/coverage/lib/providers/base-wallet-provider.ts.html +20 -20
  117. package/coverage/lib/providers/hsuite-native/channel-client.service.ts.html +637 -637
  118. package/coverage/lib/providers/hsuite-native/index.html +19 -19
  119. package/coverage/lib/providers/hsuite-native-provider.ts.html +1 -1
  120. package/coverage/lib/providers/index.html +18 -18
  121. package/coverage/lib/providers/p2p-native/index.html +20 -20
  122. package/coverage/lib/providers/p2p-native/p2p-native.provider.ts.html +993 -993
  123. package/coverage/lib/providers/p2p-native/p2p-session-manager.ts.html +1 -1
  124. package/coverage/lib/providers/wallet-error-handler.ts.html +1 -1
  125. package/coverage/lib/providers/walletconnect/core/index.html +65 -65
  126. package/coverage/lib/providers/walletconnect/core/session-health.ts.html +240 -240
  127. package/coverage/lib/providers/walletconnect/core/walletconnect-client-manager.ts.html +559 -559
  128. package/coverage/lib/providers/walletconnect/core/walletconnect-provider.ts.html +1104 -1104
  129. package/coverage/lib/providers/walletconnect/core/walletconnect-session-store.ts.html +493 -493
  130. package/coverage/lib/providers/walletconnect/core/walletconnect-signing-orchestrator.ts.html +366 -366
  131. package/coverage/lib/providers/walletconnect/signers/hedera-signer.ts.html +730 -730
  132. package/coverage/lib/providers/walletconnect/signers/index.html +43 -43
  133. package/coverage/lib/providers/walletconnect/signers/signer-factory.ts.html +234 -234
  134. package/coverage/lib/providers/walletconnect/signers/xrpl-signer.ts.html +650 -650
  135. package/coverage/lib/services/index.html +31 -31
  136. package/coverage/lib/services/logger.service.ts.html +4 -4
  137. package/coverage/lib/services/transaction-builders/base-transaction-builder.service.ts.html +1 -1
  138. package/coverage/lib/services/transaction-builders/hedera-amount-utils.ts.html +155 -155
  139. package/coverage/lib/services/transaction-builders/hedera-transaction-builder.service.ts.html +2156 -2156
  140. package/coverage/lib/services/transaction-builders/index.html +43 -43
  141. package/coverage/lib/services/transaction-builders/xrpl-transaction-builder.service.ts.html +1674 -1674
  142. package/coverage/lib/services/transaction.service.ts.html +4 -7
  143. package/coverage/lib/services/unified-wallet.service.ts.html +7 -10
  144. package/coverage/lib/services/wallet-context.service.ts.html +1 -1
  145. package/coverage/lib/services/wallet-event-bus.service.ts.html +249 -249
  146. package/coverage/lib/services/wallet-providers.service.ts.html +4 -7
  147. package/coverage/lib/transports/chrome-extension-transport.ts.html +1 -1
  148. package/coverage/lib/transports/index.html +1 -1
  149. package/coverage/lib/utils/index.html +1 -1
  150. package/coverage/lib/utils/ledger-icons.util.ts.html +1 -1
  151. package/dist/fesm2022/hsuite-native-connect-angular.mjs +85 -20
  152. package/dist/fesm2022/hsuite-native-connect-angular.mjs.map +1 -1
  153. package/dist/index.d.ts +33 -3
  154. package/package.json +4 -4
  155. package/src/lib/components/wallet-connect-button/wallet-connect-button.component.spec.ts +89 -0
  156. package/src/lib/components/wallet-connect-button/wallet-connect-button.component.ts +8 -0
  157. package/src/lib/components/wallet-connection-modal/wallet-connection-modal.component.html +1 -6
  158. package/src/lib/components/wallet-connection-modal/wallet-connection-modal.component.spec.ts +173 -0
  159. package/src/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts +84 -19
  160. package/src/lib/services/transaction.service.ts +0 -1
  161. package/src/lib/services/unified-wallet.service.ts +0 -1
  162. package/src/lib/services/wallet-providers.service.ts +0 -1
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">72.25% </span>
26
+ <span class="strong">0% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>263/364</span>
28
+ <span class='fraction'>0/364</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">56% </span>
33
+ <span class="strong">0% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>14/25</span>
35
+ <span class='fraction'>0/1</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">70.58% </span>
40
+ <span class="strong">0% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>12/17</span>
42
+ <span class='fraction'>0/1</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">72.25% </span>
47
+ <span class="strong">0% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>263/364</span>
49
+ <span class='fraction'>0/364</span>
50
50
  </div>
51
51
 
52
52
 
@@ -61,7 +61,7 @@
61
61
  </div>
62
62
  </template>
63
63
  </div>
64
- <div class='status-line medium'></div>
64
+ <div class='status-line low'></div>
65
65
  <pre><table class="coverage">
66
66
  <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
67
  <a name='L2'></a><a href='#L2'>2</a>
@@ -427,266 +427,13 @@
427
427
  <a name='L362'></a><a href='#L362'>362</a>
428
428
  <a name='L363'></a><a href='#L363'>363</a>
429
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>
430
+ <a name='L365'></a><a href='#L365'>365</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
624
431
  <span class="cline-any cline-no">&nbsp;</span>
625
432
  <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
433
  <span class="cline-any cline-no">&nbsp;</span>
653
434
  <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
435
  <span class="cline-any cline-no">&nbsp;</span>
668
436
  <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
437
  <span class="cline-any cline-no">&nbsp;</span>
691
438
  <span class="cline-any cline-no">&nbsp;</span>
692
439
  <span class="cline-any cline-no">&nbsp;</span>
@@ -747,171 +494,424 @@
747
494
  <span class="cline-any cline-no">&nbsp;</span>
748
495
  <span class="cline-any cline-no">&nbsp;</span>
749
496
  <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
497
  <span class="cline-any cline-no">&nbsp;</span>
763
498
  <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
499
  <span class="cline-any cline-no">&nbsp;</span>
772
500
  <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
501
  <span class="cline-any cline-no">&nbsp;</span>
780
502
  <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
503
  <span class="cline-any cline-no">&nbsp;</span>
788
504
  <span class="cline-any cline-no">&nbsp;</span>
789
505
  <span class="cline-any cline-no">&nbsp;</span>
790
506
  <span class="cline-any cline-no">&nbsp;</span>
791
507
  <span class="cline-any cline-no">&nbsp;</span>
792
508
  <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>
509
+ <span class="cline-any cline-no">&nbsp;</span>
510
+ <span class="cline-any cline-no">&nbsp;</span>
511
+ <span class="cline-any cline-no">&nbsp;</span>
512
+ <span class="cline-any cline-no">&nbsp;</span>
513
+ <span class="cline-any cline-no">&nbsp;</span>
514
+ <span class="cline-any cline-no">&nbsp;</span>
515
+ <span class="cline-any cline-no">&nbsp;</span>
516
+ <span class="cline-any cline-no">&nbsp;</span>
517
+ <span class="cline-any cline-no">&nbsp;</span>
518
+ <span class="cline-any cline-no">&nbsp;</span>
519
+ <span class="cline-any cline-no">&nbsp;</span>
520
+ <span class="cline-any cline-no">&nbsp;</span>
521
+ <span class="cline-any cline-no">&nbsp;</span>
522
+ <span class="cline-any cline-no">&nbsp;</span>
523
+ <span class="cline-any cline-no">&nbsp;</span>
524
+ <span class="cline-any cline-no">&nbsp;</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-no">&nbsp;</span>
531
+ <span class="cline-any cline-no">&nbsp;</span>
532
+ <span class="cline-any cline-no">&nbsp;</span>
533
+ <span class="cline-any cline-no">&nbsp;</span>
534
+ <span class="cline-any cline-no">&nbsp;</span>
535
+ <span class="cline-any cline-no">&nbsp;</span>
536
+ <span class="cline-any cline-no">&nbsp;</span>
537
+ <span class="cline-any cline-no">&nbsp;</span>
538
+ <span class="cline-any cline-no">&nbsp;</span>
539
+ <span class="cline-any cline-no">&nbsp;</span>
540
+ <span class="cline-any cline-no">&nbsp;</span>
541
+ <span class="cline-any cline-no">&nbsp;</span>
542
+ <span class="cline-any cline-no">&nbsp;</span>
543
+ <span class="cline-any cline-no">&nbsp;</span>
544
+ <span class="cline-any cline-no">&nbsp;</span>
545
+ <span class="cline-any cline-no">&nbsp;</span>
546
+ <span class="cline-any cline-no">&nbsp;</span>
547
+ <span class="cline-any cline-no">&nbsp;</span>
548
+ <span class="cline-any cline-no">&nbsp;</span>
549
+ <span class="cline-any cline-no">&nbsp;</span>
550
+ <span class="cline-any cline-no">&nbsp;</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-no">&nbsp;</span>
561
+ <span class="cline-any cline-no">&nbsp;</span>
562
+ <span class="cline-any cline-no">&nbsp;</span>
563
+ <span class="cline-any cline-no">&nbsp;</span>
564
+ <span class="cline-any cline-no">&nbsp;</span>
565
+ <span class="cline-any cline-no">&nbsp;</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-no">&nbsp;</span>
572
+ <span class="cline-any cline-no">&nbsp;</span>
573
+ <span class="cline-any cline-no">&nbsp;</span>
574
+ <span class="cline-any cline-no">&nbsp;</span>
575
+ <span class="cline-any cline-no">&nbsp;</span>
576
+ <span class="cline-any cline-no">&nbsp;</span>
577
+ <span class="cline-any cline-no">&nbsp;</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-no">&nbsp;</span>
581
+ <span class="cline-any cline-no">&nbsp;</span>
582
+ <span class="cline-any cline-no">&nbsp;</span>
583
+ <span class="cline-any cline-no">&nbsp;</span>
584
+ <span class="cline-any cline-no">&nbsp;</span>
585
+ <span class="cline-any cline-no">&nbsp;</span>
586
+ <span class="cline-any cline-no">&nbsp;</span>
587
+ <span class="cline-any cline-no">&nbsp;</span>
588
+ <span class="cline-any cline-no">&nbsp;</span>
589
+ <span class="cline-any cline-no">&nbsp;</span>
590
+ <span class="cline-any cline-no">&nbsp;</span>
591
+ <span class="cline-any cline-no">&nbsp;</span>
592
+ <span class="cline-any cline-no">&nbsp;</span>
593
+ <span class="cline-any cline-no">&nbsp;</span>
594
+ <span class="cline-any cline-no">&nbsp;</span>
595
+ <span class="cline-any cline-no">&nbsp;</span>
596
+ <span class="cline-any cline-no">&nbsp;</span>
597
+ <span class="cline-any cline-no">&nbsp;</span>
598
+ <span class="cline-any cline-no">&nbsp;</span>
599
+ <span class="cline-any cline-no">&nbsp;</span>
600
+ <span class="cline-any cline-no">&nbsp;</span>
601
+ <span class="cline-any cline-no">&nbsp;</span>
602
+ <span class="cline-any cline-no">&nbsp;</span>
603
+ <span class="cline-any cline-no">&nbsp;</span>
604
+ <span class="cline-any cline-no">&nbsp;</span>
605
+ <span class="cline-any cline-no">&nbsp;</span>
606
+ <span class="cline-any cline-no">&nbsp;</span>
607
+ <span class="cline-any cline-no">&nbsp;</span>
608
+ <span class="cline-any cline-no">&nbsp;</span>
609
+ <span class="cline-any cline-no">&nbsp;</span>
610
+ <span class="cline-any cline-no">&nbsp;</span>
611
+ <span class="cline-any cline-no">&nbsp;</span>
612
+ <span class="cline-any cline-no">&nbsp;</span>
613
+ <span class="cline-any cline-no">&nbsp;</span>
614
+ <span class="cline-any cline-no">&nbsp;</span>
615
+ <span class="cline-any cline-no">&nbsp;</span>
616
+ <span class="cline-any cline-no">&nbsp;</span>
617
+ <span class="cline-any cline-no">&nbsp;</span>
618
+ <span class="cline-any cline-no">&nbsp;</span>
619
+ <span class="cline-any cline-no">&nbsp;</span>
620
+ <span class="cline-any cline-no">&nbsp;</span>
621
+ <span class="cline-any cline-no">&nbsp;</span>
622
+ <span class="cline-any cline-no">&nbsp;</span>
623
+ <span class="cline-any cline-no">&nbsp;</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-no">&nbsp;</span>
627
+ <span class="cline-any cline-no">&nbsp;</span>
628
+ <span class="cline-any cline-no">&nbsp;</span>
629
+ <span class="cline-any cline-no">&nbsp;</span>
630
+ <span class="cline-any cline-no">&nbsp;</span>
631
+ <span class="cline-any cline-no">&nbsp;</span>
632
+ <span class="cline-any cline-no">&nbsp;</span>
633
+ <span class="cline-any cline-no">&nbsp;</span>
634
+ <span class="cline-any cline-no">&nbsp;</span>
635
+ <span class="cline-any cline-no">&nbsp;</span>
636
+ <span class="cline-any cline-no">&nbsp;</span>
637
+ <span class="cline-any cline-no">&nbsp;</span>
638
+ <span class="cline-any cline-no">&nbsp;</span>
639
+ <span class="cline-any cline-no">&nbsp;</span>
640
+ <span class="cline-any cline-no">&nbsp;</span>
641
+ <span class="cline-any cline-no">&nbsp;</span>
642
+ <span class="cline-any cline-no">&nbsp;</span>
643
+ <span class="cline-any cline-no">&nbsp;</span>
644
+ <span class="cline-any cline-no">&nbsp;</span>
645
+ <span class="cline-any cline-no">&nbsp;</span>
646
+ <span class="cline-any cline-no">&nbsp;</span>
647
+ <span class="cline-any cline-no">&nbsp;</span>
648
+ <span class="cline-any cline-no">&nbsp;</span>
649
+ <span class="cline-any cline-no">&nbsp;</span>
650
+ <span class="cline-any cline-no">&nbsp;</span>
651
+ <span class="cline-any cline-no">&nbsp;</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-no">&nbsp;</span>
655
+ <span class="cline-any cline-no">&nbsp;</span>
656
+ <span class="cline-any cline-no">&nbsp;</span>
657
+ <span class="cline-any cline-no">&nbsp;</span>
658
+ <span class="cline-any cline-no">&nbsp;</span>
659
+ <span class="cline-any cline-no">&nbsp;</span>
660
+ <span class="cline-any cline-no">&nbsp;</span>
661
+ <span class="cline-any cline-no">&nbsp;</span>
662
+ <span class="cline-any cline-no">&nbsp;</span>
663
+ <span class="cline-any cline-no">&nbsp;</span>
664
+ <span class="cline-any cline-no">&nbsp;</span>
665
+ <span class="cline-any cline-no">&nbsp;</span>
666
+ <span class="cline-any cline-no">&nbsp;</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-no">&nbsp;</span>
670
+ <span class="cline-any cline-no">&nbsp;</span>
671
+ <span class="cline-any cline-no">&nbsp;</span>
672
+ <span class="cline-any cline-no">&nbsp;</span>
673
+ <span class="cline-any cline-no">&nbsp;</span>
674
+ <span class="cline-any cline-no">&nbsp;</span>
675
+ <span class="cline-any cline-no">&nbsp;</span>
676
+ <span class="cline-any cline-no">&nbsp;</span>
677
+ <span class="cline-any cline-no">&nbsp;</span>
678
+ <span class="cline-any cline-no">&nbsp;</span>
679
+ <span class="cline-any cline-no">&nbsp;</span>
680
+ <span class="cline-any cline-no">&nbsp;</span>
681
+ <span class="cline-any cline-no">&nbsp;</span>
682
+ <span class="cline-any cline-no">&nbsp;</span>
683
+ <span class="cline-any cline-no">&nbsp;</span>
684
+ <span class="cline-any cline-no">&nbsp;</span>
685
+ <span class="cline-any cline-no">&nbsp;</span>
686
+ <span class="cline-any cline-no">&nbsp;</span>
687
+ <span class="cline-any cline-no">&nbsp;</span>
688
+ <span class="cline-any cline-no">&nbsp;</span>
689
+ <span class="cline-any cline-no">&nbsp;</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-no">&nbsp;</span>
751
+ <span class="cline-any cline-no">&nbsp;</span>
752
+ <span class="cline-any cline-no">&nbsp;</span>
753
+ <span class="cline-any cline-no">&nbsp;</span>
754
+ <span class="cline-any cline-no">&nbsp;</span>
755
+ <span class="cline-any cline-no">&nbsp;</span>
756
+ <span class="cline-any cline-no">&nbsp;</span>
757
+ <span class="cline-any cline-no">&nbsp;</span>
758
+ <span class="cline-any cline-no">&nbsp;</span>
759
+ <span class="cline-any cline-no">&nbsp;</span>
760
+ <span class="cline-any cline-no">&nbsp;</span>
761
+ <span class="cline-any cline-no">&nbsp;</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-no">&nbsp;</span>
765
+ <span class="cline-any cline-no">&nbsp;</span>
766
+ <span class="cline-any cline-no">&nbsp;</span>
767
+ <span class="cline-any cline-no">&nbsp;</span>
768
+ <span class="cline-any cline-no">&nbsp;</span>
769
+ <span class="cline-any cline-no">&nbsp;</span>
770
+ <span class="cline-any cline-no">&nbsp;</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-no">&nbsp;</span>
774
+ <span class="cline-any cline-no">&nbsp;</span>
775
+ <span class="cline-any cline-no">&nbsp;</span>
776
+ <span class="cline-any cline-no">&nbsp;</span>
777
+ <span class="cline-any cline-no">&nbsp;</span>
778
+ <span class="cline-any cline-no">&nbsp;</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-no">&nbsp;</span>
782
+ <span class="cline-any cline-no">&nbsp;</span>
783
+ <span class="cline-any cline-no">&nbsp;</span>
784
+ <span class="cline-any cline-no">&nbsp;</span>
785
+ <span class="cline-any cline-no">&nbsp;</span>
786
+ <span class="cline-any cline-no">&nbsp;</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-no">&nbsp;</span>
794
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" >/**<span class="fstat-no" title="function not covered" ><span class="branch-0 cbranch-no" title="branch not covered" ></span></span></span>
795
+ <span class="cstat-no" title="statement not covered" > * HSuite Native Connect</span>
796
+ <span class="cstat-no" title="statement not covered" > * Copyright 2024-2025 HSuite (https://hsuite.finance)</span>
797
+ <span class="cstat-no" title="statement not covered" > *</span>
798
+ <span class="cstat-no" title="statement not covered" > * SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0</span>
799
+ <span class="cstat-no" title="statement not covered" > *</span>
800
+ <span class="cstat-no" title="statement not covered" > * This file is part of HSuite Native Connect. For commercial licensing,</span>
801
+ <span class="cstat-no" title="statement not covered" > * visit https://hsuite.finance/licensing</span>
802
+ <span class="cstat-no" title="statement not covered" > */</span>
803
+ <span class="cstat-no" title="statement not covered" ></span>
804
+ <span class="cstat-no" title="statement not covered" >/**</span>
805
+ <span class="cstat-no" title="statement not covered" > * @file walletconnect-client-manager.ts</span>
806
+ <span class="cstat-no" title="statement not covered" > * @description WalletConnect SignClient lifecycle management</span>
807
+ <span class="cstat-no" title="statement not covered" > *</span>
808
+ <span class="cstat-no" title="statement not covered" > * Handles:</span>
809
+ <span class="cstat-no" title="statement not covered" > * - SignClient initialization with projectId</span>
810
+ <span class="cstat-no" title="statement not covered" > * - Client reuse across multiple connections</span>
811
+ <span class="cstat-no" title="statement not covered" > * - Session restoration from IndexedDB</span>
812
+ <span class="cstat-no" title="statement not covered" > * - Event listener registration</span>
813
+ <span class="cstat-no" title="statement not covered" > *</span>
814
+ <span class="cstat-no" title="statement not covered" > * Extracted from WalletConnectV2Provider to reduce file size.</span>
815
+ <span class="cstat-no" title="statement not covered" > */</span>
816
+ <span class="cstat-no" title="statement not covered" ></span>
817
+ <span class="cstat-no" title="statement not covered" >import { getLogger } from '@hsuite/native-connect-sdk';</span>
818
+ <span class="cstat-no" title="statement not covered" >import { WalletConnectModal } from '@walletconnect/modal';</span>
819
+ <span class="cstat-no" title="statement not covered" >import SignClient from '@walletconnect/sign-client';</span>
820
+ <span class="cstat-no" title="statement not covered" ></span>
821
+ <span class="cstat-no" title="statement not covered" >import { SessionHealthManager } from './session-health';</span>
822
+ <span class="cstat-no" title="statement not covered" ></span>
823
+ <span class="cstat-no" title="statement not covered" >const logger = getLogger().scoped?.('WCClientManager') ?? getLogger();</span>
824
+ <span class="cstat-no" title="statement not covered" ></span>
825
+ <span class="cstat-no" title="statement not covered" >/**</span>
826
+ <span class="cstat-no" title="statement not covered" > * Storage key for persisted projectId</span>
827
+ <span class="cstat-no" title="statement not covered" > */</span>
828
+ <span class="cstat-no" title="statement not covered" >const STORAGE_KEY_PROJECT_ID = 'hsuite.walletconnect.projectId';</span>
829
+ <span class="cstat-no" title="statement not covered" ></span>
830
+ <span class="cstat-no" title="statement not covered" >/**</span>
831
+ <span class="cstat-no" title="statement not covered" > * WalletConnect app metadata</span>
832
+ <span class="cstat-no" title="statement not covered" > */</span>
833
+ <span class="cstat-no" title="statement not covered" >export interface WCAppMetadata {</span>
834
+ <span class="cstat-no" title="statement not covered" > name: string;</span>
835
+ <span class="cstat-no" title="statement not covered" > description: string;</span>
836
+ <span class="cstat-no" title="statement not covered" > url: string;</span>
837
+ <span class="cstat-no" title="statement not covered" > icons: string[];</span>
838
+ <span class="cstat-no" title="statement not covered" >}</span>
839
+ <span class="cstat-no" title="statement not covered" ></span>
840
+ <span class="cstat-no" title="statement not covered" >/**</span>
841
+ <span class="cstat-no" title="statement not covered" > * WalletConnect Client Manager</span>
842
+ <span class="cstat-no" title="statement not covered" > *</span>
843
+ <span class="cstat-no" title="statement not covered" > * Manages the SignClient instance lifecycle.</span>
844
+ <span class="cstat-no" title="statement not covered" > * Handles initialization, session restoration, and cleanup.</span>
845
+ <span class="cstat-no" title="statement not covered" > */</span>
846
+ <span class="cstat-no" title="statement not covered" >export class WalletConnectClientManager {</span>
847
+ <span class="cstat-no" title="statement not covered" > private client?: SignClient;</span>
848
+ <span class="cstat-no" title="statement not covered" > private modal?: WalletConnectModal;</span>
849
+ <span class="cstat-no" title="statement not covered" > private projectId?: string;</span>
850
+ <span class="cstat-no" title="statement not covered" > private sessionHealth?: SessionHealthManager;</span>
851
+ <span class="cstat-no" title="statement not covered" ></span>
852
+ <span class="cstat-no" title="statement not covered" > /**</span>
853
+ <span class="cstat-no" title="statement not covered" > * Initialize or return existing SignClient.</span>
854
+ <span class="cstat-no" title="statement not covered" > *</span>
855
+ <span class="cstat-no" title="statement not covered" > * @param projectId - WalletConnect Cloud project ID</span>
856
+ <span class="cstat-no" title="statement not covered" > * @param metadata - App metadata for wallet display</span>
857
+ <span class="cstat-no" title="statement not covered" > * @returns Initialized SignClient instance</span>
858
+ <span class="cstat-no" title="statement not covered" > */</span>
859
+ <span class="cstat-no" title="statement not covered" > async initialize(projectId: string, metadata: WCAppMetadata): Promise&lt;SignClient&gt; {</span>
860
+ <span class="cstat-no" title="statement not covered" > if (this.client &amp;&amp; this.projectId === projectId) {</span>
861
861
  <span class="cstat-no" title="statement not covered" > return this.client;</span>
862
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>
863
+ <span class="cstat-no" title="statement not covered" ></span>
864
+ <span class="cstat-no" title="statement not covered" > logger.debug('Initializing SignClient', { projectId: projectId.substring(0, 8) });</span>
865
+ <span class="cstat-no" title="statement not covered" ></span>
866
+ <span class="cstat-no" title="statement not covered" > // Store projectId for session restoration</span>
867
+ <span class="cstat-no" title="statement not covered" > this.projectId = projectId;</span>
868
+ <span class="cstat-no" title="statement not covered" > this.persistProjectId(projectId);</span>
869
+ <span class="cstat-no" title="statement not covered" ></span>
870
+ <span class="cstat-no" title="statement not covered" > // Use 'fatal' logger to suppress pino noise from WalletConnect SDK</span>
871
+ <span class="cstat-no" title="statement not covered" > this.client = await SignClient.init({</span>
872
+ <span class="cstat-no" title="statement not covered" > projectId,</span>
873
+ <span class="cstat-no" title="statement not covered" > logger: 'fatal',</span>
874
+ <span class="cstat-no" title="statement not covered" > metadata,</span>
875
+ <span class="cstat-no" title="statement not covered" > });</span>
876
+ <span class="cstat-no" title="statement not covered" ></span>
877
+ <span class="cstat-no" title="statement not covered" > // Initialize session health manager for relay subscription management</span>
878
+ <span class="cstat-no" title="statement not covered" > this.sessionHealth = new SessionHealthManager(this.client);</span>
879
+ <span class="cstat-no" title="statement not covered" ></span>
880
+ <span class="cstat-no" title="statement not covered" > logger.info('SignClient initialized with session health manager');</span>
881
+ <span class="cstat-no" title="statement not covered" > return this.client;</span>
882
+ <span class="cstat-no" title="statement not covered" > }</span>
883
+ <span class="cstat-no" title="statement not covered" ></span>
884
+ <span class="cstat-no" title="statement not covered" > /**</span>
885
+ <span class="cstat-no" title="statement not covered" > * Get the current client instance.</span>
886
+ <span class="cstat-no" title="statement not covered" > * @throws Error if not initialized</span>
887
+ <span class="cstat-no" title="statement not covered" > */</span>
888
+ <span class="cstat-no" title="statement not covered" > getClient(): SignClient {</span>
889
889
  <span class="cstat-no" title="statement not covered" > if (!this.client) {</span>
890
890
  <span class="cstat-no" title="statement not covered" > throw new Error('WalletConnect client not initialized');</span>
891
891
  <span class="cstat-no" title="statement not covered" > }</span>
892
892
  <span class="cstat-no" title="statement not covered" > return this.client;</span>
893
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>
894
+ <span class="cstat-no" title="statement not covered" ></span>
895
+ <span class="cstat-no" title="statement not covered" > /**</span>
896
+ <span class="cstat-no" title="statement not covered" > * Check if client is initialized.</span>
897
+ <span class="cstat-no" title="statement not covered" > */</span>
898
+ <span class="cstat-no" title="statement not covered" > isInitialized(): boolean {</span>
899
+ <span class="cstat-no" title="statement not covered" > return !!this.client;</span>
900
+ <span class="cstat-no" title="statement not covered" > }</span>
901
+ <span class="cstat-no" title="statement not covered" ></span>
902
+ <span class="cstat-no" title="statement not covered" > /**</span>
903
+ <span class="cstat-no" title="statement not covered" > * Restore client from stored projectId.</span>
904
+ <span class="cstat-no" title="statement not covered" > * Used for session restoration on page reload.</span>
905
+ <span class="cstat-no" title="statement not covered" > *</span>
906
+ <span class="cstat-no" title="statement not covered" > * @param metadata - App metadata</span>
907
+ <span class="cstat-no" title="statement not covered" > * @returns Client if restoration succeeded, undefined otherwise</span>
908
+ <span class="cstat-no" title="statement not covered" > */</span>
909
+ <span class="cstat-no" title="statement not covered" > async restoreClient(metadata: WCAppMetadata): Promise&lt;SignClient | undefined&gt; {</span>
910
+ <span class="cstat-no" title="statement not covered" > const storedProjectId = this.getStoredProjectId();</span>
911
+ <span class="cstat-no" title="statement not covered" > if (!storedProjectId) {</span>
912
+ <span class="cstat-no" title="statement not covered" > logger.debug('No stored projectId, skipping client restoration');</span>
913
+ <span class="cstat-no" title="statement not covered" > return undefined;</span>
914
+ <span class="cstat-no" title="statement not covered" > }</span>
915
915
  <span class="cstat-no" title="statement not covered" ></span>
916
916
  <span class="cstat-no" title="statement not covered" > try {</span>
917
917
  <span class="cstat-no" title="statement not covered" > return await this.initialize(storedProjectId, metadata);</span>
@@ -921,136 +921,136 @@ export class WalletConnectClientManager {
921
921
  <span class="cstat-no" title="statement not covered" > });</span>
922
922
  <span class="cstat-no" title="statement not covered" > return undefined;</span>
923
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>
924
+ <span class="cstat-no" title="statement not covered" > }</span>
925
+ <span class="cstat-no" title="statement not covered" ></span>
926
+ <span class="cstat-no" title="statement not covered" > /**</span>
927
+ <span class="cstat-no" title="statement not covered" > * Get all active sessions from the client.</span>
928
+ <span class="cstat-no" title="statement not covered" > */</span>
929
+ <span class="cstat-no" title="statement not covered" > getActiveSessions(): any[] {</span>
930
930
  <span class="cstat-no" title="statement not covered" > if (!this.client) {</span>
931
931
  <span class="cstat-no" title="statement not covered" > return [];</span>
932
932
  <span class="cstat-no" title="statement not covered" > }</span>
933
933
  <span class="cstat-no" title="statement not covered" > return this.client.session.getAll();</span>
934
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>
935
+ <span class="cstat-no" title="statement not covered" ></span>
936
+ <span class="cstat-no" title="statement not covered" > /**</span>
937
+ <span class="cstat-no" title="statement not covered" > * Get a specific session by topic.</span>
938
+ <span class="cstat-no" title="statement not covered" > * @param topic</span>
939
+ <span class="cstat-no" title="statement not covered" > */</span>
940
+ <span class="cstat-no" title="statement not covered" > getSession(topic: string): any | undefined {</span>
941
+ <span class="cstat-no" title="statement not covered" > if (!this.client) {</span>
942
+ <span class="cstat-no" title="statement not covered" > return undefined;</span>
943
+ <span class="cstat-no" title="statement not covered" > }</span>
944
+ <span class="cstat-no" title="statement not covered" > try {</span>
945
+ <span class="cstat-no" title="statement not covered" > return this.client.session.get(topic);</span>
946
+ <span class="cstat-no" title="statement not covered" > } catch {</span>
942
947
  <span class="cstat-no" title="statement not covered" > return undefined;</span>
943
948
  <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>
949
+ <span class="cstat-no" title="statement not covered" > }</span>
950
+ <span class="cstat-no" title="statement not covered" ></span>
951
+ <span class="cstat-no" title="statement not covered" > /**</span>
952
+ <span class="cstat-no" title="statement not covered" > * Create and return a modal for QR code display.</span>
953
+ <span class="cstat-no" title="statement not covered" > * @param projectId</span>
954
+ <span class="cstat-no" title="statement not covered" > * @param chains</span>
955
+ <span class="cstat-no" title="statement not covered" > */</span>
956
+ <span class="cstat-no" title="statement not covered" > createModal(projectId: string, chains: string[]): WalletConnectModal {</span>
957
+ <span class="cstat-no" title="statement not covered" > this.modal = new WalletConnectModal({</span>
958
+ <span class="cstat-no" title="statement not covered" > projectId,</span>
959
+ <span class="cstat-no" title="statement not covered" > chains,</span>
960
+ <span class="cstat-no" title="statement not covered" > });</span>
961
+ <span class="cstat-no" title="statement not covered" > return this.modal;</span>
962
+ <span class="cstat-no" title="statement not covered" > }</span>
963
+ <span class="cstat-no" title="statement not covered" ></span>
964
+ <span class="cstat-no" title="statement not covered" > /**</span>
965
+ <span class="cstat-no" title="statement not covered" > * Close the modal if open.</span>
966
+ <span class="cstat-no" title="statement not covered" > */</span>
967
+ <span class="cstat-no" title="statement not covered" > closeModal(): void {</span>
968
+ <span class="cstat-no" title="statement not covered" > if (this.modal) {</span>
969
+ <span class="cstat-no" title="statement not covered" > this.modal.closeModal();</span>
970
+ <span class="cstat-no" title="statement not covered" > }</span>
971
+ <span class="cstat-no" title="statement not covered" > }</span>
972
+ <span class="cstat-no" title="statement not covered" ></span>
973
+ <span class="cstat-no" title="statement not covered" > /**</span>
974
+ <span class="cstat-no" title="statement not covered" > * Connect to wallet and get session.</span>
975
+ <span class="cstat-no" title="statement not covered" > *</span>
976
+ <span class="cstat-no" title="statement not covered" > * @param optionalNamespaces - Namespace configuration</span>
977
+ <span class="cstat-no" title="statement not covered" > * @param sessionProperties - Optional session properties (e.g., preferredNetwork)</span>
978
+ <span class="cstat-no" title="statement not covered" > * @returns URI and approval promise</span>
979
+ <span class="cstat-no" title="statement not covered" > */</span>
980
+ <span class="cstat-no" title="statement not covered" > async connect(</span>
981
+ <span class="cstat-no" title="statement not covered" > optionalNamespaces: Record&lt;string, any&gt;,</span>
982
+ <span class="cstat-no" title="statement not covered" > sessionProperties?: Record&lt;string, string&gt;,</span>
983
+ <span class="cstat-no" title="statement not covered" > ): Promise&lt;{</span>
984
+ <span class="cstat-no" title="statement not covered" > uri?: string;</span>
985
+ <span class="cstat-no" title="statement not covered" > approval: () =&gt; Promise&lt;any&gt;;</span>
986
+ <span class="cstat-no" title="statement not covered" > }&gt; {</span>
987
+ <span class="cstat-no" title="statement not covered" > if (!this.client) {</span>
988
988
  <span class="cstat-no" title="statement not covered" > throw new Error('Client not initialized');</span>
989
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>
990
+ <span class="cstat-no" title="statement not covered" ></span>
991
+ <span class="cstat-no" title="statement not covered" > const connectParams: any = { optionalNamespaces };</span>
992
+ <span class="cstat-no" title="statement not covered" ></span>
993
+ <span class="cstat-no" title="statement not covered" > // Add session properties if provided</span>
994
+ <span class="cstat-no" title="statement not covered" > // This allows passing metadata like preferredNetwork to the wallet</span>
995
+ <span class="cstat-no" title="statement not covered" > if (sessionProperties) {</span>
996
+ <span class="cstat-no" title="statement not covered" > connectParams.sessionProperties = sessionProperties;</span>
997
+ <span class="cstat-no" title="statement not covered" > }</span>
998
+ <span class="cstat-no" title="statement not covered" ></span>
999
+ <span class="cstat-no" title="statement not covered" > logger.debug('Connecting with params', {</span>
1000
+ <span class="cstat-no" title="statement not covered" > namespaces: Object.keys(optionalNamespaces),</span>
1001
+ <span class="cstat-no" title="statement not covered" > hasSessionProperties: !!sessionProperties,</span>
1002
+ <span class="cstat-no" title="statement not covered" > });</span>
1003
+ <span class="cstat-no" title="statement not covered" ></span>
1004
+ <span class="cstat-no" title="statement not covered" > return this.client.connect(connectParams);</span>
1005
+ <span class="cstat-no" title="statement not covered" > }</span>
1006
+ <span class="cstat-no" title="statement not covered" ></span>
1007
+ <span class="cstat-no" title="statement not covered" > /**</span>
1008
+ <span class="cstat-no" title="statement not covered" > * Disconnect a session.</span>
1009
+ <span class="cstat-no" title="statement not covered" > * @param topic</span>
1010
+ <span class="cstat-no" title="statement not covered" > * @param reason</span>
1011
+ <span class="cstat-no" title="statement not covered" > * @param reason.code</span>
1012
+ <span class="cstat-no" title="statement not covered" > * @param reason.message</span>
1013
+ <span class="cstat-no" title="statement not covered" > */</span>
1014
+ <span class="cstat-no" title="statement not covered" > async disconnect(topic: string, reason?: { code: number; message: string }): Promise&lt;void&gt; {</span>
1015
+ <span class="cstat-no" title="statement not covered" > if (!this.client) {</span>
1016
1016
  <span class="cstat-no" title="statement not covered" > return;</span>
1017
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>
1018
+ <span class="cstat-no" title="statement not covered" > await this.client.disconnect({</span>
1019
+ <span class="cstat-no" title="statement not covered" > topic,</span>
1020
+ <span class="cstat-no" title="statement not covered" > reason: reason || { code: 6000, message: 'User disconnected' },</span>
1021
+ <span class="cstat-no" title="statement not covered" > });</span>
1022
+ <span class="cstat-no" title="statement not covered" > }</span>
1023
+ <span class="cstat-no" title="statement not covered" ></span>
1024
+ <span class="cstat-no" title="statement not covered" > /**</span>
1025
+ <span class="cstat-no" title="statement not covered" > * Register event listener on the client.</span>
1026
+ <span class="cstat-no" title="statement not covered" > * @param event</span>
1027
+ <span class="cstat-no" title="statement not covered" > * @param handler</span>
1028
+ <span class="cstat-no" title="statement not covered" > */</span>
1029
+ <span class="cstat-no" title="statement not covered" > on(event: string, handler: (event: any) =&gt; void): void {</span>
1030
+ <span class="cstat-no" title="statement not covered" > if (!this.client) {</span>
1031
1031
  <span class="cstat-no" title="statement not covered" > return;</span>
1032
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>
1033
+ <span class="cstat-no" title="statement not covered" > (this.client as any).on(event, handler);</span>
1034
+ <span class="cstat-no" title="statement not covered" > }</span>
1035
+ <span class="cstat-no" title="statement not covered" ></span>
1036
+ <span class="cstat-no" title="statement not covered" > /**</span>
1037
+ <span class="cstat-no" title="statement not covered" > * Send a request to a session.</span>
1038
+ <span class="cstat-no" title="statement not covered" > *</span>
1039
+ <span class="cstat-no" title="statement not covered" > * Features:</span>
1040
+ <span class="cstat-no" title="statement not covered" > * - Automatically ensures session health by pinging before the request</span>
1041
+ <span class="cstat-no" title="statement not covered" > * - Runs keep-alive pings during long-running requests (e.g., transaction approval)</span>
1042
+ <span class="cstat-no" title="statement not covered" > * - Prevents stale relay subscription issues that cause empty error objects</span>
1043
+ <span class="cstat-no" title="statement not covered" > *</span>
1044
+ <span class="cstat-no" title="statement not covered" > * @param params - Request parameters including topic, chainId, and request data</span>
1045
+ <span class="cstat-no" title="statement not covered" > * @param params.expiry - Optional expiry time in seconds (default: 300)</span>
1046
+ <span class="cstat-no" title="statement not covered" > * @param params.topic</span>
1047
+ <span class="cstat-no" title="statement not covered" > * @param params.chainId</span>
1048
+ <span class="cstat-no" title="statement not covered" > * @param params.request</span>
1049
+ <span class="cstat-no" title="statement not covered" > * @param params.request.method</span>
1050
+ <span class="cstat-no" title="statement not covered" > * @param params.request.params</span>
1051
+ <span class="cstat-no" title="statement not covered" > * @returns Promise resolving to the request result</span>
1052
+ <span class="cstat-no" title="statement not covered" > */</span>
1053
+ <span class="cstat-no" title="statement not covered" > async request&lt;T = unknown&gt;(params: {</span>
1054
1054
  <span class="cstat-no" title="statement not covered" > topic: string;</span>
1055
1055
  <span class="cstat-no" title="statement not covered" > chainId: string;</span>
1056
1056
  <span class="cstat-no" title="statement not covered" > request: { method: string; params: unknown };</span>
@@ -1111,50 +1111,50 @@ export class WalletConnectClientManager {
1111
1111
  <span class="cstat-no" title="statement not covered" > stopKeepAlive();</span>
1112
1112
  <span class="cstat-no" title="statement not covered" > }</span>
1113
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>
1114
+ <span class="cstat-no" title="statement not covered" ></span>
1115
+ <span class="cstat-no" title="statement not covered" > /**</span>
1116
+ <span class="cstat-no" title="statement not covered" > * Get the session health manager for advanced operations.</span>
1117
+ <span class="cstat-no" title="statement not covered" > *</span>
1118
+ <span class="cstat-no" title="statement not covered" > * Use this if you need to:</span>
1119
+ <span class="cstat-no" title="statement not covered" > * - Force refresh a subscription</span>
1120
+ <span class="cstat-no" title="statement not covered" > * - Clear ping cache</span>
1121
+ <span class="cstat-no" title="statement not covered" > * - Access health manager directly</span>
1122
+ <span class="cstat-no" title="statement not covered" > *</span>
1123
+ <span class="cstat-no" title="statement not covered" > * @returns SessionHealthManager instance or undefined if not initialized</span>
1124
+ <span class="cstat-no" title="statement not covered" > */</span>
1125
+ <span class="cstat-no" title="statement not covered" > getSessionHealthManager(): SessionHealthManager | undefined {</span>
1126
1126
  <span class="cstat-no" title="statement not covered" > return this.sessionHealth;</span>
1127
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>
1128
+ <span class="cstat-no" title="statement not covered" ></span>
1129
+ <span class="cstat-no" title="statement not covered" > // ========== STORAGE ==========</span>
1130
+ <span class="cstat-no" title="statement not covered" ></span>
1131
+ <span class="cstat-no" title="statement not covered" > private persistProjectId(projectId: string): void {</span>
1132
+ <span class="cstat-no" title="statement not covered" > try {</span>
1133
+ <span class="cstat-no" title="statement not covered" > window.localStorage?.setItem(STORAGE_KEY_PROJECT_ID, projectId);</span>
1134
+ <span class="cstat-no" title="statement not covered" > } catch {</span>
1135
1135
  <span class="cstat-no" title="statement not covered" > logger.warn('Failed to persist projectId');</span>
1136
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>
1137
+ <span class="cstat-no" title="statement not covered" > }</span>
1138
+ <span class="cstat-no" title="statement not covered" ></span>
1139
+ <span class="cstat-no" title="statement not covered" > private getStoredProjectId(): string | null {</span>
1140
+ <span class="cstat-no" title="statement not covered" > try {</span>
1141
+ <span class="cstat-no" title="statement not covered" > return window.localStorage?.getItem(STORAGE_KEY_PROJECT_ID) ?? null;</span>
1142
+ <span class="cstat-no" title="statement not covered" > } catch {</span>
1143
1143
  <span class="cstat-no" title="statement not covered" > return null;</span>
1144
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>
1145
+ <span class="cstat-no" title="statement not covered" > }</span>
1146
+ <span class="cstat-no" title="statement not covered" ></span>
1147
+ <span class="cstat-no" title="statement not covered" > /**</span>
1148
+ <span class="cstat-no" title="statement not covered" > * Clear stored projectId.</span>
1149
+ <span class="cstat-no" title="statement not covered" > */</span>
1150
+ <span class="cstat-no" title="statement not covered" > clearStoredProjectId(): void {</span>
1151
1151
  <span class="cstat-no" title="statement not covered" > try {</span>
1152
1152
  <span class="cstat-no" title="statement not covered" > window.localStorage?.removeItem(STORAGE_KEY_PROJECT_ID);</span>
1153
1153
  <span class="cstat-no" title="statement not covered" > } catch {</span>
1154
1154
  <span class="cstat-no" title="statement not covered" > // Ignore</span>
1155
1155
  <span class="cstat-no" title="statement not covered" > }</span>
1156
1156
  <span class="cstat-no" title="statement not covered" > }</span>
1157
- }
1157
+ <span class="cstat-no" title="statement not covered" >}</span>
1158
1158
  &nbsp;</pre></td></tr></table></pre>
1159
1159
 
1160
1160
  <div class='push'></div><!-- for sticky footer -->
@@ -1162,7 +1162,7 @@ export class WalletConnectClientManager {
1162
1162
  <div class='footer quiet pad2 space-top1 center small'>
1163
1163
  Code coverage generated by
1164
1164
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1165
- at 2026-06-02T14:30:38.372Z
1165
+ at 2026-06-10T09:00:36.812Z
1166
1166
  </div>
1167
1167
  <script src="../../../../prettify.js"></script>
1168
1168
  <script>