@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.
- package/coverage/coverage-summary.json +25 -21
- package/coverage/index.html +108 -108
- package/coverage/lcov-report/index.html +108 -108
- package/coverage/lcov-report/lib/components/account-selector/account-actions/account-actions.component.ts.html +1 -1
- package/coverage/lcov-report/lib/components/account-selector/account-actions/index.html +1 -1
- package/coverage/lcov-report/lib/components/account-selector/account-filter/account-filter.component.ts.html +1 -1
- package/coverage/lcov-report/lib/components/account-selector/account-filter/index.html +1 -1
- package/coverage/lcov-report/lib/components/account-selector/account-formatting.service.ts.html +13 -19
- package/coverage/lcov-report/lib/components/account-selector/account-grouping.service.ts.html +1 -1
- package/coverage/lcov-report/lib/components/account-selector/account-list/account-list.component.ts.html +1 -1
- package/coverage/lcov-report/lib/components/account-selector/account-list/index.html +1 -1
- package/coverage/lcov-report/lib/components/account-selector/account-selector.component.ts.html +1 -1
- package/coverage/lcov-report/lib/components/account-selector/account-selector.service.ts.html +1 -1
- package/coverage/lcov-report/lib/components/account-selector/index.html +5 -5
- package/coverage/lcov-report/lib/components/wallet-account-display/index.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-account-display/wallet-account-display.component.ts.html +10 -10
- package/coverage/lcov-report/lib/components/wallet-connect-button/index.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-connect-button/wallet-connect-button.component.ts.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-connect-prompt/index.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.ts.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-connected-guard/index.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-connected-guard/wallet-connected-guard.component.ts.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.ts.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-connection-modal/connection-method-step/index.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-connection-modal/index.html +15 -15
- package/coverage/lcov-report/lib/components/wallet-connection-modal/qr-pairing-step/index.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.ts.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts.html +84 -36
- package/coverage/lcov-report/lib/components/wallet-session-display/index.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-session-display/wallet-session-display.component.ts.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-transaction-status/index.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-transaction-status/wallet-transaction-status.component.ts.html +1 -1
- package/coverage/lcov-report/lib/directives/index.html +1 -1
- package/coverage/lcov-report/lib/directives/wallet-connected.directive.ts.html +1 -1
- package/coverage/lcov-report/lib/directives/wallet-context.directive.ts.html +1 -1
- package/coverage/lcov-report/lib/directives/wallet-events.directive.ts.html +1 -1
- package/coverage/lcov-report/lib/hsuite-wallet.module.ts.html +1 -1
- package/coverage/lcov-report/lib/index.html +1 -1
- package/coverage/lcov-report/lib/models/connection-config.model.ts.html +1 -1
- package/coverage/lcov-report/lib/models/index.html +7 -7
- package/coverage/lcov-report/lib/models/provider-types.ts.html +11 -5
- package/coverage/lcov-report/lib/providers/base-wallet-provider.ts.html +20 -20
- package/coverage/lcov-report/lib/providers/hsuite-native/channel-client.service.ts.html +639 -636
- package/coverage/lcov-report/lib/providers/hsuite-native/index.html +19 -19
- package/coverage/lcov-report/lib/providers/hsuite-native-provider.ts.html +1 -1
- package/coverage/lcov-report/lib/providers/index.html +18 -18
- package/coverage/lcov-report/lib/providers/p2p-native/index.html +22 -22
- package/coverage/lcov-report/lib/providers/p2p-native/p2p-native.provider.ts.html +993 -993
- package/coverage/lcov-report/lib/providers/p2p-native/p2p-session-manager.ts.html +7 -4
- package/coverage/lcov-report/lib/providers/wallet-error-handler.ts.html +1 -1
- package/coverage/lcov-report/lib/providers/walletconnect/core/index.html +65 -65
- package/coverage/lcov-report/lib/providers/walletconnect/core/session-health.ts.html +240 -240
- package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-client-manager.ts.html +559 -559
- package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-provider.ts.html +1108 -1105
- package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-session-store.ts.html +493 -493
- package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-signing-orchestrator.ts.html +366 -366
- package/coverage/lcov-report/lib/providers/walletconnect/signers/hedera-signer.ts.html +730 -730
- package/coverage/lcov-report/lib/providers/walletconnect/signers/index.html +43 -43
- package/coverage/lcov-report/lib/providers/walletconnect/signers/signer-factory.ts.html +234 -234
- package/coverage/lcov-report/lib/providers/walletconnect/signers/xrpl-signer.ts.html +650 -650
- package/coverage/lcov-report/lib/services/hsuite-auth.interceptor.ts.html +568 -0
- package/coverage/lcov-report/lib/services/index.html +50 -20
- package/coverage/lcov-report/lib/services/logger.service.ts.html +1 -1
- package/coverage/lcov-report/lib/services/smart-session.service.ts.html +1264 -0
- package/coverage/lcov-report/lib/services/transaction-builders/active-account-source.ts.html +250 -0
- package/coverage/lcov-report/lib/services/transaction-builders/base-transaction-builder.service.ts.html +1 -1
- package/coverage/lcov-report/lib/services/transaction-builders/hedera-amount-utils.ts.html +155 -155
- package/coverage/lcov-report/lib/services/transaction-builders/hedera-transaction-builder.service.ts.html +2156 -2156
- package/coverage/lcov-report/lib/services/transaction-builders/index.html +58 -43
- package/coverage/lcov-report/lib/services/transaction-builders/xrpl-transaction-builder.service.ts.html +1674 -1674
- package/coverage/lcov-report/lib/services/transaction.service.ts.html +4 -4
- package/coverage/lcov-report/lib/services/unified-wallet.service.ts.html +3 -3
- package/coverage/lcov-report/lib/services/wallet-context.service.ts.html +1 -1
- package/coverage/lcov-report/lib/services/wallet-event-bus.service.ts.html +249 -249
- package/coverage/lcov-report/lib/services/wallet-providers.service.ts.html +1 -1
- package/coverage/lcov-report/lib/transports/chrome-extension-transport.ts.html +1 -1
- package/coverage/lcov-report/lib/transports/index.html +1 -1
- package/coverage/lcov-report/lib/utils/index.html +36 -21
- package/coverage/lcov-report/lib/utils/ledger-icons.util.ts.html +254 -161
- package/coverage/lcov-report/lib/utils/ledger-ui-registry.ts.html +676 -0
- package/coverage/lcov.info +8567 -6896
- package/coverage/lib/components/account-selector/account-actions/account-actions.component.ts.html +1 -1
- package/coverage/lib/components/account-selector/account-actions/index.html +1 -1
- package/coverage/lib/components/account-selector/account-filter/account-filter.component.ts.html +1 -1
- package/coverage/lib/components/account-selector/account-filter/index.html +1 -1
- package/coverage/lib/components/account-selector/account-formatting.service.ts.html +13 -19
- package/coverage/lib/components/account-selector/account-grouping.service.ts.html +1 -1
- package/coverage/lib/components/account-selector/account-list/account-list.component.ts.html +1 -1
- package/coverage/lib/components/account-selector/account-list/index.html +1 -1
- package/coverage/lib/components/account-selector/account-selector.component.ts.html +1 -1
- package/coverage/lib/components/account-selector/account-selector.service.ts.html +1 -1
- package/coverage/lib/components/account-selector/index.html +5 -5
- package/coverage/lib/components/wallet-account-display/index.html +1 -1
- package/coverage/lib/components/wallet-account-display/wallet-account-display.component.ts.html +10 -10
- package/coverage/lib/components/wallet-connect-button/index.html +1 -1
- package/coverage/lib/components/wallet-connect-button/wallet-connect-button.component.ts.html +1 -1
- package/coverage/lib/components/wallet-connect-prompt/index.html +1 -1
- package/coverage/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.ts.html +1 -1
- package/coverage/lib/components/wallet-connected-guard/index.html +1 -1
- package/coverage/lib/components/wallet-connected-guard/wallet-connected-guard.component.ts.html +1 -1
- package/coverage/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.ts.html +1 -1
- package/coverage/lib/components/wallet-connection-modal/connection-method-step/index.html +1 -1
- package/coverage/lib/components/wallet-connection-modal/index.html +15 -15
- package/coverage/lib/components/wallet-connection-modal/qr-pairing-step/index.html +1 -1
- package/coverage/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.ts.html +1 -1
- package/coverage/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts.html +84 -36
- package/coverage/lib/components/wallet-session-display/index.html +1 -1
- package/coverage/lib/components/wallet-session-display/wallet-session-display.component.ts.html +1 -1
- package/coverage/lib/components/wallet-transaction-status/index.html +1 -1
- package/coverage/lib/components/wallet-transaction-status/wallet-transaction-status.component.ts.html +1 -1
- package/coverage/lib/directives/index.html +1 -1
- package/coverage/lib/directives/wallet-connected.directive.ts.html +1 -1
- package/coverage/lib/directives/wallet-context.directive.ts.html +1 -1
- package/coverage/lib/directives/wallet-events.directive.ts.html +1 -1
- package/coverage/lib/hsuite-wallet.module.ts.html +1 -1
- package/coverage/lib/index.html +1 -1
- package/coverage/lib/models/connection-config.model.ts.html +1 -1
- package/coverage/lib/models/index.html +7 -7
- package/coverage/lib/models/provider-types.ts.html +11 -5
- package/coverage/lib/providers/base-wallet-provider.ts.html +20 -20
- package/coverage/lib/providers/hsuite-native/channel-client.service.ts.html +639 -636
- package/coverage/lib/providers/hsuite-native/index.html +19 -19
- package/coverage/lib/providers/hsuite-native-provider.ts.html +1 -1
- package/coverage/lib/providers/index.html +18 -18
- package/coverage/lib/providers/p2p-native/index.html +22 -22
- package/coverage/lib/providers/p2p-native/p2p-native.provider.ts.html +993 -993
- package/coverage/lib/providers/p2p-native/p2p-session-manager.ts.html +7 -4
- package/coverage/lib/providers/wallet-error-handler.ts.html +1 -1
- package/coverage/lib/providers/walletconnect/core/index.html +65 -65
- package/coverage/lib/providers/walletconnect/core/session-health.ts.html +240 -240
- package/coverage/lib/providers/walletconnect/core/walletconnect-client-manager.ts.html +559 -559
- package/coverage/lib/providers/walletconnect/core/walletconnect-provider.ts.html +1108 -1105
- package/coverage/lib/providers/walletconnect/core/walletconnect-session-store.ts.html +493 -493
- package/coverage/lib/providers/walletconnect/core/walletconnect-signing-orchestrator.ts.html +366 -366
- package/coverage/lib/providers/walletconnect/signers/hedera-signer.ts.html +730 -730
- package/coverage/lib/providers/walletconnect/signers/index.html +43 -43
- package/coverage/lib/providers/walletconnect/signers/signer-factory.ts.html +234 -234
- package/coverage/lib/providers/walletconnect/signers/xrpl-signer.ts.html +650 -650
- package/coverage/lib/services/hsuite-auth.interceptor.ts.html +568 -0
- package/coverage/lib/services/index.html +50 -20
- package/coverage/lib/services/logger.service.ts.html +1 -1
- package/coverage/lib/services/smart-session.service.ts.html +1264 -0
- package/coverage/lib/services/transaction-builders/active-account-source.ts.html +250 -0
- package/coverage/lib/services/transaction-builders/base-transaction-builder.service.ts.html +1 -1
- package/coverage/lib/services/transaction-builders/hedera-amount-utils.ts.html +155 -155
- package/coverage/lib/services/transaction-builders/hedera-transaction-builder.service.ts.html +2156 -2156
- package/coverage/lib/services/transaction-builders/index.html +58 -43
- package/coverage/lib/services/transaction-builders/xrpl-transaction-builder.service.ts.html +1674 -1674
- package/coverage/lib/services/transaction.service.ts.html +4 -4
- package/coverage/lib/services/unified-wallet.service.ts.html +3 -3
- package/coverage/lib/services/wallet-context.service.ts.html +1 -1
- package/coverage/lib/services/wallet-event-bus.service.ts.html +249 -249
- package/coverage/lib/services/wallet-providers.service.ts.html +1 -1
- package/coverage/lib/transports/chrome-extension-transport.ts.html +1 -1
- package/coverage/lib/transports/index.html +1 -1
- package/coverage/lib/utils/index.html +36 -21
- package/coverage/lib/utils/ledger-icons.util.ts.html +254 -161
- package/coverage/lib/utils/ledger-ui-registry.ts.html +676 -0
- package/dist/fesm2022/hsuite-native-connect-angular.mjs +854 -308
- package/dist/fesm2022/hsuite-native-connect-angular.mjs.map +1 -1
- package/dist/index.d.ts +456 -30
- package/package.json +4 -4
- package/src/index.ts +26 -0
- package/src/lib/components/account-selector/account-formatting.service.ts +8 -10
- package/src/lib/components/wallet-account-display/wallet-account-display.component.ts +9 -9
- package/src/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts +34 -18
- package/src/lib/models/provider-types.ts +3 -1
- package/src/lib/models/unified-account.model.ts +4 -1
- package/src/lib/providers/hsuite-native/channel-client.service.ts +1 -0
- package/src/lib/providers/p2p-native/p2p-session-manager.ts +1 -0
- package/src/lib/providers/walletconnect/core/walletconnect-provider.ts +2 -1
- package/src/lib/services/hsuite-auth.interceptor.ts +159 -0
- package/src/lib/services/smart-session.service.ts +378 -0
- package/src/lib/services/transaction-builders/active-account-source.spec.ts +75 -0
- package/src/lib/services/transaction-builders/active-account-source.ts +55 -0
- package/src/lib/services/transaction-builders/hedera-transaction-builder.service.ts +4 -4
- package/src/lib/services/transaction-builders/index.ts +1 -0
- package/src/lib/services/transaction.service.ts +7 -3
- package/src/lib/services/unified-wallet.service.spec.ts +1 -1
- package/src/lib/services/unified-wallet.service.ts +2 -2
- package/src/lib/utils/index.ts +1 -0
- package/src/lib/utils/ledger-icons.util.ts +61 -30
- 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">
|
|
26
|
+
<span class="strong">57.86% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>353/610</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">58.53% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>24/41</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">75% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
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">
|
|
47
|
+
<span class="strong">57.86% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>353/610</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
|
|
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>
|
|
@@ -673,8 +673,60 @@
|
|
|
673
673
|
<a name='L608'></a><a href='#L608'>608</a>
|
|
674
674
|
<a name='L609'></a><a href='#L609'>609</a>
|
|
675
675
|
<a name='L610'></a><a href='#L610'>610</a>
|
|
676
|
-
<a name='L611'></a><a href='#L611'>611</a></td><td class="line-coverage quiet"><span class="cline-any cline-
|
|
676
|
+
<a name='L611'></a><a href='#L611'>611</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
|
677
|
+
<span class="cline-any cline-yes">1x</span>
|
|
678
|
+
<span class="cline-any cline-yes">1x</span>
|
|
679
|
+
<span class="cline-any cline-yes">1x</span>
|
|
680
|
+
<span class="cline-any cline-yes">1x</span>
|
|
681
|
+
<span class="cline-any cline-yes">1x</span>
|
|
682
|
+
<span class="cline-any cline-yes">1x</span>
|
|
683
|
+
<span class="cline-any cline-yes">1x</span>
|
|
684
|
+
<span class="cline-any cline-yes">1x</span>
|
|
685
|
+
<span class="cline-any cline-yes">1x</span>
|
|
686
|
+
<span class="cline-any cline-yes">1x</span>
|
|
687
|
+
<span class="cline-any cline-yes">1x</span>
|
|
688
|
+
<span class="cline-any cline-yes">1x</span>
|
|
689
|
+
<span class="cline-any cline-yes">1x</span>
|
|
690
|
+
<span class="cline-any cline-yes">1x</span>
|
|
691
|
+
<span class="cline-any cline-yes">1x</span>
|
|
692
|
+
<span class="cline-any cline-yes">1x</span>
|
|
693
|
+
<span class="cline-any cline-yes">1x</span>
|
|
694
|
+
<span class="cline-any cline-yes">1x</span>
|
|
695
|
+
<span class="cline-any cline-yes">1x</span>
|
|
696
|
+
<span class="cline-any cline-yes">1x</span>
|
|
697
|
+
<span class="cline-any cline-yes">1x</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">1x</span>
|
|
712
|
+
<span class="cline-any cline-yes">1x</span>
|
|
713
|
+
<span class="cline-any cline-yes">1x</span>
|
|
714
|
+
<span class="cline-any cline-yes">1x</span>
|
|
715
|
+
<span class="cline-any cline-yes">1x</span>
|
|
716
|
+
<span class="cline-any cline-yes">2x</span>
|
|
717
|
+
<span class="cline-any cline-yes">2x</span>
|
|
718
|
+
<span class="cline-any cline-yes">2x</span>
|
|
719
|
+
<span class="cline-any cline-yes">2x</span>
|
|
720
|
+
<span class="cline-any cline-yes">2x</span>
|
|
721
|
+
<span class="cline-any cline-yes">2x</span>
|
|
722
|
+
<span class="cline-any cline-yes">2x</span>
|
|
723
|
+
<span class="cline-any cline-yes">2x</span>
|
|
724
|
+
<span class="cline-any cline-yes">2x</span>
|
|
725
|
+
<span class="cline-any cline-yes">2x</span>
|
|
726
|
+
<span class="cline-any cline-yes">2x</span>
|
|
727
|
+
<span class="cline-any cline-yes">2x</span>
|
|
677
728
|
<span class="cline-any cline-no"> </span>
|
|
729
|
+
<span class="cline-any cline-yes">2x</span>
|
|
678
730
|
<span class="cline-any cline-no"> </span>
|
|
679
731
|
<span class="cline-any cline-no"> </span>
|
|
680
732
|
<span class="cline-any cline-no"> </span>
|
|
@@ -841,7 +893,218 @@
|
|
|
841
893
|
<span class="cline-any cline-no"> </span>
|
|
842
894
|
<span class="cline-any cline-no"> </span>
|
|
843
895
|
<span class="cline-any cline-no"> </span>
|
|
896
|
+
<span class="cline-any cline-yes">1x</span>
|
|
897
|
+
<span class="cline-any cline-yes">1x</span>
|
|
898
|
+
<span class="cline-any cline-yes">1x</span>
|
|
899
|
+
<span class="cline-any cline-yes">1x</span>
|
|
900
|
+
<span class="cline-any cline-yes">1x</span>
|
|
901
|
+
<span class="cline-any cline-yes">1x</span>
|
|
902
|
+
<span class="cline-any cline-yes">1x</span>
|
|
903
|
+
<span class="cline-any cline-yes">1x</span>
|
|
904
|
+
<span class="cline-any cline-yes">1x</span>
|
|
905
|
+
<span class="cline-any cline-yes">1x</span>
|
|
906
|
+
<span class="cline-any cline-yes">1x</span>
|
|
907
|
+
<span class="cline-any cline-yes">1x</span>
|
|
908
|
+
<span class="cline-any cline-yes">1x</span>
|
|
909
|
+
<span class="cline-any cline-yes">23x</span>
|
|
910
|
+
<span class="cline-any cline-yes">23x</span>
|
|
911
|
+
<span class="cline-any cline-yes">23x</span>
|
|
912
|
+
<span class="cline-any cline-yes">23x</span>
|
|
913
|
+
<span class="cline-any cline-yes">23x</span>
|
|
914
|
+
<span class="cline-any cline-yes">23x</span>
|
|
915
|
+
<span class="cline-any cline-yes">23x</span>
|
|
916
|
+
<span class="cline-any cline-yes">23x</span>
|
|
917
|
+
<span class="cline-any cline-yes">23x</span>
|
|
918
|
+
<span class="cline-any cline-yes">23x</span>
|
|
919
|
+
<span class="cline-any cline-yes">23x</span>
|
|
920
|
+
<span class="cline-any cline-yes">23x</span>
|
|
921
|
+
<span class="cline-any cline-yes">23x</span>
|
|
922
|
+
<span class="cline-any cline-yes">23x</span>
|
|
923
|
+
<span class="cline-any cline-yes">23x</span>
|
|
924
|
+
<span class="cline-any cline-yes">15x</span>
|
|
925
|
+
<span class="cline-any cline-yes">15x</span>
|
|
926
|
+
<span class="cline-any cline-yes">15x</span>
|
|
927
|
+
<span class="cline-any cline-yes">15x</span>
|
|
928
|
+
<span class="cline-any cline-yes">15x</span>
|
|
929
|
+
<span class="cline-any cline-yes">15x</span>
|
|
930
|
+
<span class="cline-any cline-yes">15x</span>
|
|
931
|
+
<span class="cline-any cline-yes">15x</span>
|
|
932
|
+
<span class="cline-any cline-yes">15x</span>
|
|
933
|
+
<span class="cline-any cline-yes">15x</span>
|
|
934
|
+
<span class="cline-any cline-yes">15x</span>
|
|
935
|
+
<span class="cline-any cline-yes">15x</span>
|
|
936
|
+
<span class="cline-any cline-yes">15x</span>
|
|
937
|
+
<span class="cline-any cline-yes">15x</span>
|
|
938
|
+
<span class="cline-any cline-yes">15x</span>
|
|
939
|
+
<span class="cline-any cline-yes">15x</span>
|
|
940
|
+
<span class="cline-any cline-yes">15x</span>
|
|
941
|
+
<span class="cline-any cline-yes">15x</span>
|
|
942
|
+
<span class="cline-any cline-yes">15x</span>
|
|
943
|
+
<span class="cline-any cline-yes">23x</span>
|
|
944
|
+
<span class="cline-any cline-yes">23x</span>
|
|
945
|
+
<span class="cline-any cline-yes">23x</span>
|
|
946
|
+
<span class="cline-any cline-yes">23x</span>
|
|
947
|
+
<span class="cline-any cline-yes">23x</span>
|
|
948
|
+
<span class="cline-any cline-yes">23x</span>
|
|
949
|
+
<span class="cline-any cline-yes">23x</span>
|
|
950
|
+
<span class="cline-any cline-yes">23x</span>
|
|
951
|
+
<span class="cline-any cline-yes">23x</span>
|
|
952
|
+
<span class="cline-any cline-yes">23x</span>
|
|
953
|
+
<span class="cline-any cline-yes">23x</span>
|
|
954
|
+
<span class="cline-any cline-yes">23x</span>
|
|
955
|
+
<span class="cline-any cline-yes">23x</span>
|
|
956
|
+
<span class="cline-any cline-yes">4x</span>
|
|
957
|
+
<span class="cline-any cline-yes">4x</span>
|
|
958
|
+
<span class="cline-any cline-yes">4x</span>
|
|
959
|
+
<span class="cline-any cline-yes">4x</span>
|
|
960
|
+
<span class="cline-any cline-yes">4x</span>
|
|
961
|
+
<span class="cline-any cline-yes">4x</span>
|
|
962
|
+
<span class="cline-any cline-yes">4x</span>
|
|
963
|
+
<span class="cline-any cline-yes">4x</span>
|
|
964
|
+
<span class="cline-any cline-yes">4x</span>
|
|
965
|
+
<span class="cline-any cline-yes">4x</span>
|
|
966
|
+
<span class="cline-any cline-yes">4x</span>
|
|
967
|
+
<span class="cline-any cline-yes">4x</span>
|
|
968
|
+
<span class="cline-any cline-yes">4x</span>
|
|
969
|
+
<span class="cline-any cline-yes">4x</span>
|
|
970
|
+
<span class="cline-any cline-yes">4x</span>
|
|
971
|
+
<span class="cline-any cline-yes">4x</span>
|
|
972
|
+
<span class="cline-any cline-yes">4x</span>
|
|
973
|
+
<span class="cline-any cline-yes">4x</span>
|
|
974
|
+
<span class="cline-any cline-yes">4x</span>
|
|
975
|
+
<span class="cline-any cline-yes">4x</span>
|
|
976
|
+
<span class="cline-any cline-yes">4x</span>
|
|
977
|
+
<span class="cline-any cline-yes">4x</span>
|
|
978
|
+
<span class="cline-any cline-yes">4x</span>
|
|
979
|
+
<span class="cline-any cline-yes">4x</span>
|
|
980
|
+
<span class="cline-any cline-yes">4x</span>
|
|
981
|
+
<span class="cline-any cline-yes">4x</span>
|
|
982
|
+
<span class="cline-any cline-yes">4x</span>
|
|
983
|
+
<span class="cline-any cline-yes">4x</span>
|
|
984
|
+
<span class="cline-any cline-yes">4x</span>
|
|
985
|
+
<span class="cline-any cline-no"> </span>
|
|
986
|
+
<span class="cline-any cline-no"> </span>
|
|
987
|
+
<span class="cline-any cline-yes">4x</span>
|
|
988
|
+
<span class="cline-any cline-yes">4x</span>
|
|
989
|
+
<span class="cline-any cline-yes">4x</span>
|
|
990
|
+
<span class="cline-any cline-yes">4x</span>
|
|
991
|
+
<span class="cline-any cline-yes">1x</span>
|
|
992
|
+
<span class="cline-any cline-yes">1x</span>
|
|
993
|
+
<span class="cline-any cline-yes">1x</span>
|
|
994
|
+
<span class="cline-any cline-yes">1x</span>
|
|
995
|
+
<span class="cline-any cline-yes">1x</span>
|
|
996
|
+
<span class="cline-any cline-yes">1x</span>
|
|
997
|
+
<span class="cline-any cline-yes">1x</span>
|
|
998
|
+
<span class="cline-any cline-yes">1x</span>
|
|
999
|
+
<span class="cline-any cline-no"> </span>
|
|
1000
|
+
<span class="cline-any cline-no"> </span>
|
|
1001
|
+
<span class="cline-any cline-no"> </span>
|
|
1002
|
+
<span class="cline-any cline-no"> </span>
|
|
1003
|
+
<span class="cline-any cline-no"> </span>
|
|
1004
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1005
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1006
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1007
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1008
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1009
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1010
|
+
<span class="cline-any cline-yes">23x</span>
|
|
1011
|
+
<span class="cline-any cline-yes">23x</span>
|
|
1012
|
+
<span class="cline-any cline-yes">23x</span>
|
|
1013
|
+
<span class="cline-any cline-yes">23x</span>
|
|
1014
|
+
<span class="cline-any cline-yes">23x</span>
|
|
1015
|
+
<span class="cline-any cline-yes">23x</span>
|
|
1016
|
+
<span class="cline-any cline-yes">23x</span>
|
|
1017
|
+
<span class="cline-any cline-yes">23x</span>
|
|
1018
|
+
<span class="cline-any cline-yes">23x</span>
|
|
1019
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1020
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1021
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1022
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1023
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1024
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1025
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1026
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1027
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1028
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1029
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1030
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1031
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1032
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1033
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1034
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1035
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1036
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1037
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1038
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1039
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1040
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1041
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1042
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1043
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1044
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1045
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1046
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1047
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1048
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1049
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1050
|
+
<span class="cline-any cline-no"> </span>
|
|
1051
|
+
<span class="cline-any cline-no"> </span>
|
|
1052
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1053
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1054
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1055
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1056
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1057
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1058
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1059
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1060
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1061
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1062
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1063
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1064
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1065
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1066
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1067
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1068
|
+
<span class="cline-any cline-no"> </span>
|
|
1069
|
+
<span class="cline-any cline-no"> </span>
|
|
1070
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1071
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1072
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1073
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1074
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1075
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1076
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1077
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1078
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1079
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1080
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1081
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1082
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1083
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1084
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1085
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1086
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1087
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1088
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1089
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1090
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1091
|
+
<span class="cline-any cline-yes">1x</span>
|
|
844
1092
|
<span class="cline-any cline-no"> </span>
|
|
1093
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1094
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1095
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1096
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1097
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1098
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1099
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1100
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1101
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1102
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1103
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1104
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1105
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1106
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1107
|
+
<span class="cline-any cline-yes">1x</span>
|
|
845
1108
|
<span class="cline-any cline-no"> </span>
|
|
846
1109
|
<span class="cline-any cline-no"> </span>
|
|
847
1110
|
<span class="cline-any cline-no"> </span>
|
|
@@ -857,9 +1120,34 @@
|
|
|
857
1120
|
<span class="cline-any cline-no"> </span>
|
|
858
1121
|
<span class="cline-any cline-no"> </span>
|
|
859
1122
|
<span class="cline-any cline-no"> </span>
|
|
1123
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1124
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1125
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1126
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1127
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1128
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1129
|
+
<span class="cline-any cline-yes">23x</span>
|
|
1130
|
+
<span class="cline-any cline-yes">23x</span>
|
|
1131
|
+
<span class="cline-any cline-yes">23x</span>
|
|
1132
|
+
<span class="cline-any cline-yes">23x</span>
|
|
1133
|
+
<span class="cline-any cline-yes">23x</span>
|
|
1134
|
+
<span class="cline-any cline-yes">23x</span>
|
|
1135
|
+
<span class="cline-any cline-yes">23x</span>
|
|
1136
|
+
<span class="cline-any cline-yes">23x</span>
|
|
1137
|
+
<span class="cline-any cline-yes">23x</span>
|
|
1138
|
+
<span class="cline-any cline-yes">23x</span>
|
|
860
1139
|
<span class="cline-any cline-no"> </span>
|
|
861
1140
|
<span class="cline-any cline-no"> </span>
|
|
862
1141
|
<span class="cline-any cline-no"> </span>
|
|
1142
|
+
<span class="cline-any cline-yes">23x</span>
|
|
1143
|
+
<span class="cline-any cline-yes">23x</span>
|
|
1144
|
+
<span class="cline-any cline-yes">23x</span>
|
|
1145
|
+
<span class="cline-any cline-yes">23x</span>
|
|
1146
|
+
<span class="cline-any cline-yes">23x</span>
|
|
1147
|
+
<span class="cline-any cline-yes">23x</span>
|
|
1148
|
+
<span class="cline-any cline-yes">23x</span>
|
|
1149
|
+
<span class="cline-any cline-yes">23x</span>
|
|
1150
|
+
<span class="cline-any cline-yes">23x</span>
|
|
863
1151
|
<span class="cline-any cline-no"> </span>
|
|
864
1152
|
<span class="cline-any cline-no"> </span>
|
|
865
1153
|
<span class="cline-any cline-no"> </span>
|
|
@@ -912,431 +1200,143 @@
|
|
|
912
1200
|
<span class="cline-any cline-no"> </span>
|
|
913
1201
|
<span class="cline-any cline-no"> </span>
|
|
914
1202
|
<span class="cline-any cline-no"> </span>
|
|
1203
|
+
<span class="cline-any cline-yes">23x</span>
|
|
1204
|
+
<span class="cline-any cline-yes">23x</span>
|
|
1205
|
+
<span class="cline-any cline-yes">23x</span>
|
|
1206
|
+
<span class="cline-any cline-yes">23x</span>
|
|
1207
|
+
<span class="cline-any cline-yes">23x</span>
|
|
1208
|
+
<span class="cline-any cline-yes">23x</span>
|
|
1209
|
+
<span class="cline-any cline-yes">23x</span>
|
|
1210
|
+
<span class="cline-any cline-yes">23x</span>
|
|
1211
|
+
<span class="cline-any cline-yes">23x</span>
|
|
1212
|
+
<span class="cline-any cline-yes">23x</span>
|
|
1213
|
+
<span class="cline-any cline-yes">23x</span>
|
|
1214
|
+
<span class="cline-any cline-yes">23x</span>
|
|
1215
|
+
<span class="cline-any cline-yes">23x</span>
|
|
1216
|
+
<span class="cline-any cline-yes">23x</span>
|
|
1217
|
+
<span class="cline-any cline-yes">20x</span>
|
|
1218
|
+
<span class="cline-any cline-yes">20x</span>
|
|
1219
|
+
<span class="cline-any cline-yes">20x</span>
|
|
1220
|
+
<span class="cline-any cline-yes">20x</span>
|
|
915
1221
|
<span class="cline-any cline-no"> </span>
|
|
916
1222
|
<span class="cline-any cline-no"> </span>
|
|
917
1223
|
<span class="cline-any cline-no"> </span>
|
|
1224
|
+
<span class="cline-any cline-yes">20x</span>
|
|
1225
|
+
<span class="cline-any cline-yes">20x</span>
|
|
1226
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1227
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1228
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1229
|
+
<span class="cline-any cline-yes">19x</span>
|
|
1230
|
+
<span class="cline-any cline-yes">20x</span>
|
|
918
1231
|
<span class="cline-any cline-no"> </span>
|
|
919
1232
|
<span class="cline-any cline-no"> </span>
|
|
920
1233
|
<span class="cline-any cline-no"> </span>
|
|
921
1234
|
<span class="cline-any cline-no"> </span>
|
|
922
1235
|
<span class="cline-any cline-no"> </span>
|
|
923
|
-
<span class="cline-any cline-
|
|
924
|
-
<span class="cline-any cline-
|
|
925
|
-
<span class="cline-any cline-
|
|
926
|
-
<span class="cline-any cline-
|
|
927
|
-
<span class="cline-any cline-
|
|
928
|
-
<span class="cline-any cline-
|
|
929
|
-
<span class="cline-any cline-
|
|
930
|
-
<span class="cline-any cline-
|
|
931
|
-
<span class="cline-any cline-
|
|
932
|
-
<span class="cline-any cline-
|
|
933
|
-
<span class="cline-any cline-
|
|
934
|
-
<span class="cline-any cline-
|
|
935
|
-
<span class="cline-any cline-
|
|
936
|
-
<span class="cline-any cline-
|
|
937
|
-
<span class="cline-any cline-
|
|
938
|
-
<span class="cline-any cline-
|
|
939
|
-
<span class="cline-any cline-
|
|
940
|
-
<span class="cline-any cline-
|
|
941
|
-
<span class="cline-any cline-
|
|
942
|
-
<span class="cline-any cline-
|
|
943
|
-
<span class="cline-any cline-
|
|
944
|
-
<span class="cline-any cline-
|
|
945
|
-
<span class="cline-any cline-
|
|
946
|
-
<span class="cline-any cline-
|
|
947
|
-
<span class="cline-any cline-
|
|
948
|
-
<span class="cline-any cline-
|
|
949
|
-
<span class="cline-any cline-
|
|
950
|
-
<span class="cline-any cline-
|
|
951
|
-
<span class="cline-any cline-
|
|
952
|
-
<span class="cline-any cline-
|
|
953
|
-
<span class="cline-any cline-
|
|
954
|
-
<span class="cline-any cline-
|
|
955
|
-
<span class="cline-any cline-
|
|
956
|
-
<span class="cline-any cline-
|
|
957
|
-
<span class="cline-any cline-
|
|
958
|
-
<span class="cline-any cline-
|
|
959
|
-
<span class="cline-any cline-
|
|
960
|
-
<span class="cline-any cline-
|
|
961
|
-
<span class="cline-any cline-
|
|
962
|
-
<span class="cline-any cline-
|
|
963
|
-
<span class="cline-any cline-
|
|
964
|
-
<span class="cline-any cline-
|
|
965
|
-
<span class="cline-any cline-
|
|
966
|
-
<span class="cline-any cline-
|
|
967
|
-
<span class="cline-any cline-
|
|
968
|
-
<span class="cline-any cline-
|
|
969
|
-
<span class="cline-any cline-
|
|
970
|
-
<span class="cline-any cline-
|
|
971
|
-
<span class="cline-any cline-
|
|
972
|
-
<span class="cline-any cline-
|
|
973
|
-
<span class="cline-any cline-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
<span class="
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
<span class="
|
|
1025
|
-
<span class="
|
|
1026
|
-
<span class="
|
|
1027
|
-
<span class="cline-any cline-no"> </span>
|
|
1028
|
-
<span class="cline-any cline-no"> </span>
|
|
1029
|
-
<span class="cline-any cline-no"> </span>
|
|
1030
|
-
<span class="cline-any cline-no"> </span>
|
|
1031
|
-
<span class="cline-any cline-no"> </span>
|
|
1032
|
-
<span class="cline-any cline-no"> </span>
|
|
1033
|
-
<span class="cline-any cline-no"> </span>
|
|
1034
|
-
<span class="cline-any cline-no"> </span>
|
|
1035
|
-
<span class="cline-any cline-no"> </span>
|
|
1036
|
-
<span class="cline-any cline-no"> </span>
|
|
1037
|
-
<span class="cline-any cline-no"> </span>
|
|
1038
|
-
<span class="cline-any cline-no"> </span>
|
|
1039
|
-
<span class="cline-any cline-no"> </span>
|
|
1040
|
-
<span class="cline-any cline-no"> </span>
|
|
1041
|
-
<span class="cline-any cline-no"> </span>
|
|
1042
|
-
<span class="cline-any cline-no"> </span>
|
|
1043
|
-
<span class="cline-any cline-no"> </span>
|
|
1044
|
-
<span class="cline-any cline-no"> </span>
|
|
1045
|
-
<span class="cline-any cline-no"> </span>
|
|
1046
|
-
<span class="cline-any cline-no"> </span>
|
|
1047
|
-
<span class="cline-any cline-no"> </span>
|
|
1048
|
-
<span class="cline-any cline-no"> </span>
|
|
1049
|
-
<span class="cline-any cline-no"> </span>
|
|
1050
|
-
<span class="cline-any cline-no"> </span>
|
|
1051
|
-
<span class="cline-any cline-no"> </span>
|
|
1052
|
-
<span class="cline-any cline-no"> </span>
|
|
1053
|
-
<span class="cline-any cline-no"> </span>
|
|
1054
|
-
<span class="cline-any cline-no"> </span>
|
|
1055
|
-
<span class="cline-any cline-no"> </span>
|
|
1056
|
-
<span class="cline-any cline-no"> </span>
|
|
1057
|
-
<span class="cline-any cline-no"> </span>
|
|
1058
|
-
<span class="cline-any cline-no"> </span>
|
|
1059
|
-
<span class="cline-any cline-no"> </span>
|
|
1060
|
-
<span class="cline-any cline-no"> </span>
|
|
1061
|
-
<span class="cline-any cline-no"> </span>
|
|
1062
|
-
<span class="cline-any cline-no"> </span>
|
|
1063
|
-
<span class="cline-any cline-no"> </span>
|
|
1064
|
-
<span class="cline-any cline-no"> </span>
|
|
1065
|
-
<span class="cline-any cline-no"> </span>
|
|
1066
|
-
<span class="cline-any cline-no"> </span>
|
|
1067
|
-
<span class="cline-any cline-no"> </span>
|
|
1068
|
-
<span class="cline-any cline-no"> </span>
|
|
1069
|
-
<span class="cline-any cline-no"> </span>
|
|
1070
|
-
<span class="cline-any cline-no"> </span>
|
|
1071
|
-
<span class="cline-any cline-no"> </span>
|
|
1072
|
-
<span class="cline-any cline-no"> </span>
|
|
1073
|
-
<span class="cline-any cline-no"> </span>
|
|
1074
|
-
<span class="cline-any cline-no"> </span>
|
|
1075
|
-
<span class="cline-any cline-no"> </span>
|
|
1076
|
-
<span class="cline-any cline-no"> </span>
|
|
1077
|
-
<span class="cline-any cline-no"> </span>
|
|
1078
|
-
<span class="cline-any cline-no"> </span>
|
|
1079
|
-
<span class="cline-any cline-no"> </span>
|
|
1080
|
-
<span class="cline-any cline-no"> </span>
|
|
1081
|
-
<span class="cline-any cline-no"> </span>
|
|
1082
|
-
<span class="cline-any cline-no"> </span>
|
|
1083
|
-
<span class="cline-any cline-no"> </span>
|
|
1084
|
-
<span class="cline-any cline-no"> </span>
|
|
1085
|
-
<span class="cline-any cline-no"> </span>
|
|
1086
|
-
<span class="cline-any cline-no"> </span>
|
|
1087
|
-
<span class="cline-any cline-no"> </span>
|
|
1088
|
-
<span class="cline-any cline-no"> </span>
|
|
1089
|
-
<span class="cline-any cline-no"> </span>
|
|
1090
|
-
<span class="cline-any cline-no"> </span>
|
|
1091
|
-
<span class="cline-any cline-no"> </span>
|
|
1092
|
-
<span class="cline-any cline-no"> </span>
|
|
1093
|
-
<span class="cline-any cline-no"> </span>
|
|
1094
|
-
<span class="cline-any cline-no"> </span>
|
|
1095
|
-
<span class="cline-any cline-no"> </span>
|
|
1096
|
-
<span class="cline-any cline-no"> </span>
|
|
1097
|
-
<span class="cline-any cline-no"> </span>
|
|
1098
|
-
<span class="cline-any cline-no"> </span>
|
|
1099
|
-
<span class="cline-any cline-no"> </span>
|
|
1100
|
-
<span class="cline-any cline-no"> </span>
|
|
1101
|
-
<span class="cline-any cline-no"> </span>
|
|
1102
|
-
<span class="cline-any cline-no"> </span>
|
|
1103
|
-
<span class="cline-any cline-no"> </span>
|
|
1104
|
-
<span class="cline-any cline-no"> </span>
|
|
1105
|
-
<span class="cline-any cline-no"> </span>
|
|
1106
|
-
<span class="cline-any cline-no"> </span>
|
|
1107
|
-
<span class="cline-any cline-no"> </span>
|
|
1108
|
-
<span class="cline-any cline-no"> </span>
|
|
1109
|
-
<span class="cline-any cline-no"> </span>
|
|
1110
|
-
<span class="cline-any cline-no"> </span>
|
|
1111
|
-
<span class="cline-any cline-no"> </span>
|
|
1112
|
-
<span class="cline-any cline-no"> </span>
|
|
1113
|
-
<span class="cline-any cline-no"> </span>
|
|
1114
|
-
<span class="cline-any cline-no"> </span>
|
|
1115
|
-
<span class="cline-any cline-no"> </span>
|
|
1116
|
-
<span class="cline-any cline-no"> </span>
|
|
1117
|
-
<span class="cline-any cline-no"> </span>
|
|
1118
|
-
<span class="cline-any cline-no"> </span>
|
|
1119
|
-
<span class="cline-any cline-no"> </span>
|
|
1120
|
-
<span class="cline-any cline-no"> </span>
|
|
1121
|
-
<span class="cline-any cline-no"> </span>
|
|
1122
|
-
<span class="cline-any cline-no"> </span>
|
|
1123
|
-
<span class="cline-any cline-no"> </span>
|
|
1124
|
-
<span class="cline-any cline-no"> </span>
|
|
1125
|
-
<span class="cline-any cline-no"> </span>
|
|
1126
|
-
<span class="cline-any cline-no"> </span>
|
|
1127
|
-
<span class="cline-any cline-no"> </span>
|
|
1128
|
-
<span class="cline-any cline-no"> </span>
|
|
1129
|
-
<span class="cline-any cline-no"> </span>
|
|
1130
|
-
<span class="cline-any cline-no"> </span>
|
|
1131
|
-
<span class="cline-any cline-no"> </span>
|
|
1132
|
-
<span class="cline-any cline-no"> </span>
|
|
1133
|
-
<span class="cline-any cline-no"> </span>
|
|
1134
|
-
<span class="cline-any cline-no"> </span>
|
|
1135
|
-
<span class="cline-any cline-no"> </span>
|
|
1136
|
-
<span class="cline-any cline-no"> </span>
|
|
1137
|
-
<span class="cline-any cline-no"> </span>
|
|
1138
|
-
<span class="cline-any cline-no"> </span>
|
|
1139
|
-
<span class="cline-any cline-no"> </span>
|
|
1140
|
-
<span class="cline-any cline-no"> </span>
|
|
1141
|
-
<span class="cline-any cline-no"> </span>
|
|
1142
|
-
<span class="cline-any cline-no"> </span>
|
|
1143
|
-
<span class="cline-any cline-no"> </span>
|
|
1144
|
-
<span class="cline-any cline-no"> </span>
|
|
1145
|
-
<span class="cline-any cline-no"> </span>
|
|
1146
|
-
<span class="cline-any cline-no"> </span>
|
|
1147
|
-
<span class="cline-any cline-no"> </span>
|
|
1148
|
-
<span class="cline-any cline-no"> </span>
|
|
1149
|
-
<span class="cline-any cline-no"> </span>
|
|
1150
|
-
<span class="cline-any cline-no"> </span>
|
|
1151
|
-
<span class="cline-any cline-no"> </span>
|
|
1152
|
-
<span class="cline-any cline-no"> </span>
|
|
1153
|
-
<span class="cline-any cline-no"> </span>
|
|
1154
|
-
<span class="cline-any cline-no"> </span>
|
|
1155
|
-
<span class="cline-any cline-no"> </span>
|
|
1156
|
-
<span class="cline-any cline-no"> </span>
|
|
1157
|
-
<span class="cline-any cline-no"> </span>
|
|
1158
|
-
<span class="cline-any cline-no"> </span>
|
|
1159
|
-
<span class="cline-any cline-no"> </span>
|
|
1160
|
-
<span class="cline-any cline-no"> </span>
|
|
1161
|
-
<span class="cline-any cline-no"> </span>
|
|
1162
|
-
<span class="cline-any cline-no"> </span>
|
|
1163
|
-
<span class="cline-any cline-no"> </span>
|
|
1164
|
-
<span class="cline-any cline-no"> </span>
|
|
1165
|
-
<span class="cline-any cline-no"> </span>
|
|
1166
|
-
<span class="cline-any cline-no"> </span>
|
|
1167
|
-
<span class="cline-any cline-no"> </span>
|
|
1168
|
-
<span class="cline-any cline-no"> </span>
|
|
1169
|
-
<span class="cline-any cline-no"> </span>
|
|
1170
|
-
<span class="cline-any cline-no"> </span>
|
|
1171
|
-
<span class="cline-any cline-no"> </span>
|
|
1172
|
-
<span class="cline-any cline-no"> </span>
|
|
1173
|
-
<span class="cline-any cline-no"> </span>
|
|
1174
|
-
<span class="cline-any cline-no"> </span>
|
|
1175
|
-
<span class="cline-any cline-no"> </span>
|
|
1176
|
-
<span class="cline-any cline-no"> </span>
|
|
1177
|
-
<span class="cline-any cline-no"> </span>
|
|
1178
|
-
<span class="cline-any cline-no"> </span>
|
|
1179
|
-
<span class="cline-any cline-no"> </span>
|
|
1180
|
-
<span class="cline-any cline-no"> </span>
|
|
1181
|
-
<span class="cline-any cline-no"> </span>
|
|
1182
|
-
<span class="cline-any cline-no"> </span>
|
|
1183
|
-
<span class="cline-any cline-no"> </span>
|
|
1184
|
-
<span class="cline-any cline-no"> </span>
|
|
1185
|
-
<span class="cline-any cline-no"> </span>
|
|
1186
|
-
<span class="cline-any cline-no"> </span>
|
|
1187
|
-
<span class="cline-any cline-no"> </span>
|
|
1188
|
-
<span class="cline-any cline-no"> </span>
|
|
1189
|
-
<span class="cline-any cline-no"> </span>
|
|
1190
|
-
<span class="cline-any cline-no"> </span>
|
|
1191
|
-
<span class="cline-any cline-no"> </span>
|
|
1192
|
-
<span class="cline-any cline-no"> </span>
|
|
1193
|
-
<span class="cline-any cline-no"> </span>
|
|
1194
|
-
<span class="cline-any cline-no"> </span>
|
|
1195
|
-
<span class="cline-any cline-no"> </span>
|
|
1196
|
-
<span class="cline-any cline-no"> </span>
|
|
1197
|
-
<span class="cline-any cline-no"> </span>
|
|
1198
|
-
<span class="cline-any cline-no"> </span>
|
|
1199
|
-
<span class="cline-any cline-no"> </span>
|
|
1200
|
-
<span class="cline-any cline-no"> </span>
|
|
1201
|
-
<span class="cline-any cline-no"> </span>
|
|
1202
|
-
<span class="cline-any cline-no"> </span>
|
|
1203
|
-
<span class="cline-any cline-no"> </span>
|
|
1204
|
-
<span class="cline-any cline-no"> </span>
|
|
1205
|
-
<span class="cline-any cline-no"> </span>
|
|
1206
|
-
<span class="cline-any cline-no"> </span>
|
|
1207
|
-
<span class="cline-any cline-no"> </span>
|
|
1208
|
-
<span class="cline-any cline-no"> </span>
|
|
1209
|
-
<span class="cline-any cline-no"> </span>
|
|
1210
|
-
<span class="cline-any cline-no"> </span>
|
|
1211
|
-
<span class="cline-any cline-no"> </span>
|
|
1212
|
-
<span class="cline-any cline-no"> </span>
|
|
1213
|
-
<span class="cline-any cline-no"> </span>
|
|
1214
|
-
<span class="cline-any cline-no"> </span>
|
|
1215
|
-
<span class="cline-any cline-no"> </span>
|
|
1216
|
-
<span class="cline-any cline-no"> </span>
|
|
1217
|
-
<span class="cline-any cline-no"> </span>
|
|
1218
|
-
<span class="cline-any cline-no"> </span>
|
|
1219
|
-
<span class="cline-any cline-no"> </span>
|
|
1220
|
-
<span class="cline-any cline-no"> </span>
|
|
1221
|
-
<span class="cline-any cline-no"> </span>
|
|
1222
|
-
<span class="cline-any cline-no"> </span>
|
|
1223
|
-
<span class="cline-any cline-no"> </span>
|
|
1224
|
-
<span class="cline-any cline-no"> </span>
|
|
1225
|
-
<span class="cline-any cline-no"> </span>
|
|
1226
|
-
<span class="cline-any cline-no"> </span>
|
|
1227
|
-
<span class="cline-any cline-no"> </span>
|
|
1228
|
-
<span class="cline-any cline-no"> </span>
|
|
1229
|
-
<span class="cline-any cline-no"> </span>
|
|
1230
|
-
<span class="cline-any cline-no"> </span>
|
|
1231
|
-
<span class="cline-any cline-no"> </span>
|
|
1232
|
-
<span class="cline-any cline-no"> </span>
|
|
1233
|
-
<span class="cline-any cline-no"> </span>
|
|
1234
|
-
<span class="cline-any cline-no"> </span>
|
|
1235
|
-
<span class="cline-any cline-no"> </span>
|
|
1236
|
-
<span class="cline-any cline-no"> </span>
|
|
1237
|
-
<span class="cline-any cline-no"> </span>
|
|
1238
|
-
<span class="cline-any cline-no"> </span>
|
|
1239
|
-
<span class="cline-any cline-no"> </span>
|
|
1240
|
-
<span class="cline-any cline-no"> </span>
|
|
1241
|
-
<span class="cline-any cline-no"> </span>
|
|
1242
|
-
<span class="cline-any cline-no"> </span>
|
|
1243
|
-
<span class="cline-any cline-no"> </span>
|
|
1244
|
-
<span class="cline-any cline-no"> </span>
|
|
1245
|
-
<span class="cline-any cline-no"> </span>
|
|
1246
|
-
<span class="cline-any cline-no"> </span>
|
|
1247
|
-
<span class="cline-any cline-no"> </span>
|
|
1248
|
-
<span class="cline-any cline-no"> </span>
|
|
1249
|
-
<span class="cline-any cline-no"> </span>
|
|
1250
|
-
<span class="cline-any cline-no"> </span>
|
|
1251
|
-
<span class="cline-any cline-no"> </span>
|
|
1252
|
-
<span class="cline-any cline-no"> </span>
|
|
1253
|
-
<span class="cline-any cline-no"> </span>
|
|
1254
|
-
<span class="cline-any cline-no"> </span>
|
|
1255
|
-
<span class="cline-any cline-no"> </span>
|
|
1256
|
-
<span class="cline-any cline-no"> </span>
|
|
1257
|
-
<span class="cline-any cline-no"> </span>
|
|
1258
|
-
<span class="cline-any cline-no"> </span>
|
|
1259
|
-
<span class="cline-any cline-no"> </span>
|
|
1260
|
-
<span class="cline-any cline-no"> </span>
|
|
1261
|
-
<span class="cline-any cline-no"> </span>
|
|
1262
|
-
<span class="cline-any cline-no"> </span>
|
|
1263
|
-
<span class="cline-any cline-no"> </span>
|
|
1264
|
-
<span class="cline-any cline-no"> </span>
|
|
1265
|
-
<span class="cline-any cline-no"> </span>
|
|
1266
|
-
<span class="cline-any cline-no"> </span>
|
|
1267
|
-
<span class="cline-any cline-no"> </span>
|
|
1268
|
-
<span class="cline-any cline-no"> </span>
|
|
1269
|
-
<span class="cline-any cline-no"> </span>
|
|
1270
|
-
<span class="cline-any cline-no"> </span>
|
|
1271
|
-
<span class="cline-any cline-no"> </span>
|
|
1272
|
-
<span class="cline-any cline-no"> </span>
|
|
1273
|
-
<span class="cline-any cline-no"> </span>
|
|
1274
|
-
<span class="cline-any cline-no"> </span>
|
|
1275
|
-
<span class="cline-any cline-no"> </span>
|
|
1276
|
-
<span class="cline-any cline-no"> </span>
|
|
1277
|
-
<span class="cline-any cline-no"> </span>
|
|
1278
|
-
<span class="cline-any cline-no"> </span>
|
|
1279
|
-
<span class="cline-any cline-no"> </span>
|
|
1280
|
-
<span class="cline-any cline-no"> </span>
|
|
1281
|
-
<span class="cline-any cline-no"> </span>
|
|
1282
|
-
<span class="cline-any cline-no"> </span>
|
|
1283
|
-
<span class="cline-any cline-no"> </span>
|
|
1284
|
-
<span class="cline-any cline-no"> </span>
|
|
1285
|
-
<span class="cline-any cline-no"> </span>
|
|
1286
|
-
<span class="cline-any cline-neutral"> </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>
|
|
1287
|
-
<span class="cstat-no" title="statement not covered" > * HSuite Native Connect</span>
|
|
1288
|
-
<span class="cstat-no" title="statement not covered" > * Copyright 2024-2025 HSuite (https://hsuite.finance)</span>
|
|
1289
|
-
<span class="cstat-no" title="statement not covered" > *</span>
|
|
1290
|
-
<span class="cstat-no" title="statement not covered" > * SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0</span>
|
|
1291
|
-
<span class="cstat-no" title="statement not covered" > *</span>
|
|
1292
|
-
<span class="cstat-no" title="statement not covered" > * This file is part of HSuite Native Connect. For commercial licensing,</span>
|
|
1293
|
-
<span class="cstat-no" title="statement not covered" > * visit https://hsuite.finance/licensing</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" > * @file hedera-signer.ts</span>
|
|
1298
|
-
<span class="cstat-no" title="statement not covered" > * @description Hedera-specific WalletConnect signer implementation</span>
|
|
1299
|
-
<span class="cstat-no" title="statement not covered" > *</span>
|
|
1300
|
-
<span class="cstat-no" title="statement not covered" > * Implements the IWalletConnectSigner interface for Hedera ledger.</span>
|
|
1301
|
-
<span class="cstat-no" title="statement not covered" > * Handles Hedera-specific JSON-RPC methods and transaction formats.</span>
|
|
1302
|
-
<span class="cstat-no" title="statement not covered" > */</span>
|
|
1303
|
-
<span class="cstat-no" title="statement not covered" ></span>
|
|
1304
|
-
<span class="cstat-no" title="statement not covered" >import { getLogger } from '@hsuite/native-connect-sdk';</span>
|
|
1305
|
-
<span class="cstat-no" title="statement not covered" ></span>
|
|
1306
|
-
<span class="cstat-no" title="statement not covered" >import type { SignResult, SubmitResult } from '../../base-wallet-provider';</span>
|
|
1307
|
-
<span class="cstat-no" title="statement not covered" >import type { IWalletConnectSigner, SignerOperationParams } from '../core/base-signer.interface';</span>
|
|
1308
|
-
<span class="cstat-no" title="statement not covered" ></span>
|
|
1309
|
-
<span class="cstat-no" title="statement not covered" >const logger = getLogger().scoped?.('HederaSigner') ?? getLogger();</span>
|
|
1310
|
-
<span class="cstat-no" title="statement not covered" ></span>
|
|
1311
|
-
<span class="cstat-no" title="statement not covered" >/**</span>
|
|
1312
|
-
<span class="cstat-no" title="statement not covered" > * Extract a meaningful error message from various error shapes.</span>
|
|
1313
|
-
<span class="cstat-no" title="statement not covered" > * WalletConnect SDK throws errors that are not standard Error instances.</span>
|
|
1314
|
-
<span class="cstat-no" title="statement not covered" > *</span>
|
|
1315
|
-
<span class="cstat-no" title="statement not covered" > * Handles:</span>
|
|
1316
|
-
<span class="cstat-no" title="statement not covered" > * - Standard Error objects</span>
|
|
1317
|
-
<span class="cstat-no" title="statement not covered" > * - WalletConnect SDK errors: { code, message }</span>
|
|
1318
|
-
<span class="cstat-no" title="statement not covered" > * - Nested errors: { error: { message } }</span>
|
|
1319
|
-
<span class="cstat-no" title="statement not covered" > * - PIN_REQUIRED errors from wallet</span>
|
|
1320
|
-
<span class="cstat-no" title="statement not covered" > * - DOMException objects</span>
|
|
1321
|
-
<span class="cstat-no" title="statement not covered" > * - Objects that stringify to {} (enumerable property check)</span>
|
|
1322
|
-
<span class="cstat-no" title="statement not covered" > *</span>
|
|
1323
|
-
<span class="cstat-no" title="statement not covered" > * @param error - Error from WalletConnect SDK (can be Error, object, or string)</span>
|
|
1324
|
-
<span class="cstat-no" title="statement not covered" > * @returns Human-readable error message</span>
|
|
1325
|
-
<span class="cstat-no" title="statement not covered" > */</span>
|
|
1326
|
-
<span class="cstat-no" title="statement not covered" >function extractErrorMessage(error: unknown): string {</span>
|
|
1327
|
-
<span class="cstat-no" title="statement not covered" > // Log the raw error for debugging</span>
|
|
1328
|
-
<span class="cstat-no" title="statement not covered" > logger.debug('Extracting error message', {</span>
|
|
1329
|
-
<span class="cstat-no" title="statement not covered" > errorType: typeof error,</span>
|
|
1330
|
-
<span class="cstat-no" title="statement not covered" > isError: error instanceof Error,</span>
|
|
1331
|
-
<span class="cstat-no" title="statement not covered" > constructorName: error?.constructor?.name,</span>
|
|
1332
|
-
<span class="cstat-no" title="statement not covered" > protoName: Object.getPrototypeOf(error)?.constructor?.name,</span>
|
|
1333
|
-
<span class="cstat-no" title="statement not covered" > });</span>
|
|
1334
|
-
<span class="cstat-no" title="statement not covered" ></span>
|
|
1335
|
-
<span class="cstat-no" title="statement not covered" > if (error instanceof Error) {</span>
|
|
1336
|
-
<span class="cstat-no" title="statement not covered" > return error.message;</span>
|
|
1337
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1338
|
-
<span class="cstat-no" title="statement not covered" ></span>
|
|
1339
|
-
<span class="cstat-no" title="statement not covered" > if (typeof error === 'object' && error !== null) {</span>
|
|
1236
|
+
<span class="cline-any cline-yes">19x</span>
|
|
1237
|
+
<span class="cline-any cline-yes">19x</span>
|
|
1238
|
+
<span class="cline-any cline-yes">20x</span>
|
|
1239
|
+
<span class="cline-any cline-yes">20x</span>
|
|
1240
|
+
<span class="cline-any cline-yes">32x</span>
|
|
1241
|
+
<span class="cline-any cline-yes">32x</span>
|
|
1242
|
+
<span class="cline-any cline-yes">32x</span>
|
|
1243
|
+
<span class="cline-any cline-yes">32x</span>
|
|
1244
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1245
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1246
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1247
|
+
<span class="cline-any cline-yes">31x</span>
|
|
1248
|
+
<span class="cline-any cline-yes">31x</span>
|
|
1249
|
+
<span class="cline-any cline-yes">31x</span>
|
|
1250
|
+
<span class="cline-any cline-yes">31x</span>
|
|
1251
|
+
<span class="cline-any cline-yes">31x</span>
|
|
1252
|
+
<span class="cline-any cline-yes">32x</span>
|
|
1253
|
+
<span class="cline-any cline-yes">20x</span>
|
|
1254
|
+
<span class="cline-any cline-yes">20x</span>
|
|
1255
|
+
<span class="cline-any cline-yes">20x</span>
|
|
1256
|
+
<span class="cline-any cline-yes">20x</span>
|
|
1257
|
+
<span class="cline-any cline-yes">14x</span>
|
|
1258
|
+
<span class="cline-any cline-yes">14x</span>
|
|
1259
|
+
<span class="cline-any cline-yes">14x</span>
|
|
1260
|
+
<span class="cline-any cline-yes">14x</span>
|
|
1261
|
+
<span class="cline-any cline-yes">20x</span>
|
|
1262
|
+
<span class="cline-any cline-yes">14x</span>
|
|
1263
|
+
<span class="cline-any cline-yes">14x</span>
|
|
1264
|
+
<span class="cline-any cline-yes">14x</span>
|
|
1265
|
+
<span class="cline-any cline-yes">14x</span>
|
|
1266
|
+
<span class="cline-any cline-yes">14x</span>
|
|
1267
|
+
<span class="cline-any cline-yes">14x</span>
|
|
1268
|
+
<span class="cline-any cline-yes">14x</span>
|
|
1269
|
+
<span class="cline-any cline-yes">14x</span>
|
|
1270
|
+
<span class="cline-any cline-yes">14x</span>
|
|
1271
|
+
<span class="cline-any cline-yes">14x</span>
|
|
1272
|
+
<span class="cline-any cline-yes">14x</span>
|
|
1273
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1274
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1275
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1276
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1277
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1278
|
+
<span class="cline-any cline-yes">14x</span>
|
|
1279
|
+
<span class="cline-any cline-yes">14x</span>
|
|
1280
|
+
<span class="cline-any cline-yes">14x</span>
|
|
1281
|
+
<span class="cline-any cline-yes">14x</span>
|
|
1282
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1283
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1284
|
+
<span class="cline-any cline-yes">20x</span>
|
|
1285
|
+
<span class="cline-any cline-yes">23x</span>
|
|
1286
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">/**
|
|
1287
|
+
* HSuite Native Connect
|
|
1288
|
+
* Copyright 2024-2025 HSuite (https://hsuite.finance)
|
|
1289
|
+
*
|
|
1290
|
+
* SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0
|
|
1291
|
+
*
|
|
1292
|
+
* This file is part of HSuite Native Connect. For commercial licensing,
|
|
1293
|
+
* visit https://hsuite.finance/licensing
|
|
1294
|
+
*/
|
|
1295
|
+
|
|
1296
|
+
/**
|
|
1297
|
+
* @file hedera-signer.ts
|
|
1298
|
+
* @description Hedera-specific WalletConnect signer implementation
|
|
1299
|
+
*
|
|
1300
|
+
* Implements the IWalletConnectSigner interface for Hedera ledger.
|
|
1301
|
+
* Handles Hedera-specific JSON-RPC methods and transaction formats.
|
|
1302
|
+
*/
|
|
1303
|
+
|
|
1304
|
+
import { getLogger } from '@hsuite/native-connect-sdk';
|
|
1305
|
+
|
|
1306
|
+
import type { SignResult, SubmitResult } from '../../base-wallet-provider';
|
|
1307
|
+
import type { IWalletConnectSigner, SignerOperationParams } from '../core/base-signer.interface';
|
|
1308
|
+
|
|
1309
|
+
const logger = getLogger().scoped?.('HederaSigner'<span class="branch-0 cbranch-no" title="branch not covered" >) ?? getLogger();</span>
|
|
1310
|
+
|
|
1311
|
+
/**
|
|
1312
|
+
* Extract a meaningful error message from various error shapes.
|
|
1313
|
+
* WalletConnect SDK throws errors that are not standard Error instances.
|
|
1314
|
+
*
|
|
1315
|
+
* Handles:
|
|
1316
|
+
* - Standard Error objects
|
|
1317
|
+
* - WalletConnect SDK errors: { code, message }
|
|
1318
|
+
* - Nested errors: { error: { message } }
|
|
1319
|
+
* - PIN_REQUIRED errors from wallet
|
|
1320
|
+
* - DOMException objects
|
|
1321
|
+
* - Objects that stringify to {} (enumerable property check)
|
|
1322
|
+
*
|
|
1323
|
+
* @param error - Error from WalletConnect SDK (can be Error, object, or string)
|
|
1324
|
+
* @returns Human-readable error message
|
|
1325
|
+
*/
|
|
1326
|
+
function extractErrorMessage(error: unknown): string {
|
|
1327
|
+
// Log the raw error for debugging
|
|
1328
|
+
logger.debug('Extracting error message', {
|
|
1329
|
+
errorType: typeof error,
|
|
1330
|
+
isError: error instanceof Error,
|
|
1331
|
+
constructorName: error?.constructor?.name,
|
|
1332
|
+
protoName: Object.getPrototypeOf(error)?.constructor?.name,
|
|
1333
|
+
});
|
|
1334
|
+
|
|
1335
|
+
if (error instanceof Error) {
|
|
1336
|
+
return error.message;
|
|
1337
|
+
<span class="branch-0 cbranch-no" title="branch not covered" > }</span>
|
|
1338
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1339
|
+
if (typeof error === 'object' && error !== null) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
1340
1340
|
<span class="cstat-no" title="statement not covered" > const errorObj = error as Record<string, unknown>;</span>
|
|
1341
1341
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
1342
1342
|
<span class="cstat-no" title="statement not covered" > // Try to get all properties including non-enumerable and from prototype</span>
|
|
@@ -1503,218 +1503,218 @@
|
|
|
1503
1503
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
1504
1504
|
<span class="cstat-no" title="statement not covered" > return 'Unknown error';</span>
|
|
1505
1505
|
<span class="cstat-no" title="statement not covered" >}</span>
|
|
1506
|
-
|
|
1507
|
-
|
|
1508
|
-
|
|
1509
|
-
|
|
1510
|
-
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
|
|
1549
|
-
|
|
1550
|
-
|
|
1551
|
-
|
|
1552
|
-
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
|
|
1564
|
-
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
|
|
1594
|
-
|
|
1595
|
-
<span class="cstat-no" title="statement not covered" > (result as { signedTransaction?: any })
|
|
1506
|
+
|
|
1507
|
+
/**
|
|
1508
|
+
* Signer implementation for Hedera ledger.
|
|
1509
|
+
*
|
|
1510
|
+
* Supports Hedera-specific WalletConnect methods:
|
|
1511
|
+
* - hedera_signTransaction (sign-only, returns signature map)
|
|
1512
|
+
* - hedera_signAndExecuteTransaction (sign + submit, returns transaction ID)
|
|
1513
|
+
* - hedera_executeTransaction
|
|
1514
|
+
* - hedera_signMessage (arbitrary message signing)
|
|
1515
|
+
*
|
|
1516
|
+
* Uses HIP-30 account format: hedera:<network>:<accountId>
|
|
1517
|
+
*/
|
|
1518
|
+
export class HederaSigner implements IWalletConnectSigner {
|
|
1519
|
+
readonly ledgerId = 'hedera';
|
|
1520
|
+
|
|
1521
|
+
/**
|
|
1522
|
+
* Build Hedera namespace configuration for WalletConnect.
|
|
1523
|
+
* Defines the JSON-RPC methods and chains this signer supports.
|
|
1524
|
+
*
|
|
1525
|
+
* IMPORTANT: We request ALL Hedera networks (testnet, mainnet)
|
|
1526
|
+
* to ensure wallets like Kabila can show accounts from unknown network.
|
|
1527
|
+
* The wallet will return all accounts it has across all networks.
|
|
1528
|
+
*
|
|
1529
|
+
* @param networkId - Network identifier (e.g., 'hedera:testnet', 'hedera:mainnet')
|
|
1530
|
+
* @param _networkId
|
|
1531
|
+
* @returns Namespace configuration object
|
|
1532
|
+
*/
|
|
1533
|
+
buildNamespace(_networkId: string): {
|
|
1534
|
+
methods: string[];
|
|
1535
|
+
chains: string[];
|
|
1536
|
+
events: string[];
|
|
1537
|
+
} {
|
|
1538
|
+
// Request ALL Hedera networks to allow wallets to show all their accounts
|
|
1539
|
+
// Wallets like Kabila may have accounts on multiple networks
|
|
1540
|
+
|
|
1541
|
+
return {
|
|
1542
|
+
methods: [
|
|
1543
|
+
'hedera_signTransaction',
|
|
1544
|
+
'hedera_signAndExecuteTransaction',
|
|
1545
|
+
'hedera_executeTransaction',
|
|
1546
|
+
'hedera_signMessage',
|
|
1547
|
+
],
|
|
1548
|
+
// Request all Hedera networks so wallet can show all accounts
|
|
1549
|
+
chains: ['hedera:testnet', 'hedera:mainnet'],
|
|
1550
|
+
events: ['chainChanged', 'accountsChanged'],
|
|
1551
|
+
};
|
|
1552
|
+
}
|
|
1553
|
+
|
|
1554
|
+
/**
|
|
1555
|
+
* Sign a Hedera transaction without submitting to network.
|
|
1556
|
+
* Uses hedera_signTransaction method with TransactionList format.
|
|
1557
|
+
*
|
|
1558
|
+
* The payload comes as TransactionList (base64 frozen transaction bytes).
|
|
1559
|
+
* We send the full TransactionList to preserve canonical bytes for signing.
|
|
1560
|
+
* The wallet will sign and return the signature map without executing.
|
|
1561
|
+
*
|
|
1562
|
+
* @param params - Signing parameters (payload is TransactionList base64)
|
|
1563
|
+
* @returns Promise resolving to signed transaction with signature map
|
|
1564
|
+
*/
|
|
1565
|
+
async signTransaction(params: SignerOperationParams): Promise<SignResult> {
|
|
1566
|
+
// Extract network name from networkId (mainnet or testnet)
|
|
1567
|
+
const network = params.networkId.includes('mainnet') ? 'mainnet' : 'testnet';
|
|
1568
|
+
|
|
1569
|
+
// Format account ID in HIP-30 format
|
|
1570
|
+
const signerAccountId = `hedera:${network}:${params.accountAddress}`;
|
|
1571
|
+
|
|
1572
|
+
try {
|
|
1573
|
+
// Send the full TransactionList (frozen transaction bytes) to preserve canonical bytes.
|
|
1574
|
+
// The wallet needs the complete transaction structure to sign correctly.
|
|
1575
|
+
// Previously we converted to TransactionBody which caused INVALID_SIGNATURE errors
|
|
1576
|
+
// because the signature was computed over different bytes than the network expected.
|
|
1577
|
+
|
|
1578
|
+
// Use 5-minute expiry to give users time to review and approve
|
|
1579
|
+
const result = await params.client.request({
|
|
1580
|
+
topic: params.topic,
|
|
1581
|
+
chainId: `hedera:${network}`,
|
|
1582
|
+
request: {
|
|
1583
|
+
method: 'hedera_signTransaction',
|
|
1584
|
+
params: {
|
|
1585
|
+
signerAccountId,
|
|
1586
|
+
transactionList: params.payload, // Send full TransactionList for correct signing
|
|
1587
|
+
},
|
|
1588
|
+
},
|
|
1589
|
+
expiry: 300, // 5 minutes in seconds
|
|
1590
|
+
});
|
|
1591
|
+
|
|
1592
|
+
return {
|
|
1593
|
+
signedPayload: String(
|
|
1594
|
+
(result as { signatureMap?: any }).<span class="branch-0 cbranch-no" title="branch not covered" >signatureMap ||</span>
|
|
1595
|
+
<span class="cstat-no" title="statement not covered" > (result as { signedTransaction?: any }).<span class="branch-0 cbranch-no" title="branch not covered" >signedTransaction ||</span></span>
|
|
1596
1596
|
<span class="cstat-no" title="statement not covered" > JSON.stringify(result),</span>
|
|
1597
|
-
|
|
1598
|
-
|
|
1599
|
-
|
|
1600
|
-
|
|
1601
|
-
|
|
1602
|
-
|
|
1603
|
-
|
|
1604
|
-
|
|
1605
|
-
|
|
1606
|
-
|
|
1607
|
-
|
|
1608
|
-
<span class="
|
|
1597
|
+
),
|
|
1598
|
+
metadata: { result },
|
|
1599
|
+
};
|
|
1600
|
+
} catch (error) {
|
|
1601
|
+
// Check if this is an empty error object (WalletConnect SDK bug)
|
|
1602
|
+
const isEmptyError =
|
|
1603
|
+
typeof error === 'object' &&
|
|
1604
|
+
error !== null &&
|
|
1605
|
+
Object.keys(error).length === 0 &&
|
|
1606
|
+
!(error instanceof Error);
|
|
1607
|
+
|
|
1608
|
+
if (isEmptyError) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
1609
1609
|
<span class="cstat-no" title="statement not covered" > logger.warn('WalletConnect SDK empty error - relay subscription may have been stale', {</span>
|
|
1610
1610
|
<span class="cstat-no" title="statement not covered" > topic: params.topic?.substring(0, 16) + '...',</span>
|
|
1611
1611
|
<span class="cstat-no" title="statement not covered" > });</span>
|
|
1612
1612
|
<span class="cstat-no" title="statement not covered" > throw new Error('WalletConnect connection issue - please try again');</span>
|
|
1613
1613
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1614
|
-
|
|
1615
|
-
|
|
1616
|
-
|
|
1617
|
-
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
<span class="
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
|
|
1637
|
-
|
|
1638
|
-
|
|
1639
|
-
|
|
1640
|
-
|
|
1641
|
-
|
|
1642
|
-
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
|
|
1646
|
-
|
|
1647
|
-
|
|
1648
|
-
|
|
1649
|
-
|
|
1650
|
-
|
|
1651
|
-
|
|
1652
|
-
|
|
1653
|
-
|
|
1654
|
-
|
|
1655
|
-
|
|
1656
|
-
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
|
|
1614
|
+
|
|
1615
|
+
const errorMsg = extractErrorMessage(error);
|
|
1616
|
+
logger.error('Sign failed', { error: errorMsg });
|
|
1617
|
+
throw new Error(`Hedera sign failed: ${errorMsg}`);
|
|
1618
|
+
}
|
|
1619
|
+
}
|
|
1620
|
+
|
|
1621
|
+
/**
|
|
1622
|
+
* Sign and submit a Hedera transaction to the network.
|
|
1623
|
+
* Uses hedera_signAndExecuteTransaction method with TransactionList format.
|
|
1624
|
+
*
|
|
1625
|
+
* @param params - Submission parameters
|
|
1626
|
+
* @returns Promise resolving to transaction ID and metadata
|
|
1627
|
+
*/
|
|
1628
|
+
async submitTransaction(params: SignerOperationParams): Promise<SubmitResult> {
|
|
1629
|
+
// Extract network name from networkId (mainnet or testnet)
|
|
1630
|
+
const network = params.networkId.includes('mainnet'<span class="branch-0 cbranch-no" title="branch not covered" >) ? 'mainnet' : '</span>testnet';
|
|
1631
|
+
|
|
1632
|
+
// Format account ID in HIP-30 format
|
|
1633
|
+
const signerAccountId = `hedera:${network}:${params.accountAddress}`;
|
|
1634
|
+
|
|
1635
|
+
logger.debug('Sending hedera_signAndExecuteTransaction request', {
|
|
1636
|
+
topic: params.topic?.substring(0, 16) + '...',
|
|
1637
|
+
chainId: `hedera:${network}`,
|
|
1638
|
+
signerAccountId,
|
|
1639
|
+
payloadLength: params.payload?.length,
|
|
1640
|
+
});
|
|
1641
|
+
|
|
1642
|
+
// Create the request promise - keep-alive pings are handled by WalletConnectClientManager
|
|
1643
|
+
const requestPromise = params.client.request({
|
|
1644
|
+
topic: params.topic,
|
|
1645
|
+
chainId: `hedera:${network}`,
|
|
1646
|
+
request: {
|
|
1647
|
+
method: 'hedera_signAndExecuteTransaction',
|
|
1648
|
+
params: {
|
|
1649
|
+
signerAccountId,
|
|
1650
|
+
transactionList: params.payload, // TransactionList protobuf (base64)
|
|
1651
|
+
},
|
|
1652
|
+
},
|
|
1653
|
+
expiry: 300, // 5 minutes in seconds
|
|
1654
|
+
});
|
|
1655
|
+
|
|
1656
|
+
// Create a 5-minute timeout to override any internal SDK timeouts
|
|
1657
|
+
const timeoutPromise = new Promise<never>((_, reject) => {
|
|
1658
|
+
setTimeout(
|
|
1659
|
+
() => {
|
|
1660
1660
|
<span class="cstat-no" title="statement not covered" > reject(new Error('Transaction approval timed out after 5 minutes'));</span>
|
|
1661
1661
|
<span class="cstat-no" title="statement not covered" > },</span>
|
|
1662
|
-
|
|
1663
|
-
|
|
1664
|
-
|
|
1665
|
-
|
|
1666
|
-
|
|
1667
|
-
|
|
1668
|
-
|
|
1669
|
-
|
|
1670
|
-
|
|
1671
|
-
|
|
1672
|
-
<span class="
|
|
1673
|
-
|
|
1674
|
-
|
|
1675
|
-
|
|
1676
|
-
|
|
1677
|
-
|
|
1678
|
-
<span class="cstat-no" title="statement not covered" > (result as { response?: { transactionId?: string } }).response
|
|
1662
|
+
5 * 60 * 1000,
|
|
1663
|
+
); // 5 minutes
|
|
1664
|
+
});
|
|
1665
|
+
|
|
1666
|
+
try {
|
|
1667
|
+
// Race between the request and our timeout
|
|
1668
|
+
const result = await Promise.race([requestPromise, timeoutPromise]);
|
|
1669
|
+
|
|
1670
|
+
logger.debug('Received hedera_signAndExecuteTransaction response', {
|
|
1671
|
+
hasResult: !!result,
|
|
1672
|
+
resultKeys: result ? Object.keys(result as object<span class="branch-0 cbranch-no" title="branch not covered" >) : [],</span>
|
|
1673
|
+
});
|
|
1674
|
+
|
|
1675
|
+
return {
|
|
1676
|
+
transactionId:
|
|
1677
|
+
(result as { transactionId?: string }).<span class="branch-0 cbranch-no" title="branch not covered" >transactionId ||</span>
|
|
1678
|
+
<span class="cstat-no" title="statement not covered" > (result as { response?: { transactionId?: string } }).response?.<span class="branch-0 cbranch-no" title="branch not covered" >transactionId ||</span></span>
|
|
1679
1679
|
<span class="cstat-no" title="statement not covered" > '',</span>
|
|
1680
|
-
|
|
1681
|
-
|
|
1682
|
-
|
|
1683
|
-
|
|
1684
|
-
|
|
1685
|
-
|
|
1686
|
-
|
|
1687
|
-
|
|
1688
|
-
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
-
|
|
1693
|
-
|
|
1694
|
-
|
|
1695
|
-
|
|
1696
|
-
|
|
1697
|
-
|
|
1698
|
-
|
|
1699
|
-
|
|
1700
|
-
|
|
1701
|
-
|
|
1680
|
+
transactionHash: (result as { transactionHash?: string }).transactionHash,
|
|
1681
|
+
metadata: { result },
|
|
1682
|
+
};
|
|
1683
|
+
} catch (error) {
|
|
1684
|
+
// Log full error for debugging - try to get more info from WalletConnect error
|
|
1685
|
+
const wcError = error as any;
|
|
1686
|
+
|
|
1687
|
+
// Try to extract all available error info
|
|
1688
|
+
const errorInfo = {
|
|
1689
|
+
errorType: typeof error,
|
|
1690
|
+
errorConstructor: error?.constructor?.name,
|
|
1691
|
+
errorKeys: error && typeof error === 'object' ? Object.keys(error<span class="branch-0 cbranch-no" title="branch not covered" >) : [],</span>
|
|
1692
|
+
errorString: String(error),
|
|
1693
|
+
// WalletConnect specific error properties
|
|
1694
|
+
wcCode: wcError?.code,
|
|
1695
|
+
wcMessage: wcError?.message,
|
|
1696
|
+
wcContext: wcError?.context,
|
|
1697
|
+
wcData: wcError?.data,
|
|
1698
|
+
// Try Symbol properties
|
|
1699
|
+
symbols:
|
|
1700
|
+
error && typeof error === 'object'
|
|
1701
|
+
? Object.getOwnPropertySymbols(error).map((s) => s.toString()<span class="branch-0 cbranch-no" title="branch not covered" >)</span>
|
|
1702
1702
|
<span class="cstat-no" title="statement not covered" > : [],</span>
|
|
1703
|
-
|
|
1704
|
-
|
|
1705
|
-
|
|
1706
|
-
|
|
1707
|
-
|
|
1708
|
-
|
|
1709
|
-
|
|
1710
|
-
|
|
1711
|
-
|
|
1712
|
-
|
|
1713
|
-
|
|
1714
|
-
|
|
1715
|
-
|
|
1716
|
-
|
|
1717
|
-
<span class="
|
|
1703
|
+
// Get all own property names
|
|
1704
|
+
ownProps: error && typeof error === 'object' ? Object.getOwnPropertyNames(error<span class="branch-0 cbranch-no" title="branch not covered" >) : [],</span>
|
|
1705
|
+
};
|
|
1706
|
+
|
|
1707
|
+
logger.error('Submit failed - full error analysis', errorInfo);
|
|
1708
|
+
|
|
1709
|
+
// Check if this is an empty error object (WalletConnect SDK bug)
|
|
1710
|
+
// This typically happens when relay subscription is stale
|
|
1711
|
+
const isEmptyError =
|
|
1712
|
+
typeof error === 'object' &&
|
|
1713
|
+
error !== null &&
|
|
1714
|
+
Object.keys(error).length === 0 &&
|
|
1715
|
+
!(error instanceof Error);
|
|
1716
|
+
|
|
1717
|
+
if (isEmptyError) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
1718
1718
|
<span class="cstat-no" title="statement not covered" > // Empty error object is a known WalletConnect SDK issue</span>
|
|
1719
1719
|
<span class="cstat-no" title="statement not covered" > // It usually means the relay subscription was stale</span>
|
|
1720
1720
|
<span class="cstat-no" title="statement not covered" > // The SessionHealthManager should have pinged before the request,</span>
|
|
@@ -1730,34 +1730,34 @@
|
|
|
1730
1730
|
<span class="cstat-no" title="statement not covered" > 'please check your transaction history as it may have been executed successfully.',</span>
|
|
1731
1731
|
<span class="cstat-no" title="statement not covered" > );</span>
|
|
1732
1732
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1733
|
-
|
|
1734
|
-
|
|
1735
|
-
|
|
1736
|
-
|
|
1737
|
-
|
|
1738
|
-
|
|
1739
|
-
|
|
1740
|
-
|
|
1741
|
-
|
|
1742
|
-
|
|
1743
|
-
|
|
1744
|
-
|
|
1745
|
-
|
|
1746
|
-
|
|
1747
|
-
|
|
1748
|
-
<span class="
|
|
1733
|
+
|
|
1734
|
+
const errorMsg = extractErrorMessage(error);
|
|
1735
|
+
logger.error('Submit failed', { error: errorMsg });
|
|
1736
|
+
throw new Error(`Hedera submit failed: ${errorMsg}`);
|
|
1737
|
+
}
|
|
1738
|
+
}
|
|
1739
|
+
|
|
1740
|
+
/**
|
|
1741
|
+
* Sign and execute a transaction in one call (alias for submitTransaction).
|
|
1742
|
+
* Uses hedera_signAndExecuteTransaction WalletConnect RPC method.
|
|
1743
|
+
* This prevents double prompts by using the native WalletConnect method.
|
|
1744
|
+
*
|
|
1745
|
+
* @param params - Transaction parameters
|
|
1746
|
+
* @returns Promise resolving to transaction ID and metadata
|
|
1747
|
+
*/
|
|
1748
|
+
<span class="fstat-no" title="function not covered" > async signAndExecuteTransaction(params: SignerOperationParams): Promise<SubmitResult> {</span>
|
|
1749
1749
|
<span class="cstat-no" title="statement not covered" > // Simply delegate to submitTransaction which already uses hedera_signAndExecuteTransaction</span>
|
|
1750
1750
|
<span class="cstat-no" title="statement not covered" > return this.submitTransaction(params);</span>
|
|
1751
1751
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1752
|
-
|
|
1753
|
-
|
|
1754
|
-
|
|
1755
|
-
|
|
1756
|
-
|
|
1757
|
-
|
|
1758
|
-
|
|
1759
|
-
|
|
1760
|
-
<span class="
|
|
1752
|
+
|
|
1753
|
+
/**
|
|
1754
|
+
* Sign an arbitrary message using hedera_signMessage method.
|
|
1755
|
+
* Used for DAO votes, authentication proofs, and other non-transaction signing.
|
|
1756
|
+
*
|
|
1757
|
+
* @param params - Signing parameters with message string
|
|
1758
|
+
* @returns Promise resolving to signature and metadata
|
|
1759
|
+
*/
|
|
1760
|
+
<span class="fstat-no" title="function not covered" > async signMessage(</span>
|
|
1761
1761
|
<span class="cstat-no" title="statement not covered" > params: SignerOperationParams & { message: string; encoding?: 'utf-8' | 'base64' },</span>
|
|
1762
1762
|
<span class="cstat-no" title="statement not covered" > ): Promise<import('../../base-wallet-provider').SignMessageResult> {</span>
|
|
1763
1763
|
<span class="cstat-no" title="statement not covered" > // Extract network name from networkId (mainnet or testnet)</span>
|
|
@@ -1810,89 +1810,89 @@
|
|
|
1810
1810
|
<span class="cstat-no" title="statement not covered" > throw new Error(`Hedera sign message failed: ${errorMsg}`);</span>
|
|
1811
1811
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1812
1812
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1813
|
-
|
|
1814
|
-
|
|
1815
|
-
|
|
1816
|
-
|
|
1817
|
-
|
|
1818
|
-
|
|
1819
|
-
|
|
1820
|
-
|
|
1821
|
-
|
|
1822
|
-
|
|
1823
|
-
|
|
1824
|
-
|
|
1825
|
-
|
|
1826
|
-
|
|
1827
|
-
|
|
1828
|
-
|
|
1829
|
-
|
|
1830
|
-
<span class="
|
|
1813
|
+
|
|
1814
|
+
/**
|
|
1815
|
+
* Parse accounts from Hedera namespace in WalletConnect session.
|
|
1816
|
+
* Extracts account IDs from HIP-30 format: hedera:<network>:<accountId>
|
|
1817
|
+
*
|
|
1818
|
+
* Optionally filters accounts to only include those matching a target network.
|
|
1819
|
+
* This is important for respecting the user's network selection in the dApp,
|
|
1820
|
+
* since wallets may return accounts from multiple networks.
|
|
1821
|
+
*
|
|
1822
|
+
* @param namespace - Hedera namespace object from session
|
|
1823
|
+
* @param targetNetworkId - Optional network ID to filter accounts (e.g., 'hedera:mainnet')
|
|
1824
|
+
* @returns Array of parsed account objects, filtered by target network if specified
|
|
1825
|
+
*/
|
|
1826
|
+
parseAccounts(
|
|
1827
|
+
namespace: any,
|
|
1828
|
+
targetNetworkId?: string,
|
|
1829
|
+
): Array<{ address: string; chainId: string }> {
|
|
1830
|
+
if (!namespace) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
1831
1831
|
<span class="cstat-no" title="statement not covered" > logger.warn('Namespace is null or undefined');</span>
|
|
1832
1832
|
<span class="cstat-no" title="statement not covered" > return [];</span>
|
|
1833
1833
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1834
|
-
|
|
1835
|
-
|
|
1836
|
-
|
|
1837
|
-
|
|
1838
|
-
|
|
1839
|
-
|
|
1840
|
-
|
|
1834
|
+
|
|
1835
|
+
if (!(namespace as { accounts?: string[] }).accounts) {
|
|
1836
|
+
logger.warn('Namespace has no accounts property');
|
|
1837
|
+
return [];
|
|
1838
|
+
}
|
|
1839
|
+
|
|
1840
|
+
if (!Array.isArray((namespace as { accounts?: string[] }).accounts)) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
1841
1841
|
<span class="cstat-no" title="statement not covered" > logger.warn('Namespace accounts is not an array', {</span>
|
|
1842
1842
|
<span class="cstat-no" title="statement not covered" > type: typeof (namespace as { accounts?: string[] }).accounts,</span>
|
|
1843
1843
|
<span class="cstat-no" title="statement not covered" > });</span>
|
|
1844
1844
|
<span class="cstat-no" title="statement not covered" > return [];</span>
|
|
1845
1845
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1846
|
-
|
|
1847
|
-
|
|
1848
|
-
|
|
1849
|
-
|
|
1850
|
-
|
|
1851
|
-
|
|
1852
|
-
|
|
1853
|
-
|
|
1854
|
-
|
|
1855
|
-
|
|
1856
|
-
|
|
1857
|
-
|
|
1858
|
-
|
|
1859
|
-
|
|
1860
|
-
|
|
1861
|
-
|
|
1862
|
-
|
|
1863
|
-
|
|
1864
|
-
|
|
1865
|
-
|
|
1866
|
-
|
|
1867
|
-
|
|
1868
|
-
|
|
1869
|
-
|
|
1870
|
-
|
|
1871
|
-
|
|
1872
|
-
|
|
1873
|
-
|
|
1874
|
-
|
|
1875
|
-
|
|
1876
|
-
|
|
1877
|
-
|
|
1878
|
-
|
|
1879
|
-
|
|
1880
|
-
|
|
1881
|
-
|
|
1882
|
-
|
|
1883
|
-
|
|
1884
|
-
|
|
1885
|
-
|
|
1886
|
-
|
|
1887
|
-
|
|
1888
|
-
|
|
1889
|
-
|
|
1890
|
-
|
|
1891
|
-
|
|
1892
|
-
|
|
1893
|
-
|
|
1894
|
-
|
|
1895
|
-
|
|
1846
|
+
|
|
1847
|
+
// Parse all accounts from namespace
|
|
1848
|
+
const allAccounts = ((namespace as { accounts?: string[] }).<span class="branch-0 cbranch-no" title="branch not covered" >accounts || []).m</span>ap(
|
|
1849
|
+
(account: string) => {
|
|
1850
|
+
// HIP-30 format: hedera:testnet:0.0.12345
|
|
1851
|
+
const parts = account.split(':');
|
|
1852
|
+
|
|
1853
|
+
if (parts.length < 3) {
|
|
1854
|
+
logger.warn('Invalid account format', { account, partsLength: parts.length });
|
|
1855
|
+
return { address: account, chainId: 'hedera:testnet' };
|
|
1856
|
+
}
|
|
1857
|
+
|
|
1858
|
+
return {
|
|
1859
|
+
address: parts[parts.length - 1], // Account ID (0.0.12345)
|
|
1860
|
+
chainId: `${parts[0]}:${parts[1]}`, // hedera:testnet
|
|
1861
|
+
};
|
|
1862
|
+
},
|
|
1863
|
+
);
|
|
1864
|
+
|
|
1865
|
+
// If target network specified, filter accounts to only that network
|
|
1866
|
+
if (targetNetworkId) {
|
|
1867
|
+
const targetNetwork = targetNetworkId.split(':')[1]?.toLowerCase(); // e.g., 'mainnet'
|
|
1868
|
+
|
|
1869
|
+
if (targetNetwork) {
|
|
1870
|
+
const filteredAccounts = allAccounts.filter((acc) =>
|
|
1871
|
+
acc.chainId.toLowerCase().includes(targetNetwork),
|
|
1872
|
+
);
|
|
1873
|
+
|
|
1874
|
+
logger.debug('Filtered accounts by target network', {
|
|
1875
|
+
targetNetworkId,
|
|
1876
|
+
targetNetwork,
|
|
1877
|
+
totalAccounts: allAccounts.length,
|
|
1878
|
+
filteredCount: filteredAccounts.length,
|
|
1879
|
+
});
|
|
1880
|
+
|
|
1881
|
+
// If no accounts match the target network, log a warning
|
|
1882
|
+
if (filteredAccounts.length === 0 && allAccounts.length > 0) {
|
|
1883
|
+
logger.warn('No accounts found for target network', {
|
|
1884
|
+
targetNetwork,
|
|
1885
|
+
availableNetworks: [...new Set(allAccounts.map((a) => a.chainId))],
|
|
1886
|
+
});
|
|
1887
|
+
}
|
|
1888
|
+
|
|
1889
|
+
return filteredAccounts;
|
|
1890
|
+
}
|
|
1891
|
+
}
|
|
1892
|
+
|
|
1893
|
+
return allAccounts;
|
|
1894
|
+
}
|
|
1895
|
+
}
|
|
1896
1896
|
</pre></td></tr></table></pre>
|
|
1897
1897
|
|
|
1898
1898
|
<div class='push'></div><!-- for sticky footer -->
|
|
@@ -1900,7 +1900,7 @@
|
|
|
1900
1900
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
1901
1901
|
Code coverage generated by
|
|
1902
1902
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
1903
|
-
at 2026-06-
|
|
1903
|
+
at 2026-06-27T21:00:37.138Z
|
|
1904
1904
|
</div>
|
|
1905
1905
|
<script src="../../../../prettify.js"></script>
|
|
1906
1906
|
<script>
|