@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">65.89% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>0/478</span>
28
+ <span class='fraction'>315/478</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">60.52% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>0/1</span>
35
+ <span class='fraction'>23/38</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">75% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>0/1</span>
42
+ <span class='fraction'>6/8</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">65.89% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>0/478</span>
49
+ <span class='fraction'>315/478</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>
@@ -541,9 +541,65 @@
541
541
  <a name='L476'></a><a href='#L476'>476</a>
542
542
  <a name='L477'></a><a href='#L477'>477</a>
543
543
  <a name='L478'></a><a href='#L478'>478</a>
544
- <a name='L479'></a><a href='#L479'>479</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
544
+ <a name='L479'></a><a href='#L479'>479</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
545
+ <span class="cline-any cline-yes">1x</span>
546
+ <span class="cline-any cline-yes">1x</span>
547
+ <span class="cline-any cline-yes">1x</span>
548
+ <span class="cline-any cline-yes">1x</span>
549
+ <span class="cline-any cline-yes">1x</span>
550
+ <span class="cline-any cline-yes">1x</span>
551
+ <span class="cline-any cline-yes">1x</span>
552
+ <span class="cline-any cline-yes">1x</span>
553
+ <span class="cline-any cline-yes">1x</span>
554
+ <span class="cline-any cline-yes">1x</span>
555
+ <span class="cline-any cline-yes">1x</span>
556
+ <span class="cline-any cline-yes">1x</span>
557
+ <span class="cline-any cline-yes">1x</span>
558
+ <span class="cline-any cline-yes">1x</span>
559
+ <span class="cline-any cline-yes">1x</span>
560
+ <span class="cline-any cline-yes">1x</span>
561
+ <span class="cline-any cline-yes">1x</span>
562
+ <span class="cline-any cline-yes">1x</span>
563
+ <span class="cline-any cline-yes">1x</span>
564
+ <span class="cline-any cline-yes">1x</span>
565
+ <span class="cline-any cline-yes">1x</span>
566
+ <span class="cline-any cline-yes">1x</span>
567
+ <span class="cline-any cline-yes">1x</span>
568
+ <span class="cline-any cline-yes">1x</span>
569
+ <span class="cline-any cline-yes">1x</span>
570
+ <span class="cline-any cline-yes">1x</span>
571
+ <span class="cline-any cline-yes">1x</span>
572
+ <span class="cline-any cline-yes">1x</span>
573
+ <span class="cline-any cline-yes">1x</span>
574
+ <span class="cline-any cline-yes">1x</span>
575
+ <span class="cline-any cline-yes">1x</span>
576
+ <span class="cline-any cline-yes">1x</span>
577
+ <span class="cline-any cline-yes">1x</span>
578
+ <span class="cline-any cline-yes">1x</span>
579
+ <span class="cline-any cline-yes">1x</span>
580
+ <span class="cline-any cline-yes">1x</span>
581
+ <span class="cline-any cline-yes">1x</span>
582
+ <span class="cline-any cline-yes">1x</span>
583
+ <span class="cline-any cline-yes">1x</span>
584
+ <span class="cline-any cline-yes">1x</span>
585
+ <span class="cline-any cline-yes">2x</span>
586
+ <span class="cline-any cline-yes">2x</span>
587
+ <span class="cline-any cline-yes">2x</span>
588
+ <span class="cline-any cline-yes">2x</span>
589
+ <span class="cline-any cline-yes">2x</span>
590
+ <span class="cline-any cline-yes">2x</span>
591
+ <span class="cline-any cline-yes">2x</span>
592
+ <span class="cline-any cline-yes">2x</span>
593
+ <span class="cline-any cline-yes">2x</span>
545
594
  <span class="cline-any cline-no">&nbsp;</span>
595
+ <span class="cline-any cline-yes">2x</span>
596
+ <span class="cline-any cline-yes">2x</span>
597
+ <span class="cline-any cline-yes">2x</span>
598
+ <span class="cline-any cline-yes">2x</span>
599
+ <span class="cline-any cline-yes">2x</span>
600
+ <span class="cline-any cline-yes">2x</span>
546
601
  <span class="cline-any cline-no">&nbsp;</span>
602
+ <span class="cline-any cline-yes">2x</span>
547
603
  <span class="cline-any cline-no">&nbsp;</span>
548
604
  <span class="cline-any cline-no">&nbsp;</span>
549
605
  <span class="cline-any cline-no">&nbsp;</span>
@@ -639,7 +695,181 @@
639
695
  <span class="cline-any cline-no">&nbsp;</span>
640
696
  <span class="cline-any cline-no">&nbsp;</span>
641
697
  <span class="cline-any cline-no">&nbsp;</span>
698
+ <span class="cline-any cline-yes">1x</span>
699
+ <span class="cline-any cline-yes">1x</span>
700
+ <span class="cline-any cline-yes">1x</span>
701
+ <span class="cline-any cline-yes">1x</span>
702
+ <span class="cline-any cline-yes">1x</span>
703
+ <span class="cline-any cline-yes">1x</span>
704
+ <span class="cline-any cline-yes">1x</span>
705
+ <span class="cline-any cline-yes">1x</span>
706
+ <span class="cline-any cline-yes">1x</span>
707
+ <span class="cline-any cline-yes">1x</span>
708
+ <span class="cline-any cline-yes">1x</span>
709
+ <span class="cline-any cline-yes">1x</span>
710
+ <span class="cline-any cline-yes">1x</span>
711
+ <span class="cline-any cline-yes">21x</span>
712
+ <span class="cline-any cline-yes">21x</span>
713
+ <span class="cline-any cline-yes">21x</span>
714
+ <span class="cline-any cline-yes">21x</span>
715
+ <span class="cline-any cline-yes">21x</span>
716
+ <span class="cline-any cline-yes">21x</span>
717
+ <span class="cline-any cline-yes">21x</span>
718
+ <span class="cline-any cline-yes">21x</span>
719
+ <span class="cline-any cline-yes">21x</span>
720
+ <span class="cline-any cline-yes">21x</span>
721
+ <span class="cline-any cline-yes">3x</span>
722
+ <span class="cline-any cline-yes">3x</span>
723
+ <span class="cline-any cline-yes">3x</span>
724
+ <span class="cline-any cline-yes">3x</span>
725
+ <span class="cline-any cline-yes">3x</span>
726
+ <span class="cline-any cline-yes">3x</span>
727
+ <span class="cline-any cline-yes">1x</span>
728
+ <span class="cline-any cline-yes">2x</span>
642
729
  <span class="cline-any cline-no">&nbsp;</span>
730
+ <span class="cline-any cline-yes">2x</span>
731
+ <span class="cline-any cline-yes">3x</span>
732
+ <span class="cline-any cline-yes">3x</span>
733
+ <span class="cline-any cline-yes">3x</span>
734
+ <span class="cline-any cline-yes">3x</span>
735
+ <span class="cline-any cline-yes">3x</span>
736
+ <span class="cline-any cline-yes">3x</span>
737
+ <span class="cline-any cline-yes">3x</span>
738
+ <span class="cline-any cline-yes">21x</span>
739
+ <span class="cline-any cline-yes">21x</span>
740
+ <span class="cline-any cline-yes">21x</span>
741
+ <span class="cline-any cline-yes">21x</span>
742
+ <span class="cline-any cline-yes">21x</span>
743
+ <span class="cline-any cline-yes">21x</span>
744
+ <span class="cline-any cline-yes">21x</span>
745
+ <span class="cline-any cline-yes">21x</span>
746
+ <span class="cline-any cline-yes">21x</span>
747
+ <span class="cline-any cline-yes">4x</span>
748
+ <span class="cline-any cline-yes">4x</span>
749
+ <span class="cline-any cline-yes">4x</span>
750
+ <span class="cline-any cline-yes">4x</span>
751
+ <span class="cline-any cline-yes">4x</span>
752
+ <span class="cline-any cline-yes">4x</span>
753
+ <span class="cline-any cline-yes">4x</span>
754
+ <span class="cline-any cline-yes">4x</span>
755
+ <span class="cline-any cline-yes">4x</span>
756
+ <span class="cline-any cline-yes">4x</span>
757
+ <span class="cline-any cline-yes">4x</span>
758
+ <span class="cline-any cline-yes">4x</span>
759
+ <span class="cline-any cline-yes">4x</span>
760
+ <span class="cline-any cline-yes">4x</span>
761
+ <span class="cline-any cline-yes">4x</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-yes">4x</span>
768
+ <span class="cline-any cline-yes">4x</span>
769
+ <span class="cline-any cline-yes">4x</span>
770
+ <span class="cline-any cline-yes">4x</span>
771
+ <span class="cline-any cline-yes">4x</span>
772
+ <span class="cline-any cline-yes">4x</span>
773
+ <span class="cline-any cline-yes">4x</span>
774
+ <span class="cline-any cline-yes">4x</span>
775
+ <span class="cline-any cline-yes">4x</span>
776
+ <span class="cline-any cline-yes">4x</span>
777
+ <span class="cline-any cline-yes">4x</span>
778
+ <span class="cline-any cline-yes">4x</span>
779
+ <span class="cline-any cline-yes">4x</span>
780
+ <span class="cline-any cline-yes">4x</span>
781
+ <span class="cline-any cline-yes">4x</span>
782
+ <span class="cline-any cline-yes">4x</span>
783
+ <span class="cline-any cline-yes">4x</span>
784
+ <span class="cline-any cline-yes">4x</span>
785
+ <span class="cline-any cline-yes">4x</span>
786
+ <span class="cline-any cline-yes">4x</span>
787
+ <span class="cline-any cline-yes">3x</span>
788
+ <span class="cline-any cline-yes">3x</span>
789
+ <span class="cline-any cline-yes">3x</span>
790
+ <span class="cline-any cline-yes">4x</span>
791
+ <span class="cline-any cline-yes">4x</span>
792
+ <span class="cline-any cline-yes">4x</span>
793
+ <span class="cline-any cline-yes">4x</span>
794
+ <span class="cline-any cline-yes">4x</span>
795
+ <span class="cline-any cline-yes">4x</span>
796
+ <span class="cline-any cline-yes">4x</span>
797
+ <span class="cline-any cline-yes">4x</span>
798
+ <span class="cline-any cline-yes">4x</span>
799
+ <span class="cline-any cline-yes">1x</span>
800
+ <span class="cline-any cline-yes">1x</span>
801
+ <span class="cline-any cline-yes">1x</span>
802
+ <span class="cline-any cline-yes">1x</span>
803
+ <span class="cline-any cline-yes">1x</span>
804
+ <span class="cline-any cline-yes">1x</span>
805
+ <span class="cline-any cline-yes">1x</span>
806
+ <span class="cline-any cline-yes">1x</span>
807
+ <span class="cline-any cline-no">&nbsp;</span>
808
+ <span class="cline-any cline-no">&nbsp;</span>
809
+ <span class="cline-any cline-no">&nbsp;</span>
810
+ <span class="cline-any cline-no">&nbsp;</span>
811
+ <span class="cline-any cline-no">&nbsp;</span>
812
+ <span class="cline-any cline-yes">1x</span>
813
+ <span class="cline-any cline-yes">1x</span>
814
+ <span class="cline-any cline-yes">1x</span>
815
+ <span class="cline-any cline-yes">1x</span>
816
+ <span class="cline-any cline-yes">1x</span>
817
+ <span class="cline-any cline-yes">4x</span>
818
+ <span class="cline-any cline-yes">21x</span>
819
+ <span class="cline-any cline-yes">21x</span>
820
+ <span class="cline-any cline-yes">21x</span>
821
+ <span class="cline-any cline-yes">21x</span>
822
+ <span class="cline-any cline-yes">21x</span>
823
+ <span class="cline-any cline-yes">21x</span>
824
+ <span class="cline-any cline-yes">21x</span>
825
+ <span class="cline-any cline-yes">21x</span>
826
+ <span class="cline-any cline-yes">21x</span>
827
+ <span class="cline-any cline-yes">4x</span>
828
+ <span class="cline-any cline-yes">4x</span>
829
+ <span class="cline-any cline-yes">4x</span>
830
+ <span class="cline-any cline-yes">4x</span>
831
+ <span class="cline-any cline-yes">4x</span>
832
+ <span class="cline-any cline-yes">4x</span>
833
+ <span class="cline-any cline-yes">4x</span>
834
+ <span class="cline-any cline-yes">4x</span>
835
+ <span class="cline-any cline-yes">4x</span>
836
+ <span class="cline-any cline-yes">4x</span>
837
+ <span class="cline-any cline-yes">4x</span>
838
+ <span class="cline-any cline-yes">4x</span>
839
+ <span class="cline-any cline-yes">4x</span>
840
+ <span class="cline-any cline-yes">4x</span>
841
+ <span class="cline-any cline-yes">4x</span>
842
+ <span class="cline-any cline-yes">4x</span>
843
+ <span class="cline-any cline-yes">4x</span>
844
+ <span class="cline-any cline-yes">4x</span>
845
+ <span class="cline-any cline-yes">4x</span>
846
+ <span class="cline-any cline-yes">4x</span>
847
+ <span class="cline-any cline-yes">4x</span>
848
+ <span class="cline-any cline-yes">4x</span>
849
+ <span class="cline-any cline-yes">3x</span>
850
+ <span class="cline-any cline-yes">3x</span>
851
+ <span class="cline-any cline-yes">3x</span>
852
+ <span class="cline-any cline-yes">4x</span>
853
+ <span class="cline-any cline-yes">4x</span>
854
+ <span class="cline-any cline-yes">4x</span>
855
+ <span class="cline-any cline-yes">4x</span>
856
+ <span class="cline-any cline-yes">4x</span>
857
+ <span class="cline-any cline-yes">4x</span>
858
+ <span class="cline-any cline-yes">1x</span>
859
+ <span class="cline-any cline-yes">1x</span>
860
+ <span class="cline-any cline-yes">4x</span>
861
+ <span class="cline-any cline-yes">4x</span>
862
+ <span class="cline-any cline-yes">4x</span>
863
+ <span class="cline-any cline-yes">4x</span>
864
+ <span class="cline-any cline-yes">1x</span>
865
+ <span class="cline-any cline-yes">1x</span>
866
+ <span class="cline-any cline-yes">1x</span>
867
+ <span class="cline-any cline-yes">1x</span>
868
+ <span class="cline-any cline-yes">1x</span>
869
+ <span class="cline-any cline-yes">1x</span>
870
+ <span class="cline-any cline-yes">1x</span>
871
+ <span class="cline-any cline-yes">1x</span>
872
+ <span class="cline-any cline-yes">1x</span>
643
873
  <span class="cline-any cline-no">&nbsp;</span>
644
874
  <span class="cline-any cline-no">&nbsp;</span>
645
875
  <span class="cline-any cline-no">&nbsp;</span>
@@ -648,10 +878,34 @@
648
878
  <span class="cline-any cline-no">&nbsp;</span>
649
879
  <span class="cline-any cline-no">&nbsp;</span>
650
880
  <span class="cline-any cline-no">&nbsp;</span>
881
+ <span class="cline-any cline-yes">1x</span>
882
+ <span class="cline-any cline-yes">1x</span>
883
+ <span class="cline-any cline-yes">1x</span>
884
+ <span class="cline-any cline-yes">1x</span>
885
+ <span class="cline-any cline-yes">1x</span>
886
+ <span class="cline-any cline-yes">4x</span>
887
+ <span class="cline-any cline-yes">21x</span>
888
+ <span class="cline-any cline-yes">21x</span>
889
+ <span class="cline-any cline-yes">21x</span>
890
+ <span class="cline-any cline-yes">21x</span>
891
+ <span class="cline-any cline-yes">21x</span>
892
+ <span class="cline-any cline-yes">21x</span>
893
+ <span class="cline-any cline-yes">21x</span>
894
+ <span class="cline-any cline-yes">21x</span>
895
+ <span class="cline-any cline-yes">21x</span>
651
896
  <span class="cline-any cline-no">&nbsp;</span>
652
897
  <span class="cline-any cline-no">&nbsp;</span>
653
898
  <span class="cline-any cline-no">&nbsp;</span>
654
899
  <span class="cline-any cline-no">&nbsp;</span>
900
+ <span class="cline-any cline-yes">21x</span>
901
+ <span class="cline-any cline-yes">21x</span>
902
+ <span class="cline-any cline-yes">21x</span>
903
+ <span class="cline-any cline-yes">21x</span>
904
+ <span class="cline-any cline-yes">21x</span>
905
+ <span class="cline-any cline-yes">21x</span>
906
+ <span class="cline-any cline-yes">21x</span>
907
+ <span class="cline-any cline-yes">21x</span>
908
+ <span class="cline-any cline-yes">21x</span>
655
909
  <span class="cline-any cline-no">&nbsp;</span>
656
910
  <span class="cline-any cline-no">&nbsp;</span>
657
911
  <span class="cline-any cline-no">&nbsp;</span>
@@ -693,391 +947,137 @@
693
947
  <span class="cline-any cline-no">&nbsp;</span>
694
948
  <span class="cline-any cline-no">&nbsp;</span>
695
949
  <span class="cline-any cline-no">&nbsp;</span>
950
+ <span class="cline-any cline-yes">21x</span>
951
+ <span class="cline-any cline-yes">21x</span>
952
+ <span class="cline-any cline-yes">21x</span>
953
+ <span class="cline-any cline-yes">21x</span>
954
+ <span class="cline-any cline-yes">21x</span>
955
+ <span class="cline-any cline-yes">21x</span>
956
+ <span class="cline-any cline-yes">21x</span>
957
+ <span class="cline-any cline-yes">21x</span>
958
+ <span class="cline-any cline-yes">21x</span>
959
+ <span class="cline-any cline-yes">21x</span>
960
+ <span class="cline-any cline-yes">21x</span>
961
+ <span class="cline-any cline-yes">21x</span>
962
+ <span class="cline-any cline-yes">21x</span>
963
+ <span class="cline-any cline-yes">9x</span>
964
+ <span class="cline-any cline-yes">9x</span>
965
+ <span class="cline-any cline-yes">9x</span>
966
+ <span class="cline-any cline-yes">9x</span>
967
+ <span class="cline-any cline-yes">9x</span>
968
+ <span class="cline-any cline-yes">9x</span>
969
+ <span class="cline-any cline-yes">9x</span>
696
970
  <span class="cline-any cline-no">&nbsp;</span>
697
971
  <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-no">&nbsp;</span>
795
- <span class="cline-any cline-no">&nbsp;</span>
796
- <span class="cline-any cline-no">&nbsp;</span>
797
- <span class="cline-any cline-no">&nbsp;</span>
798
- <span class="cline-any cline-no">&nbsp;</span>
799
- <span class="cline-any cline-no">&nbsp;</span>
800
- <span class="cline-any cline-no">&nbsp;</span>
801
- <span class="cline-any cline-no">&nbsp;</span>
802
- <span class="cline-any cline-no">&nbsp;</span>
803
- <span class="cline-any cline-no">&nbsp;</span>
804
- <span class="cline-any cline-no">&nbsp;</span>
805
- <span class="cline-any cline-no">&nbsp;</span>
806
- <span class="cline-any cline-no">&nbsp;</span>
807
- <span class="cline-any cline-no">&nbsp;</span>
808
- <span class="cline-any cline-no">&nbsp;</span>
809
- <span class="cline-any cline-no">&nbsp;</span>
810
- <span class="cline-any cline-no">&nbsp;</span>
811
- <span class="cline-any cline-no">&nbsp;</span>
812
- <span class="cline-any cline-no">&nbsp;</span>
813
- <span class="cline-any cline-no">&nbsp;</span>
814
- <span class="cline-any cline-no">&nbsp;</span>
815
- <span class="cline-any cline-no">&nbsp;</span>
816
- <span class="cline-any cline-no">&nbsp;</span>
817
- <span class="cline-any cline-no">&nbsp;</span>
818
- <span class="cline-any cline-no">&nbsp;</span>
819
- <span class="cline-any cline-no">&nbsp;</span>
820
- <span class="cline-any cline-no">&nbsp;</span>
821
- <span class="cline-any cline-no">&nbsp;</span>
822
- <span class="cline-any cline-no">&nbsp;</span>
823
- <span class="cline-any cline-no">&nbsp;</span>
824
- <span class="cline-any cline-no">&nbsp;</span>
825
- <span class="cline-any cline-no">&nbsp;</span>
826
- <span class="cline-any cline-no">&nbsp;</span>
827
- <span class="cline-any cline-no">&nbsp;</span>
828
- <span class="cline-any cline-no">&nbsp;</span>
829
- <span class="cline-any cline-no">&nbsp;</span>
830
- <span class="cline-any cline-no">&nbsp;</span>
831
- <span class="cline-any cline-no">&nbsp;</span>
832
- <span class="cline-any cline-no">&nbsp;</span>
833
- <span class="cline-any cline-no">&nbsp;</span>
834
- <span class="cline-any cline-no">&nbsp;</span>
835
- <span class="cline-any cline-no">&nbsp;</span>
836
- <span class="cline-any cline-no">&nbsp;</span>
837
- <span class="cline-any cline-no">&nbsp;</span>
838
- <span class="cline-any cline-no">&nbsp;</span>
839
- <span class="cline-any cline-no">&nbsp;</span>
840
- <span class="cline-any cline-no">&nbsp;</span>
841
- <span class="cline-any cline-no">&nbsp;</span>
842
- <span class="cline-any cline-no">&nbsp;</span>
843
- <span class="cline-any cline-no">&nbsp;</span>
844
- <span class="cline-any cline-no">&nbsp;</span>
845
- <span class="cline-any cline-no">&nbsp;</span>
846
- <span class="cline-any cline-no">&nbsp;</span>
847
- <span class="cline-any cline-no">&nbsp;</span>
848
- <span class="cline-any cline-no">&nbsp;</span>
849
- <span class="cline-any cline-no">&nbsp;</span>
850
- <span class="cline-any cline-no">&nbsp;</span>
851
- <span class="cline-any cline-no">&nbsp;</span>
852
- <span class="cline-any cline-no">&nbsp;</span>
853
- <span class="cline-any cline-no">&nbsp;</span>
854
- <span class="cline-any cline-no">&nbsp;</span>
855
- <span class="cline-any cline-no">&nbsp;</span>
856
- <span class="cline-any cline-no">&nbsp;</span>
857
- <span class="cline-any cline-no">&nbsp;</span>
858
- <span class="cline-any cline-no">&nbsp;</span>
859
- <span class="cline-any cline-no">&nbsp;</span>
860
- <span class="cline-any cline-no">&nbsp;</span>
861
- <span class="cline-any cline-no">&nbsp;</span>
862
- <span class="cline-any cline-no">&nbsp;</span>
863
- <span class="cline-any cline-no">&nbsp;</span>
864
- <span class="cline-any cline-no">&nbsp;</span>
865
- <span class="cline-any cline-no">&nbsp;</span>
866
- <span class="cline-any cline-no">&nbsp;</span>
867
- <span class="cline-any cline-no">&nbsp;</span>
868
- <span class="cline-any cline-no">&nbsp;</span>
869
- <span class="cline-any cline-no">&nbsp;</span>
870
- <span class="cline-any cline-no">&nbsp;</span>
871
- <span class="cline-any cline-no">&nbsp;</span>
872
- <span class="cline-any cline-no">&nbsp;</span>
873
- <span class="cline-any cline-no">&nbsp;</span>
874
- <span class="cline-any cline-no">&nbsp;</span>
875
- <span class="cline-any cline-no">&nbsp;</span>
876
- <span class="cline-any cline-no">&nbsp;</span>
877
- <span class="cline-any cline-no">&nbsp;</span>
878
- <span class="cline-any cline-no">&nbsp;</span>
879
- <span class="cline-any cline-no">&nbsp;</span>
880
- <span class="cline-any cline-no">&nbsp;</span>
881
- <span class="cline-any cline-no">&nbsp;</span>
882
- <span class="cline-any cline-no">&nbsp;</span>
883
- <span class="cline-any cline-no">&nbsp;</span>
884
- <span class="cline-any cline-no">&nbsp;</span>
885
- <span class="cline-any cline-no">&nbsp;</span>
886
- <span class="cline-any cline-no">&nbsp;</span>
887
- <span class="cline-any cline-no">&nbsp;</span>
888
- <span class="cline-any cline-no">&nbsp;</span>
889
- <span class="cline-any cline-no">&nbsp;</span>
890
- <span class="cline-any cline-no">&nbsp;</span>
891
- <span class="cline-any cline-no">&nbsp;</span>
892
- <span class="cline-any cline-no">&nbsp;</span>
893
- <span class="cline-any cline-no">&nbsp;</span>
894
- <span class="cline-any cline-no">&nbsp;</span>
895
- <span class="cline-any cline-no">&nbsp;</span>
896
- <span class="cline-any cline-no">&nbsp;</span>
897
- <span class="cline-any cline-no">&nbsp;</span>
898
- <span class="cline-any cline-no">&nbsp;</span>
899
- <span class="cline-any cline-no">&nbsp;</span>
900
- <span class="cline-any cline-no">&nbsp;</span>
901
- <span class="cline-any cline-no">&nbsp;</span>
902
- <span class="cline-any cline-no">&nbsp;</span>
903
- <span class="cline-any cline-no">&nbsp;</span>
904
- <span class="cline-any cline-no">&nbsp;</span>
905
- <span class="cline-any cline-no">&nbsp;</span>
906
- <span class="cline-any cline-no">&nbsp;</span>
907
- <span class="cline-any cline-no">&nbsp;</span>
908
- <span class="cline-any cline-no">&nbsp;</span>
909
- <span class="cline-any cline-no">&nbsp;</span>
910
- <span class="cline-any cline-no">&nbsp;</span>
911
- <span class="cline-any cline-no">&nbsp;</span>
912
- <span class="cline-any cline-no">&nbsp;</span>
913
- <span class="cline-any cline-no">&nbsp;</span>
914
- <span class="cline-any cline-no">&nbsp;</span>
915
- <span class="cline-any cline-no">&nbsp;</span>
916
- <span class="cline-any cline-no">&nbsp;</span>
917
- <span class="cline-any cline-no">&nbsp;</span>
918
- <span class="cline-any cline-no">&nbsp;</span>
919
- <span class="cline-any cline-no">&nbsp;</span>
920
- <span class="cline-any cline-no">&nbsp;</span>
921
- <span class="cline-any cline-no">&nbsp;</span>
922
- <span class="cline-any cline-no">&nbsp;</span>
923
- <span class="cline-any cline-no">&nbsp;</span>
924
- <span class="cline-any cline-no">&nbsp;</span>
925
- <span class="cline-any cline-no">&nbsp;</span>
926
- <span class="cline-any cline-no">&nbsp;</span>
927
- <span class="cline-any cline-no">&nbsp;</span>
928
- <span class="cline-any cline-no">&nbsp;</span>
929
- <span class="cline-any cline-no">&nbsp;</span>
930
- <span class="cline-any cline-no">&nbsp;</span>
931
- <span class="cline-any cline-no">&nbsp;</span>
932
- <span class="cline-any cline-no">&nbsp;</span>
933
- <span class="cline-any cline-no">&nbsp;</span>
934
- <span class="cline-any cline-no">&nbsp;</span>
935
- <span class="cline-any cline-no">&nbsp;</span>
936
- <span class="cline-any cline-no">&nbsp;</span>
937
- <span class="cline-any cline-no">&nbsp;</span>
938
- <span class="cline-any cline-no">&nbsp;</span>
939
- <span class="cline-any cline-no">&nbsp;</span>
940
- <span class="cline-any cline-no">&nbsp;</span>
941
- <span class="cline-any cline-no">&nbsp;</span>
942
- <span class="cline-any cline-no">&nbsp;</span>
943
- <span class="cline-any cline-no">&nbsp;</span>
944
- <span class="cline-any cline-no">&nbsp;</span>
945
- <span class="cline-any cline-no">&nbsp;</span>
946
- <span class="cline-any cline-no">&nbsp;</span>
947
- <span class="cline-any cline-no">&nbsp;</span>
948
- <span class="cline-any cline-no">&nbsp;</span>
949
- <span class="cline-any cline-no">&nbsp;</span>
950
- <span class="cline-any cline-no">&nbsp;</span>
951
- <span class="cline-any cline-no">&nbsp;</span>
952
- <span class="cline-any cline-no">&nbsp;</span>
953
- <span class="cline-any cline-no">&nbsp;</span>
954
- <span class="cline-any cline-no">&nbsp;</span>
955
- <span class="cline-any cline-no">&nbsp;</span>
956
- <span class="cline-any cline-no">&nbsp;</span>
957
- <span class="cline-any cline-no">&nbsp;</span>
958
- <span class="cline-any cline-no">&nbsp;</span>
959
- <span class="cline-any cline-no">&nbsp;</span>
960
- <span class="cline-any cline-no">&nbsp;</span>
961
- <span class="cline-any cline-no">&nbsp;</span>
962
- <span class="cline-any cline-no">&nbsp;</span>
963
- <span class="cline-any cline-no">&nbsp;</span>
964
- <span class="cline-any cline-no">&nbsp;</span>
965
- <span class="cline-any cline-no">&nbsp;</span>
966
- <span class="cline-any cline-no">&nbsp;</span>
967
- <span class="cline-any cline-no">&nbsp;</span>
968
- <span class="cline-any cline-no">&nbsp;</span>
969
- <span class="cline-any cline-no">&nbsp;</span>
970
- <span class="cline-any cline-no">&nbsp;</span>
971
- <span class="cline-any cline-no">&nbsp;</span>
972
- <span class="cline-any cline-no">&nbsp;</span>
973
- <span class="cline-any cline-no">&nbsp;</span>
974
- <span class="cline-any cline-no">&nbsp;</span>
975
- <span class="cline-any cline-no">&nbsp;</span>
976
- <span class="cline-any cline-no">&nbsp;</span>
977
- <span class="cline-any cline-no">&nbsp;</span>
978
- <span class="cline-any cline-no">&nbsp;</span>
979
- <span class="cline-any cline-no">&nbsp;</span>
980
- <span class="cline-any cline-no">&nbsp;</span>
981
- <span class="cline-any cline-no">&nbsp;</span>
982
- <span class="cline-any cline-no">&nbsp;</span>
983
- <span class="cline-any cline-no">&nbsp;</span>
984
- <span class="cline-any cline-no">&nbsp;</span>
985
- <span class="cline-any cline-no">&nbsp;</span>
986
- <span class="cline-any cline-no">&nbsp;</span>
987
- <span class="cline-any cline-no">&nbsp;</span>
988
- <span class="cline-any cline-no">&nbsp;</span>
989
- <span class="cline-any cline-no">&nbsp;</span>
990
- <span class="cline-any cline-no">&nbsp;</span>
991
- <span class="cline-any cline-no">&nbsp;</span>
992
- <span class="cline-any cline-no">&nbsp;</span>
993
- <span class="cline-any cline-no">&nbsp;</span>
994
- <span class="cline-any cline-no">&nbsp;</span>
995
- <span class="cline-any cline-no">&nbsp;</span>
996
- <span class="cline-any cline-no">&nbsp;</span>
997
- <span class="cline-any cline-no">&nbsp;</span>
998
- <span class="cline-any cline-no">&nbsp;</span>
999
- <span class="cline-any cline-no">&nbsp;</span>
1000
- <span class="cline-any cline-no">&nbsp;</span>
1001
- <span class="cline-any cline-no">&nbsp;</span>
1002
- <span class="cline-any cline-no">&nbsp;</span>
1003
- <span class="cline-any cline-no">&nbsp;</span>
1004
- <span class="cline-any cline-no">&nbsp;</span>
1005
- <span class="cline-any cline-no">&nbsp;</span>
1006
- <span class="cline-any cline-no">&nbsp;</span>
1007
- <span class="cline-any cline-no">&nbsp;</span>
1008
- <span class="cline-any cline-no">&nbsp;</span>
1009
- <span class="cline-any cline-no">&nbsp;</span>
1010
- <span class="cline-any cline-no">&nbsp;</span>
1011
- <span class="cline-any cline-no">&nbsp;</span>
1012
- <span class="cline-any cline-no">&nbsp;</span>
1013
- <span class="cline-any cline-no">&nbsp;</span>
1014
- <span class="cline-any cline-no">&nbsp;</span>
1015
- <span class="cline-any cline-no">&nbsp;</span>
1016
- <span class="cline-any cline-no">&nbsp;</span>
1017
- <span class="cline-any cline-no">&nbsp;</span>
1018
- <span class="cline-any cline-no">&nbsp;</span>
1019
- <span class="cline-any cline-no">&nbsp;</span>
1020
- <span class="cline-any cline-no">&nbsp;</span>
1021
- <span class="cline-any cline-no">&nbsp;</span>
1022
- <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>
1023
- <span class="cstat-no" title="statement not covered" > * HSuite Native Connect</span>
1024
- <span class="cstat-no" title="statement not covered" > * Copyright 2024-2025 HSuite (https://hsuite.finance)</span>
1025
- <span class="cstat-no" title="statement not covered" > *</span>
1026
- <span class="cstat-no" title="statement not covered" > * SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0</span>
1027
- <span class="cstat-no" title="statement not covered" > *</span>
1028
- <span class="cstat-no" title="statement not covered" > * This file is part of HSuite Native Connect. For commercial licensing,</span>
1029
- <span class="cstat-no" title="statement not covered" > * visit https://hsuite.finance/licensing</span>
1030
- <span class="cstat-no" title="statement not covered" > */</span>
1031
- <span class="cstat-no" title="statement not covered" ></span>
1032
- <span class="cstat-no" title="statement not covered" >/**</span>
1033
- <span class="cstat-no" title="statement not covered" > * @file xrpl-signer.ts</span>
1034
- <span class="cstat-no" title="statement not covered" > * @description XRPL-specific WalletConnect signer implementation</span>
1035
- <span class="cstat-no" title="statement not covered" > *</span>
1036
- <span class="cstat-no" title="statement not covered" > * Implements the IWalletConnectSigner interface for XRPL ledger.</span>
1037
- <span class="cstat-no" title="statement not covered" > * Handles XRPL-specific JSON-RPC methods and transaction formats.</span>
1038
- <span class="cstat-no" title="statement not covered" > */</span>
1039
- <span class="cstat-no" title="statement not covered" ></span>
1040
- <span class="cstat-no" title="statement not covered" >import { XrplTransactionEncoder } from '@hsuite/native-connect-sdk';</span>
1041
- <span class="cstat-no" title="statement not covered" >import { getLogger } from '@hsuite/native-connect-sdk';</span>
1042
- <span class="cstat-no" title="statement not covered" ></span>
1043
- <span class="cstat-no" title="statement not covered" >import type { SignResult, SubmitResult } from '../../base-wallet-provider';</span>
1044
- <span class="cstat-no" title="statement not covered" >import type { IWalletConnectSigner, SignerOperationParams } from '../core/base-signer.interface';</span>
1045
- <span class="cstat-no" title="statement not covered" ></span>
1046
- <span class="cstat-no" title="statement not covered" >const logger = getLogger().scoped?.('XrplSigner') ?? getLogger();</span>
1047
- <span class="cstat-no" title="statement not covered" ></span>
1048
- <span class="cstat-no" title="statement not covered" >/**</span>
1049
- <span class="cstat-no" title="statement not covered" > * Extract a meaningful error message from various error shapes.</span>
1050
- <span class="cstat-no" title="statement not covered" > * WalletConnect SDK throws errors that are not standard Error instances.</span>
1051
- <span class="cstat-no" title="statement not covered" > *</span>
1052
- <span class="cstat-no" title="statement not covered" > * Handles:</span>
1053
- <span class="cstat-no" title="statement not covered" > * - Standard Error objects</span>
1054
- <span class="cstat-no" title="statement not covered" > * - WalletConnect SDK errors: { code, message }</span>
1055
- <span class="cstat-no" title="statement not covered" > * - Nested errors: { error: { message } }</span>
1056
- <span class="cstat-no" title="statement not covered" > * - PIN_REQUIRED errors from wallet</span>
1057
- <span class="cstat-no" title="statement not covered" > * - DOMException objects</span>
1058
- <span class="cstat-no" title="statement not covered" > * - Objects that stringify to {} (enumerable property check)</span>
1059
- <span class="cstat-no" title="statement not covered" > *</span>
1060
- <span class="cstat-no" title="statement not covered" > * @param error - Error from WalletConnect SDK (can be Error, object, or string)</span>
1061
- <span class="cstat-no" title="statement not covered" > * @returns Human-readable error message</span>
1062
- <span class="cstat-no" title="statement not covered" > */</span>
1063
- <span class="cstat-no" title="statement not covered" >function extractErrorMessage(error: unknown): string {</span>
1064
- <span class="cstat-no" title="statement not covered" > // Log raw error for debugging</span>
1065
- <span class="cstat-no" title="statement not covered" > logger.debug('Raw error object', {</span>
1066
- <span class="cstat-no" title="statement not covered" > errorType: typeof error,</span>
1067
- <span class="cstat-no" title="statement not covered" > isError: error instanceof Error,</span>
1068
- <span class="cstat-no" title="statement not covered" > errorKeys: typeof error === 'object' &amp;&amp; error !== null ? Object.keys(error) : [],</span>
1069
- <span class="cstat-no" title="statement not covered" > errorProto:</span>
1070
- <span class="cstat-no" title="statement not covered" > typeof error === 'object' &amp;&amp; error !== null</span>
1071
- <span class="cstat-no" title="statement not covered" > ? Object.getPrototypeOf(error)?.constructor?.name</span>
972
+ <span class="cline-any cline-yes">9x</span>
973
+ <span class="cline-any cline-yes">9x</span>
974
+ <span class="cline-any cline-yes">9x</span>
975
+ <span class="cline-any cline-yes">9x</span>
976
+ <span class="cline-any cline-yes">26x</span>
977
+ <span class="cline-any cline-yes">26x</span>
978
+ <span class="cline-any cline-yes">26x</span>
979
+ <span class="cline-any cline-yes">26x</span>
980
+ <span class="cline-any cline-yes">1x</span>
981
+ <span class="cline-any cline-yes">1x</span>
982
+ <span class="cline-any cline-yes">1x</span>
983
+ <span class="cline-any cline-yes">25x</span>
984
+ <span class="cline-any cline-yes">25x</span>
985
+ <span class="cline-any cline-yes">25x</span>
986
+ <span class="cline-any cline-yes">25x</span>
987
+ <span class="cline-any cline-yes">25x</span>
988
+ <span class="cline-any cline-yes">26x</span>
989
+ <span class="cline-any cline-yes">9x</span>
990
+ <span class="cline-any cline-yes">9x</span>
991
+ <span class="cline-any cline-yes">9x</span>
992
+ <span class="cline-any cline-yes">9x</span>
993
+ <span class="cline-any cline-yes">5x</span>
994
+ <span class="cline-any cline-yes">5x</span>
995
+ <span class="cline-any cline-yes">5x</span>
996
+ <span class="cline-any cline-yes">5x</span>
997
+ <span class="cline-any cline-yes">17x</span>
998
+ <span class="cline-any cline-yes">5x</span>
999
+ <span class="cline-any cline-yes">5x</span>
1000
+ <span class="cline-any cline-yes">5x</span>
1001
+ <span class="cline-any cline-yes">5x</span>
1002
+ <span class="cline-any cline-yes">5x</span>
1003
+ <span class="cline-any cline-yes">5x</span>
1004
+ <span class="cline-any cline-yes">5x</span>
1005
+ <span class="cline-any cline-yes">5x</span>
1006
+ <span class="cline-any cline-yes">5x</span>
1007
+ <span class="cline-any cline-yes">5x</span>
1008
+ <span class="cline-any cline-yes">5x</span>
1009
+ <span class="cline-any cline-yes">1x</span>
1010
+ <span class="cline-any cline-yes">1x</span>
1011
+ <span class="cline-any cline-yes">1x</span>
1012
+ <span class="cline-any cline-yes">1x</span>
1013
+ <span class="cline-any cline-yes">1x</span>
1014
+ <span class="cline-any cline-yes">5x</span>
1015
+ <span class="cline-any cline-yes">5x</span>
1016
+ <span class="cline-any cline-yes">5x</span>
1017
+ <span class="cline-any cline-yes">5x</span>
1018
+ <span class="cline-any cline-yes">4x</span>
1019
+ <span class="cline-any cline-yes">4x</span>
1020
+ <span class="cline-any cline-yes">9x</span>
1021
+ <span class="cline-any cline-yes">21x</span>
1022
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/**
1023
+ * HSuite Native Connect
1024
+ * Copyright 2024-2025 HSuite (https://hsuite.finance)
1025
+ *
1026
+ * SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0
1027
+ *
1028
+ * This file is part of HSuite Native Connect. For commercial licensing,
1029
+ * visit https://hsuite.finance/licensing
1030
+ */
1031
+ &nbsp;
1032
+ /**
1033
+ * @file xrpl-signer.ts
1034
+ * @description XRPL-specific WalletConnect signer implementation
1035
+ *
1036
+ * Implements the IWalletConnectSigner interface for XRPL ledger.
1037
+ * Handles XRPL-specific JSON-RPC methods and transaction formats.
1038
+ */
1039
+ &nbsp;
1040
+ import { XrplTransactionEncoder } from '@hsuite/native-connect-sdk';
1041
+ import { getLogger } from '@hsuite/native-connect-sdk';
1042
+ &nbsp;
1043
+ import type { SignResult, SubmitResult } from '../../base-wallet-provider';
1044
+ import type { IWalletConnectSigner, SignerOperationParams } from '../core/base-signer.interface';
1045
+ &nbsp;
1046
+ const logger = getLogger().scoped?.('XrplSigner'<span class="branch-0 cbranch-no" title="branch not covered" >) ?? getLogger();</span>
1047
+ &nbsp;
1048
+ /**
1049
+ * Extract a meaningful error message from various error shapes.
1050
+ * WalletConnect SDK throws errors that are not standard Error instances.
1051
+ *
1052
+ * Handles:
1053
+ * - Standard Error objects
1054
+ * - WalletConnect SDK errors: { code, message }
1055
+ * - Nested errors: { error: { message } }
1056
+ * - PIN_REQUIRED errors from wallet
1057
+ * - DOMException objects
1058
+ * - Objects that stringify to {} (enumerable property check)
1059
+ *
1060
+ * @param error - Error from WalletConnect SDK (can be Error, object, or string)
1061
+ * @returns Human-readable error message
1062
+ */
1063
+ function extractErrorMessage(error: unknown): string {
1064
+ // Log raw error for debugging
1065
+ logger.debug('Raw error object', {
1066
+ errorType: typeof error,
1067
+ isError: error instanceof Error,
1068
+ errorKeys: typeof error === 'object' &amp;&amp; error !== null ? Object.keys(error<span class="branch-0 cbranch-no" title="branch not covered" >) : [],</span>
1069
+ errorProto:
1070
+ typeof error === 'object' &amp;&amp; error !== null
1071
+ ? Object.getPrototypeOf(error)?.constructor?.<span class="branch-0 cbranch-no" title="branch not covered" >name</span>
1072
1072
  <span class="cstat-no" title="statement not covered" > : 'N/A',</span>
1073
- <span class="cstat-no" title="statement not covered" > rawError: error,</span>
1074
- <span class="cstat-no" title="statement not covered" > });</span>
1073
+ rawError: error,
1074
+ });
1075
+ &nbsp;
1076
+ if (error instanceof Error) {
1077
+ return error.message;
1078
+ <span class="branch-0 cbranch-no" title="branch not covered" > }</span>
1075
1079
  <span class="cstat-no" title="statement not covered" ></span>
1076
- <span class="cstat-no" title="statement not covered" > if (error instanceof Error) {</span>
1077
- <span class="cstat-no" title="statement not covered" > return error.message;</span>
1078
- <span class="cstat-no" title="statement not covered" > }</span>
1079
- <span class="cstat-no" title="statement not covered" ></span>
1080
- <span class="cstat-no" title="statement not covered" > if (typeof error === 'object' &amp;&amp; error !== null) {</span>
1080
+ if (typeof error === 'object' &amp;&amp; error !== null) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
1081
1081
  <span class="cstat-no" title="statement not covered" > const errorObj = error as Record&lt;string, unknown&gt;;</span>
1082
1082
  <span class="cstat-no" title="statement not covered" ></span>
1083
1083
  <span class="cstat-no" title="statement not covered" > // Check for code property first (common in SDK errors like PIN_REQUIRED)</span>
@@ -1173,181 +1173,181 @@
1173
1173
  <span class="cstat-no" title="statement not covered" ></span>
1174
1174
  <span class="cstat-no" title="statement not covered" > return 'Unknown error';</span>
1175
1175
  <span class="cstat-no" title="statement not covered" >}</span>
1176
- <span class="cstat-no" title="statement not covered" ></span>
1177
- <span class="cstat-no" title="statement not covered" >/**</span>
1178
- <span class="cstat-no" title="statement not covered" > * Signer implementation for XRPL ledger.</span>
1179
- <span class="cstat-no" title="statement not covered" > *</span>
1180
- <span class="cstat-no" title="statement not covered" > * Supports XRPL-specific WalletConnect methods:</span>
1181
- <span class="cstat-no" title="statement not covered" > * - xrpl_signTransaction (sign-only, returns signed blob)</span>
1182
- <span class="cstat-no" title="statement not covered" > * - xrpl_signAndSubmit (sign + submit, returns transaction hash)</span>
1183
- <span class="cstat-no" title="statement not covered" > * - xrpl_submit (submit pre-signed transaction)</span>
1184
- <span class="cstat-no" title="statement not covered" > * - xrpl_signMessage (arbitrary message signing)</span>
1185
- <span class="cstat-no" title="statement not covered" > *</span>
1186
- <span class="cstat-no" title="statement not covered" > * Uses XRPL address format: xrpl:&lt;network&gt;:rAddress...</span>
1187
- <span class="cstat-no" title="statement not covered" > */</span>
1188
- <span class="cstat-no" title="statement not covered" >export class XrplSigner implements IWalletConnectSigner {</span>
1189
- <span class="cstat-no" title="statement not covered" > readonly ledgerId = 'xrpl';</span>
1190
- <span class="cstat-no" title="statement not covered" ></span>
1191
- <span class="cstat-no" title="statement not covered" > /**</span>
1192
- <span class="cstat-no" title="statement not covered" > * Build XRPL namespace configuration for WalletConnect.</span>
1193
- <span class="cstat-no" title="statement not covered" > * Defines the JSON-RPC methods and chains this signer supports.</span>
1194
- <span class="cstat-no" title="statement not covered" > *</span>
1195
- <span class="cstat-no" title="statement not covered" > * @param networkId - Network identifier (e.g., 'xrpl:testnet', 'xrpl:mainnet')</span>
1196
- <span class="cstat-no" title="statement not covered" > * @returns Namespace configuration object</span>
1197
- <span class="cstat-no" title="statement not covered" > */</span>
1198
- <span class="cstat-no" title="statement not covered" > buildNamespace(networkId: string): {</span>
1199
- <span class="cstat-no" title="statement not covered" > methods: string[];</span>
1200
- <span class="cstat-no" title="statement not covered" > chains: string[];</span>
1201
- <span class="cstat-no" title="statement not covered" > events: string[];</span>
1202
- <span class="cstat-no" title="statement not covered" > } {</span>
1203
- <span class="cstat-no" title="statement not covered" > // Extract network name (testnet, mainnet, devnet)</span>
1204
- <span class="cstat-no" title="statement not covered" > const network = networkId.includes('mainnet')</span>
1205
- <span class="cstat-no" title="statement not covered" > ? 'mainnet'</span>
1206
- <span class="cstat-no" title="statement not covered" > : networkId.includes('devnet')</span>
1176
+ &nbsp;
1177
+ /**
1178
+ * Signer implementation for XRPL ledger.
1179
+ *
1180
+ * Supports XRPL-specific WalletConnect methods:
1181
+ * - xrpl_signTransaction (sign-only, returns signed blob)
1182
+ * - xrpl_signAndSubmit (sign + submit, returns transaction hash)
1183
+ * - xrpl_submit (submit pre-signed transaction)
1184
+ * - xrpl_signMessage (arbitrary message signing)
1185
+ *
1186
+ * Uses XRPL address format: xrpl:&lt;network&gt;:rAddress...
1187
+ */
1188
+ export class XrplSigner implements IWalletConnectSigner {
1189
+ readonly ledgerId = 'xrpl';
1190
+ &nbsp;
1191
+ /**
1192
+ * Build XRPL namespace configuration for WalletConnect.
1193
+ * Defines the JSON-RPC methods and chains this signer supports.
1194
+ *
1195
+ * @param networkId - Network identifier (e.g., 'xrpl:testnet', 'xrpl:mainnet')
1196
+ * @returns Namespace configuration object
1197
+ */
1198
+ buildNamespace(networkId: string): {
1199
+ methods: string[];
1200
+ chains: string[];
1201
+ events: string[];
1202
+ } {
1203
+ // Extract network name (testnet, mainnet, devnet)
1204
+ const network = networkId.includes('mainnet')
1205
+ ? 'mainnet'
1206
+ : networkId.includes('devnet'<span class="branch-0 cbranch-no" title="branch not covered" >)</span>
1207
1207
  <span class="cstat-no" title="statement not covered" > ? 'devnet'</span>
1208
- <span class="cstat-no" title="statement not covered" > : 'testnet';</span>
1209
- <span class="cstat-no" title="statement not covered" ></span>
1210
- <span class="cstat-no" title="statement not covered" > return {</span>
1211
- <span class="cstat-no" title="statement not covered" > methods: ['xrpl_signTransaction', 'xrpl_submit', 'xrpl_signAndSubmit', 'xrpl_signMessage'],</span>
1212
- <span class="cstat-no" title="statement not covered" > chains: [`xrpl:${network}`],</span>
1213
- <span class="cstat-no" title="statement not covered" > events: ['chainChanged', 'accountsChanged'],</span>
1214
- <span class="cstat-no" title="statement not covered" > };</span>
1215
- <span class="cstat-no" title="statement not covered" > }</span>
1216
- <span class="cstat-no" title="statement not covered" ></span>
1217
- <span class="cstat-no" title="statement not covered" > /**</span>
1218
- <span class="cstat-no" title="statement not covered" > * Sign an XRPL transaction without submitting to network.</span>
1219
- <span class="cstat-no" title="statement not covered" > * Uses xrpl_signTransaction method with JSON transaction object.</span>
1220
- <span class="cstat-no" title="statement not covered" > *</span>
1221
- <span class="cstat-no" title="statement not covered" > * @param params - Signing parameters</span>
1222
- <span class="cstat-no" title="statement not covered" > * @returns Promise resolving to signed transaction blob (hex-encoded)</span>
1223
- <span class="cstat-no" title="statement not covered" > */</span>
1224
- <span class="cstat-no" title="statement not covered" > async signTransaction(params: SignerOperationParams): Promise&lt;SignResult&gt; {</span>
1225
- <span class="cstat-no" title="statement not covered" > // Decode base64 payload to JSON transaction</span>
1226
- <span class="cstat-no" title="statement not covered" > logger.debug('Decoding XRPL transaction payload', {</span>
1227
- <span class="cstat-no" title="statement not covered" > payloadLength: params.payload?.length,</span>
1228
- <span class="cstat-no" title="statement not covered" > networkId: params.networkId,</span>
1229
- <span class="cstat-no" title="statement not covered" > topic: params.topic?.substring(0, 16) + '...',</span>
1230
- <span class="cstat-no" title="statement not covered" > });</span>
1231
- <span class="cstat-no" title="statement not covered" ></span>
1232
- <span class="cstat-no" title="statement not covered" > let transaction: any;</span>
1233
- <span class="cstat-no" title="statement not covered" > try {</span>
1234
- <span class="cstat-no" title="statement not covered" > transaction = XrplTransactionEncoder.decodeTransaction(params.payload);</span>
1235
- <span class="cstat-no" title="statement not covered" > logger.debug('Transaction decoded successfully', {</span>
1236
- <span class="cstat-no" title="statement not covered" > transactionType: transaction?.TransactionType,</span>
1237
- <span class="cstat-no" title="statement not covered" > account: transaction?.Account,</span>
1238
- <span class="cstat-no" title="statement not covered" > });</span>
1239
- <span class="cstat-no" title="statement not covered" > } catch (decodeError) {</span>
1208
+ : 'testnet';
1209
+ &nbsp;
1210
+ return {
1211
+ methods: ['xrpl_signTransaction', 'xrpl_submit', 'xrpl_signAndSubmit', 'xrpl_signMessage'],
1212
+ chains: [`xrpl:${network}`],
1213
+ events: ['chainChanged', 'accountsChanged'],
1214
+ };
1215
+ }
1216
+ &nbsp;
1217
+ /**
1218
+ * Sign an XRPL transaction without submitting to network.
1219
+ * Uses xrpl_signTransaction method with JSON transaction object.
1220
+ *
1221
+ * @param params - Signing parameters
1222
+ * @returns Promise resolving to signed transaction blob (hex-encoded)
1223
+ */
1224
+ async signTransaction(params: SignerOperationParams): Promise&lt;SignResult&gt; {
1225
+ // Decode base64 payload to JSON transaction
1226
+ logger.debug('Decoding XRPL transaction payload', {
1227
+ payloadLength: params.payload?.length,
1228
+ networkId: params.networkId,
1229
+ topic: params.topic?.substring(0, 16) + '...',
1230
+ });
1231
+ &nbsp;
1232
+ let transaction: any;
1233
+ try {
1234
+ transaction = XrplTransactionEncoder.decodeTransaction(params.payload);
1235
+ logger.debug('Transaction decoded successfully', {
1236
+ transactionType: transaction?.TransactionType,
1237
+ account: transaction?.Account,
1238
+ });
1239
+ <span class="branch-0 cbranch-no" title="branch not covered" > } catch (decodeError) {</span>
1240
1240
  <span class="cstat-no" title="statement not covered" > logger.error('Failed to decode transaction payload', {</span>
1241
1241
  <span class="cstat-no" title="statement not covered" > error: decodeError instanceof Error ? decodeError.message : String(decodeError),</span>
1242
1242
  <span class="cstat-no" title="statement not covered" > });</span>
1243
1243
  <span class="cstat-no" title="statement not covered" > throw decodeError;</span>
1244
1244
  <span class="cstat-no" title="statement not covered" > }</span>
1245
- <span class="cstat-no" title="statement not covered" ></span>
1246
- <span class="cstat-no" title="statement not covered" > try {</span>
1247
- <span class="cstat-no" title="statement not covered" > logger.debug('Sending xrpl_signTransaction request to wallet', {</span>
1248
- <span class="cstat-no" title="statement not covered" > method: 'xrpl_signTransaction',</span>
1249
- <span class="cstat-no" title="statement not covered" > chainId: params.networkId,</span>
1250
- <span class="cstat-no" title="statement not covered" > topic: params.topic?.substring(0, 16) + '...',</span>
1251
- <span class="cstat-no" title="statement not covered" > });</span>
1252
- <span class="cstat-no" title="statement not covered" ></span>
1253
- <span class="cstat-no" title="statement not covered" > // Use 5-minute expiry to give users time to review and approve</span>
1254
- <span class="cstat-no" title="statement not covered" > const result = await params.client.request({</span>
1255
- <span class="cstat-no" title="statement not covered" > topic: params.topic,</span>
1256
- <span class="cstat-no" title="statement not covered" > chainId: params.networkId,</span>
1257
- <span class="cstat-no" title="statement not covered" > request: {</span>
1258
- <span class="cstat-no" title="statement not covered" > method: 'xrpl_signTransaction',</span>
1259
- <span class="cstat-no" title="statement not covered" > params: {</span>
1260
- <span class="cstat-no" title="statement not covered" > transaction, // Native JSON object</span>
1261
- <span class="cstat-no" title="statement not covered" > },</span>
1262
- <span class="cstat-no" title="statement not covered" > },</span>
1263
- <span class="cstat-no" title="statement not covered" > expiry: 300, // 5 minutes in seconds</span>
1264
- <span class="cstat-no" title="statement not covered" > });</span>
1265
- <span class="cstat-no" title="statement not covered" ></span>
1266
- <span class="cstat-no" title="statement not covered" > logger.debug('Received response from wallet', {</span>
1267
- <span class="cstat-no" title="statement not covered" > hasResult: !!result,</span>
1268
- <span class="cstat-no" title="statement not covered" > resultKeys: result ? Object.keys(result as object) : [],</span>
1269
- <span class="cstat-no" title="statement not covered" > });</span>
1270
- <span class="cstat-no" title="statement not covered" ></span>
1271
- <span class="cstat-no" title="statement not covered" > return {</span>
1272
- <span class="cstat-no" title="statement not covered" > signedPayload:</span>
1273
- <span class="cstat-no" title="statement not covered" > (result as { tx_blob?: string; tx_json?: any }).tx_blob || JSON.stringify(result),</span>
1274
- <span class="cstat-no" title="statement not covered" > metadata: { result },</span>
1275
- <span class="cstat-no" title="statement not covered" > };</span>
1276
- <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
1277
- <span class="cstat-no" title="statement not covered" > // Check if this is an empty error object (WalletConnect SDK bug)</span>
1278
- <span class="cstat-no" title="statement not covered" > const isEmptyError =</span>
1279
- <span class="cstat-no" title="statement not covered" > typeof error === 'object' &amp;&amp;</span>
1280
- <span class="cstat-no" title="statement not covered" > error !== null &amp;&amp;</span>
1281
- <span class="cstat-no" title="statement not covered" > Object.keys(error).length === 0 &amp;&amp;</span>
1282
- <span class="cstat-no" title="statement not covered" > !(error instanceof Error);</span>
1283
- <span class="cstat-no" title="statement not covered" ></span>
1284
- <span class="cstat-no" title="statement not covered" > if (isEmptyError) {</span>
1245
+ &nbsp;
1246
+ try {
1247
+ logger.debug('Sending xrpl_signTransaction request to wallet', {
1248
+ method: 'xrpl_signTransaction',
1249
+ chainId: params.networkId,
1250
+ topic: params.topic?.substring(0, 16) + '...',
1251
+ });
1252
+ &nbsp;
1253
+ // Use 5-minute expiry to give users time to review and approve
1254
+ const result = await params.client.request({
1255
+ topic: params.topic,
1256
+ chainId: params.networkId,
1257
+ request: {
1258
+ method: 'xrpl_signTransaction',
1259
+ params: {
1260
+ transaction, // Native JSON object
1261
+ },
1262
+ },
1263
+ expiry: 300, // 5 minutes in seconds
1264
+ });
1265
+ &nbsp;
1266
+ logger.debug('Received response from wallet', {
1267
+ hasResult: !!result,
1268
+ resultKeys: result ? Object.keys(result as object<span class="branch-0 cbranch-no" title="branch not covered" >) : [],</span>
1269
+ });
1270
+ &nbsp;
1271
+ return {
1272
+ signedPayload:
1273
+ (result as { tx_blob?: string; tx_json?: any }).<span class="branch-0 cbranch-no" title="branch not covered" >tx_blob || JSON.stringify(result),</span>
1274
+ metadata: { result },
1275
+ };
1276
+ } catch (error) {
1277
+ // Check if this is an empty error object (WalletConnect SDK bug)
1278
+ const isEmptyError =
1279
+ typeof error === 'object' &amp;&amp;
1280
+ error !== null &amp;&amp;
1281
+ Object.keys(error).length === 0 &amp;&amp;
1282
+ !(error instanceof Error);
1283
+ &nbsp;
1284
+ if (isEmptyError) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
1285
1285
  <span class="cstat-no" title="statement not covered" > logger.warn('WalletConnect SDK empty error - relay subscription may have been stale', {</span>
1286
1286
  <span class="cstat-no" title="statement not covered" > topic: params.topic?.substring(0, 16) + '...',</span>
1287
1287
  <span class="cstat-no" title="statement not covered" > });</span>
1288
1288
  <span class="cstat-no" title="statement not covered" > throw new Error('WalletConnect connection issue - please try again');</span>
1289
1289
  <span class="cstat-no" title="statement not covered" > }</span>
1290
- <span class="cstat-no" title="statement not covered" ></span>
1291
- <span class="cstat-no" title="statement not covered" > const errorMsg = extractErrorMessage(error);</span>
1292
- <span class="cstat-no" title="statement not covered" > logger.error('Sign failed', { error: errorMsg });</span>
1293
- <span class="cstat-no" title="statement not covered" > throw new Error(`XRPL sign failed: ${errorMsg}`);</span>
1294
- <span class="cstat-no" title="statement not covered" > }</span>
1295
- <span class="cstat-no" title="statement not covered" > }</span>
1296
- <span class="cstat-no" title="statement not covered" ></span>
1297
- <span class="cstat-no" title="statement not covered" > /**</span>
1298
- <span class="cstat-no" title="statement not covered" > * Sign and submit an XRPL transaction to the network.</span>
1299
- <span class="cstat-no" title="statement not covered" > * Uses xrpl_signAndSubmit method with JSON transaction object.</span>
1300
- <span class="cstat-no" title="statement not covered" > *</span>
1301
- <span class="cstat-no" title="statement not covered" > * @param params - Submission parameters</span>
1302
- <span class="cstat-no" title="statement not covered" > * @returns Promise resolving to transaction hash and metadata</span>
1303
- <span class="cstat-no" title="statement not covered" > */</span>
1304
- <span class="cstat-no" title="statement not covered" > async submitTransaction(params: SignerOperationParams): Promise&lt;SubmitResult&gt; {</span>
1305
- <span class="cstat-no" title="statement not covered" > // Decode base64 payload to JSON transaction</span>
1306
- <span class="cstat-no" title="statement not covered" > const transaction = XrplTransactionEncoder.decodeTransaction(params.payload);</span>
1307
- <span class="cstat-no" title="statement not covered" ></span>
1308
- <span class="cstat-no" title="statement not covered" > try {</span>
1309
- <span class="cstat-no" title="statement not covered" > logger.debug('Sending xrpl_signAndSubmit request to wallet', {</span>
1310
- <span class="cstat-no" title="statement not covered" > method: 'xrpl_signAndSubmit',</span>
1311
- <span class="cstat-no" title="statement not covered" > chainId: params.networkId,</span>
1312
- <span class="cstat-no" title="statement not covered" > topic: params.topic?.substring(0, 16) + '...',</span>
1313
- <span class="cstat-no" title="statement not covered" > });</span>
1314
- <span class="cstat-no" title="statement not covered" ></span>
1315
- <span class="cstat-no" title="statement not covered" > // Use 5-minute expiry to give users time to review and approve</span>
1316
- <span class="cstat-no" title="statement not covered" > const result = await params.client.request({</span>
1317
- <span class="cstat-no" title="statement not covered" > topic: params.topic,</span>
1318
- <span class="cstat-no" title="statement not covered" > chainId: params.networkId,</span>
1319
- <span class="cstat-no" title="statement not covered" > request: {</span>
1320
- <span class="cstat-no" title="statement not covered" > method: 'xrpl_signAndSubmit',</span>
1321
- <span class="cstat-no" title="statement not covered" > params: {</span>
1322
- <span class="cstat-no" title="statement not covered" > transaction, // Native JSON object</span>
1323
- <span class="cstat-no" title="statement not covered" > },</span>
1324
- <span class="cstat-no" title="statement not covered" > },</span>
1325
- <span class="cstat-no" title="statement not covered" > expiry: 300, // 5 minutes in seconds</span>
1326
- <span class="cstat-no" title="statement not covered" > });</span>
1327
- <span class="cstat-no" title="statement not covered" ></span>
1328
- <span class="cstat-no" title="statement not covered" > logger.debug('Received xrpl_signAndSubmit response', {</span>
1329
- <span class="cstat-no" title="statement not covered" > hasResult: !!result,</span>
1330
- <span class="cstat-no" title="statement not covered" > resultKeys: result ? Object.keys(result as object) : [],</span>
1331
- <span class="cstat-no" title="statement not covered" > });</span>
1332
- <span class="cstat-no" title="statement not covered" ></span>
1333
- <span class="cstat-no" title="statement not covered" > return {</span>
1334
- <span class="cstat-no" title="statement not covered" > transactionId:</span>
1335
- <span class="cstat-no" title="statement not covered" > (result as { hash?: string }).hash ||</span>
1336
- <span class="cstat-no" title="statement not covered" > (result as { tx_json?: { hash?: string } }).tx_json?.hash ||</span>
1337
- <span class="cstat-no" title="statement not covered" > '',</span>
1338
- <span class="cstat-no" title="statement not covered" > transactionHash: (result as { hash?: string }).hash,</span>
1339
- <span class="cstat-no" title="statement not covered" > metadata: { result },</span>
1340
- <span class="cstat-no" title="statement not covered" > };</span>
1341
- <span class="cstat-no" title="statement not covered" > } catch (error) {</span>
1342
- <span class="cstat-no" title="statement not covered" > // Check if this is an empty error object (WalletConnect SDK bug)</span>
1343
- <span class="cstat-no" title="statement not covered" > // This typically happens when relay subscription is stale</span>
1344
- <span class="cstat-no" title="statement not covered" > const isEmptyError =</span>
1345
- <span class="cstat-no" title="statement not covered" > typeof error === 'object' &amp;&amp;</span>
1346
- <span class="cstat-no" title="statement not covered" > error !== null &amp;&amp;</span>
1347
- <span class="cstat-no" title="statement not covered" > Object.keys(error).length === 0 &amp;&amp;</span>
1348
- <span class="cstat-no" title="statement not covered" > !(error instanceof Error);</span>
1349
- <span class="cstat-no" title="statement not covered" ></span>
1350
- <span class="cstat-no" title="statement not covered" > if (isEmptyError) {</span>
1290
+ &nbsp;
1291
+ const errorMsg = extractErrorMessage(error);
1292
+ logger.error('Sign failed', { error: errorMsg });
1293
+ throw new Error(`XRPL sign failed: ${errorMsg}`);
1294
+ }
1295
+ }
1296
+ &nbsp;
1297
+ /**
1298
+ * Sign and submit an XRPL transaction to the network.
1299
+ * Uses xrpl_signAndSubmit method with JSON transaction object.
1300
+ *
1301
+ * @param params - Submission parameters
1302
+ * @returns Promise resolving to transaction hash and metadata
1303
+ */
1304
+ async submitTransaction(params: SignerOperationParams): Promise&lt;SubmitResult&gt; {
1305
+ // Decode base64 payload to JSON transaction
1306
+ const transaction = XrplTransactionEncoder.decodeTransaction(params.payload);
1307
+ &nbsp;
1308
+ try {
1309
+ logger.debug('Sending xrpl_signAndSubmit request to wallet', {
1310
+ method: 'xrpl_signAndSubmit',
1311
+ chainId: params.networkId,
1312
+ topic: params.topic?.substring(0, 16) + '...',
1313
+ });
1314
+ &nbsp;
1315
+ // Use 5-minute expiry to give users time to review and approve
1316
+ const result = await params.client.request({
1317
+ topic: params.topic,
1318
+ chainId: params.networkId,
1319
+ request: {
1320
+ method: 'xrpl_signAndSubmit',
1321
+ params: {
1322
+ transaction, // Native JSON object
1323
+ },
1324
+ },
1325
+ expiry: 300, // 5 minutes in seconds
1326
+ });
1327
+ &nbsp;
1328
+ logger.debug('Received xrpl_signAndSubmit response', {
1329
+ hasResult: !!result,
1330
+ resultKeys: result ? Object.keys(result as object<span class="branch-0 cbranch-no" title="branch not covered" >) : [],</span>
1331
+ });
1332
+ &nbsp;
1333
+ return {
1334
+ transactionId:
1335
+ (result as { hash?: string }).hash ||
1336
+ (result as { tx_json?: { hash?: string } }).<span class="branch-0 cbranch-no" title="branch not covered" >tx_json?.hash ||</span>
1337
+ '',
1338
+ transactionHash: (result as { hash?: string }).hash,
1339
+ metadata: { result },
1340
+ };
1341
+ } catch (error) {
1342
+ // Check if this is an empty error object (WalletConnect SDK bug)
1343
+ // This typically happens when relay subscription is stale
1344
+ const isEmptyError =
1345
+ typeof error === 'object' &amp;&amp;
1346
+ error !== null &amp;&amp;
1347
+ Object.keys(error).length === 0 &amp;&amp;
1348
+ !(error instanceof Error);
1349
+ &nbsp;
1350
+ if (isEmptyError) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
1351
1351
  <span class="cstat-no" title="statement not covered" > // Empty error object is a known WalletConnect SDK issue</span>
1352
1352
  <span class="cstat-no" title="statement not covered" > // It usually means the relay subscription was stale</span>
1353
1353
  <span class="cstat-no" title="statement not covered" > logger.warn('WalletConnect SDK empty error - relay subscription may have been stale', {</span>
@@ -1356,34 +1356,34 @@
1356
1356
  <span class="cstat-no" title="statement not covered" > });</span>
1357
1357
  <span class="cstat-no" title="statement not covered" > throw new Error('WalletConnect connection issue - please try again');</span>
1358
1358
  <span class="cstat-no" title="statement not covered" > }</span>
1359
- <span class="cstat-no" title="statement not covered" ></span>
1360
- <span class="cstat-no" title="statement not covered" > const errorMsg = extractErrorMessage(error);</span>
1361
- <span class="cstat-no" title="statement not covered" > logger.error('Submit failed', { error: errorMsg });</span>
1362
- <span class="cstat-no" title="statement not covered" > throw new Error(`XRPL submit failed: ${errorMsg}`);</span>
1363
- <span class="cstat-no" title="statement not covered" > }</span>
1364
- <span class="cstat-no" title="statement not covered" > }</span>
1365
- <span class="cstat-no" title="statement not covered" ></span>
1366
- <span class="cstat-no" title="statement not covered" > /**</span>
1367
- <span class="cstat-no" title="statement not covered" > * Sign and execute a transaction in one call (preferred method to avoid double prompts).</span>
1368
- <span class="cstat-no" title="statement not covered" > * Uses xrpl_signAndSubmit method directly instead of sign-then-submit.</span>
1369
- <span class="cstat-no" title="statement not covered" > *</span>
1370
- <span class="cstat-no" title="statement not covered" > * @param params - Transaction parameters</span>
1371
- <span class="cstat-no" title="statement not covered" > * @returns Promise resolving to transaction hash and metadata</span>
1372
- <span class="cstat-no" title="statement not covered" > */</span>
1373
- <span class="cstat-no" title="statement not covered" > async signAndExecuteTransaction(params: SignerOperationParams): Promise&lt;SubmitResult&gt; {</span>
1359
+ &nbsp;
1360
+ const errorMsg = extractErrorMessage(error);
1361
+ logger.error('Submit failed', { error: errorMsg });
1362
+ throw new Error(`XRPL submit failed: ${errorMsg}`);
1363
+ }
1364
+ }
1365
+ &nbsp;
1366
+ /**
1367
+ * Sign and execute a transaction in one call (preferred method to avoid double prompts).
1368
+ * Uses xrpl_signAndSubmit method directly instead of sign-then-submit.
1369
+ *
1370
+ * @param params - Transaction parameters
1371
+ * @returns Promise resolving to transaction hash and metadata
1372
+ */
1373
+ <span class="fstat-no" title="function not covered" > async signAndExecuteTransaction(params: SignerOperationParams): Promise&lt;SubmitResult&gt; {</span>
1374
1374
  <span class="cstat-no" title="statement not covered" > // XRPL's xrpl_signAndSubmit method handles both signing and submission</span>
1375
1375
  <span class="cstat-no" title="statement not covered" > // This is the preferred method for XRPL transactions</span>
1376
1376
  <span class="cstat-no" title="statement not covered" > return this.submitTransaction(params);</span>
1377
1377
  <span class="cstat-no" title="statement not covered" > }</span>
1378
- <span class="cstat-no" title="statement not covered" ></span>
1379
- <span class="cstat-no" title="statement not covered" > /**</span>
1380
- <span class="cstat-no" title="statement not covered" > * Sign an arbitrary message using xrpl_signMessage method.</span>
1381
- <span class="cstat-no" title="statement not covered" > * Used for DAO votes, authentication proofs, and other non-transaction signing.</span>
1382
- <span class="cstat-no" title="statement not covered" > *</span>
1383
- <span class="cstat-no" title="statement not covered" > * @param params - Signing parameters with message string</span>
1384
- <span class="cstat-no" title="statement not covered" > * @returns Promise resolving to signature and metadata</span>
1385
- <span class="cstat-no" title="statement not covered" > */</span>
1386
- <span class="cstat-no" title="statement not covered" > async signMessage(</span>
1378
+ &nbsp;
1379
+ /**
1380
+ * Sign an arbitrary message using xrpl_signMessage method.
1381
+ * Used for DAO votes, authentication proofs, and other non-transaction signing.
1382
+ *
1383
+ * @param params - Signing parameters with message string
1384
+ * @returns Promise resolving to signature and metadata
1385
+ */
1386
+ <span class="fstat-no" title="function not covered" > async signMessage(</span>
1387
1387
  <span class="cstat-no" title="statement not covered" > params: SignerOperationParams &amp; { message: string; encoding?: 'utf-8' | 'base64' },</span>
1388
1388
  <span class="cstat-no" title="statement not covered" > ): Promise&lt;import('../../base-wallet-provider').SignMessageResult&gt; {</span>
1389
1389
  <span class="cstat-no" title="statement not covered" > try {</span>
@@ -1425,78 +1425,78 @@
1425
1425
  <span class="cstat-no" title="statement not covered" > throw new Error(`XRPL sign message failed: ${errorMsg}`);</span>
1426
1426
  <span class="cstat-no" title="statement not covered" > }</span>
1427
1427
  <span class="cstat-no" title="statement not covered" > }</span>
1428
- <span class="cstat-no" title="statement not covered" ></span>
1429
- <span class="cstat-no" title="statement not covered" > /**</span>
1430
- <span class="cstat-no" title="statement not covered" > * Parse accounts from XRPL namespace in WalletConnect session.</span>
1431
- <span class="cstat-no" title="statement not covered" > * Extracts addresses from XRPL format: xrpl:&lt;network&gt;:rAddress...</span>
1432
- <span class="cstat-no" title="statement not covered" > *</span>
1433
- <span class="cstat-no" title="statement not covered" > * Optionally filters accounts to only include those matching a target network.</span>
1434
- <span class="cstat-no" title="statement not covered" > * This is important for respecting the user's network selection in the dApp.</span>
1435
- <span class="cstat-no" title="statement not covered" > *</span>
1436
- <span class="cstat-no" title="statement not covered" > * @param namespace - XRPL namespace object from session</span>
1437
- <span class="cstat-no" title="statement not covered" > * @param targetNetworkId - Optional network ID to filter accounts (e.g., 'xrpl:mainnet')</span>
1438
- <span class="cstat-no" title="statement not covered" > * @returns Array of parsed account objects, filtered by target network if specified</span>
1439
- <span class="cstat-no" title="statement not covered" > */</span>
1440
- <span class="cstat-no" title="statement not covered" > parseAccounts(</span>
1441
- <span class="cstat-no" title="statement not covered" > namespace: any,</span>
1442
- <span class="cstat-no" title="statement not covered" > targetNetworkId?: string,</span>
1443
- <span class="cstat-no" title="statement not covered" > ): Array&lt;{ address: string; chainId: string }&gt; {</span>
1444
- <span class="cstat-no" title="statement not covered" > if (</span>
1445
- <span class="cstat-no" title="statement not covered" > !(namespace as { accounts?: string[] })?.accounts ||</span>
1446
- <span class="cstat-no" title="statement not covered" > !Array.isArray((namespace as { accounts?: string[] }).accounts)</span>
1447
- <span class="cstat-no" title="statement not covered" > ) {</span>
1428
+ &nbsp;
1429
+ /**
1430
+ * Parse accounts from XRPL namespace in WalletConnect session.
1431
+ * Extracts addresses from XRPL format: xrpl:&lt;network&gt;:rAddress...
1432
+ *
1433
+ * Optionally filters accounts to only include those matching a target network.
1434
+ * This is important for respecting the user's network selection in the dApp.
1435
+ *
1436
+ * @param namespace - XRPL namespace object from session
1437
+ * @param targetNetworkId - Optional network ID to filter accounts (e.g., 'xrpl:mainnet')
1438
+ * @returns Array of parsed account objects, filtered by target network if specified
1439
+ */
1440
+ parseAccounts(
1441
+ namespace: any,
1442
+ targetNetworkId?: string,
1443
+ ): Array&lt;{ address: string; chainId: string }&gt; {
1444
+ if (
1445
+ !(namespace as { accounts?: string[] })?.accounts ||
1446
+ !Array.isArray((namespace as { accounts?: string[] }).accounts)
1447
+ ) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
1448
1448
  <span class="cstat-no" title="statement not covered" > return [];</span>
1449
1449
  <span class="cstat-no" title="statement not covered" > }</span>
1450
- <span class="cstat-no" title="statement not covered" ></span>
1451
- <span class="cstat-no" title="statement not covered" > // Parse all accounts from namespace</span>
1452
- <span class="cstat-no" title="statement not covered" > const allAccounts = ((namespace as { accounts?: string[] }).accounts || []).map(</span>
1453
- <span class="cstat-no" title="statement not covered" > (account: string) =&gt; {</span>
1454
- <span class="cstat-no" title="statement not covered" > // XRPL format: xrpl:testnet:rN7n7otQDd6FczFgLdlqtyMVrn3WnFBrDB</span>
1455
- <span class="cstat-no" title="statement not covered" > const parts = account.split(':');</span>
1456
- <span class="cstat-no" title="statement not covered" ></span>
1457
- <span class="cstat-no" title="statement not covered" > if (parts.length &lt; 3) {</span>
1458
- <span class="cstat-no" title="statement not covered" > logger.warn('Invalid account format', { account });</span>
1459
- <span class="cstat-no" title="statement not covered" > return { address: account, chainId: 'xrpl:testnet' };</span>
1460
- <span class="cstat-no" title="statement not covered" > }</span>
1461
- <span class="cstat-no" title="statement not covered" ></span>
1462
- <span class="cstat-no" title="statement not covered" > return {</span>
1463
- <span class="cstat-no" title="statement not covered" > address: parts[parts.length - 1], // rAddress</span>
1464
- <span class="cstat-no" title="statement not covered" > chainId: `${parts[0]}:${parts[1]}`, // xrpl:testnet</span>
1465
- <span class="cstat-no" title="statement not covered" > };</span>
1466
- <span class="cstat-no" title="statement not covered" > },</span>
1467
- <span class="cstat-no" title="statement not covered" > );</span>
1468
- <span class="cstat-no" title="statement not covered" ></span>
1469
- <span class="cstat-no" title="statement not covered" > // If target network specified, filter accounts to only that network</span>
1470
- <span class="cstat-no" title="statement not covered" > if (targetNetworkId) {</span>
1471
- <span class="cstat-no" title="statement not covered" > const targetNetwork = targetNetworkId.split(':')[1]?.toLowerCase(); // e.g., 'mainnet'</span>
1472
- <span class="cstat-no" title="statement not covered" ></span>
1473
- <span class="cstat-no" title="statement not covered" > if (targetNetwork) {</span>
1474
- <span class="cstat-no" title="statement not covered" > const filteredAccounts = allAccounts.filter((acc) =&gt;</span>
1475
- <span class="cstat-no" title="statement not covered" > acc.chainId.toLowerCase().includes(targetNetwork),</span>
1476
- <span class="cstat-no" title="statement not covered" > );</span>
1477
- <span class="cstat-no" title="statement not covered" ></span>
1478
- <span class="cstat-no" title="statement not covered" > logger.debug('Filtered accounts by target network', {</span>
1479
- <span class="cstat-no" title="statement not covered" > targetNetworkId,</span>
1480
- <span class="cstat-no" title="statement not covered" > targetNetwork,</span>
1481
- <span class="cstat-no" title="statement not covered" > totalAccounts: allAccounts.length,</span>
1482
- <span class="cstat-no" title="statement not covered" > filteredCount: filteredAccounts.length,</span>
1483
- <span class="cstat-no" title="statement not covered" > });</span>
1484
- <span class="cstat-no" title="statement not covered" ></span>
1485
- <span class="cstat-no" title="statement not covered" > // If no accounts match the target network, log a warning</span>
1486
- <span class="cstat-no" title="statement not covered" > if (filteredAccounts.length === 0 &amp;&amp; allAccounts.length &gt; 0) {</span>
1487
- <span class="cstat-no" title="statement not covered" > logger.warn('No accounts found for target network', {</span>
1488
- <span class="cstat-no" title="statement not covered" > targetNetwork,</span>
1489
- <span class="cstat-no" title="statement not covered" > availableNetworks: [...new Set(allAccounts.map((a) =&gt; a.chainId))],</span>
1490
- <span class="cstat-no" title="statement not covered" > });</span>
1491
- <span class="cstat-no" title="statement not covered" > }</span>
1492
- <span class="cstat-no" title="statement not covered" ></span>
1493
- <span class="cstat-no" title="statement not covered" > return filteredAccounts;</span>
1494
- <span class="cstat-no" title="statement not covered" > }</span>
1495
- <span class="cstat-no" title="statement not covered" > }</span>
1496
- <span class="cstat-no" title="statement not covered" ></span>
1497
- <span class="cstat-no" title="statement not covered" > return allAccounts;</span>
1498
- <span class="cstat-no" title="statement not covered" > }</span>
1499
- <span class="cstat-no" title="statement not covered" >}</span>
1450
+ &nbsp;
1451
+ // Parse all accounts from namespace
1452
+ const allAccounts = ((namespace as { accounts?: string[] }).<span class="branch-0 cbranch-no" title="branch not covered" >accounts || []).m</span>ap(
1453
+ (account: string) =&gt; {
1454
+ // XRPL format: xrpl:testnet:rN7n7otQDd6FczFgLdlqtyMVrn3WnFBrDB
1455
+ const parts = account.split(':');
1456
+ &nbsp;
1457
+ if (parts.length &lt; 3) {
1458
+ logger.warn('Invalid account format', { account });
1459
+ return { address: account, chainId: 'xrpl:testnet' };
1460
+ }
1461
+ &nbsp;
1462
+ return {
1463
+ address: parts[parts.length - 1], // rAddress
1464
+ chainId: `${parts[0]}:${parts[1]}`, // xrpl:testnet
1465
+ };
1466
+ },
1467
+ );
1468
+ &nbsp;
1469
+ // If target network specified, filter accounts to only that network
1470
+ if (targetNetworkId) {
1471
+ const targetNetwork = targetNetworkId.split(':')[1]?.toLowerCase(); // e.g., 'mainnet'
1472
+ &nbsp;
1473
+ if (targetNetwork) {
1474
+ const filteredAccounts = allAccounts.filter((acc) =&gt;
1475
+ acc.chainId.toLowerCase().includes(targetNetwork),
1476
+ );
1477
+ &nbsp;
1478
+ logger.debug('Filtered accounts by target network', {
1479
+ targetNetworkId,
1480
+ targetNetwork,
1481
+ totalAccounts: allAccounts.length,
1482
+ filteredCount: filteredAccounts.length,
1483
+ });
1484
+ &nbsp;
1485
+ // If no accounts match the target network, log a warning
1486
+ if (filteredAccounts.length === 0 &amp;&amp; allAccounts.length &gt; 0) {
1487
+ logger.warn('No accounts found for target network', {
1488
+ targetNetwork,
1489
+ availableNetworks: [...new Set(allAccounts.map((a) =&gt; a.chainId))],
1490
+ });
1491
+ }
1492
+ &nbsp;
1493
+ return filteredAccounts;
1494
+ }
1495
+ }
1496
+ &nbsp;
1497
+ return allAccounts;
1498
+ }
1499
+ }
1500
1500
  &nbsp;</pre></td></tr></table></pre>
1501
1501
 
1502
1502
  <div class='push'></div><!-- for sticky footer -->
@@ -1504,7 +1504,7 @@
1504
1504
  <div class='footer quiet pad2 space-top1 center small'>
1505
1505
  Code coverage generated by
1506
1506
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1507
- at 2026-06-10T09:00:36.812Z
1507
+ at 2026-06-27T21:00:37.209Z
1508
1508
  </div>
1509
1509
  <script src="../../../../prettify.js"></script>
1510
1510
  <script>