@hsuite/native-connect-angular 2.1.0 → 2.1.1

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 (183) hide show
  1. package/coverage/coverage-summary.json +25 -21
  2. package/coverage/index.html +108 -108
  3. package/coverage/lcov-report/index.html +108 -108
  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 +13 -19
  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 +5 -5
  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 +10 -10
  17. package/coverage/lcov-report/lib/components/wallet-connect-button/index.html +1 -1
  18. package/coverage/lcov-report/lib/components/wallet-connect-button/wallet-connect-button.component.ts.html +1 -1
  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 +1 -1
  24. package/coverage/lcov-report/lib/components/wallet-connection-modal/connection-method-step/index.html +1 -1
  25. package/coverage/lcov-report/lib/components/wallet-connection-modal/index.html +15 -15
  26. package/coverage/lcov-report/lib/components/wallet-connection-modal/qr-pairing-step/index.html +1 -1
  27. package/coverage/lcov-report/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.ts.html +1 -1
  28. package/coverage/lcov-report/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts.html +84 -36
  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 +7 -7
  41. package/coverage/lcov-report/lib/models/provider-types.ts.html +11 -5
  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 +639 -636
  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 +22 -22
  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 +7 -4
  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 +1108 -1105
  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/hsuite-auth.interceptor.ts.html +568 -0
  62. package/coverage/lcov-report/lib/services/index.html +50 -20
  63. package/coverage/lcov-report/lib/services/logger.service.ts.html +1 -1
  64. package/coverage/lcov-report/lib/services/smart-session.service.ts.html +1264 -0
  65. package/coverage/lcov-report/lib/services/transaction-builders/active-account-source.ts.html +250 -0
  66. package/coverage/lcov-report/lib/services/transaction-builders/base-transaction-builder.service.ts.html +1 -1
  67. package/coverage/lcov-report/lib/services/transaction-builders/hedera-amount-utils.ts.html +155 -155
  68. package/coverage/lcov-report/lib/services/transaction-builders/hedera-transaction-builder.service.ts.html +2156 -2156
  69. package/coverage/lcov-report/lib/services/transaction-builders/index.html +58 -43
  70. package/coverage/lcov-report/lib/services/transaction-builders/xrpl-transaction-builder.service.ts.html +1674 -1674
  71. package/coverage/lcov-report/lib/services/transaction.service.ts.html +4 -4
  72. package/coverage/lcov-report/lib/services/unified-wallet.service.ts.html +3 -3
  73. package/coverage/lcov-report/lib/services/wallet-context.service.ts.html +1 -1
  74. package/coverage/lcov-report/lib/services/wallet-event-bus.service.ts.html +249 -249
  75. package/coverage/lcov-report/lib/services/wallet-providers.service.ts.html +1 -1
  76. package/coverage/lcov-report/lib/transports/chrome-extension-transport.ts.html +1 -1
  77. package/coverage/lcov-report/lib/transports/index.html +1 -1
  78. package/coverage/lcov-report/lib/utils/index.html +36 -21
  79. package/coverage/lcov-report/lib/utils/ledger-icons.util.ts.html +254 -161
  80. package/coverage/lcov-report/lib/utils/ledger-ui-registry.ts.html +676 -0
  81. package/coverage/lcov.info +8567 -6896
  82. package/coverage/lib/components/account-selector/account-actions/account-actions.component.ts.html +1 -1
  83. package/coverage/lib/components/account-selector/account-actions/index.html +1 -1
  84. package/coverage/lib/components/account-selector/account-filter/account-filter.component.ts.html +1 -1
  85. package/coverage/lib/components/account-selector/account-filter/index.html +1 -1
  86. package/coverage/lib/components/account-selector/account-formatting.service.ts.html +13 -19
  87. package/coverage/lib/components/account-selector/account-grouping.service.ts.html +1 -1
  88. package/coverage/lib/components/account-selector/account-list/account-list.component.ts.html +1 -1
  89. package/coverage/lib/components/account-selector/account-list/index.html +1 -1
  90. package/coverage/lib/components/account-selector/account-selector.component.ts.html +1 -1
  91. package/coverage/lib/components/account-selector/account-selector.service.ts.html +1 -1
  92. package/coverage/lib/components/account-selector/index.html +5 -5
  93. package/coverage/lib/components/wallet-account-display/index.html +1 -1
  94. package/coverage/lib/components/wallet-account-display/wallet-account-display.component.ts.html +10 -10
  95. package/coverage/lib/components/wallet-connect-button/index.html +1 -1
  96. package/coverage/lib/components/wallet-connect-button/wallet-connect-button.component.ts.html +1 -1
  97. package/coverage/lib/components/wallet-connect-prompt/index.html +1 -1
  98. package/coverage/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.ts.html +1 -1
  99. package/coverage/lib/components/wallet-connected-guard/index.html +1 -1
  100. package/coverage/lib/components/wallet-connected-guard/wallet-connected-guard.component.ts.html +1 -1
  101. package/coverage/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.ts.html +1 -1
  102. package/coverage/lib/components/wallet-connection-modal/connection-method-step/index.html +1 -1
  103. package/coverage/lib/components/wallet-connection-modal/index.html +15 -15
  104. package/coverage/lib/components/wallet-connection-modal/qr-pairing-step/index.html +1 -1
  105. package/coverage/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.ts.html +1 -1
  106. package/coverage/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts.html +84 -36
  107. package/coverage/lib/components/wallet-session-display/index.html +1 -1
  108. package/coverage/lib/components/wallet-session-display/wallet-session-display.component.ts.html +1 -1
  109. package/coverage/lib/components/wallet-transaction-status/index.html +1 -1
  110. package/coverage/lib/components/wallet-transaction-status/wallet-transaction-status.component.ts.html +1 -1
  111. package/coverage/lib/directives/index.html +1 -1
  112. package/coverage/lib/directives/wallet-connected.directive.ts.html +1 -1
  113. package/coverage/lib/directives/wallet-context.directive.ts.html +1 -1
  114. package/coverage/lib/directives/wallet-events.directive.ts.html +1 -1
  115. package/coverage/lib/hsuite-wallet.module.ts.html +1 -1
  116. package/coverage/lib/index.html +1 -1
  117. package/coverage/lib/models/connection-config.model.ts.html +1 -1
  118. package/coverage/lib/models/index.html +7 -7
  119. package/coverage/lib/models/provider-types.ts.html +11 -5
  120. package/coverage/lib/providers/base-wallet-provider.ts.html +20 -20
  121. package/coverage/lib/providers/hsuite-native/channel-client.service.ts.html +639 -636
  122. package/coverage/lib/providers/hsuite-native/index.html +19 -19
  123. package/coverage/lib/providers/hsuite-native-provider.ts.html +1 -1
  124. package/coverage/lib/providers/index.html +18 -18
  125. package/coverage/lib/providers/p2p-native/index.html +22 -22
  126. package/coverage/lib/providers/p2p-native/p2p-native.provider.ts.html +993 -993
  127. package/coverage/lib/providers/p2p-native/p2p-session-manager.ts.html +7 -4
  128. package/coverage/lib/providers/wallet-error-handler.ts.html +1 -1
  129. package/coverage/lib/providers/walletconnect/core/index.html +65 -65
  130. package/coverage/lib/providers/walletconnect/core/session-health.ts.html +240 -240
  131. package/coverage/lib/providers/walletconnect/core/walletconnect-client-manager.ts.html +559 -559
  132. package/coverage/lib/providers/walletconnect/core/walletconnect-provider.ts.html +1108 -1105
  133. package/coverage/lib/providers/walletconnect/core/walletconnect-session-store.ts.html +493 -493
  134. package/coverage/lib/providers/walletconnect/core/walletconnect-signing-orchestrator.ts.html +366 -366
  135. package/coverage/lib/providers/walletconnect/signers/hedera-signer.ts.html +730 -730
  136. package/coverage/lib/providers/walletconnect/signers/index.html +43 -43
  137. package/coverage/lib/providers/walletconnect/signers/signer-factory.ts.html +234 -234
  138. package/coverage/lib/providers/walletconnect/signers/xrpl-signer.ts.html +650 -650
  139. package/coverage/lib/services/hsuite-auth.interceptor.ts.html +568 -0
  140. package/coverage/lib/services/index.html +50 -20
  141. package/coverage/lib/services/logger.service.ts.html +1 -1
  142. package/coverage/lib/services/smart-session.service.ts.html +1264 -0
  143. package/coverage/lib/services/transaction-builders/active-account-source.ts.html +250 -0
  144. package/coverage/lib/services/transaction-builders/base-transaction-builder.service.ts.html +1 -1
  145. package/coverage/lib/services/transaction-builders/hedera-amount-utils.ts.html +155 -155
  146. package/coverage/lib/services/transaction-builders/hedera-transaction-builder.service.ts.html +2156 -2156
  147. package/coverage/lib/services/transaction-builders/index.html +58 -43
  148. package/coverage/lib/services/transaction-builders/xrpl-transaction-builder.service.ts.html +1674 -1674
  149. package/coverage/lib/services/transaction.service.ts.html +4 -4
  150. package/coverage/lib/services/unified-wallet.service.ts.html +3 -3
  151. package/coverage/lib/services/wallet-context.service.ts.html +1 -1
  152. package/coverage/lib/services/wallet-event-bus.service.ts.html +249 -249
  153. package/coverage/lib/services/wallet-providers.service.ts.html +1 -1
  154. package/coverage/lib/transports/chrome-extension-transport.ts.html +1 -1
  155. package/coverage/lib/transports/index.html +1 -1
  156. package/coverage/lib/utils/index.html +36 -21
  157. package/coverage/lib/utils/ledger-icons.util.ts.html +254 -161
  158. package/coverage/lib/utils/ledger-ui-registry.ts.html +676 -0
  159. package/dist/fesm2022/hsuite-native-connect-angular.mjs +854 -308
  160. package/dist/fesm2022/hsuite-native-connect-angular.mjs.map +1 -1
  161. package/dist/index.d.ts +456 -30
  162. package/package.json +4 -4
  163. package/src/index.ts +26 -0
  164. package/src/lib/components/account-selector/account-formatting.service.ts +8 -10
  165. package/src/lib/components/wallet-account-display/wallet-account-display.component.ts +9 -9
  166. package/src/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts +34 -18
  167. package/src/lib/models/provider-types.ts +3 -1
  168. package/src/lib/models/unified-account.model.ts +4 -1
  169. package/src/lib/providers/hsuite-native/channel-client.service.ts +1 -0
  170. package/src/lib/providers/p2p-native/p2p-session-manager.ts +1 -0
  171. package/src/lib/providers/walletconnect/core/walletconnect-provider.ts +2 -1
  172. package/src/lib/services/hsuite-auth.interceptor.ts +159 -0
  173. package/src/lib/services/smart-session.service.ts +378 -0
  174. package/src/lib/services/transaction-builders/active-account-source.spec.ts +75 -0
  175. package/src/lib/services/transaction-builders/active-account-source.ts +55 -0
  176. package/src/lib/services/transaction-builders/hedera-transaction-builder.service.ts +4 -4
  177. package/src/lib/services/transaction-builders/index.ts +1 -0
  178. package/src/lib/services/transaction.service.ts +7 -3
  179. package/src/lib/services/unified-wallet.service.spec.ts +1 -1
  180. package/src/lib/services/unified-wallet.service.ts +2 -2
  181. package/src/lib/utils/index.ts +1 -0
  182. package/src/lib/utils/ledger-icons.util.ts +61 -30
  183. package/src/lib/utils/ledger-ui-registry.ts +197 -0
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">0% </span>
26
+ <span class="strong">72.25% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>0/364</span>
28
+ <span class='fraction'>263/364</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">0% </span>
33
+ <span class="strong">56% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>0/1</span>
35
+ <span class='fraction'>14/25</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">0% </span>
40
+ <span class="strong">70.58% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>0/1</span>
42
+ <span class='fraction'>12/17</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">0% </span>
47
+ <span class="strong">72.25% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>0/364</span>
49
+ <span class='fraction'>263/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 low'></div>
64
+ <div class='status-line medium'></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,13 +427,266 @@
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-no">&nbsp;</span>
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>
431
624
  <span class="cline-any cline-no">&nbsp;</span>
432
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>
433
652
  <span class="cline-any cline-no">&nbsp;</span>
434
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>
435
667
  <span class="cline-any cline-no">&nbsp;</span>
436
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>
437
690
  <span class="cline-any cline-no">&nbsp;</span>
438
691
  <span class="cline-any cline-no">&nbsp;</span>
439
692
  <span class="cline-any cline-no">&nbsp;</span>
@@ -494,424 +747,171 @@
494
747
  <span class="cline-any cline-no">&nbsp;</span>
495
748
  <span class="cline-any cline-no">&nbsp;</span>
496
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>
497
762
  <span class="cline-any cline-no">&nbsp;</span>
498
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>
499
771
  <span class="cline-any cline-no">&nbsp;</span>
500
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>
501
779
  <span class="cline-any cline-no">&nbsp;</span>
502
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>
503
787
  <span class="cline-any cline-no">&nbsp;</span>
504
788
  <span class="cline-any cline-no">&nbsp;</span>
505
789
  <span class="cline-any cline-no">&nbsp;</span>
506
790
  <span class="cline-any cline-no">&nbsp;</span>
507
791
  <span class="cline-any cline-no">&nbsp;</span>
508
792
  <span class="cline-any cline-no">&nbsp;</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>
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
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
- <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>
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
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
- <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>
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
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 @@
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
- <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>
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
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
- <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>
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>
947
942
  <span class="cstat-no" title="statement not covered" > return undefined;</span>
948
943
  <span class="cstat-no" title="statement 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>
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
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
- <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>
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
1016
  <span class="cstat-no" title="statement not covered" > return;</span>
1017
1017
  <span class="cstat-no" title="statement 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>
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
1031
  <span class="cstat-no" title="statement not covered" > return;</span>
1032
1032
  <span class="cstat-no" title="statement not covered" > }</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>
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
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 @@
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
- <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>
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
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
- <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>
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
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
- <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>
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
1143
  <span class="cstat-no" title="statement not covered" > return null;</span>
1144
1144
  <span class="cstat-no" title="statement not covered" > }</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>
1145
+ }
1146
+ &nbsp;
1147
+ /**
1148
+ * Clear stored projectId.
1149
+ */
1150
+ <span class="fstat-no" title="function 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
- <span class="cstat-no" title="statement not covered" >}</span>
1157
+ }
1158
1158
  &nbsp;</pre></td></tr></table></pre>
1159
1159
 
1160
1160
  <div class='push'></div><!-- for sticky footer -->
@@ -1162,7 +1162,7 @@
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-10T09:00:36.812Z
1165
+ at 2026-06-27T21:00:37.209Z
1166
1166
  </div>
1167
1167
  <script src="../../../../prettify.js"></script>
1168
1168
  <script>