@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">79.12% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>0/273</span>
28
+ <span class='fraction'>216/273</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">71.42% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>0/1</span>
35
+ <span class='fraction'>10/14</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">57.14% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>0/1</span>
42
+ <span class='fraction'>8/14</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">79.12% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>0/273</span>
49
+ <span class='fraction'>216/273</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>
@@ -336,487 +336,487 @@
336
336
  <a name='L271'></a><a href='#L271'>271</a>
337
337
  <a name='L272'></a><a href='#L272'>272</a>
338
338
  <a name='L273'></a><a href='#L273'>273</a>
339
- <a name='L274'></a><a href='#L274'>274</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
339
+ <a name='L274'></a><a href='#L274'>274</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
340
+ <span class="cline-any cline-yes">1x</span>
341
+ <span class="cline-any cline-yes">1x</span>
342
+ <span class="cline-any cline-yes">1x</span>
343
+ <span class="cline-any cline-yes">1x</span>
344
+ <span class="cline-any cline-yes">1x</span>
345
+ <span class="cline-any cline-yes">1x</span>
346
+ <span class="cline-any cline-yes">1x</span>
347
+ <span class="cline-any cline-yes">1x</span>
348
+ <span class="cline-any cline-yes">1x</span>
349
+ <span class="cline-any cline-yes">1x</span>
350
+ <span class="cline-any cline-yes">1x</span>
351
+ <span class="cline-any cline-yes">1x</span>
352
+ <span class="cline-any cline-yes">1x</span>
353
+ <span class="cline-any cline-yes">1x</span>
354
+ <span class="cline-any cline-yes">1x</span>
355
+ <span class="cline-any cline-yes">1x</span>
356
+ <span class="cline-any cline-yes">1x</span>
357
+ <span class="cline-any cline-yes">1x</span>
358
+ <span class="cline-any cline-yes">1x</span>
359
+ <span class="cline-any cline-yes">1x</span>
360
+ <span class="cline-any cline-yes">1x</span>
361
+ <span class="cline-any cline-yes">1x</span>
362
+ <span class="cline-any cline-yes">1x</span>
363
+ <span class="cline-any cline-yes">1x</span>
364
+ <span class="cline-any cline-yes">1x</span>
365
+ <span class="cline-any cline-yes">1x</span>
366
+ <span class="cline-any cline-yes">1x</span>
367
+ <span class="cline-any cline-yes">1x</span>
368
+ <span class="cline-any cline-yes">1x</span>
369
+ <span class="cline-any cline-yes">1x</span>
370
+ <span class="cline-any cline-yes">1x</span>
371
+ <span class="cline-any cline-yes">1x</span>
372
+ <span class="cline-any cline-yes">1x</span>
373
+ <span class="cline-any cline-yes">1x</span>
374
+ <span class="cline-any cline-yes">1x</span>
375
+ <span class="cline-any cline-yes">1x</span>
376
+ <span class="cline-any cline-yes">1x</span>
377
+ <span class="cline-any cline-yes">1x</span>
378
+ <span class="cline-any cline-yes">1x</span>
379
+ <span class="cline-any cline-yes">1x</span>
380
+ <span class="cline-any cline-yes">1x</span>
381
+ <span class="cline-any cline-yes">1x</span>
382
+ <span class="cline-any cline-yes">1x</span>
383
+ <span class="cline-any cline-yes">1x</span>
384
+ <span class="cline-any cline-yes">1x</span>
385
+ <span class="cline-any cline-yes">1x</span>
386
+ <span class="cline-any cline-yes">1x</span>
387
+ <span class="cline-any cline-yes">1x</span>
388
+ <span class="cline-any cline-yes">1x</span>
389
+ <span class="cline-any cline-yes">1x</span>
390
+ <span class="cline-any cline-yes">1x</span>
391
+ <span class="cline-any cline-yes">1x</span>
392
+ <span class="cline-any cline-yes">1x</span>
393
+ <span class="cline-any cline-yes">1x</span>
394
+ <span class="cline-any cline-yes">1x</span>
395
+ <span class="cline-any cline-yes">1x</span>
396
+ <span class="cline-any cline-yes">1x</span>
397
+ <span class="cline-any cline-yes">1x</span>
398
+ <span class="cline-any cline-yes">1x</span>
399
+ <span class="cline-any cline-yes">1x</span>
400
+ <span class="cline-any cline-yes">1x</span>
401
+ <span class="cline-any cline-yes">1x</span>
402
+ <span class="cline-any cline-yes">1x</span>
403
+ <span class="cline-any cline-yes">16x</span>
404
+ <span class="cline-any cline-yes">16x</span>
405
+ <span class="cline-any cline-yes">16x</span>
406
+ <span class="cline-any cline-yes">16x</span>
407
+ <span class="cline-any cline-yes">16x</span>
408
+ <span class="cline-any cline-yes">16x</span>
409
+ <span class="cline-any cline-yes">16x</span>
410
+ <span class="cline-any cline-yes">16x</span>
411
+ <span class="cline-any cline-yes">16x</span>
412
+ <span class="cline-any cline-yes">16x</span>
413
+ <span class="cline-any cline-yes">16x</span>
414
+ <span class="cline-any cline-yes">16x</span>
415
+ <span class="cline-any cline-yes">16x</span>
416
+ <span class="cline-any cline-yes">16x</span>
417
+ <span class="cline-any cline-yes">16x</span>
418
+ <span class="cline-any cline-yes">16x</span>
419
+ <span class="cline-any cline-yes">16x</span>
420
+ <span class="cline-any cline-yes">16x</span>
421
+ <span class="cline-any cline-yes">16x</span>
422
+ <span class="cline-any cline-yes">16x</span>
423
+ <span class="cline-any cline-yes">16x</span>
424
+ <span class="cline-any cline-yes">16x</span>
425
+ <span class="cline-any cline-yes">16x</span>
426
+ <span class="cline-any cline-no">&nbsp;</span>
427
+ <span class="cline-any cline-no">&nbsp;</span>
428
+ <span class="cline-any cline-yes">16x</span>
429
+ <span class="cline-any cline-yes">16x</span>
430
+ <span class="cline-any cline-yes">16x</span>
431
+ <span class="cline-any cline-yes">16x</span>
432
+ <span class="cline-any cline-yes">16x</span>
433
+ <span class="cline-any cline-yes">16x</span>
434
+ <span class="cline-any cline-yes">16x</span>
435
+ <span class="cline-any cline-yes">16x</span>
436
+ <span class="cline-any cline-yes">12x</span>
437
+ <span class="cline-any cline-yes">12x</span>
438
+ <span class="cline-any cline-yes">12x</span>
439
+ <span class="cline-any cline-yes">16x</span>
440
+ <span class="cline-any cline-yes">16x</span>
441
+ <span class="cline-any cline-yes">16x</span>
442
+ <span class="cline-any cline-yes">16x</span>
443
+ <span class="cline-any cline-yes">16x</span>
444
+ <span class="cline-any cline-yes">16x</span>
445
+ <span class="cline-any cline-yes">16x</span>
446
+ <span class="cline-any cline-yes">16x</span>
447
+ <span class="cline-any cline-no">&nbsp;</span>
448
+ <span class="cline-any cline-no">&nbsp;</span>
449
+ <span class="cline-any cline-no">&nbsp;</span>
450
+ <span class="cline-any cline-no">&nbsp;</span>
451
+ <span class="cline-any cline-no">&nbsp;</span>
452
+ <span class="cline-any cline-no">&nbsp;</span>
453
+ <span class="cline-any cline-yes">16x</span>
454
+ <span class="cline-any cline-yes">16x</span>
455
+ <span class="cline-any cline-yes">16x</span>
456
+ <span class="cline-any cline-yes">16x</span>
457
+ <span class="cline-any cline-yes">16x</span>
458
+ <span class="cline-any cline-yes">16x</span>
459
+ <span class="cline-any cline-yes">16x</span>
460
+ <span class="cline-any cline-no">&nbsp;</span>
461
+ <span class="cline-any cline-no">&nbsp;</span>
462
+ <span class="cline-any cline-yes">16x</span>
463
+ <span class="cline-any cline-yes">16x</span>
464
+ <span class="cline-any cline-yes">16x</span>
465
+ <span class="cline-any cline-yes">16x</span>
466
+ <span class="cline-any cline-yes">16x</span>
467
+ <span class="cline-any cline-yes">12x</span>
468
+ <span class="cline-any cline-yes">12x</span>
469
+ <span class="cline-any cline-yes">16x</span>
470
+ <span class="cline-any cline-yes">16x</span>
471
+ <span class="cline-any cline-yes">16x</span>
472
+ <span class="cline-any cline-yes">16x</span>
473
+ <span class="cline-any cline-yes">16x</span>
474
+ <span class="cline-any cline-yes">4x</span>
475
+ <span class="cline-any cline-yes">4x</span>
476
+ <span class="cline-any cline-yes">4x</span>
477
+ <span class="cline-any cline-yes">4x</span>
478
+ <span class="cline-any cline-yes">16x</span>
479
+ <span class="cline-any cline-yes">16x</span>
480
+ <span class="cline-any cline-yes">16x</span>
481
+ <span class="cline-any cline-yes">16x</span>
482
+ <span class="cline-any cline-yes">16x</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">4x</span>
486
+ <span class="cline-any cline-yes">4x</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-no">&nbsp;</span>
495
+ <span class="cline-any cline-no">&nbsp;</span>
496
+ <span class="cline-any cline-yes">16x</span>
497
+ <span class="cline-any cline-yes">16x</span>
498
+ <span class="cline-any cline-yes">16x</span>
499
+ <span class="cline-any cline-yes">16x</span>
500
+ <span class="cline-any cline-yes">16x</span>
501
+ <span class="cline-any cline-yes">16x</span>
502
+ <span class="cline-any cline-yes">16x</span>
503
+ <span class="cline-any cline-yes">16x</span>
504
+ <span class="cline-any cline-yes">16x</span>
505
+ <span class="cline-any cline-yes">16x</span>
506
+ <span class="cline-any cline-yes">16x</span>
507
+ <span class="cline-any cline-yes">12x</span>
508
+ <span class="cline-any cline-yes">12x</span>
509
+ <span class="cline-any cline-yes">12x</span>
510
+ <span class="cline-any cline-yes">12x</span>
511
+ <span class="cline-any cline-yes">16x</span>
512
+ <span class="cline-any cline-yes">16x</span>
513
+ <span class="cline-any cline-yes">16x</span>
514
+ <span class="cline-any cline-yes">16x</span>
515
+ <span class="cline-any cline-yes">16x</span>
516
+ <span class="cline-any cline-yes">16x</span>
517
+ <span class="cline-any cline-yes">12x</span>
518
+ <span class="cline-any cline-yes">12x</span>
519
+ <span class="cline-any cline-yes">12x</span>
520
+ <span class="cline-any cline-yes">12x</span>
521
+ <span class="cline-any cline-yes">12x</span>
522
+ <span class="cline-any cline-yes">12x</span>
523
+ <span class="cline-any cline-yes">12x</span>
524
+ <span class="cline-any cline-yes">12x</span>
525
+ <span class="cline-any cline-yes">12x</span>
526
+ <span class="cline-any cline-yes">12x</span>
527
+ <span class="cline-any cline-yes">12x</span>
528
+ <span class="cline-any cline-yes">12x</span>
529
+ <span class="cline-any cline-yes">16x</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">16x</span>
536
+ <span class="cline-any cline-yes">16x</span>
537
+ <span class="cline-any cline-yes">4x</span>
538
+ <span class="cline-any cline-yes">4x</span>
539
+ <span class="cline-any cline-yes">4x</span>
540
+ <span class="cline-any cline-yes">4x</span>
541
+ <span class="cline-any cline-yes">4x</span>
542
+ <span class="cline-any cline-yes">4x</span>
543
+ <span class="cline-any cline-yes">4x</span>
544
+ <span class="cline-any cline-yes">4x</span>
545
+ <span class="cline-any cline-yes">2x</span>
546
+ <span class="cline-any cline-yes">2x</span>
340
547
  <span class="cline-any cline-no">&nbsp;</span>
341
548
  <span class="cline-any cline-no">&nbsp;</span>
342
549
  <span class="cline-any cline-no">&nbsp;</span>
343
550
  <span class="cline-any cline-no">&nbsp;</span>
344
551
  <span class="cline-any cline-no">&nbsp;</span>
345
552
  <span class="cline-any cline-no">&nbsp;</span>
346
- <span class="cline-any cline-no">&nbsp;</span>
347
- <span class="cline-any cline-no">&nbsp;</span>
348
- <span class="cline-any cline-no">&nbsp;</span>
349
- <span class="cline-any cline-no">&nbsp;</span>
350
- <span class="cline-any cline-no">&nbsp;</span>
351
- <span class="cline-any cline-no">&nbsp;</span>
352
- <span class="cline-any cline-no">&nbsp;</span>
353
- <span class="cline-any cline-no">&nbsp;</span>
354
- <span class="cline-any cline-no">&nbsp;</span>
355
- <span class="cline-any cline-no">&nbsp;</span>
356
- <span class="cline-any cline-no">&nbsp;</span>
357
- <span class="cline-any cline-no">&nbsp;</span>
358
- <span class="cline-any cline-no">&nbsp;</span>
359
- <span class="cline-any cline-no">&nbsp;</span>
360
- <span class="cline-any cline-no">&nbsp;</span>
361
- <span class="cline-any cline-no">&nbsp;</span>
362
- <span class="cline-any cline-no">&nbsp;</span>
363
- <span class="cline-any cline-no">&nbsp;</span>
364
- <span class="cline-any cline-no">&nbsp;</span>
365
- <span class="cline-any cline-no">&nbsp;</span>
366
- <span class="cline-any cline-no">&nbsp;</span>
367
- <span class="cline-any cline-no">&nbsp;</span>
368
- <span class="cline-any cline-no">&nbsp;</span>
369
- <span class="cline-any cline-no">&nbsp;</span>
370
- <span class="cline-any cline-no">&nbsp;</span>
371
- <span class="cline-any cline-no">&nbsp;</span>
372
- <span class="cline-any cline-no">&nbsp;</span>
373
- <span class="cline-any cline-no">&nbsp;</span>
374
- <span class="cline-any cline-no">&nbsp;</span>
375
- <span class="cline-any cline-no">&nbsp;</span>
376
- <span class="cline-any cline-no">&nbsp;</span>
377
- <span class="cline-any cline-no">&nbsp;</span>
378
- <span class="cline-any cline-no">&nbsp;</span>
379
- <span class="cline-any cline-no">&nbsp;</span>
380
- <span class="cline-any cline-no">&nbsp;</span>
381
- <span class="cline-any cline-no">&nbsp;</span>
382
- <span class="cline-any cline-no">&nbsp;</span>
383
- <span class="cline-any cline-no">&nbsp;</span>
384
- <span class="cline-any cline-no">&nbsp;</span>
385
- <span class="cline-any cline-no">&nbsp;</span>
386
- <span class="cline-any cline-no">&nbsp;</span>
387
- <span class="cline-any cline-no">&nbsp;</span>
388
- <span class="cline-any cline-no">&nbsp;</span>
389
- <span class="cline-any cline-no">&nbsp;</span>
390
- <span class="cline-any cline-no">&nbsp;</span>
391
- <span class="cline-any cline-no">&nbsp;</span>
392
- <span class="cline-any cline-no">&nbsp;</span>
393
- <span class="cline-any cline-no">&nbsp;</span>
394
- <span class="cline-any cline-no">&nbsp;</span>
395
- <span class="cline-any cline-no">&nbsp;</span>
396
- <span class="cline-any cline-no">&nbsp;</span>
397
- <span class="cline-any cline-no">&nbsp;</span>
398
- <span class="cline-any cline-no">&nbsp;</span>
399
- <span class="cline-any cline-no">&nbsp;</span>
400
- <span class="cline-any cline-no">&nbsp;</span>
401
- <span class="cline-any cline-no">&nbsp;</span>
402
- <span class="cline-any cline-no">&nbsp;</span>
403
- <span class="cline-any cline-no">&nbsp;</span>
404
- <span class="cline-any cline-no">&nbsp;</span>
405
- <span class="cline-any cline-no">&nbsp;</span>
406
- <span class="cline-any cline-no">&nbsp;</span>
407
- <span class="cline-any cline-no">&nbsp;</span>
408
- <span class="cline-any cline-no">&nbsp;</span>
409
- <span class="cline-any cline-no">&nbsp;</span>
410
- <span class="cline-any cline-no">&nbsp;</span>
411
- <span class="cline-any cline-no">&nbsp;</span>
412
- <span class="cline-any cline-no">&nbsp;</span>
413
- <span class="cline-any cline-no">&nbsp;</span>
414
- <span class="cline-any cline-no">&nbsp;</span>
415
- <span class="cline-any cline-no">&nbsp;</span>
416
- <span class="cline-any cline-no">&nbsp;</span>
417
- <span class="cline-any cline-no">&nbsp;</span>
418
- <span class="cline-any cline-no">&nbsp;</span>
419
- <span class="cline-any cline-no">&nbsp;</span>
420
- <span class="cline-any cline-no">&nbsp;</span>
421
- <span class="cline-any cline-no">&nbsp;</span>
422
- <span class="cline-any cline-no">&nbsp;</span>
423
- <span class="cline-any cline-no">&nbsp;</span>
424
- <span class="cline-any cline-no">&nbsp;</span>
425
- <span class="cline-any cline-no">&nbsp;</span>
426
- <span class="cline-any cline-no">&nbsp;</span>
427
- <span class="cline-any cline-no">&nbsp;</span>
428
- <span class="cline-any cline-no">&nbsp;</span>
429
- <span class="cline-any cline-no">&nbsp;</span>
430
- <span class="cline-any cline-no">&nbsp;</span>
431
- <span class="cline-any cline-no">&nbsp;</span>
432
- <span class="cline-any cline-no">&nbsp;</span>
433
- <span class="cline-any cline-no">&nbsp;</span>
434
- <span class="cline-any cline-no">&nbsp;</span>
435
- <span class="cline-any cline-no">&nbsp;</span>
436
- <span class="cline-any cline-no">&nbsp;</span>
437
- <span class="cline-any cline-no">&nbsp;</span>
438
- <span class="cline-any cline-no">&nbsp;</span>
439
- <span class="cline-any cline-no">&nbsp;</span>
440
- <span class="cline-any cline-no">&nbsp;</span>
441
- <span class="cline-any cline-no">&nbsp;</span>
442
- <span class="cline-any cline-no">&nbsp;</span>
443
- <span class="cline-any cline-no">&nbsp;</span>
444
- <span class="cline-any cline-no">&nbsp;</span>
445
- <span class="cline-any cline-no">&nbsp;</span>
446
- <span class="cline-any cline-no">&nbsp;</span>
447
- <span class="cline-any cline-no">&nbsp;</span>
448
- <span class="cline-any cline-no">&nbsp;</span>
449
- <span class="cline-any cline-no">&nbsp;</span>
450
- <span class="cline-any cline-no">&nbsp;</span>
451
- <span class="cline-any cline-no">&nbsp;</span>
452
- <span class="cline-any cline-no">&nbsp;</span>
453
- <span class="cline-any cline-no">&nbsp;</span>
454
- <span class="cline-any cline-no">&nbsp;</span>
455
- <span class="cline-any cline-no">&nbsp;</span>
456
- <span class="cline-any cline-no">&nbsp;</span>
457
- <span class="cline-any cline-no">&nbsp;</span>
458
- <span class="cline-any cline-no">&nbsp;</span>
459
- <span class="cline-any cline-no">&nbsp;</span>
460
- <span class="cline-any cline-no">&nbsp;</span>
461
- <span class="cline-any cline-no">&nbsp;</span>
462
- <span class="cline-any cline-no">&nbsp;</span>
463
- <span class="cline-any cline-no">&nbsp;</span>
464
- <span class="cline-any cline-no">&nbsp;</span>
465
- <span class="cline-any cline-no">&nbsp;</span>
466
- <span class="cline-any cline-no">&nbsp;</span>
467
- <span class="cline-any cline-no">&nbsp;</span>
468
- <span class="cline-any cline-no">&nbsp;</span>
469
- <span class="cline-any cline-no">&nbsp;</span>
470
- <span class="cline-any cline-no">&nbsp;</span>
471
- <span class="cline-any cline-no">&nbsp;</span>
472
- <span class="cline-any cline-no">&nbsp;</span>
473
- <span class="cline-any cline-no">&nbsp;</span>
474
- <span class="cline-any cline-no">&nbsp;</span>
475
- <span class="cline-any cline-no">&nbsp;</span>
476
- <span class="cline-any cline-no">&nbsp;</span>
477
- <span class="cline-any cline-no">&nbsp;</span>
478
- <span class="cline-any cline-no">&nbsp;</span>
479
- <span class="cline-any cline-no">&nbsp;</span>
480
- <span class="cline-any cline-no">&nbsp;</span>
481
- <span class="cline-any cline-no">&nbsp;</span>
482
- <span class="cline-any cline-no">&nbsp;</span>
483
- <span class="cline-any cline-no">&nbsp;</span>
484
- <span class="cline-any cline-no">&nbsp;</span>
485
- <span class="cline-any cline-no">&nbsp;</span>
486
- <span class="cline-any cline-no">&nbsp;</span>
487
- <span class="cline-any cline-no">&nbsp;</span>
488
- <span class="cline-any cline-no">&nbsp;</span>
489
- <span class="cline-any cline-no">&nbsp;</span>
490
- <span class="cline-any cline-no">&nbsp;</span>
491
- <span class="cline-any cline-no">&nbsp;</span>
492
- <span class="cline-any cline-no">&nbsp;</span>
493
- <span class="cline-any cline-no">&nbsp;</span>
494
- <span class="cline-any cline-no">&nbsp;</span>
495
- <span class="cline-any cline-no">&nbsp;</span>
496
- <span class="cline-any cline-no">&nbsp;</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-no">&nbsp;</span>
500
- <span class="cline-any cline-no">&nbsp;</span>
501
- <span class="cline-any cline-no">&nbsp;</span>
502
- <span class="cline-any cline-no">&nbsp;</span>
503
- <span class="cline-any cline-no">&nbsp;</span>
504
- <span class="cline-any cline-no">&nbsp;</span>
505
- <span class="cline-any cline-no">&nbsp;</span>
506
- <span class="cline-any cline-no">&nbsp;</span>
507
- <span class="cline-any cline-no">&nbsp;</span>
508
- <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-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>
613
- <span class="cstat-no" title="statement not covered" > * HSuite Native Connect</span>
614
- <span class="cstat-no" title="statement not covered" > * Copyright 2024-2025 HSuite (https://hsuite.finance)</span>
615
- <span class="cstat-no" title="statement not covered" > *</span>
616
- <span class="cstat-no" title="statement not covered" > * SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0</span>
617
- <span class="cstat-no" title="statement not covered" > *</span>
618
- <span class="cstat-no" title="statement not covered" > * This file is part of HSuite Native Connect. For commercial licensing,</span>
619
- <span class="cstat-no" title="statement not covered" > * visit https://hsuite.finance/licensing</span>
620
- <span class="cstat-no" title="statement not covered" > */</span>
621
- <span class="cstat-no" title="statement not covered" ></span>
622
- <span class="cstat-no" title="statement not covered" >/**</span>
623
- <span class="cstat-no" title="statement not covered" > * @file walletconnect-session-store.ts</span>
624
- <span class="cstat-no" title="statement not covered" > * @description Session storage and management for WalletConnect provider</span>
625
- <span class="cstat-no" title="statement not covered" > *</span>
626
- <span class="cstat-no" title="statement not covered" > * Extracted from WalletConnectV2Provider to reduce file size and improve maintainability.</span>
627
- <span class="cstat-no" title="statement not covered" > *</span>
628
- <span class="cstat-no" title="statement not covered" > * Responsibilities:</span>
629
- <span class="cstat-no" title="statement not covered" > * - Store and retrieve WalletConnect sessions</span>
630
- <span class="cstat-no" title="statement not covered" > * - Generate unique session keys</span>
631
- <span class="cstat-no" title="statement not covered" > * - Aggregate accounts across sessions</span>
632
- <span class="cstat-no" title="statement not covered" > * - Find sessions by account address</span>
633
- <span class="cstat-no" title="statement not covered" > */</span>
634
- <span class="cstat-no" title="statement not covered" ></span>
635
- <span class="cstat-no" title="statement not covered" >import { signal } from '@angular/core';</span>
636
- <span class="cstat-no" title="statement not covered" >import { getLogger } from '@hsuite/native-connect-sdk';</span>
637
- <span class="cstat-no" title="statement not covered" ></span>
638
- <span class="cstat-no" title="statement not covered" >import type { UnifiedAccount } from '../../../models/unified-account.model';</span>
639
- <span class="cstat-no" title="statement not covered" ></span>
640
- <span class="cstat-no" title="statement not covered" >import type { IWalletConnectSigner } from './base-signer.interface';</span>
641
- <span class="cstat-no" title="statement not covered" ></span>
642
- <span class="cstat-no" title="statement not covered" >const logger = getLogger().scoped?.('WCSessionStore') ?? getLogger();</span>
643
- <span class="cstat-no" title="statement not covered" ></span>
644
- <span class="cstat-no" title="statement not covered" >/**</span>
645
- <span class="cstat-no" title="statement not covered" > * Session data structure stored in the session store.</span>
646
- <span class="cstat-no" title="statement not covered" > */</span>
647
- <span class="cstat-no" title="statement not covered" >export interface StoredSessionData {</span>
648
- <span class="cstat-no" title="statement not covered" > /** Raw WalletConnect session object */</span>
649
- <span class="cstat-no" title="statement not covered" > session: any;</span>
650
- <span class="cstat-no" title="statement not covered" > /** Ledger identifier (hedera, xrpl) */</span>
651
- <span class="cstat-no" title="statement not covered" > ledgerId: string;</span>
652
- <span class="cstat-no" title="statement not covered" > /** Network identifier (hedera:testnet, xrpl:mainnet) */</span>
653
- <span class="cstat-no" title="statement not covered" > networkId: string;</span>
654
- <span class="cstat-no" title="statement not covered" > /**</span>
655
- <span class="cstat-no" title="statement not covered" > * User's selected network from the connection modal.</span>
656
- <span class="cstat-no" title="statement not covered" > * This is critical for respecting user intent - wallets may return accounts</span>
657
- <span class="cstat-no" title="statement not covered" > * from multiple networks, but we should use the network the user selected.</span>
658
- <span class="cstat-no" title="statement not covered" > *</span>
659
- <span class="cstat-no" title="statement not covered" > * This value is set when connecting and persisted for session restoration.</span>
660
- <span class="cstat-no" title="statement not covered" > * It takes precedence over the wallet-reported networkId for signing operations.</span>
661
- <span class="cstat-no" title="statement not covered" > */</span>
662
- <span class="cstat-no" title="statement not covered" > userSelectedNetwork: string;</span>
663
- <span class="cstat-no" title="statement not covered" > /** Signer instance for this ledger */</span>
664
- <span class="cstat-no" title="statement not covered" > signer: IWalletConnectSigner;</span>
665
- <span class="cstat-no" title="statement not covered" > /** Unified accounts parsed from session */</span>
666
- <span class="cstat-no" title="statement not covered" > accounts: UnifiedAccount[];</span>
667
- <span class="cstat-no" title="statement not covered" >}</span>
668
- <span class="cstat-no" title="statement not covered" ></span>
669
- <span class="cstat-no" title="statement not covered" >/**</span>
670
- <span class="cstat-no" title="statement not covered" > * WalletConnect Session Store</span>
671
- <span class="cstat-no" title="statement not covered" > *</span>
672
- <span class="cstat-no" title="statement not covered" > * Manages the in-memory storage of WalletConnect sessions.</span>
673
- <span class="cstat-no" title="statement not covered" > * Provides utility methods for session lookup and aggregation.</span>
674
- <span class="cstat-no" title="statement not covered" > */</span>
675
- <span class="cstat-no" title="statement not covered" >export class WalletConnectSessionStore {</span>
676
- <span class="cstat-no" title="statement not covered" > /**</span>
677
- <span class="cstat-no" title="statement not covered" > * Map of session key to session data.</span>
678
- <span class="cstat-no" title="statement not covered" > * Session key format: wc-{ledger}-{network}-{topicPrefix}</span>
679
- <span class="cstat-no" title="statement not covered" > */</span>
680
- <span class="cstat-no" title="statement not covered" > private readonly sessions = new Map&lt;string, StoredSessionData&gt;();</span>
681
- <span class="cstat-no" title="statement not covered" ></span>
682
- <span class="cstat-no" title="statement not covered" > /**</span>
683
- <span class="cstat-no" title="statement not covered" > * Aggregated accounts signal for reactive UI binding.</span>
684
- <span class="cstat-no" title="statement not covered" > */</span>
685
- <span class="cstat-no" title="statement not covered" > private readonly _accounts = signal&lt;UnifiedAccount[]&gt;([]);</span>
686
- <span class="cstat-no" title="statement not covered" ></span>
687
- <span class="cstat-no" title="statement not covered" > /**</span>
688
- <span class="cstat-no" title="statement not covered" > * Read-only accounts signal.</span>
689
- <span class="cstat-no" title="statement not covered" > */</span>
690
- <span class="cstat-no" title="statement not covered" > readonly accounts = this._accounts.asReadonly();</span>
691
- <span class="cstat-no" title="statement not covered" ></span>
692
- <span class="cstat-no" title="statement not covered" > /**</span>
693
- <span class="cstat-no" title="statement not covered" > * Get a session by key.</span>
694
- <span class="cstat-no" title="statement not covered" > *</span>
695
- <span class="cstat-no" title="statement not covered" > * @param sessionKey - Unique session key</span>
696
- <span class="cstat-no" title="statement not covered" > * @returns Session data or undefined</span>
697
- <span class="cstat-no" title="statement not covered" > */</span>
698
- <span class="cstat-no" title="statement not covered" > getSession(sessionKey: string): StoredSessionData | undefined {</span>
553
+ <span class="cline-any cline-no">&nbsp;</span>
554
+ <span class="cline-any cline-yes">2x</span>
555
+ <span class="cline-any cline-yes">4x</span>
556
+ <span class="cline-any cline-yes">4x</span>
557
+ <span class="cline-any cline-yes">16x</span>
558
+ <span class="cline-any cline-yes">16x</span>
559
+ <span class="cline-any cline-yes">16x</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-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-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">16x</span>
578
+ <span class="cline-any cline-yes">16x</span>
579
+ <span class="cline-any cline-yes">16x</span>
580
+ <span class="cline-any cline-yes">16x</span>
581
+ <span class="cline-any cline-yes">16x</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-yes">16x</span>
612
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/**
613
+ * HSuite Native Connect
614
+ * Copyright 2024-2025 HSuite (https://hsuite.finance)
615
+ *
616
+ * SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0
617
+ *
618
+ * This file is part of HSuite Native Connect. For commercial licensing,
619
+ * visit https://hsuite.finance/licensing
620
+ */
621
+ &nbsp;
622
+ /**
623
+ * @file walletconnect-session-store.ts
624
+ * @description Session storage and management for WalletConnect provider
625
+ *
626
+ * Extracted from WalletConnectV2Provider to reduce file size and improve maintainability.
627
+ *
628
+ * Responsibilities:
629
+ * - Store and retrieve WalletConnect sessions
630
+ * - Generate unique session keys
631
+ * - Aggregate accounts across sessions
632
+ * - Find sessions by account address
633
+ */
634
+ &nbsp;
635
+ import { signal } from '@angular/core';
636
+ import { getLogger } from '@hsuite/native-connect-sdk';
637
+ &nbsp;
638
+ import type { UnifiedAccount } from '../../../models/unified-account.model';
639
+ &nbsp;
640
+ import type { IWalletConnectSigner } from './base-signer.interface';
641
+ &nbsp;
642
+ const logger = getLogger().scoped?.('WCSessionStore'<span class="branch-0 cbranch-no" title="branch not covered" >) ?? getLogger();</span>
643
+ &nbsp;
644
+ /**
645
+ * Session data structure stored in the session store.
646
+ */
647
+ export interface StoredSessionData {
648
+ /** Raw WalletConnect session object */
649
+ session: any;
650
+ /** Ledger identifier (hedera, xrpl) */
651
+ ledgerId: string;
652
+ /** Network identifier (hedera:testnet, xrpl:mainnet) */
653
+ networkId: string;
654
+ /**
655
+ * User's selected network from the connection modal.
656
+ * This is critical for respecting user intent - wallets may return accounts
657
+ * from multiple networks, but we should use the network the user selected.
658
+ *
659
+ * This value is set when connecting and persisted for session restoration.
660
+ * It takes precedence over the wallet-reported networkId for signing operations.
661
+ */
662
+ userSelectedNetwork: string;
663
+ /** Signer instance for this ledger */
664
+ signer: IWalletConnectSigner;
665
+ /** Unified accounts parsed from session */
666
+ accounts: UnifiedAccount[];
667
+ }
668
+ &nbsp;
669
+ /**
670
+ * WalletConnect Session Store
671
+ *
672
+ * Manages the in-memory storage of WalletConnect sessions.
673
+ * Provides utility methods for session lookup and aggregation.
674
+ */
675
+ export class WalletConnectSessionStore {
676
+ /**
677
+ * Map of session key to session data.
678
+ * Session key format: wc-{ledger}-{network}-{topicPrefix}
679
+ */
680
+ private readonly sessions = new Map&lt;string, StoredSessionData&gt;();
681
+ &nbsp;
682
+ /**
683
+ * Aggregated accounts signal for reactive UI binding.
684
+ */
685
+ private readonly _accounts = signal&lt;UnifiedAccount[]&gt;([]);
686
+ &nbsp;
687
+ /**
688
+ * Read-only accounts signal.
689
+ */
690
+ readonly accounts = this._accounts.asReadonly();
691
+ &nbsp;
692
+ /**
693
+ * Get a session by key.
694
+ *
695
+ * @param sessionKey - Unique session key
696
+ * @returns Session data or undefined
697
+ */
698
+ <span class="fstat-no" title="function not covered" > getSession(sessionKey: string): StoredSessionData | undefined {</span>
699
699
  <span class="cstat-no" title="statement not covered" > return this.sessions.get(sessionKey);</span>
700
700
  <span class="cstat-no" title="statement not covered" > }</span>
701
- <span class="cstat-no" title="statement not covered" ></span>
702
- <span class="cstat-no" title="statement not covered" > /**</span>
703
- <span class="cstat-no" title="statement not covered" > * Store a session.</span>
704
- <span class="cstat-no" title="statement not covered" > *</span>
705
- <span class="cstat-no" title="statement not covered" > * @param sessionKey - Unique session key</span>
706
- <span class="cstat-no" title="statement not covered" > * @param data - Session data to store</span>
707
- <span class="cstat-no" title="statement not covered" > */</span>
708
- <span class="cstat-no" title="statement not covered" > setSession(sessionKey: string, data: StoredSessionData): void {</span>
709
- <span class="cstat-no" title="statement not covered" > this.sessions.set(sessionKey, data);</span>
710
- <span class="cstat-no" title="statement not covered" > logger.debug('Session stored', { sessionKey, accountCount: data.accounts.length });</span>
711
- <span class="cstat-no" title="statement not covered" > }</span>
712
- <span class="cstat-no" title="statement not covered" ></span>
713
- <span class="cstat-no" title="statement not covered" > /**</span>
714
- <span class="cstat-no" title="statement not covered" > * Delete a session by key.</span>
715
- <span class="cstat-no" title="statement not covered" > *</span>
716
- <span class="cstat-no" title="statement not covered" > * @param sessionKey - Session key to delete</span>
717
- <span class="cstat-no" title="statement not covered" > * @returns true if session was deleted</span>
718
- <span class="cstat-no" title="statement not covered" > */</span>
719
- <span class="cstat-no" title="statement not covered" > deleteSession(sessionKey: string): boolean {</span>
701
+ &nbsp;
702
+ /**
703
+ * Store a session.
704
+ *
705
+ * @param sessionKey - Unique session key
706
+ * @param data - Session data to store
707
+ */
708
+ setSession(sessionKey: string, data: StoredSessionData): void {
709
+ this.sessions.set(sessionKey, data);
710
+ logger.debug('Session stored', { sessionKey, accountCount: data.accounts.length });
711
+ }
712
+ &nbsp;
713
+ /**
714
+ * Delete a session by key.
715
+ *
716
+ * @param sessionKey - Session key to delete
717
+ * @returns true if session was deleted
718
+ */
719
+ <span class="fstat-no" title="function not covered" > deleteSession(sessionKey: string): boolean {</span>
720
720
  <span class="cstat-no" title="statement not covered" > const deleted = this.sessions.delete(sessionKey);</span>
721
721
  <span class="cstat-no" title="statement not covered" > if (deleted) {</span>
722
722
  <span class="cstat-no" title="statement not covered" > logger.debug('Session deleted', { sessionKey });</span>
723
723
  <span class="cstat-no" title="statement not covered" > }</span>
724
724
  <span class="cstat-no" title="statement not covered" > return deleted;</span>
725
725
  <span class="cstat-no" title="statement not covered" > }</span>
726
- <span class="cstat-no" title="statement not covered" ></span>
727
- <span class="cstat-no" title="statement not covered" > /**</span>
728
- <span class="cstat-no" title="statement not covered" > * Check if a session exists.</span>
729
- <span class="cstat-no" title="statement not covered" > *</span>
730
- <span class="cstat-no" title="statement not covered" > * @param sessionKey - Session key to check</span>
731
- <span class="cstat-no" title="statement not covered" > */</span>
732
- <span class="cstat-no" title="statement not covered" > hasSession(sessionKey: string): boolean {</span>
726
+ &nbsp;
727
+ /**
728
+ * Check if a session exists.
729
+ *
730
+ * @param sessionKey - Session key to check
731
+ */
732
+ <span class="fstat-no" title="function not covered" > hasSession(sessionKey: string): boolean {</span>
733
733
  <span class="cstat-no" title="statement not covered" > return this.sessions.has(sessionKey);</span>
734
734
  <span class="cstat-no" title="statement not covered" > }</span>
735
- <span class="cstat-no" title="statement not covered" ></span>
736
- <span class="cstat-no" title="statement not covered" > /**</span>
737
- <span class="cstat-no" title="statement not covered" > * Get the number of stored sessions.</span>
738
- <span class="cstat-no" title="statement not covered" > */</span>
739
- <span class="cstat-no" title="statement not covered" > get size(): number {</span>
740
- <span class="cstat-no" title="statement not covered" > return this.sessions.size;</span>
741
- <span class="cstat-no" title="statement not covered" > }</span>
742
- <span class="cstat-no" title="statement not covered" ></span>
743
- <span class="cstat-no" title="statement not covered" > /**</span>
744
- <span class="cstat-no" title="statement not covered" > * Clear all sessions.</span>
745
- <span class="cstat-no" title="statement not covered" > */</span>
746
- <span class="cstat-no" title="statement not covered" > clear(): void {</span>
747
- <span class="cstat-no" title="statement not covered" > this.sessions.clear();</span>
748
- <span class="cstat-no" title="statement not covered" > this._accounts.set([]);</span>
749
- <span class="cstat-no" title="statement not covered" > logger.debug('All sessions cleared');</span>
750
- <span class="cstat-no" title="statement not covered" > }</span>
751
- <span class="cstat-no" title="statement not covered" ></span>
752
- <span class="cstat-no" title="statement not covered" > /**</span>
753
- <span class="cstat-no" title="statement not covered" > * Get all session entries.</span>
754
- <span class="cstat-no" title="statement not covered" > *</span>
755
- <span class="cstat-no" title="statement not covered" > * @returns Iterator of [sessionKey, sessionData] pairs</span>
756
- <span class="cstat-no" title="statement not covered" > */</span>
757
- <span class="cstat-no" title="statement not covered" > entries(): IterableIterator&lt;[string, StoredSessionData]&gt; {</span>
758
- <span class="cstat-no" title="statement not covered" > return this.sessions.entries();</span>
759
- <span class="cstat-no" title="statement not covered" > }</span>
760
- <span class="cstat-no" title="statement not covered" ></span>
761
- <span class="cstat-no" title="statement not covered" > /**</span>
762
- <span class="cstat-no" title="statement not covered" > * Get all session values.</span>
763
- <span class="cstat-no" title="statement not covered" > *</span>
764
- <span class="cstat-no" title="statement not covered" > * @returns Iterator of session data</span>
765
- <span class="cstat-no" title="statement not covered" > */</span>
766
- <span class="cstat-no" title="statement not covered" > values(): IterableIterator&lt;StoredSessionData&gt; {</span>
735
+ &nbsp;
736
+ /**
737
+ * Get the number of stored sessions.
738
+ */
739
+ get size(): number {
740
+ return this.sessions.size;
741
+ }
742
+ &nbsp;
743
+ /**
744
+ * Clear all sessions.
745
+ */
746
+ clear(): void {
747
+ this.sessions.clear();
748
+ this._accounts.set([]);
749
+ logger.debug('All sessions cleared');
750
+ }
751
+ &nbsp;
752
+ /**
753
+ * Get all session entries.
754
+ *
755
+ * @returns Iterator of [sessionKey, sessionData] pairs
756
+ */
757
+ entries(): IterableIterator&lt;[string, StoredSessionData]&gt; {
758
+ return this.sessions.entries();
759
+ }
760
+ &nbsp;
761
+ /**
762
+ * Get all session values.
763
+ *
764
+ * @returns Iterator of session data
765
+ */
766
+ <span class="fstat-no" title="function not covered" > values(): IterableIterator&lt;StoredSessionData&gt; {</span>
767
767
  <span class="cstat-no" title="statement not covered" > return this.sessions.values();</span>
768
768
  <span class="cstat-no" title="statement not covered" > }</span>
769
- <span class="cstat-no" title="statement not covered" ></span>
770
- <span class="cstat-no" title="statement not covered" > /**</span>
771
- <span class="cstat-no" title="statement not covered" > * Generate a unique session key for tracking multiple sessions.</span>
772
- <span class="cstat-no" title="statement not covered" > * Format: wc-{ledger}-{network}-{topicPrefix}</span>
773
- <span class="cstat-no" title="statement not covered" > *</span>
774
- <span class="cstat-no" title="statement not covered" > * @param ledgerId - Ledger identifier (hedera, xrpl)</span>
775
- <span class="cstat-no" title="statement not covered" > * @param networkId - Network identifier (hedera:testnet, xrpl:mainnet)</span>
776
- <span class="cstat-no" title="statement not covered" > * @param topic - WalletConnect session topic (optional)</span>
777
- <span class="cstat-no" title="statement not covered" > * @returns Unique session key</span>
778
- <span class="cstat-no" title="statement not covered" > */</span>
779
- <span class="cstat-no" title="statement not covered" > generateSessionKey(ledgerId: string, networkId: string, topic?: string): string {</span>
780
- <span class="cstat-no" title="statement not covered" > const topicPrefix = topic ? topic.substring(0, 8) : Date.now().toString();</span>
781
- <span class="cstat-no" title="statement not covered" > const networkPart = networkId.split(':')[1] || 'unknown';</span>
782
- <span class="cstat-no" title="statement not covered" > return `wc-${ledgerId}-${networkPart}-${topicPrefix}`;</span>
783
- <span class="cstat-no" title="statement not covered" > }</span>
784
- <span class="cstat-no" title="statement not covered" ></span>
785
- <span class="cstat-no" title="statement not covered" > /**</span>
786
- <span class="cstat-no" title="statement not covered" > * Update the aggregated accounts signal from all sessions.</span>
787
- <span class="cstat-no" title="statement not covered" > * Call this after session changes to keep accounts in sync.</span>
788
- <span class="cstat-no" title="statement not covered" > */</span>
789
- <span class="cstat-no" title="statement not covered" > updateAggregatedAccounts(): void {</span>
790
- <span class="cstat-no" title="statement not covered" > const allAccounts: UnifiedAccount[] = [];</span>
791
- <span class="cstat-no" title="statement not covered" ></span>
792
- <span class="cstat-no" title="statement not covered" > for (const sessionData of this.sessions.values()) {</span>
793
- <span class="cstat-no" title="statement not covered" > allAccounts.push(...sessionData.accounts);</span>
794
- <span class="cstat-no" title="statement not covered" > }</span>
795
- <span class="cstat-no" title="statement not covered" ></span>
796
- <span class="cstat-no" title="statement not covered" > logger.debug('Aggregated accounts', {</span>
797
- <span class="cstat-no" title="statement not covered" > sessionCount: this.sessions.size,</span>
798
- <span class="cstat-no" title="statement not covered" > totalAccounts: allAccounts.length,</span>
799
- <span class="cstat-no" title="statement not covered" > });</span>
800
- <span class="cstat-no" title="statement not covered" > this._accounts.set(allAccounts);</span>
801
- <span class="cstat-no" title="statement not covered" > }</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" > * Find the session containing a specific account address.</span>
805
- <span class="cstat-no" title="statement not covered" > *</span>
806
- <span class="cstat-no" title="statement not covered" > * @param accountAddress - Account address to find</span>
807
- <span class="cstat-no" title="statement not covered" > * @returns Session, signer, and network info, or undefined if not found</span>
808
- <span class="cstat-no" title="statement not covered" > */</span>
809
- <span class="cstat-no" title="statement not covered" > findSessionByAccount(accountAddress: string):</span>
810
- <span class="cstat-no" title="statement not covered" > | {</span>
811
- <span class="cstat-no" title="statement not covered" > session: any;</span>
812
- <span class="cstat-no" title="statement not covered" > signer: IWalletConnectSigner;</span>
813
- <span class="cstat-no" title="statement not covered" > networkId: string;</span>
814
- <span class="cstat-no" title="statement not covered" > userSelectedNetwork: string;</span>
815
- <span class="cstat-no" title="statement not covered" > }</span>
816
- <span class="cstat-no" title="statement not covered" > | undefined {</span>
817
- <span class="cstat-no" title="statement not covered" > for (const sessionData of this.sessions.values()) {</span>
818
- <span class="cstat-no" title="statement not covered" > const accountExists = sessionData.accounts.some((acc) =&gt; acc.address === accountAddress);</span>
819
- <span class="cstat-no" title="statement not covered" > if (accountExists) {</span>
769
+ &nbsp;
770
+ /**
771
+ * Generate a unique session key for tracking multiple sessions.
772
+ * Format: wc-{ledger}-{network}-{topicPrefix}
773
+ *
774
+ * @param ledgerId - Ledger identifier (hedera, xrpl)
775
+ * @param networkId - Network identifier (hedera:testnet, xrpl:mainnet)
776
+ * @param topic - WalletConnect session topic (optional)
777
+ * @returns Unique session key
778
+ */
779
+ generateSessionKey(ledgerId: string, networkId: string, topic?: string): string {
780
+ const topicPrefix = topic ? topic.substring(0, 8<span class="branch-0 cbranch-no" title="branch not covered" >) : Date.now().toString();</span>
781
+ const networkPart = networkId.split(':')[1<span class="branch-0 cbranch-no" title="branch not covered" >] || 'unknown';</span>
782
+ return `wc-${ledgerId}-${networkPart}-${topicPrefix}`;
783
+ }
784
+ &nbsp;
785
+ /**
786
+ * Update the aggregated accounts signal from all sessions.
787
+ * Call this after session changes to keep accounts in sync.
788
+ */
789
+ updateAggregatedAccounts(): void {
790
+ const allAccounts: UnifiedAccount[] = [];
791
+ &nbsp;
792
+ for (const sessionData of this.sessions.values()) {
793
+ allAccounts.push(...sessionData.accounts);
794
+ }
795
+ &nbsp;
796
+ logger.debug('Aggregated accounts', {
797
+ sessionCount: this.sessions.size,
798
+ totalAccounts: allAccounts.length,
799
+ });
800
+ this._accounts.set(allAccounts);
801
+ }
802
+ &nbsp;
803
+ /**
804
+ * Find the session containing a specific account address.
805
+ *
806
+ * @param accountAddress - Account address to find
807
+ * @returns Session, signer, and network info, or undefined if not found
808
+ */
809
+ findSessionByAccount(accountAddress: string):
810
+ | {
811
+ session: any;
812
+ signer: IWalletConnectSigner;
813
+ networkId: string;
814
+ userSelectedNetwork: string;
815
+ }
816
+ | undefined {
817
+ for (const sessionData of this.sessions.values()) {
818
+ const accountExists = sessionData.accounts.some((acc) =&gt; acc.address === accountAddress);
819
+ if (accountExists) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
820
820
  <span class="cstat-no" title="statement not covered" > return {</span>
821
821
  <span class="cstat-no" title="statement not covered" > session: sessionData.session,</span>
822
822
  <span class="cstat-no" title="statement not covered" > signer: sessionData.signer,</span>
@@ -824,17 +824,17 @@
824
824
  <span class="cstat-no" title="statement not covered" > userSelectedNetwork: sessionData.userSelectedNetwork,</span>
825
825
  <span class="cstat-no" title="statement not covered" > };</span>
826
826
  <span class="cstat-no" title="statement not covered" > }</span>
827
- <span class="cstat-no" title="statement not covered" > }</span>
828
- <span class="cstat-no" title="statement not covered" > return undefined;</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" > /**</span>
832
- <span class="cstat-no" title="statement not covered" > * Find and remove a session by its WalletConnect topic.</span>
833
- <span class="cstat-no" title="statement not covered" > *</span>
834
- <span class="cstat-no" title="statement not covered" > * @param topic - WalletConnect session topic</span>
835
- <span class="cstat-no" title="statement not covered" > * @returns Removed session data, or undefined if not found</span>
836
- <span class="cstat-no" title="statement not covered" > */</span>
837
- <span class="cstat-no" title="statement not covered" > removeSessionByTopic(topic: string): { sessionKey: string; data: StoredSessionData } | undefined {</span>
827
+ }
828
+ return undefined;
829
+ }
830
+ &nbsp;
831
+ /**
832
+ * Find and remove a session by its WalletConnect topic.
833
+ *
834
+ * @param topic - WalletConnect session topic
835
+ * @returns Removed session data, or undefined if not found
836
+ */
837
+ <span class="fstat-no" title="function not covered" > removeSessionByTopic(topic: string): { sessionKey: string; data: StoredSessionData } | undefined {</span>
838
838
  <span class="cstat-no" title="statement not covered" > for (const [sessionKey, sessionData] of this.sessions.entries()) {</span>
839
839
  <span class="cstat-no" title="statement not covered" > if (sessionData.session.topic === topic) {</span>
840
840
  <span class="cstat-no" title="statement not covered" > this.sessions.delete(sessionKey);</span>
@@ -844,14 +844,14 @@
844
844
  <span class="cstat-no" title="statement not covered" > }</span>
845
845
  <span class="cstat-no" title="statement not covered" > return undefined;</span>
846
846
  <span class="cstat-no" title="statement not covered" > }</span>
847
- <span class="cstat-no" title="statement not covered" ></span>
848
- <span class="cstat-no" title="statement not covered" > /**</span>
849
- <span class="cstat-no" title="statement not covered" > * Get all active sessions as an array.</span>
850
- <span class="cstat-no" title="statement not covered" > * Useful for UI display.</span>
851
- <span class="cstat-no" title="statement not covered" > *</span>
852
- <span class="cstat-no" title="statement not covered" > * @returns Array of session information</span>
853
- <span class="cstat-no" title="statement not covered" > */</span>
854
- <span class="cstat-no" title="statement not covered" > getActiveSessions(): Array&lt;{</span>
847
+ &nbsp;
848
+ /**
849
+ * Get all active sessions as an array.
850
+ * Useful for UI display.
851
+ *
852
+ * @returns Array of session information
853
+ */
854
+ <span class="fstat-no" title="function not covered" > getActiveSessions(): Array&lt;{</span>
855
855
  <span class="cstat-no" title="statement not covered" > sessionKey: string;</span>
856
856
  <span class="cstat-no" title="statement not covered" > ledgerId: string;</span>
857
857
  <span class="cstat-no" title="statement not covered" > networkId: string;</span>
@@ -881,7 +881,7 @@
881
881
  <span class="cstat-no" title="statement not covered" ></span>
882
882
  <span class="cstat-no" title="statement not covered" > return sessions;</span>
883
883
  <span class="cstat-no" title="statement not covered" > }</span>
884
- <span class="cstat-no" title="statement not covered" >}</span>
884
+ }
885
885
  &nbsp;</pre></td></tr></table></pre>
886
886
 
887
887
  <div class='push'></div><!-- for sticky footer -->
@@ -889,7 +889,7 @@
889
889
  <div class='footer quiet pad2 space-top1 center small'>
890
890
  Code coverage generated by
891
891
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
892
- at 2026-06-10T09:00:36.812Z
892
+ at 2026-06-27T21:00:37.209Z
893
893
  </div>
894
894
  <script src="../../../../prettify.js"></script>
895
895
  <script>