@hsuite/native-connect-angular 1.0.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/coverage/coverage-summary.json +49 -49
- package/coverage/index.html +122 -122
- package/coverage/lcov-report/index.html +122 -122
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- package/coverage/lcov-report/lib/components/wallet-connect-button/index.html +21 -21
- package/coverage/lcov-report/lib/components/wallet-connect-button/wallet-connect-button.component.ts.html +475 -451
- 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 +148 -148
- package/coverage/lcov-report/lib/components/wallet-connection-modal/connection-method-step/index.html +17 -17
- package/coverage/lcov-report/lib/components/wallet-connection-modal/index.html +21 -21
- package/coverage/lcov-report/lib/components/wallet-connection-modal/qr-pairing-step/index.html +17 -17
- package/coverage/lcov-report/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.ts.html +838 -838
- package/coverage/lcov-report/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts.html +1182 -987
- 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 +1 -1
- package/coverage/lcov-report/lib/models/provider-types.ts.html +1 -1
- 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 +637 -637
- 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 +20 -20
- 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 +1 -1
- 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 +1104 -1104
- 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/index.html +31 -31
- package/coverage/lcov-report/lib/services/logger.service.ts.html +4 -4
- 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 +43 -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 -7
- package/coverage/lcov-report/lib/services/unified-wallet.service.ts.html +7 -10
- 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 +4 -7
- 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 +1 -1
- package/coverage/lcov-report/lib/utils/ledger-icons.util.ts.html +1 -1
- package/coverage/lcov.info +14420 -14977
- 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 +1 -1
- 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 +1 -1
- package/coverage/lib/components/wallet-account-display/index.html +1 -1
- package/coverage/lib/components/wallet-account-display/wallet-account-display.component.ts.html +1 -1
- package/coverage/lib/components/wallet-connect-button/index.html +21 -21
- package/coverage/lib/components/wallet-connect-button/wallet-connect-button.component.ts.html +475 -451
- 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 +148 -148
- package/coverage/lib/components/wallet-connection-modal/connection-method-step/index.html +17 -17
- package/coverage/lib/components/wallet-connection-modal/index.html +21 -21
- package/coverage/lib/components/wallet-connection-modal/qr-pairing-step/index.html +17 -17
- package/coverage/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.ts.html +838 -838
- package/coverage/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts.html +1182 -987
- 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 +1 -1
- package/coverage/lib/models/provider-types.ts.html +1 -1
- package/coverage/lib/providers/base-wallet-provider.ts.html +20 -20
- package/coverage/lib/providers/hsuite-native/channel-client.service.ts.html +637 -637
- 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 +20 -20
- package/coverage/lib/providers/p2p-native/p2p-native.provider.ts.html +993 -993
- package/coverage/lib/providers/p2p-native/p2p-session-manager.ts.html +1 -1
- 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 +1104 -1104
- 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/index.html +31 -31
- package/coverage/lib/services/logger.service.ts.html +4 -4
- 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 +43 -43
- package/coverage/lib/services/transaction-builders/xrpl-transaction-builder.service.ts.html +1674 -1674
- package/coverage/lib/services/transaction.service.ts.html +4 -7
- package/coverage/lib/services/unified-wallet.service.ts.html +7 -10
- 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 +4 -7
- 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 +1 -1
- package/coverage/lib/utils/ledger-icons.util.ts.html +1 -1
- package/dist/fesm2022/hsuite-native-connect-angular.mjs +85 -20
- package/dist/fesm2022/hsuite-native-connect-angular.mjs.map +1 -1
- package/dist/index.d.ts +33 -3
- package/package.json +4 -4
- package/src/lib/components/wallet-connect-button/wallet-connect-button.component.spec.ts +89 -0
- package/src/lib/components/wallet-connect-button/wallet-connect-button.component.ts +8 -0
- package/src/lib/components/wallet-connection-modal/wallet-connection-modal.component.html +1 -6
- package/src/lib/components/wallet-connection-modal/wallet-connection-modal.component.spec.ts +173 -0
- package/src/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts +84 -19
- package/src/lib/services/transaction.service.ts +0 -1
- package/src/lib/services/unified-wallet.service.ts +0 -1
- package/src/lib/services/wallet-providers.service.ts +0 -1
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">0% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>0/478</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">0% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>0/1</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">0% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>0/1</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">0% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>0/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
|
|
64
|
+
<div class='status-line low'></div>
|
|
65
65
|
<pre><table class="coverage">
|
|
66
66
|
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
67
67
|
<a name='L2'></a><a href='#L2'>2</a>
|
|
@@ -541,65 +541,9 @@
|
|
|
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-
|
|
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>
|
|
544
|
+
<a name='L479'></a><a href='#L479'>479</a></td><td class="line-coverage quiet"><span class="cline-any cline-no"> </span>
|
|
594
545
|
<span class="cline-any cline-no"> </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>
|
|
601
546
|
<span class="cline-any cline-no"> </span>
|
|
602
|
-
<span class="cline-any cline-yes">2x</span>
|
|
603
547
|
<span class="cline-any cline-no"> </span>
|
|
604
548
|
<span class="cline-any cline-no"> </span>
|
|
605
549
|
<span class="cline-any cline-no"> </span>
|
|
@@ -695,181 +639,7 @@
|
|
|
695
639
|
<span class="cline-any cline-no"> </span>
|
|
696
640
|
<span class="cline-any cline-no"> </span>
|
|
697
641
|
<span class="cline-any cline-no"> </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>
|
|
729
642
|
<span class="cline-any cline-no"> </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"> </span>
|
|
763
|
-
<span class="cline-any cline-no"> </span>
|
|
764
|
-
<span class="cline-any cline-no"> </span>
|
|
765
|
-
<span class="cline-any cline-no"> </span>
|
|
766
|
-
<span class="cline-any cline-no"> </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"> </span>
|
|
808
|
-
<span class="cline-any cline-no"> </span>
|
|
809
|
-
<span class="cline-any cline-no"> </span>
|
|
810
|
-
<span class="cline-any cline-no"> </span>
|
|
811
|
-
<span class="cline-any cline-no"> </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>
|
|
873
643
|
<span class="cline-any cline-no"> </span>
|
|
874
644
|
<span class="cline-any cline-no"> </span>
|
|
875
645
|
<span class="cline-any cline-no"> </span>
|
|
@@ -878,34 +648,10 @@
|
|
|
878
648
|
<span class="cline-any cline-no"> </span>
|
|
879
649
|
<span class="cline-any cline-no"> </span>
|
|
880
650
|
<span class="cline-any cline-no"> </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>
|
|
896
651
|
<span class="cline-any cline-no"> </span>
|
|
897
652
|
<span class="cline-any cline-no"> </span>
|
|
898
653
|
<span class="cline-any cline-no"> </span>
|
|
899
654
|
<span class="cline-any cline-no"> </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>
|
|
909
655
|
<span class="cline-any cline-no"> </span>
|
|
910
656
|
<span class="cline-any cline-no"> </span>
|
|
911
657
|
<span class="cline-any cline-no"> </span>
|
|
@@ -947,137 +693,391 @@
|
|
|
947
693
|
<span class="cline-any cline-no"> </span>
|
|
948
694
|
<span class="cline-any cline-no"> </span>
|
|
949
695
|
<span class="cline-any cline-no"> </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>
|
|
970
696
|
<span class="cline-any cline-no"> </span>
|
|
971
697
|
<span class="cline-any cline-no"> </span>
|
|
972
|
-
<span class="cline-any cline-
|
|
973
|
-
<span class="cline-any cline-
|
|
974
|
-
<span class="cline-any cline-
|
|
975
|
-
<span class="cline-any cline-
|
|
976
|
-
<span class="cline-any cline-
|
|
977
|
-
<span class="cline-any cline-
|
|
978
|
-
<span class="cline-any cline-
|
|
979
|
-
<span class="cline-any cline-
|
|
980
|
-
<span class="cline-any cline-
|
|
981
|
-
<span class="cline-any cline-
|
|
982
|
-
<span class="cline-any cline-
|
|
983
|
-
<span class="cline-any cline-
|
|
984
|
-
<span class="cline-any cline-
|
|
985
|
-
<span class="cline-any cline-
|
|
986
|
-
<span class="cline-any cline-
|
|
987
|
-
<span class="cline-any cline-
|
|
988
|
-
<span class="cline-any cline-
|
|
989
|
-
<span class="cline-any cline-
|
|
990
|
-
<span class="cline-any cline-
|
|
991
|
-
<span class="cline-any cline-
|
|
992
|
-
<span class="cline-any cline-
|
|
993
|
-
<span class="cline-any cline-
|
|
994
|
-
<span class="cline-any cline-
|
|
995
|
-
<span class="cline-any cline-
|
|
996
|
-
<span class="cline-any cline-
|
|
997
|
-
<span class="cline-any cline-
|
|
998
|
-
<span class="cline-any cline-
|
|
999
|
-
<span class="cline-any cline-
|
|
1000
|
-
<span class="cline-any cline-
|
|
1001
|
-
<span class="cline-any cline-
|
|
1002
|
-
<span class="cline-any cline-
|
|
1003
|
-
<span class="cline-any cline-
|
|
1004
|
-
<span class="cline-any cline-
|
|
1005
|
-
<span class="cline-any cline-
|
|
1006
|
-
<span class="cline-any cline-
|
|
1007
|
-
<span class="cline-any cline-
|
|
1008
|
-
<span class="cline-any cline-
|
|
1009
|
-
<span class="cline-any cline-
|
|
1010
|
-
<span class="cline-any cline-
|
|
1011
|
-
<span class="cline-any cline-
|
|
1012
|
-
<span class="cline-any cline-
|
|
1013
|
-
<span class="cline-any cline-
|
|
1014
|
-
<span class="cline-any cline-
|
|
1015
|
-
<span class="cline-any cline-
|
|
1016
|
-
<span class="cline-any cline-
|
|
1017
|
-
<span class="cline-any cline-
|
|
1018
|
-
<span class="cline-any cline-
|
|
1019
|
-
<span class="cline-any cline-
|
|
1020
|
-
<span class="cline-any cline-
|
|
1021
|
-
<span class="cline-any cline-
|
|
1022
|
-
<span class="cline-any cline-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
698
|
+
<span class="cline-any cline-no"> </span>
|
|
699
|
+
<span class="cline-any cline-no"> </span>
|
|
700
|
+
<span class="cline-any cline-no"> </span>
|
|
701
|
+
<span class="cline-any cline-no"> </span>
|
|
702
|
+
<span class="cline-any cline-no"> </span>
|
|
703
|
+
<span class="cline-any cline-no"> </span>
|
|
704
|
+
<span class="cline-any cline-no"> </span>
|
|
705
|
+
<span class="cline-any cline-no"> </span>
|
|
706
|
+
<span class="cline-any cline-no"> </span>
|
|
707
|
+
<span class="cline-any cline-no"> </span>
|
|
708
|
+
<span class="cline-any cline-no"> </span>
|
|
709
|
+
<span class="cline-any cline-no"> </span>
|
|
710
|
+
<span class="cline-any cline-no"> </span>
|
|
711
|
+
<span class="cline-any cline-no"> </span>
|
|
712
|
+
<span class="cline-any cline-no"> </span>
|
|
713
|
+
<span class="cline-any cline-no"> </span>
|
|
714
|
+
<span class="cline-any cline-no"> </span>
|
|
715
|
+
<span class="cline-any cline-no"> </span>
|
|
716
|
+
<span class="cline-any cline-no"> </span>
|
|
717
|
+
<span class="cline-any cline-no"> </span>
|
|
718
|
+
<span class="cline-any cline-no"> </span>
|
|
719
|
+
<span class="cline-any cline-no"> </span>
|
|
720
|
+
<span class="cline-any cline-no"> </span>
|
|
721
|
+
<span class="cline-any cline-no"> </span>
|
|
722
|
+
<span class="cline-any cline-no"> </span>
|
|
723
|
+
<span class="cline-any cline-no"> </span>
|
|
724
|
+
<span class="cline-any cline-no"> </span>
|
|
725
|
+
<span class="cline-any cline-no"> </span>
|
|
726
|
+
<span class="cline-any cline-no"> </span>
|
|
727
|
+
<span class="cline-any cline-no"> </span>
|
|
728
|
+
<span class="cline-any cline-no"> </span>
|
|
729
|
+
<span class="cline-any cline-no"> </span>
|
|
730
|
+
<span class="cline-any cline-no"> </span>
|
|
731
|
+
<span class="cline-any cline-no"> </span>
|
|
732
|
+
<span class="cline-any cline-no"> </span>
|
|
733
|
+
<span class="cline-any cline-no"> </span>
|
|
734
|
+
<span class="cline-any cline-no"> </span>
|
|
735
|
+
<span class="cline-any cline-no"> </span>
|
|
736
|
+
<span class="cline-any cline-no"> </span>
|
|
737
|
+
<span class="cline-any cline-no"> </span>
|
|
738
|
+
<span class="cline-any cline-no"> </span>
|
|
739
|
+
<span class="cline-any cline-no"> </span>
|
|
740
|
+
<span class="cline-any cline-no"> </span>
|
|
741
|
+
<span class="cline-any cline-no"> </span>
|
|
742
|
+
<span class="cline-any cline-no"> </span>
|
|
743
|
+
<span class="cline-any cline-no"> </span>
|
|
744
|
+
<span class="cline-any cline-no"> </span>
|
|
745
|
+
<span class="cline-any cline-no"> </span>
|
|
746
|
+
<span class="cline-any cline-no"> </span>
|
|
747
|
+
<span class="cline-any cline-no"> </span>
|
|
748
|
+
<span class="cline-any cline-no"> </span>
|
|
749
|
+
<span class="cline-any cline-no"> </span>
|
|
750
|
+
<span class="cline-any cline-no"> </span>
|
|
751
|
+
<span class="cline-any cline-no"> </span>
|
|
752
|
+
<span class="cline-any cline-no"> </span>
|
|
753
|
+
<span class="cline-any cline-no"> </span>
|
|
754
|
+
<span class="cline-any cline-no"> </span>
|
|
755
|
+
<span class="cline-any cline-no"> </span>
|
|
756
|
+
<span class="cline-any cline-no"> </span>
|
|
757
|
+
<span class="cline-any cline-no"> </span>
|
|
758
|
+
<span class="cline-any cline-no"> </span>
|
|
759
|
+
<span class="cline-any cline-no"> </span>
|
|
760
|
+
<span class="cline-any cline-no"> </span>
|
|
761
|
+
<span class="cline-any cline-no"> </span>
|
|
762
|
+
<span class="cline-any cline-no"> </span>
|
|
763
|
+
<span class="cline-any cline-no"> </span>
|
|
764
|
+
<span class="cline-any cline-no"> </span>
|
|
765
|
+
<span class="cline-any cline-no"> </span>
|
|
766
|
+
<span class="cline-any cline-no"> </span>
|
|
767
|
+
<span class="cline-any cline-no"> </span>
|
|
768
|
+
<span class="cline-any cline-no"> </span>
|
|
769
|
+
<span class="cline-any cline-no"> </span>
|
|
770
|
+
<span class="cline-any cline-no"> </span>
|
|
771
|
+
<span class="cline-any cline-no"> </span>
|
|
772
|
+
<span class="cline-any cline-no"> </span>
|
|
773
|
+
<span class="cline-any cline-no"> </span>
|
|
774
|
+
<span class="cline-any cline-no"> </span>
|
|
775
|
+
<span class="cline-any cline-no"> </span>
|
|
776
|
+
<span class="cline-any cline-no"> </span>
|
|
777
|
+
<span class="cline-any cline-no"> </span>
|
|
778
|
+
<span class="cline-any cline-no"> </span>
|
|
779
|
+
<span class="cline-any cline-no"> </span>
|
|
780
|
+
<span class="cline-any cline-no"> </span>
|
|
781
|
+
<span class="cline-any cline-no"> </span>
|
|
782
|
+
<span class="cline-any cline-no"> </span>
|
|
783
|
+
<span class="cline-any cline-no"> </span>
|
|
784
|
+
<span class="cline-any cline-no"> </span>
|
|
785
|
+
<span class="cline-any cline-no"> </span>
|
|
786
|
+
<span class="cline-any cline-no"> </span>
|
|
787
|
+
<span class="cline-any cline-no"> </span>
|
|
788
|
+
<span class="cline-any cline-no"> </span>
|
|
789
|
+
<span class="cline-any cline-no"> </span>
|
|
790
|
+
<span class="cline-any cline-no"> </span>
|
|
791
|
+
<span class="cline-any cline-no"> </span>
|
|
792
|
+
<span class="cline-any cline-no"> </span>
|
|
793
|
+
<span class="cline-any cline-no"> </span>
|
|
794
|
+
<span class="cline-any cline-no"> </span>
|
|
795
|
+
<span class="cline-any cline-no"> </span>
|
|
796
|
+
<span class="cline-any cline-no"> </span>
|
|
797
|
+
<span class="cline-any cline-no"> </span>
|
|
798
|
+
<span class="cline-any cline-no"> </span>
|
|
799
|
+
<span class="cline-any cline-no"> </span>
|
|
800
|
+
<span class="cline-any cline-no"> </span>
|
|
801
|
+
<span class="cline-any cline-no"> </span>
|
|
802
|
+
<span class="cline-any cline-no"> </span>
|
|
803
|
+
<span class="cline-any cline-no"> </span>
|
|
804
|
+
<span class="cline-any cline-no"> </span>
|
|
805
|
+
<span class="cline-any cline-no"> </span>
|
|
806
|
+
<span class="cline-any cline-no"> </span>
|
|
807
|
+
<span class="cline-any cline-no"> </span>
|
|
808
|
+
<span class="cline-any cline-no"> </span>
|
|
809
|
+
<span class="cline-any cline-no"> </span>
|
|
810
|
+
<span class="cline-any cline-no"> </span>
|
|
811
|
+
<span class="cline-any cline-no"> </span>
|
|
812
|
+
<span class="cline-any cline-no"> </span>
|
|
813
|
+
<span class="cline-any cline-no"> </span>
|
|
814
|
+
<span class="cline-any cline-no"> </span>
|
|
815
|
+
<span class="cline-any cline-no"> </span>
|
|
816
|
+
<span class="cline-any cline-no"> </span>
|
|
817
|
+
<span class="cline-any cline-no"> </span>
|
|
818
|
+
<span class="cline-any cline-no"> </span>
|
|
819
|
+
<span class="cline-any cline-no"> </span>
|
|
820
|
+
<span class="cline-any cline-no"> </span>
|
|
821
|
+
<span class="cline-any cline-no"> </span>
|
|
822
|
+
<span class="cline-any cline-no"> </span>
|
|
823
|
+
<span class="cline-any cline-no"> </span>
|
|
824
|
+
<span class="cline-any cline-no"> </span>
|
|
825
|
+
<span class="cline-any cline-no"> </span>
|
|
826
|
+
<span class="cline-any cline-no"> </span>
|
|
827
|
+
<span class="cline-any cline-no"> </span>
|
|
828
|
+
<span class="cline-any cline-no"> </span>
|
|
829
|
+
<span class="cline-any cline-no"> </span>
|
|
830
|
+
<span class="cline-any cline-no"> </span>
|
|
831
|
+
<span class="cline-any cline-no"> </span>
|
|
832
|
+
<span class="cline-any cline-no"> </span>
|
|
833
|
+
<span class="cline-any cline-no"> </span>
|
|
834
|
+
<span class="cline-any cline-no"> </span>
|
|
835
|
+
<span class="cline-any cline-no"> </span>
|
|
836
|
+
<span class="cline-any cline-no"> </span>
|
|
837
|
+
<span class="cline-any cline-no"> </span>
|
|
838
|
+
<span class="cline-any cline-no"> </span>
|
|
839
|
+
<span class="cline-any cline-no"> </span>
|
|
840
|
+
<span class="cline-any cline-no"> </span>
|
|
841
|
+
<span class="cline-any cline-no"> </span>
|
|
842
|
+
<span class="cline-any cline-no"> </span>
|
|
843
|
+
<span class="cline-any cline-no"> </span>
|
|
844
|
+
<span class="cline-any cline-no"> </span>
|
|
845
|
+
<span class="cline-any cline-no"> </span>
|
|
846
|
+
<span class="cline-any cline-no"> </span>
|
|
847
|
+
<span class="cline-any cline-no"> </span>
|
|
848
|
+
<span class="cline-any cline-no"> </span>
|
|
849
|
+
<span class="cline-any cline-no"> </span>
|
|
850
|
+
<span class="cline-any cline-no"> </span>
|
|
851
|
+
<span class="cline-any cline-no"> </span>
|
|
852
|
+
<span class="cline-any cline-no"> </span>
|
|
853
|
+
<span class="cline-any cline-no"> </span>
|
|
854
|
+
<span class="cline-any cline-no"> </span>
|
|
855
|
+
<span class="cline-any cline-no"> </span>
|
|
856
|
+
<span class="cline-any cline-no"> </span>
|
|
857
|
+
<span class="cline-any cline-no"> </span>
|
|
858
|
+
<span class="cline-any cline-no"> </span>
|
|
859
|
+
<span class="cline-any cline-no"> </span>
|
|
860
|
+
<span class="cline-any cline-no"> </span>
|
|
861
|
+
<span class="cline-any cline-no"> </span>
|
|
862
|
+
<span class="cline-any cline-no"> </span>
|
|
863
|
+
<span class="cline-any cline-no"> </span>
|
|
864
|
+
<span class="cline-any cline-no"> </span>
|
|
865
|
+
<span class="cline-any cline-no"> </span>
|
|
866
|
+
<span class="cline-any cline-no"> </span>
|
|
867
|
+
<span class="cline-any cline-no"> </span>
|
|
868
|
+
<span class="cline-any cline-no"> </span>
|
|
869
|
+
<span class="cline-any cline-no"> </span>
|
|
870
|
+
<span class="cline-any cline-no"> </span>
|
|
871
|
+
<span class="cline-any cline-no"> </span>
|
|
872
|
+
<span class="cline-any cline-no"> </span>
|
|
873
|
+
<span class="cline-any cline-no"> </span>
|
|
874
|
+
<span class="cline-any cline-no"> </span>
|
|
875
|
+
<span class="cline-any cline-no"> </span>
|
|
876
|
+
<span class="cline-any cline-no"> </span>
|
|
877
|
+
<span class="cline-any cline-no"> </span>
|
|
878
|
+
<span class="cline-any cline-no"> </span>
|
|
879
|
+
<span class="cline-any cline-no"> </span>
|
|
880
|
+
<span class="cline-any cline-no"> </span>
|
|
881
|
+
<span class="cline-any cline-no"> </span>
|
|
882
|
+
<span class="cline-any cline-no"> </span>
|
|
883
|
+
<span class="cline-any cline-no"> </span>
|
|
884
|
+
<span class="cline-any cline-no"> </span>
|
|
885
|
+
<span class="cline-any cline-no"> </span>
|
|
886
|
+
<span class="cline-any cline-no"> </span>
|
|
887
|
+
<span class="cline-any cline-no"> </span>
|
|
888
|
+
<span class="cline-any cline-no"> </span>
|
|
889
|
+
<span class="cline-any cline-no"> </span>
|
|
890
|
+
<span class="cline-any cline-no"> </span>
|
|
891
|
+
<span class="cline-any cline-no"> </span>
|
|
892
|
+
<span class="cline-any cline-no"> </span>
|
|
893
|
+
<span class="cline-any cline-no"> </span>
|
|
894
|
+
<span class="cline-any cline-no"> </span>
|
|
895
|
+
<span class="cline-any cline-no"> </span>
|
|
896
|
+
<span class="cline-any cline-no"> </span>
|
|
897
|
+
<span class="cline-any cline-no"> </span>
|
|
898
|
+
<span class="cline-any cline-no"> </span>
|
|
899
|
+
<span class="cline-any cline-no"> </span>
|
|
900
|
+
<span class="cline-any cline-no"> </span>
|
|
901
|
+
<span class="cline-any cline-no"> </span>
|
|
902
|
+
<span class="cline-any cline-no"> </span>
|
|
903
|
+
<span class="cline-any cline-no"> </span>
|
|
904
|
+
<span class="cline-any cline-no"> </span>
|
|
905
|
+
<span class="cline-any cline-no"> </span>
|
|
906
|
+
<span class="cline-any cline-no"> </span>
|
|
907
|
+
<span class="cline-any cline-no"> </span>
|
|
908
|
+
<span class="cline-any cline-no"> </span>
|
|
909
|
+
<span class="cline-any cline-no"> </span>
|
|
910
|
+
<span class="cline-any cline-no"> </span>
|
|
911
|
+
<span class="cline-any cline-no"> </span>
|
|
912
|
+
<span class="cline-any cline-no"> </span>
|
|
913
|
+
<span class="cline-any cline-no"> </span>
|
|
914
|
+
<span class="cline-any cline-no"> </span>
|
|
915
|
+
<span class="cline-any cline-no"> </span>
|
|
916
|
+
<span class="cline-any cline-no"> </span>
|
|
917
|
+
<span class="cline-any cline-no"> </span>
|
|
918
|
+
<span class="cline-any cline-no"> </span>
|
|
919
|
+
<span class="cline-any cline-no"> </span>
|
|
920
|
+
<span class="cline-any cline-no"> </span>
|
|
921
|
+
<span class="cline-any cline-no"> </span>
|
|
922
|
+
<span class="cline-any cline-no"> </span>
|
|
923
|
+
<span class="cline-any cline-no"> </span>
|
|
924
|
+
<span class="cline-any cline-no"> </span>
|
|
925
|
+
<span class="cline-any cline-no"> </span>
|
|
926
|
+
<span class="cline-any cline-no"> </span>
|
|
927
|
+
<span class="cline-any cline-no"> </span>
|
|
928
|
+
<span class="cline-any cline-no"> </span>
|
|
929
|
+
<span class="cline-any cline-no"> </span>
|
|
930
|
+
<span class="cline-any cline-no"> </span>
|
|
931
|
+
<span class="cline-any cline-no"> </span>
|
|
932
|
+
<span class="cline-any cline-no"> </span>
|
|
933
|
+
<span class="cline-any cline-no"> </span>
|
|
934
|
+
<span class="cline-any cline-no"> </span>
|
|
935
|
+
<span class="cline-any cline-no"> </span>
|
|
936
|
+
<span class="cline-any cline-no"> </span>
|
|
937
|
+
<span class="cline-any cline-no"> </span>
|
|
938
|
+
<span class="cline-any cline-no"> </span>
|
|
939
|
+
<span class="cline-any cline-no"> </span>
|
|
940
|
+
<span class="cline-any cline-no"> </span>
|
|
941
|
+
<span class="cline-any cline-no"> </span>
|
|
942
|
+
<span class="cline-any cline-no"> </span>
|
|
943
|
+
<span class="cline-any cline-no"> </span>
|
|
944
|
+
<span class="cline-any cline-no"> </span>
|
|
945
|
+
<span class="cline-any cline-no"> </span>
|
|
946
|
+
<span class="cline-any cline-no"> </span>
|
|
947
|
+
<span class="cline-any cline-no"> </span>
|
|
948
|
+
<span class="cline-any cline-no"> </span>
|
|
949
|
+
<span class="cline-any cline-no"> </span>
|
|
950
|
+
<span class="cline-any cline-no"> </span>
|
|
951
|
+
<span class="cline-any cline-no"> </span>
|
|
952
|
+
<span class="cline-any cline-no"> </span>
|
|
953
|
+
<span class="cline-any cline-no"> </span>
|
|
954
|
+
<span class="cline-any cline-no"> </span>
|
|
955
|
+
<span class="cline-any cline-no"> </span>
|
|
956
|
+
<span class="cline-any cline-no"> </span>
|
|
957
|
+
<span class="cline-any cline-no"> </span>
|
|
958
|
+
<span class="cline-any cline-no"> </span>
|
|
959
|
+
<span class="cline-any cline-no"> </span>
|
|
960
|
+
<span class="cline-any cline-no"> </span>
|
|
961
|
+
<span class="cline-any cline-no"> </span>
|
|
962
|
+
<span class="cline-any cline-no"> </span>
|
|
963
|
+
<span class="cline-any cline-no"> </span>
|
|
964
|
+
<span class="cline-any cline-no"> </span>
|
|
965
|
+
<span class="cline-any cline-no"> </span>
|
|
966
|
+
<span class="cline-any cline-no"> </span>
|
|
967
|
+
<span class="cline-any cline-no"> </span>
|
|
968
|
+
<span class="cline-any cline-no"> </span>
|
|
969
|
+
<span class="cline-any cline-no"> </span>
|
|
970
|
+
<span class="cline-any cline-no"> </span>
|
|
971
|
+
<span class="cline-any cline-no"> </span>
|
|
972
|
+
<span class="cline-any cline-no"> </span>
|
|
973
|
+
<span class="cline-any cline-no"> </span>
|
|
974
|
+
<span class="cline-any cline-no"> </span>
|
|
975
|
+
<span class="cline-any cline-no"> </span>
|
|
976
|
+
<span class="cline-any cline-no"> </span>
|
|
977
|
+
<span class="cline-any cline-no"> </span>
|
|
978
|
+
<span class="cline-any cline-no"> </span>
|
|
979
|
+
<span class="cline-any cline-no"> </span>
|
|
980
|
+
<span class="cline-any cline-no"> </span>
|
|
981
|
+
<span class="cline-any cline-no"> </span>
|
|
982
|
+
<span class="cline-any cline-no"> </span>
|
|
983
|
+
<span class="cline-any cline-no"> </span>
|
|
984
|
+
<span class="cline-any cline-no"> </span>
|
|
985
|
+
<span class="cline-any cline-no"> </span>
|
|
986
|
+
<span class="cline-any cline-no"> </span>
|
|
987
|
+
<span class="cline-any cline-no"> </span>
|
|
988
|
+
<span class="cline-any cline-no"> </span>
|
|
989
|
+
<span class="cline-any cline-no"> </span>
|
|
990
|
+
<span class="cline-any cline-no"> </span>
|
|
991
|
+
<span class="cline-any cline-no"> </span>
|
|
992
|
+
<span class="cline-any cline-no"> </span>
|
|
993
|
+
<span class="cline-any cline-no"> </span>
|
|
994
|
+
<span class="cline-any cline-no"> </span>
|
|
995
|
+
<span class="cline-any cline-no"> </span>
|
|
996
|
+
<span class="cline-any cline-no"> </span>
|
|
997
|
+
<span class="cline-any cline-no"> </span>
|
|
998
|
+
<span class="cline-any cline-no"> </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-no"> </span>
|
|
1005
|
+
<span class="cline-any cline-no"> </span>
|
|
1006
|
+
<span class="cline-any cline-no"> </span>
|
|
1007
|
+
<span class="cline-any cline-no"> </span>
|
|
1008
|
+
<span class="cline-any cline-no"> </span>
|
|
1009
|
+
<span class="cline-any cline-no"> </span>
|
|
1010
|
+
<span class="cline-any cline-no"> </span>
|
|
1011
|
+
<span class="cline-any cline-no"> </span>
|
|
1012
|
+
<span class="cline-any cline-no"> </span>
|
|
1013
|
+
<span class="cline-any cline-no"> </span>
|
|
1014
|
+
<span class="cline-any cline-no"> </span>
|
|
1015
|
+
<span class="cline-any cline-no"> </span>
|
|
1016
|
+
<span class="cline-any cline-no"> </span>
|
|
1017
|
+
<span class="cline-any cline-no"> </span>
|
|
1018
|
+
<span class="cline-any cline-no"> </span>
|
|
1019
|
+
<span class="cline-any cline-no"> </span>
|
|
1020
|
+
<span class="cline-any cline-no"> </span>
|
|
1021
|
+
<span class="cline-any cline-no"> </span>
|
|
1022
|
+
<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>
|
|
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' && 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' && error !== null</span>
|
|
1071
|
+
<span class="cstat-no" title="statement not covered" > ? Object.getPrototypeOf(error)?.constructor?.name</span>
|
|
1072
1072
|
<span class="cstat-no" title="statement not covered" > : 'N/A',</span>
|
|
1073
|
-
rawError: error
|
|
1074
|
-
})
|
|
1075
|
-
|
|
1076
|
-
if (error instanceof Error) {
|
|
1077
|
-
return error.message;
|
|
1078
|
-
<span class="branch-0 cbranch-no" title="branch not covered" > }</span>
|
|
1073
|
+
<span class="cstat-no" title="statement not covered" > rawError: error,</span>
|
|
1074
|
+
<span class="cstat-no" title="statement not covered" > });</span>
|
|
1079
1075
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
1080
|
-
|
|
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' && error !== null) {</span>
|
|
1081
1081
|
<span class="cstat-no" title="statement not covered" > const errorObj = error as Record<string, unknown>;</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 @@ function extractErrorMessage(error: unknown): string {
|
|
|
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
|
-
|
|
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:<network>:rAddress
|
|
1187
|
-
|
|
1188
|
-
export class XrplSigner implements IWalletConnectSigner {
|
|
1189
|
-
readonly ledgerId = 'xrpl'
|
|
1190
|
-
|
|
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
|
-
|
|
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:<network>: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>
|
|
1207
1207
|
<span class="cstat-no" title="statement not covered" > ? 'devnet'</span>
|
|
1208
|
-
: 'testnet'
|
|
1209
|
-
|
|
1210
|
-
return {
|
|
1211
|
-
methods: ['xrpl_signTransaction', 'xrpl_submit', 'xrpl_signAndSubmit', 'xrpl_signMessage']
|
|
1212
|
-
chains: [`xrpl:${network}`]
|
|
1213
|
-
events: ['chainChanged', 'accountsChanged']
|
|
1214
|
-
}
|
|
1215
|
-
}
|
|
1216
|
-
|
|
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<SignResult> {
|
|
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
|
-
|
|
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="
|
|
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<SignResult> {</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>
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1266
|
-
logger.debug('Received response from wallet', {
|
|
1267
|
-
hasResult: !!result
|
|
1268
|
-
|
|
1269
|
-
})
|
|
1270
|
-
|
|
1271
|
-
return {
|
|
1272
|
-
signedPayload
|
|
1273
|
-
(result as { tx_blob?: string; tx_json?: any })
|
|
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' &&
|
|
1280
|
-
error !== null &&
|
|
1281
|
-
Object.keys(error).length === 0 &&
|
|
1282
|
-
!(error instanceof Error)
|
|
1283
|
-
|
|
1284
|
-
|
|
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' &&</span>
|
|
1280
|
+
<span class="cstat-no" title="statement not covered" > error !== null &&</span>
|
|
1281
|
+
<span class="cstat-no" title="statement not covered" > Object.keys(error).length === 0 &&</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>
|
|
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
|
-
|
|
1291
|
-
const errorMsg = extractErrorMessage(error)
|
|
1292
|
-
logger.error('Sign failed', { error: errorMsg })
|
|
1293
|
-
throw new Error(`XRPL sign failed: ${errorMsg}`)
|
|
1294
|
-
}
|
|
1295
|
-
}
|
|
1296
|
-
|
|
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<SubmitResult> {
|
|
1305
|
-
// Decode base64 payload to JSON transaction
|
|
1306
|
-
const transaction = XrplTransactionEncoder.decodeTransaction(params.payload)
|
|
1307
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1328
|
-
logger.debug('Received xrpl_signAndSubmit response', {
|
|
1329
|
-
hasResult: !!result
|
|
1330
|
-
|
|
1331
|
-
})
|
|
1332
|
-
|
|
1333
|
-
return {
|
|
1334
|
-
transactionId
|
|
1335
|
-
(result as { hash?: string }).hash
|
|
1336
|
-
(result as { tx_json?: { hash?: string } })
|
|
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' &&
|
|
1346
|
-
error !== null &&
|
|
1347
|
-
Object.keys(error).length === 0 &&
|
|
1348
|
-
!(error instanceof Error)
|
|
1349
|
-
|
|
1350
|
-
|
|
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<SubmitResult> {</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' &&</span>
|
|
1346
|
+
<span class="cstat-no" title="statement not covered" > error !== null &&</span>
|
|
1347
|
+
<span class="cstat-no" title="statement not covered" > Object.keys(error).length === 0 &&</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>
|
|
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 @@ export class XrplSigner implements IWalletConnectSigner {
|
|
|
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
|
-
|
|
1360
|
-
const errorMsg = extractErrorMessage(error)
|
|
1361
|
-
logger.error('Submit failed', { error: errorMsg })
|
|
1362
|
-
throw new Error(`XRPL submit failed: ${errorMsg}`)
|
|
1363
|
-
}
|
|
1364
|
-
}
|
|
1365
|
-
|
|
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="
|
|
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<SubmitResult> {</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
|
-
|
|
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="
|
|
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>
|
|
1387
1387
|
<span class="cstat-no" title="statement not covered" > params: SignerOperationParams & { message: string; encoding?: 'utf-8' | 'base64' },</span>
|
|
1388
1388
|
<span class="cstat-no" title="statement not covered" > ): Promise<import('../../base-wallet-provider').SignMessageResult> {</span>
|
|
1389
1389
|
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
@@ -1425,78 +1425,78 @@ export class XrplSigner implements IWalletConnectSigner {
|
|
|
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
|
-
|
|
1429
|
-
|
|
1430
|
-
* Parse accounts from XRPL namespace in WalletConnect session
|
|
1431
|
-
* Extracts addresses from XRPL format: xrpl:<network>: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<{ address: string; chainId: string }> {
|
|
1444
|
-
if (
|
|
1445
|
-
!(namespace as { accounts?: string[] })?.accounts
|
|
1446
|
-
!Array.isArray((namespace as { accounts?: string[] }).accounts)
|
|
1447
|
-
|
|
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:<network>: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<{ address: string; chainId: string }> {</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>
|
|
1448
1448
|
<span class="cstat-no" title="statement not covered" > return [];</span>
|
|
1449
1449
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
1450
|
-
|
|
1451
|
-
// Parse all accounts from namespace
|
|
1452
|
-
const allAccounts = ((namespace as { accounts?: string[] })
|
|
1453
|
-
(account: string) => {
|
|
1454
|
-
// XRPL format: xrpl:testnet:rN7n7otQDd6FczFgLdlqtyMVrn3WnFBrDB
|
|
1455
|
-
const parts = account.split(':')
|
|
1456
|
-
|
|
1457
|
-
if (parts.length < 3) {
|
|
1458
|
-
logger.warn('Invalid account format', { account })
|
|
1459
|
-
return { address: account, chainId: 'xrpl:testnet' }
|
|
1460
|
-
}
|
|
1461
|
-
|
|
1462
|
-
return {
|
|
1463
|
-
address: parts[parts.length - 1], // rAddress
|
|
1464
|
-
chainId: `${parts[0]}:${parts[1]}`, // xrpl:testnet
|
|
1465
|
-
}
|
|
1466
|
-
}
|
|
1467
|
-
)
|
|
1468
|
-
|
|
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
|
-
|
|
1473
|
-
if (targetNetwork) {
|
|
1474
|
-
const filteredAccounts = allAccounts.filter((acc) =>
|
|
1475
|
-
acc.chainId.toLowerCase().includes(targetNetwork)
|
|
1476
|
-
)
|
|
1477
|
-
|
|
1478
|
-
logger.debug('Filtered accounts by target network', {
|
|
1479
|
-
targetNetworkId
|
|
1480
|
-
targetNetwork
|
|
1481
|
-
totalAccounts: allAccounts.length
|
|
1482
|
-
filteredCount: filteredAccounts.length
|
|
1483
|
-
})
|
|
1484
|
-
|
|
1485
|
-
// If no accounts match the target network, log a warning
|
|
1486
|
-
if (filteredAccounts.length === 0 && allAccounts.length > 0) {
|
|
1487
|
-
logger.warn('No accounts found for target network', {
|
|
1488
|
-
targetNetwork
|
|
1489
|
-
availableNetworks: [...new Set(allAccounts.map((a) => a.chainId))]
|
|
1490
|
-
})
|
|
1491
|
-
}
|
|
1492
|
-
|
|
1493
|
-
return filteredAccounts
|
|
1494
|
-
}
|
|
1495
|
-
}
|
|
1496
|
-
|
|
1497
|
-
return allAccounts
|
|
1498
|
-
}
|
|
1499
|
-
}
|
|
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) => {</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 < 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) =></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 && allAccounts.length > 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) => 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>
|
|
1500
1500
|
</pre></td></tr></table></pre>
|
|
1501
1501
|
|
|
1502
1502
|
<div class='push'></div><!-- for sticky footer -->
|
|
@@ -1504,7 +1504,7 @@ export class XrplSigner implements IWalletConnectSigner {
|
|
|
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-
|
|
1507
|
+
at 2026-06-10T09:00:36.812Z
|
|
1508
1508
|
</div>
|
|
1509
1509
|
<script src="../../../../prettify.js"></script>
|
|
1510
1510
|
<script>
|