@hsuite/native-connect-angular 2.1.0 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/coverage/coverage-summary.json +25 -21
- package/coverage/index.html +108 -108
- package/coverage/lcov-report/index.html +108 -108
- package/coverage/lcov-report/lib/components/account-selector/account-actions/account-actions.component.ts.html +1 -1
- package/coverage/lcov-report/lib/components/account-selector/account-actions/index.html +1 -1
- package/coverage/lcov-report/lib/components/account-selector/account-filter/account-filter.component.ts.html +1 -1
- package/coverage/lcov-report/lib/components/account-selector/account-filter/index.html +1 -1
- package/coverage/lcov-report/lib/components/account-selector/account-formatting.service.ts.html +13 -19
- package/coverage/lcov-report/lib/components/account-selector/account-grouping.service.ts.html +1 -1
- package/coverage/lcov-report/lib/components/account-selector/account-list/account-list.component.ts.html +1 -1
- package/coverage/lcov-report/lib/components/account-selector/account-list/index.html +1 -1
- package/coverage/lcov-report/lib/components/account-selector/account-selector.component.ts.html +1 -1
- package/coverage/lcov-report/lib/components/account-selector/account-selector.service.ts.html +1 -1
- package/coverage/lcov-report/lib/components/account-selector/index.html +5 -5
- package/coverage/lcov-report/lib/components/wallet-account-display/index.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-account-display/wallet-account-display.component.ts.html +10 -10
- package/coverage/lcov-report/lib/components/wallet-connect-button/index.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-connect-button/wallet-connect-button.component.ts.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-connect-prompt/index.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.ts.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-connected-guard/index.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-connected-guard/wallet-connected-guard.component.ts.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.ts.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-connection-modal/connection-method-step/index.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-connection-modal/index.html +15 -15
- package/coverage/lcov-report/lib/components/wallet-connection-modal/qr-pairing-step/index.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.ts.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts.html +84 -36
- package/coverage/lcov-report/lib/components/wallet-session-display/index.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-session-display/wallet-session-display.component.ts.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-transaction-status/index.html +1 -1
- package/coverage/lcov-report/lib/components/wallet-transaction-status/wallet-transaction-status.component.ts.html +1 -1
- package/coverage/lcov-report/lib/directives/index.html +1 -1
- package/coverage/lcov-report/lib/directives/wallet-connected.directive.ts.html +1 -1
- package/coverage/lcov-report/lib/directives/wallet-context.directive.ts.html +1 -1
- package/coverage/lcov-report/lib/directives/wallet-events.directive.ts.html +1 -1
- package/coverage/lcov-report/lib/hsuite-wallet.module.ts.html +1 -1
- package/coverage/lcov-report/lib/index.html +1 -1
- package/coverage/lcov-report/lib/models/connection-config.model.ts.html +1 -1
- package/coverage/lcov-report/lib/models/index.html +7 -7
- package/coverage/lcov-report/lib/models/provider-types.ts.html +11 -5
- package/coverage/lcov-report/lib/providers/base-wallet-provider.ts.html +20 -20
- package/coverage/lcov-report/lib/providers/hsuite-native/channel-client.service.ts.html +639 -636
- package/coverage/lcov-report/lib/providers/hsuite-native/index.html +19 -19
- package/coverage/lcov-report/lib/providers/hsuite-native-provider.ts.html +1 -1
- package/coverage/lcov-report/lib/providers/index.html +18 -18
- package/coverage/lcov-report/lib/providers/p2p-native/index.html +22 -22
- package/coverage/lcov-report/lib/providers/p2p-native/p2p-native.provider.ts.html +993 -993
- package/coverage/lcov-report/lib/providers/p2p-native/p2p-session-manager.ts.html +7 -4
- package/coverage/lcov-report/lib/providers/wallet-error-handler.ts.html +1 -1
- package/coverage/lcov-report/lib/providers/walletconnect/core/index.html +65 -65
- package/coverage/lcov-report/lib/providers/walletconnect/core/session-health.ts.html +240 -240
- package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-client-manager.ts.html +559 -559
- package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-provider.ts.html +1108 -1105
- package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-session-store.ts.html +493 -493
- package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-signing-orchestrator.ts.html +366 -366
- package/coverage/lcov-report/lib/providers/walletconnect/signers/hedera-signer.ts.html +730 -730
- package/coverage/lcov-report/lib/providers/walletconnect/signers/index.html +43 -43
- package/coverage/lcov-report/lib/providers/walletconnect/signers/signer-factory.ts.html +234 -234
- package/coverage/lcov-report/lib/providers/walletconnect/signers/xrpl-signer.ts.html +650 -650
- package/coverage/lcov-report/lib/services/hsuite-auth.interceptor.ts.html +568 -0
- package/coverage/lcov-report/lib/services/index.html +50 -20
- package/coverage/lcov-report/lib/services/logger.service.ts.html +1 -1
- package/coverage/lcov-report/lib/services/smart-session.service.ts.html +1264 -0
- package/coverage/lcov-report/lib/services/transaction-builders/active-account-source.ts.html +250 -0
- package/coverage/lcov-report/lib/services/transaction-builders/base-transaction-builder.service.ts.html +1 -1
- package/coverage/lcov-report/lib/services/transaction-builders/hedera-amount-utils.ts.html +155 -155
- package/coverage/lcov-report/lib/services/transaction-builders/hedera-transaction-builder.service.ts.html +2156 -2156
- package/coverage/lcov-report/lib/services/transaction-builders/index.html +58 -43
- package/coverage/lcov-report/lib/services/transaction-builders/xrpl-transaction-builder.service.ts.html +1674 -1674
- package/coverage/lcov-report/lib/services/transaction.service.ts.html +4 -4
- package/coverage/lcov-report/lib/services/unified-wallet.service.ts.html +3 -3
- package/coverage/lcov-report/lib/services/wallet-context.service.ts.html +1 -1
- package/coverage/lcov-report/lib/services/wallet-event-bus.service.ts.html +249 -249
- package/coverage/lcov-report/lib/services/wallet-providers.service.ts.html +1 -1
- package/coverage/lcov-report/lib/transports/chrome-extension-transport.ts.html +1 -1
- package/coverage/lcov-report/lib/transports/index.html +1 -1
- package/coverage/lcov-report/lib/utils/index.html +36 -21
- package/coverage/lcov-report/lib/utils/ledger-icons.util.ts.html +254 -161
- package/coverage/lcov-report/lib/utils/ledger-ui-registry.ts.html +676 -0
- package/coverage/lcov.info +8567 -6896
- package/coverage/lib/components/account-selector/account-actions/account-actions.component.ts.html +1 -1
- package/coverage/lib/components/account-selector/account-actions/index.html +1 -1
- package/coverage/lib/components/account-selector/account-filter/account-filter.component.ts.html +1 -1
- package/coverage/lib/components/account-selector/account-filter/index.html +1 -1
- package/coverage/lib/components/account-selector/account-formatting.service.ts.html +13 -19
- package/coverage/lib/components/account-selector/account-grouping.service.ts.html +1 -1
- package/coverage/lib/components/account-selector/account-list/account-list.component.ts.html +1 -1
- package/coverage/lib/components/account-selector/account-list/index.html +1 -1
- package/coverage/lib/components/account-selector/account-selector.component.ts.html +1 -1
- package/coverage/lib/components/account-selector/account-selector.service.ts.html +1 -1
- package/coverage/lib/components/account-selector/index.html +5 -5
- package/coverage/lib/components/wallet-account-display/index.html +1 -1
- package/coverage/lib/components/wallet-account-display/wallet-account-display.component.ts.html +10 -10
- package/coverage/lib/components/wallet-connect-button/index.html +1 -1
- package/coverage/lib/components/wallet-connect-button/wallet-connect-button.component.ts.html +1 -1
- package/coverage/lib/components/wallet-connect-prompt/index.html +1 -1
- package/coverage/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.ts.html +1 -1
- package/coverage/lib/components/wallet-connected-guard/index.html +1 -1
- package/coverage/lib/components/wallet-connected-guard/wallet-connected-guard.component.ts.html +1 -1
- package/coverage/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.ts.html +1 -1
- package/coverage/lib/components/wallet-connection-modal/connection-method-step/index.html +1 -1
- package/coverage/lib/components/wallet-connection-modal/index.html +15 -15
- package/coverage/lib/components/wallet-connection-modal/qr-pairing-step/index.html +1 -1
- package/coverage/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.ts.html +1 -1
- package/coverage/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts.html +84 -36
- package/coverage/lib/components/wallet-session-display/index.html +1 -1
- package/coverage/lib/components/wallet-session-display/wallet-session-display.component.ts.html +1 -1
- package/coverage/lib/components/wallet-transaction-status/index.html +1 -1
- package/coverage/lib/components/wallet-transaction-status/wallet-transaction-status.component.ts.html +1 -1
- package/coverage/lib/directives/index.html +1 -1
- package/coverage/lib/directives/wallet-connected.directive.ts.html +1 -1
- package/coverage/lib/directives/wallet-context.directive.ts.html +1 -1
- package/coverage/lib/directives/wallet-events.directive.ts.html +1 -1
- package/coverage/lib/hsuite-wallet.module.ts.html +1 -1
- package/coverage/lib/index.html +1 -1
- package/coverage/lib/models/connection-config.model.ts.html +1 -1
- package/coverage/lib/models/index.html +7 -7
- package/coverage/lib/models/provider-types.ts.html +11 -5
- package/coverage/lib/providers/base-wallet-provider.ts.html +20 -20
- package/coverage/lib/providers/hsuite-native/channel-client.service.ts.html +639 -636
- package/coverage/lib/providers/hsuite-native/index.html +19 -19
- package/coverage/lib/providers/hsuite-native-provider.ts.html +1 -1
- package/coverage/lib/providers/index.html +18 -18
- package/coverage/lib/providers/p2p-native/index.html +22 -22
- package/coverage/lib/providers/p2p-native/p2p-native.provider.ts.html +993 -993
- package/coverage/lib/providers/p2p-native/p2p-session-manager.ts.html +7 -4
- package/coverage/lib/providers/wallet-error-handler.ts.html +1 -1
- package/coverage/lib/providers/walletconnect/core/index.html +65 -65
- package/coverage/lib/providers/walletconnect/core/session-health.ts.html +240 -240
- package/coverage/lib/providers/walletconnect/core/walletconnect-client-manager.ts.html +559 -559
- package/coverage/lib/providers/walletconnect/core/walletconnect-provider.ts.html +1108 -1105
- package/coverage/lib/providers/walletconnect/core/walletconnect-session-store.ts.html +493 -493
- package/coverage/lib/providers/walletconnect/core/walletconnect-signing-orchestrator.ts.html +366 -366
- package/coverage/lib/providers/walletconnect/signers/hedera-signer.ts.html +730 -730
- package/coverage/lib/providers/walletconnect/signers/index.html +43 -43
- package/coverage/lib/providers/walletconnect/signers/signer-factory.ts.html +234 -234
- package/coverage/lib/providers/walletconnect/signers/xrpl-signer.ts.html +650 -650
- package/coverage/lib/services/hsuite-auth.interceptor.ts.html +568 -0
- package/coverage/lib/services/index.html +50 -20
- package/coverage/lib/services/logger.service.ts.html +1 -1
- package/coverage/lib/services/smart-session.service.ts.html +1264 -0
- package/coverage/lib/services/transaction-builders/active-account-source.ts.html +250 -0
- package/coverage/lib/services/transaction-builders/base-transaction-builder.service.ts.html +1 -1
- package/coverage/lib/services/transaction-builders/hedera-amount-utils.ts.html +155 -155
- package/coverage/lib/services/transaction-builders/hedera-transaction-builder.service.ts.html +2156 -2156
- package/coverage/lib/services/transaction-builders/index.html +58 -43
- package/coverage/lib/services/transaction-builders/xrpl-transaction-builder.service.ts.html +1674 -1674
- package/coverage/lib/services/transaction.service.ts.html +4 -4
- package/coverage/lib/services/unified-wallet.service.ts.html +3 -3
- package/coverage/lib/services/wallet-context.service.ts.html +1 -1
- package/coverage/lib/services/wallet-event-bus.service.ts.html +249 -249
- package/coverage/lib/services/wallet-providers.service.ts.html +1 -1
- package/coverage/lib/transports/chrome-extension-transport.ts.html +1 -1
- package/coverage/lib/transports/index.html +1 -1
- package/coverage/lib/utils/index.html +36 -21
- package/coverage/lib/utils/ledger-icons.util.ts.html +254 -161
- package/coverage/lib/utils/ledger-ui-registry.ts.html +676 -0
- package/dist/fesm2022/hsuite-native-connect-angular.mjs +854 -308
- package/dist/fesm2022/hsuite-native-connect-angular.mjs.map +1 -1
- package/dist/index.d.ts +456 -30
- package/package.json +4 -4
- package/src/index.ts +26 -0
- package/src/lib/components/account-selector/account-formatting.service.ts +8 -10
- package/src/lib/components/wallet-account-display/wallet-account-display.component.ts +9 -9
- package/src/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts +34 -18
- package/src/lib/models/provider-types.ts +3 -1
- package/src/lib/models/unified-account.model.ts +4 -1
- package/src/lib/providers/hsuite-native/channel-client.service.ts +1 -0
- package/src/lib/providers/p2p-native/p2p-session-manager.ts +1 -0
- package/src/lib/providers/walletconnect/core/walletconnect-provider.ts +2 -1
- package/src/lib/services/hsuite-auth.interceptor.ts +159 -0
- package/src/lib/services/smart-session.service.ts +378 -0
- package/src/lib/services/transaction-builders/active-account-source.spec.ts +75 -0
- package/src/lib/services/transaction-builders/active-account-source.ts +55 -0
- package/src/lib/services/transaction-builders/hedera-transaction-builder.service.ts +4 -4
- package/src/lib/services/transaction-builders/index.ts +1 -0
- package/src/lib/services/transaction.service.ts +7 -3
- package/src/lib/services/unified-wallet.service.spec.ts +1 -1
- package/src/lib/services/unified-wallet.service.ts +2 -2
- package/src/lib/utils/index.ts +1 -0
- package/src/lib/utils/ledger-icons.util.ts +61 -30
- package/src/lib/utils/ledger-ui-registry.ts +197 -0
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">36.38% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>314/863</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">50% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>3/6</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">18.75% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>3/16</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">36.38% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>314/863</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -925,9 +925,170 @@
|
|
|
925
925
|
<a name='L860'></a><a href='#L860'>860</a>
|
|
926
926
|
<a name='L861'></a><a href='#L861'>861</a>
|
|
927
927
|
<a name='L862'></a><a href='#L862'>862</a>
|
|
928
|
-
<a name='L863'></a><a href='#L863'>863</a
|
|
928
|
+
<a name='L863'></a><a href='#L863'>863</a>
|
|
929
|
+
<a name='L864'></a><a href='#L864'>864</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
|
930
|
+
<span class="cline-any cline-yes">1x</span>
|
|
931
|
+
<span class="cline-any cline-yes">1x</span>
|
|
932
|
+
<span class="cline-any cline-yes">1x</span>
|
|
933
|
+
<span class="cline-any cline-yes">1x</span>
|
|
934
|
+
<span class="cline-any cline-yes">1x</span>
|
|
935
|
+
<span class="cline-any cline-yes">1x</span>
|
|
936
|
+
<span class="cline-any cline-yes">1x</span>
|
|
937
|
+
<span class="cline-any cline-yes">1x</span>
|
|
938
|
+
<span class="cline-any cline-yes">1x</span>
|
|
939
|
+
<span class="cline-any cline-yes">1x</span>
|
|
940
|
+
<span class="cline-any cline-yes">1x</span>
|
|
941
|
+
<span class="cline-any cline-yes">1x</span>
|
|
942
|
+
<span class="cline-any cline-yes">1x</span>
|
|
943
|
+
<span class="cline-any cline-yes">1x</span>
|
|
944
|
+
<span class="cline-any cline-yes">1x</span>
|
|
945
|
+
<span class="cline-any cline-yes">1x</span>
|
|
946
|
+
<span class="cline-any cline-yes">1x</span>
|
|
947
|
+
<span class="cline-any cline-yes">1x</span>
|
|
948
|
+
<span class="cline-any cline-yes">1x</span>
|
|
949
|
+
<span class="cline-any cline-yes">1x</span>
|
|
950
|
+
<span class="cline-any cline-yes">1x</span>
|
|
951
|
+
<span class="cline-any cline-yes">1x</span>
|
|
952
|
+
<span class="cline-any cline-yes">1x</span>
|
|
953
|
+
<span class="cline-any cline-yes">1x</span>
|
|
954
|
+
<span class="cline-any cline-yes">1x</span>
|
|
955
|
+
<span class="cline-any cline-yes">1x</span>
|
|
956
|
+
<span class="cline-any cline-yes">1x</span>
|
|
957
|
+
<span class="cline-any cline-yes">1x</span>
|
|
958
|
+
<span class="cline-any cline-yes">1x</span>
|
|
959
|
+
<span class="cline-any cline-yes">1x</span>
|
|
960
|
+
<span class="cline-any cline-yes">1x</span>
|
|
961
|
+
<span class="cline-any cline-yes">1x</span>
|
|
962
|
+
<span class="cline-any cline-yes">1x</span>
|
|
963
|
+
<span class="cline-any cline-yes">1x</span>
|
|
964
|
+
<span class="cline-any cline-yes">1x</span>
|
|
965
|
+
<span class="cline-any cline-yes">1x</span>
|
|
966
|
+
<span class="cline-any cline-yes">1x</span>
|
|
967
|
+
<span class="cline-any cline-yes">1x</span>
|
|
968
|
+
<span class="cline-any cline-yes">1x</span>
|
|
969
|
+
<span class="cline-any cline-yes">1x</span>
|
|
970
|
+
<span class="cline-any cline-yes">1x</span>
|
|
971
|
+
<span class="cline-any cline-yes">1x</span>
|
|
972
|
+
<span class="cline-any cline-yes">1x</span>
|
|
973
|
+
<span class="cline-any cline-yes">1x</span>
|
|
974
|
+
<span class="cline-any cline-yes">1x</span>
|
|
975
|
+
<span class="cline-any cline-yes">1x</span>
|
|
976
|
+
<span class="cline-any cline-yes">1x</span>
|
|
977
|
+
<span class="cline-any cline-yes">1x</span>
|
|
978
|
+
<span class="cline-any cline-yes">1x</span>
|
|
979
|
+
<span class="cline-any cline-yes">1x</span>
|
|
980
|
+
<span class="cline-any cline-yes">1x</span>
|
|
981
|
+
<span class="cline-any cline-yes">1x</span>
|
|
982
|
+
<span class="cline-any cline-yes">1x</span>
|
|
983
|
+
<span class="cline-any cline-yes">1x</span>
|
|
984
|
+
<span class="cline-any cline-yes">1x</span>
|
|
985
|
+
<span class="cline-any cline-yes">1x</span>
|
|
986
|
+
<span class="cline-any cline-yes">1x</span>
|
|
987
|
+
<span class="cline-any cline-yes">1x</span>
|
|
988
|
+
<span class="cline-any cline-yes">1x</span>
|
|
989
|
+
<span class="cline-any cline-yes">1x</span>
|
|
990
|
+
<span class="cline-any cline-yes">1x</span>
|
|
991
|
+
<span class="cline-any cline-yes">1x</span>
|
|
992
|
+
<span class="cline-any cline-yes">1x</span>
|
|
993
|
+
<span class="cline-any cline-yes">1x</span>
|
|
994
|
+
<span class="cline-any cline-yes">1x</span>
|
|
995
|
+
<span class="cline-any cline-yes">1x</span>
|
|
996
|
+
<span class="cline-any cline-yes">1x</span>
|
|
997
|
+
<span class="cline-any cline-yes">1x</span>
|
|
998
|
+
<span class="cline-any cline-yes">1x</span>
|
|
999
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1000
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1001
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1002
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1003
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1004
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1005
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1006
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1007
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1008
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1009
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1010
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1011
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1012
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1013
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1014
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1015
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1016
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1017
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1018
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1019
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1020
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1021
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1022
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1023
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1024
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1025
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1026
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1027
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1028
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1029
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1030
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1031
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1032
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1033
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1034
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1035
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1036
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1037
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1038
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1039
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1040
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1041
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1042
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1043
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1044
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1045
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1046
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1047
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1048
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1049
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1050
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1051
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1052
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1053
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1054
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1055
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1056
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1057
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1058
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1059
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1060
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1061
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1062
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1063
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1064
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1065
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1066
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1067
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1068
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1069
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1070
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1071
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1072
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1073
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1074
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1075
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1076
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1077
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1078
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1079
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1080
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1081
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1082
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1083
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1084
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1085
|
+
<span class="cline-any cline-yes">2x</span>
|
|
929
1086
|
<span class="cline-any cline-no"> </span>
|
|
930
1087
|
<span class="cline-any cline-no"> </span>
|
|
1088
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1089
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1090
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1091
|
+
<span class="cline-any cline-yes">2x</span>
|
|
931
1092
|
<span class="cline-any cline-no"> </span>
|
|
932
1093
|
<span class="cline-any cline-no"> </span>
|
|
933
1094
|
<span class="cline-any cline-no"> </span>
|
|
@@ -954,6 +1115,30 @@
|
|
|
954
1115
|
<span class="cline-any cline-no"> </span>
|
|
955
1116
|
<span class="cline-any cline-no"> </span>
|
|
956
1117
|
<span class="cline-any cline-no"> </span>
|
|
1118
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1119
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1120
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1121
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1122
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1123
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1124
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1125
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1126
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1127
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1128
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1129
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1130
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1131
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1132
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1133
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1134
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1135
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1136
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1137
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1138
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1139
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1140
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1141
|
+
<span class="cline-any cline-yes">2x</span>
|
|
957
1142
|
<span class="cline-any cline-no"> </span>
|
|
958
1143
|
<span class="cline-any cline-no"> </span>
|
|
959
1144
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1106,8 +1291,33 @@
|
|
|
1106
1291
|
<span class="cline-any cline-no"> </span>
|
|
1107
1292
|
<span class="cline-any cline-no"> </span>
|
|
1108
1293
|
<span class="cline-any cline-no"> </span>
|
|
1294
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1295
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1296
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1297
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1298
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1299
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1300
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1301
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1302
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1303
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1304
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1109
1305
|
<span class="cline-any cline-no"> </span>
|
|
1110
1306
|
<span class="cline-any cline-no"> </span>
|
|
1307
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1308
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1309
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1310
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1311
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1312
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1313
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1314
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1315
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1316
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1317
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1318
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1319
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1320
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1111
1321
|
<span class="cline-any cline-no"> </span>
|
|
1112
1322
|
<span class="cline-any cline-no"> </span>
|
|
1113
1323
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1127,6 +1337,22 @@
|
|
|
1127
1337
|
<span class="cline-any cline-no"> </span>
|
|
1128
1338
|
<span class="cline-any cline-no"> </span>
|
|
1129
1339
|
<span class="cline-any cline-no"> </span>
|
|
1340
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1341
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1342
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1343
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1344
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1345
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1346
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1347
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1348
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1349
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1350
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1351
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1352
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1353
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1354
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1355
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1130
1356
|
<span class="cline-any cline-no"> </span>
|
|
1131
1357
|
<span class="cline-any cline-no"> </span>
|
|
1132
1358
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1150,6 +1376,25 @@
|
|
|
1150
1376
|
<span class="cline-any cline-no"> </span>
|
|
1151
1377
|
<span class="cline-any cline-no"> </span>
|
|
1152
1378
|
<span class="cline-any cline-no"> </span>
|
|
1379
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1380
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1381
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1382
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1383
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1384
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1385
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1386
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1387
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1388
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1389
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1390
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1391
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1392
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1393
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1394
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1395
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1396
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1397
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1153
1398
|
<span class="cline-any cline-no"> </span>
|
|
1154
1399
|
<span class="cline-any cline-no"> </span>
|
|
1155
1400
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1186,6 +1431,11 @@
|
|
|
1186
1431
|
<span class="cline-any cline-no"> </span>
|
|
1187
1432
|
<span class="cline-any cline-no"> </span>
|
|
1188
1433
|
<span class="cline-any cline-no"> </span>
|
|
1434
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1435
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1436
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1437
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1438
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1189
1439
|
<span class="cline-any cline-no"> </span>
|
|
1190
1440
|
<span class="cline-any cline-no"> </span>
|
|
1191
1441
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1210,6 +1460,16 @@
|
|
|
1210
1460
|
<span class="cline-any cline-no"> </span>
|
|
1211
1461
|
<span class="cline-any cline-no"> </span>
|
|
1212
1462
|
<span class="cline-any cline-no"> </span>
|
|
1463
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1464
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1465
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1466
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1467
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1468
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1469
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1470
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1471
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1472
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1213
1473
|
<span class="cline-any cline-no"> </span>
|
|
1214
1474
|
<span class="cline-any cline-no"> </span>
|
|
1215
1475
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1331,12 +1591,32 @@
|
|
|
1331
1591
|
<span class="cline-any cline-no"> </span>
|
|
1332
1592
|
<span class="cline-any cline-no"> </span>
|
|
1333
1593
|
<span class="cline-any cline-no"> </span>
|
|
1594
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1595
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1596
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1597
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1598
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1599
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1600
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1601
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1602
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1603
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1334
1604
|
<span class="cline-any cline-no"> </span>
|
|
1335
1605
|
<span class="cline-any cline-no"> </span>
|
|
1336
1606
|
<span class="cline-any cline-no"> </span>
|
|
1337
1607
|
<span class="cline-any cline-no"> </span>
|
|
1338
1608
|
<span class="cline-any cline-no"> </span>
|
|
1339
1609
|
<span class="cline-any cline-no"> </span>
|
|
1610
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1611
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1612
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1613
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1614
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1615
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1616
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1617
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1618
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1619
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1340
1620
|
<span class="cline-any cline-no"> </span>
|
|
1341
1621
|
<span class="cline-any cline-no"> </span>
|
|
1342
1622
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1407,11 +1687,27 @@
|
|
|
1407
1687
|
<span class="cline-any cline-no"> </span>
|
|
1408
1688
|
<span class="cline-any cline-no"> </span>
|
|
1409
1689
|
<span class="cline-any cline-no"> </span>
|
|
1690
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1691
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1692
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1693
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1694
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1410
1695
|
<span class="cline-any cline-no"> </span>
|
|
1411
1696
|
<span class="cline-any cline-no"> </span>
|
|
1412
1697
|
<span class="cline-any cline-no"> </span>
|
|
1413
1698
|
<span class="cline-any cline-no"> </span>
|
|
1414
1699
|
<span class="cline-any cline-no"> </span>
|
|
1700
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1701
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1702
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1703
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1704
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1705
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1706
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1707
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1708
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1709
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1710
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1415
1711
|
<span class="cline-any cline-no"> </span>
|
|
1416
1712
|
<span class="cline-any cline-no"> </span>
|
|
1417
1713
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1426,6 +1722,13 @@
|
|
|
1426
1722
|
<span class="cline-any cline-no"> </span>
|
|
1427
1723
|
<span class="cline-any cline-no"> </span>
|
|
1428
1724
|
<span class="cline-any cline-no"> </span>
|
|
1725
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1726
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1727
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1728
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1729
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1730
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1731
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1429
1732
|
<span class="cline-any cline-no"> </span>
|
|
1430
1733
|
<span class="cline-any cline-no"> </span>
|
|
1431
1734
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1459,6 +1762,11 @@
|
|
|
1459
1762
|
<span class="cline-any cline-no"> </span>
|
|
1460
1763
|
<span class="cline-any cline-no"> </span>
|
|
1461
1764
|
<span class="cline-any cline-no"> </span>
|
|
1765
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1766
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1767
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1768
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1769
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1462
1770
|
<span class="cline-any cline-no"> </span>
|
|
1463
1771
|
<span class="cline-any cline-no"> </span>
|
|
1464
1772
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1469,487 +1777,181 @@
|
|
|
1469
1777
|
<span class="cline-any cline-no"> </span>
|
|
1470
1778
|
<span class="cline-any cline-no"> </span>
|
|
1471
1779
|
<span class="cline-any cline-no"> </span>
|
|
1780
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1781
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1782
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1783
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1784
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1472
1785
|
<span class="cline-any cline-no"> </span>
|
|
1473
1786
|
<span class="cline-any cline-no"> </span>
|
|
1474
1787
|
<span class="cline-any cline-no"> </span>
|
|
1475
1788
|
<span class="cline-any cline-no"> </span>
|
|
1476
1789
|
<span class="cline-any cline-no"> </span>
|
|
1477
1790
|
<span class="cline-any cline-no"> </span>
|
|
1478
|
-
<span class="cline-any cline-
|
|
1479
|
-
<span class="cline-any cline-
|
|
1480
|
-
|
|
1481
|
-
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1508
|
-
|
|
1509
|
-
|
|
1510
|
-
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
|
|
1549
|
-
|
|
1550
|
-
|
|
1551
|
-
|
|
1552
|
-
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
<span class="
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
|
|
1564
|
-
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
|
|
1594
|
-
|
|
1595
|
-
|
|
1596
|
-
|
|
1597
|
-
|
|
1598
|
-
|
|
1599
|
-
|
|
1600
|
-
|
|
1601
|
-
|
|
1602
|
-
|
|
1603
|
-
|
|
1604
|
-
|
|
1605
|
-
|
|
1606
|
-
|
|
1607
|
-
|
|
1608
|
-
|
|
1609
|
-
|
|
1610
|
-
|
|
1611
|
-
|
|
1612
|
-
|
|
1613
|
-
|
|
1614
|
-
|
|
1615
|
-
|
|
1616
|
-
|
|
1617
|
-
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
<span class="cline-any cline-no"> </span>
|
|
1637
|
-
<span class="cline-any cline-no"> </span>
|
|
1638
|
-
<span class="cline-any cline-no"> </span>
|
|
1639
|
-
<span class="cline-any cline-no"> </span>
|
|
1640
|
-
<span class="cline-any cline-no"> </span>
|
|
1641
|
-
<span class="cline-any cline-no"> </span>
|
|
1642
|
-
<span class="cline-any cline-no"> </span>
|
|
1643
|
-
<span class="cline-any cline-no"> </span>
|
|
1644
|
-
<span class="cline-any cline-no"> </span>
|
|
1645
|
-
<span class="cline-any cline-no"> </span>
|
|
1646
|
-
<span class="cline-any cline-no"> </span>
|
|
1647
|
-
<span class="cline-any cline-no"> </span>
|
|
1648
|
-
<span class="cline-any cline-no"> </span>
|
|
1649
|
-
<span class="cline-any cline-no"> </span>
|
|
1650
|
-
<span class="cline-any cline-no"> </span>
|
|
1651
|
-
<span class="cline-any cline-no"> </span>
|
|
1652
|
-
<span class="cline-any cline-no"> </span>
|
|
1653
|
-
<span class="cline-any cline-no"> </span>
|
|
1654
|
-
<span class="cline-any cline-no"> </span>
|
|
1655
|
-
<span class="cline-any cline-no"> </span>
|
|
1656
|
-
<span class="cline-any cline-no"> </span>
|
|
1657
|
-
<span class="cline-any cline-no"> </span>
|
|
1658
|
-
<span class="cline-any cline-no"> </span>
|
|
1659
|
-
<span class="cline-any cline-no"> </span>
|
|
1660
|
-
<span class="cline-any cline-no"> </span>
|
|
1661
|
-
<span class="cline-any cline-no"> </span>
|
|
1662
|
-
<span class="cline-any cline-no"> </span>
|
|
1663
|
-
<span class="cline-any cline-no"> </span>
|
|
1664
|
-
<span class="cline-any cline-no"> </span>
|
|
1665
|
-
<span class="cline-any cline-no"> </span>
|
|
1666
|
-
<span class="cline-any cline-no"> </span>
|
|
1667
|
-
<span class="cline-any cline-no"> </span>
|
|
1668
|
-
<span class="cline-any cline-no"> </span>
|
|
1669
|
-
<span class="cline-any cline-no"> </span>
|
|
1670
|
-
<span class="cline-any cline-no"> </span>
|
|
1671
|
-
<span class="cline-any cline-no"> </span>
|
|
1672
|
-
<span class="cline-any cline-no"> </span>
|
|
1673
|
-
<span class="cline-any cline-no"> </span>
|
|
1674
|
-
<span class="cline-any cline-no"> </span>
|
|
1675
|
-
<span class="cline-any cline-no"> </span>
|
|
1676
|
-
<span class="cline-any cline-no"> </span>
|
|
1677
|
-
<span class="cline-any cline-no"> </span>
|
|
1678
|
-
<span class="cline-any cline-no"> </span>
|
|
1679
|
-
<span class="cline-any cline-no"> </span>
|
|
1680
|
-
<span class="cline-any cline-no"> </span>
|
|
1681
|
-
<span class="cline-any cline-no"> </span>
|
|
1682
|
-
<span class="cline-any cline-no"> </span>
|
|
1683
|
-
<span class="cline-any cline-no"> </span>
|
|
1684
|
-
<span class="cline-any cline-no"> </span>
|
|
1685
|
-
<span class="cline-any cline-no"> </span>
|
|
1686
|
-
<span class="cline-any cline-no"> </span>
|
|
1687
|
-
<span class="cline-any cline-no"> </span>
|
|
1688
|
-
<span class="cline-any cline-no"> </span>
|
|
1689
|
-
<span class="cline-any cline-no"> </span>
|
|
1690
|
-
<span class="cline-any cline-no"> </span>
|
|
1691
|
-
<span class="cline-any cline-no"> </span>
|
|
1692
|
-
<span class="cline-any cline-no"> </span>
|
|
1693
|
-
<span class="cline-any cline-no"> </span>
|
|
1694
|
-
<span class="cline-any cline-no"> </span>
|
|
1695
|
-
<span class="cline-any cline-no"> </span>
|
|
1696
|
-
<span class="cline-any cline-no"> </span>
|
|
1697
|
-
<span class="cline-any cline-no"> </span>
|
|
1698
|
-
<span class="cline-any cline-no"> </span>
|
|
1699
|
-
<span class="cline-any cline-no"> </span>
|
|
1700
|
-
<span class="cline-any cline-no"> </span>
|
|
1701
|
-
<span class="cline-any cline-no"> </span>
|
|
1702
|
-
<span class="cline-any cline-no"> </span>
|
|
1703
|
-
<span class="cline-any cline-no"> </span>
|
|
1704
|
-
<span class="cline-any cline-no"> </span>
|
|
1705
|
-
<span class="cline-any cline-no"> </span>
|
|
1706
|
-
<span class="cline-any cline-no"> </span>
|
|
1707
|
-
<span class="cline-any cline-no"> </span>
|
|
1708
|
-
<span class="cline-any cline-no"> </span>
|
|
1709
|
-
<span class="cline-any cline-no"> </span>
|
|
1710
|
-
<span class="cline-any cline-no"> </span>
|
|
1711
|
-
<span class="cline-any cline-no"> </span>
|
|
1712
|
-
<span class="cline-any cline-no"> </span>
|
|
1713
|
-
<span class="cline-any cline-no"> </span>
|
|
1714
|
-
<span class="cline-any cline-no"> </span>
|
|
1715
|
-
<span class="cline-any cline-no"> </span>
|
|
1716
|
-
<span class="cline-any cline-no"> </span>
|
|
1717
|
-
<span class="cline-any cline-no"> </span>
|
|
1718
|
-
<span class="cline-any cline-no"> </span>
|
|
1719
|
-
<span class="cline-any cline-no"> </span>
|
|
1720
|
-
<span class="cline-any cline-no"> </span>
|
|
1721
|
-
<span class="cline-any cline-no"> </span>
|
|
1722
|
-
<span class="cline-any cline-no"> </span>
|
|
1723
|
-
<span class="cline-any cline-no"> </span>
|
|
1724
|
-
<span class="cline-any cline-no"> </span>
|
|
1725
|
-
<span class="cline-any cline-no"> </span>
|
|
1726
|
-
<span class="cline-any cline-no"> </span>
|
|
1727
|
-
<span class="cline-any cline-no"> </span>
|
|
1728
|
-
<span class="cline-any cline-no"> </span>
|
|
1729
|
-
<span class="cline-any cline-no"> </span>
|
|
1730
|
-
<span class="cline-any cline-no"> </span>
|
|
1731
|
-
<span class="cline-any cline-no"> </span>
|
|
1732
|
-
<span class="cline-any cline-no"> </span>
|
|
1733
|
-
<span class="cline-any cline-no"> </span>
|
|
1734
|
-
<span class="cline-any cline-no"> </span>
|
|
1735
|
-
<span class="cline-any cline-no"> </span>
|
|
1736
|
-
<span class="cline-any cline-no"> </span>
|
|
1737
|
-
<span class="cline-any cline-no"> </span>
|
|
1738
|
-
<span class="cline-any cline-no"> </span>
|
|
1739
|
-
<span class="cline-any cline-no"> </span>
|
|
1740
|
-
<span class="cline-any cline-no"> </span>
|
|
1741
|
-
<span class="cline-any cline-no"> </span>
|
|
1742
|
-
<span class="cline-any cline-no"> </span>
|
|
1743
|
-
<span class="cline-any cline-no"> </span>
|
|
1744
|
-
<span class="cline-any cline-no"> </span>
|
|
1745
|
-
<span class="cline-any cline-no"> </span>
|
|
1746
|
-
<span class="cline-any cline-no"> </span>
|
|
1747
|
-
<span class="cline-any cline-no"> </span>
|
|
1748
|
-
<span class="cline-any cline-no"> </span>
|
|
1749
|
-
<span class="cline-any cline-no"> </span>
|
|
1750
|
-
<span class="cline-any cline-no"> </span>
|
|
1751
|
-
<span class="cline-any cline-no"> </span>
|
|
1752
|
-
<span class="cline-any cline-no"> </span>
|
|
1753
|
-
<span class="cline-any cline-no"> </span>
|
|
1754
|
-
<span class="cline-any cline-no"> </span>
|
|
1755
|
-
<span class="cline-any cline-no"> </span>
|
|
1756
|
-
<span class="cline-any cline-no"> </span>
|
|
1757
|
-
<span class="cline-any cline-no"> </span>
|
|
1758
|
-
<span class="cline-any cline-no"> </span>
|
|
1759
|
-
<span class="cline-any cline-no"> </span>
|
|
1760
|
-
<span class="cline-any cline-no"> </span>
|
|
1761
|
-
<span class="cline-any cline-no"> </span>
|
|
1762
|
-
<span class="cline-any cline-no"> </span>
|
|
1763
|
-
<span class="cline-any cline-no"> </span>
|
|
1764
|
-
<span class="cline-any cline-no"> </span>
|
|
1765
|
-
<span class="cline-any cline-no"> </span>
|
|
1766
|
-
<span class="cline-any cline-no"> </span>
|
|
1767
|
-
<span class="cline-any cline-no"> </span>
|
|
1768
|
-
<span class="cline-any cline-no"> </span>
|
|
1769
|
-
<span class="cline-any cline-no"> </span>
|
|
1770
|
-
<span class="cline-any cline-no"> </span>
|
|
1771
|
-
<span class="cline-any cline-no"> </span>
|
|
1772
|
-
<span class="cline-any cline-no"> </span>
|
|
1773
|
-
<span class="cline-any cline-no"> </span>
|
|
1774
|
-
<span class="cline-any cline-no"> </span>
|
|
1775
|
-
<span class="cline-any cline-no"> </span>
|
|
1776
|
-
<span class="cline-any cline-no"> </span>
|
|
1777
|
-
<span class="cline-any cline-no"> </span>
|
|
1778
|
-
<span class="cline-any cline-no"> </span>
|
|
1779
|
-
<span class="cline-any cline-no"> </span>
|
|
1780
|
-
<span class="cline-any cline-no"> </span>
|
|
1781
|
-
<span class="cline-any cline-no"> </span>
|
|
1782
|
-
<span class="cline-any cline-no"> </span>
|
|
1783
|
-
<span class="cline-any cline-no"> </span>
|
|
1784
|
-
<span class="cline-any cline-no"> </span>
|
|
1785
|
-
<span class="cline-any cline-no"> </span>
|
|
1786
|
-
<span class="cline-any cline-no"> </span>
|
|
1787
|
-
<span class="cline-any cline-no"> </span>
|
|
1788
|
-
<span class="cline-any cline-no"> </span>
|
|
1789
|
-
<span class="cline-any cline-no"> </span>
|
|
1790
|
-
<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>
|
|
1791
|
-
<span class="cstat-no" title="statement not covered" > * HSuite Native Connect</span>
|
|
1792
|
-
<span class="cstat-no" title="statement not covered" > * Copyright 2024-2025 HSuite (https://hsuite.finance)</span>
|
|
1793
|
-
<span class="cstat-no" title="statement not covered" > *</span>
|
|
1794
|
-
<span class="cstat-no" title="statement not covered" > * SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0</span>
|
|
1795
|
-
<span class="cstat-no" title="statement not covered" > *</span>
|
|
1796
|
-
<span class="cstat-no" title="statement not covered" > * This file is part of HSuite Native Connect. For commercial licensing,</span>
|
|
1797
|
-
<span class="cstat-no" title="statement not covered" > * visit https://hsuite.finance/licensing</span>
|
|
1798
|
-
<span class="cstat-no" title="statement not covered" > */</span>
|
|
1799
|
-
<span class="cstat-no" title="statement not covered" ></span>
|
|
1800
|
-
<span class="cstat-no" title="statement not covered" >/**</span>
|
|
1801
|
-
<span class="cstat-no" title="statement not covered" > * @file channel-client.service.ts</span>
|
|
1802
|
-
<span class="cstat-no" title="statement not covered" > * @description Angular wrapper for the unified ChannelClient.</span>
|
|
1803
|
-
<span class="cstat-no" title="statement not covered" > *</span>
|
|
1804
|
-
<span class="cstat-no" title="statement not covered" > * ChannelClientService</span>
|
|
1805
|
-
<span class="cstat-no" title="statement not covered" > *</span>
|
|
1806
|
-
<span class="cstat-no" title="statement not covered" > * Angular service that wraps the ChannelClient from native-wallet-sdk,</span>
|
|
1807
|
-
<span class="cstat-no" title="statement not covered" > * providing reactive signals and Angular-friendly APIs for dApp-wallet</span>
|
|
1808
|
-
<span class="cstat-no" title="statement not covered" > * communication using the new unified channel protocol.</span>
|
|
1809
|
-
<span class="cstat-no" title="statement not covered" > *</span>
|
|
1810
|
-
<span class="cstat-no" title="statement not covered" > * Key features:</span>
|
|
1811
|
-
<span class="cstat-no" title="statement not covered" > * - Reactive state via Angular signals</span>
|
|
1812
|
-
<span class="cstat-no" title="statement not covered" > * - NgZone integration for proper change detection</span>
|
|
1813
|
-
<span class="cstat-no" title="statement not covered" > * - Automatic session persistence</span>
|
|
1814
|
-
<span class="cstat-no" title="statement not covered" > * - Support for both session (1:1) and party (N:N) channels</span>
|
|
1815
|
-
<span class="cstat-no" title="statement not covered" > *</span>
|
|
1816
|
-
<span class="cstat-no" title="statement not covered" > * This service is designed to replace the existing NostrSessionClient</span>
|
|
1817
|
-
<span class="cstat-no" title="statement not covered" > * as part of the protocol simplification effort. It can coexist with</span>
|
|
1818
|
-
<span class="cstat-no" title="statement not covered" > * the legacy implementation during migration.</span>
|
|
1819
|
-
<span class="cstat-no" title="statement not covered" > *</span>
|
|
1820
|
-
<span class="cstat-no" title="statement not covered" > * @Component({ ... })</span>
|
|
1821
|
-
<span class="cstat-no" title="statement not covered" > * export class AppComponent {</span>
|
|
1822
|
-
<span class="cstat-no" title="statement not covered" > * private channelService = inject(ChannelClientService);</span>
|
|
1823
|
-
<span class="cstat-no" title="statement not covered" > *</span>
|
|
1824
|
-
<span class="cstat-no" title="statement not covered" > * readonly state = this.channelService.state;</span>
|
|
1825
|
-
<span class="cstat-no" title="statement not covered" > * readonly accounts = this.channelService.accounts;</span>
|
|
1826
|
-
<span class="cstat-no" title="statement not covered" > *</span>
|
|
1827
|
-
<span class="cstat-no" title="statement not covered" > * async connect() {</span>
|
|
1828
|
-
<span class="cstat-no" title="statement not covered" > * const invite = await this.channelService.connect({</span>
|
|
1829
|
-
<span class="cstat-no" title="statement not covered" > * type: 'session',</span>
|
|
1830
|
-
<span class="cstat-no" title="statement not covered" > * appId: 'my-dapp',</span>
|
|
1831
|
-
<span class="cstat-no" title="statement not covered" > * appName: 'My dApp',</span>
|
|
1832
|
-
<span class="cstat-no" title="statement not covered" > * ledgerId: 'hedera',</span>
|
|
1833
|
-
<span class="cstat-no" title="statement not covered" > * networkId: 'mainnet',</span>
|
|
1834
|
-
<span class="cstat-no" title="statement not covered" > * });</span>
|
|
1835
|
-
<span class="cstat-no" title="statement not covered" > * // Open wallet with invite URL</span>
|
|
1836
|
-
<span class="cstat-no" title="statement not covered" > * window.open(this.channelService.getWalletInviteUrl(invite, walletUrl));</span>
|
|
1837
|
-
<span class="cstat-no" title="statement not covered" > * }</span>
|
|
1838
|
-
<span class="cstat-no" title="statement not covered" > * }</span>
|
|
1839
|
-
<span class="cstat-no" title="statement not covered" > * ```</span>
|
|
1840
|
-
<span class="cstat-no" title="statement not covered" > */</span>
|
|
1841
|
-
<span class="cstat-no" title="statement not covered" ></span>
|
|
1842
|
-
<span class="cstat-no" title="statement not covered" >import {</span>
|
|
1843
|
-
<span class="cstat-no" title="statement not covered" > Injectable,</span>
|
|
1844
|
-
<span class="cstat-no" title="statement not covered" > inject,</span>
|
|
1845
|
-
<span class="cstat-no" title="statement not covered" > signal,</span>
|
|
1846
|
-
<span class="cstat-no" title="statement not covered" > computed,</span>
|
|
1847
|
-
<span class="cstat-no" title="statement not covered" > NgZone,</span>
|
|
1848
|
-
<span class="cstat-no" title="statement not covered" > type Signal,</span>
|
|
1849
|
-
<span class="cstat-no" title="statement not covered" > type WritableSignal,</span>
|
|
1850
|
-
<span class="cstat-no" title="statement not covered" >} from '@angular/core';</span>
|
|
1851
|
-
<span class="cstat-no" title="statement not covered" >import {</span>
|
|
1852
|
-
<span class="cstat-no" title="statement not covered" > ChannelClient,</span>
|
|
1853
|
-
<span class="cstat-no" title="statement not covered" > type ChannelInvite,</span>
|
|
1854
|
-
<span class="cstat-no" title="statement not covered" > type ChannelState,</span>
|
|
1855
|
-
<span class="cstat-no" title="statement not covered" > type ChannelType,</span>
|
|
1856
|
-
<span class="cstat-no" title="statement not covered" > type ChannelAccount,</span>
|
|
1857
|
-
<span class="cstat-no" title="statement not covered" > type TransportState,</span>
|
|
1858
|
-
<span class="cstat-no" title="statement not covered" > type PersistedChannel,</span>
|
|
1859
|
-
<span class="cstat-no" title="statement not covered" > encodeChannelInvite,</span>
|
|
1860
|
-
<span class="cstat-no" title="statement not covered" > getLogger,</span>
|
|
1861
|
-
<span class="cstat-no" title="statement not covered" >} from '@hsuite/native-connect-sdk';</span>
|
|
1862
|
-
<span class="cstat-no" title="statement not covered" ></span>
|
|
1863
|
-
<span class="cstat-no" title="statement not covered" >import { DEFAULT_WALLET_URL } from '../../models/provider-types';</span>
|
|
1864
|
-
<span class="cstat-no" title="statement not covered" >import type { UnifiedAccount } from '../../models/unified-account.model';</span>
|
|
1865
|
-
<span class="cstat-no" title="statement not covered" ></span>
|
|
1866
|
-
<span class="cstat-no" title="statement not covered" >const logger = getLogger().scoped?.('ChannelClientService') ?? getLogger();</span>
|
|
1867
|
-
<span class="cstat-no" title="statement not covered" ></span>
|
|
1868
|
-
<span class="cstat-no" title="statement not covered" >/**</span>
|
|
1869
|
-
<span class="cstat-no" title="statement not covered" > * ChannelConnectConfig</span>
|
|
1870
|
-
<span class="cstat-no" title="statement not covered" > *</span>
|
|
1871
|
-
<span class="cstat-no" title="statement not covered" > * Configuration for establishing a new channel.</span>
|
|
1872
|
-
<span class="cstat-no" title="statement not covered" > */</span>
|
|
1873
|
-
<span class="cstat-no" title="statement not covered" >export interface ChannelConnectConfig {</span>
|
|
1874
|
-
<span class="cstat-no" title="statement not covered" > /** Channel type: 'session' for 1:1, 'party' for multisig */</span>
|
|
1875
|
-
<span class="cstat-no" title="statement not covered" > type: ChannelType;</span>
|
|
1876
|
-
<span class="cstat-no" title="statement not covered" > /** dApp identifier */</span>
|
|
1877
|
-
<span class="cstat-no" title="statement not covered" > appId: string;</span>
|
|
1878
|
-
<span class="cstat-no" title="statement not covered" > /** dApp display name */</span>
|
|
1879
|
-
<span class="cstat-no" title="statement not covered" > appName: string;</span>
|
|
1880
|
-
<span class="cstat-no" title="statement not covered" > /** dApp icon URL (optional) */</span>
|
|
1881
|
-
<span class="cstat-no" title="statement not covered" > appIcon?: string;</span>
|
|
1882
|
-
<span class="cstat-no" title="statement not covered" > /**</span>
|
|
1883
|
-
<span class="cstat-no" title="statement not covered" > * dApp origin URL (optional). When omitted, the SDK falls back to</span>
|
|
1884
|
-
<span class="cstat-no" title="statement not covered" > * `window.location.origin` so the wallet can always show the user where the</span>
|
|
1885
|
-
<span class="cstat-no" title="statement not covered" > * connection request is coming from. Override this only if your dApp serves</span>
|
|
1886
|
-
<span class="cstat-no" title="statement not covered" > * the wallet integration from a different origin than the page hosting it.</span>
|
|
1887
|
-
<span class="cstat-no" title="statement not covered" > */</span>
|
|
1888
|
-
<span class="cstat-no" title="statement not covered" > appOrigin?: string;</span>
|
|
1889
|
-
<span class="cstat-no" title="statement not covered" > /** Target ledger (e.g., 'hedera', 'xrpl') */</span>
|
|
1890
|
-
<span class="cstat-no" title="statement not covered" > ledgerId: string;</span>
|
|
1891
|
-
<span class="cstat-no" title="statement not covered" > /** Target network (e.g., 'mainnet', 'testnet') */</span>
|
|
1892
|
-
<span class="cstat-no" title="statement not covered" > networkId: string;</span>
|
|
1893
|
-
<span class="cstat-no" title="statement not covered" > /** Requested permissions */</span>
|
|
1894
|
-
<span class="cstat-no" title="statement not covered" > permissions?: string[];</span>
|
|
1895
|
-
<span class="cstat-no" title="statement not covered" > /** Nostr relay URLs (optional, uses defaults) */</span>
|
|
1896
|
-
<span class="cstat-no" title="statement not covered" > relays?: string[];</span>
|
|
1897
|
-
<span class="cstat-no" title="statement not covered" > /** Wallet URL for generating invite links */</span>
|
|
1898
|
-
<span class="cstat-no" title="statement not covered" > walletUrl?: string;</span>
|
|
1899
|
-
<span class="cstat-no" title="statement not covered" >}</span>
|
|
1900
|
-
<span class="cstat-no" title="statement not covered" ></span>
|
|
1901
|
-
<span class="cstat-no" title="statement not covered" >/**</span>
|
|
1902
|
-
<span class="cstat-no" title="statement not covered" > * ChannelClientService</span>
|
|
1903
|
-
<span class="cstat-no" title="statement not covered" > *</span>
|
|
1904
|
-
<span class="cstat-no" title="statement not covered" > * Angular service for unified channel-based dApp-wallet communication.</span>
|
|
1905
|
-
<span class="cstat-no" title="statement not covered" > */</span>
|
|
1906
|
-
<span class="cstat-no" title="statement not covered" >@Injectable({ providedIn: 'root' })</span>
|
|
1907
|
-
<span class="cstat-no" title="statement not covered" >export class ChannelClientService {</span>
|
|
1908
|
-
<span class="cstat-no" title="statement not covered" > private readonly zone = inject(NgZone);</span>
|
|
1909
|
-
<span class="cstat-no" title="statement not covered" > private client: ChannelClient | null = null;</span>
|
|
1910
|
-
<span class="cstat-no" title="statement not covered" ></span>
|
|
1911
|
-
<span class="cstat-no" title="statement not covered" > // ============================================================================</span>
|
|
1912
|
-
<span class="cstat-no" title="statement not covered" > // Reactive State</span>
|
|
1913
|
-
<span class="cstat-no" title="statement not covered" > // ============================================================================</span>
|
|
1914
|
-
<span class="cstat-no" title="statement not covered" ></span>
|
|
1915
|
-
<span class="cstat-no" title="statement not covered" > /** Current channel state */</span>
|
|
1916
|
-
<span class="cstat-no" title="statement not covered" > private readonly _state: WritableSignal<ChannelState> = signal('idle');</span>
|
|
1917
|
-
<span class="cstat-no" title="statement not covered" > readonly state: Signal<ChannelState> = this._state.asReadonly();</span>
|
|
1918
|
-
<span class="cstat-no" title="statement not covered" ></span>
|
|
1919
|
-
<span class="cstat-no" title="statement not covered" > /** Current transport state (nostr-only, p2p-connected, etc.) */</span>
|
|
1920
|
-
<span class="cstat-no" title="statement not covered" > private readonly _transportState: WritableSignal<TransportState> = signal('nostr-only');</span>
|
|
1921
|
-
<span class="cstat-no" title="statement not covered" > readonly transportState: Signal<TransportState> = this._transportState.asReadonly();</span>
|
|
1922
|
-
<span class="cstat-no" title="statement not covered" ></span>
|
|
1923
|
-
<span class="cstat-no" title="statement not covered" > /** Approved accounts from the wallet */</span>
|
|
1924
|
-
<span class="cstat-no" title="statement not covered" > private readonly _accounts: WritableSignal<ChannelAccount[]> = signal([]);</span>
|
|
1925
|
-
<span class="cstat-no" title="statement not covered" > readonly accounts: Signal<ChannelAccount[]> = this._accounts.asReadonly();</span>
|
|
1926
|
-
<span class="cstat-no" title="statement not covered" ></span>
|
|
1927
|
-
<span class="cstat-no" title="statement not covered" > /** Current channel invite (if connected) */</span>
|
|
1928
|
-
<span class="cstat-no" title="statement not covered" > private readonly _currentInvite: WritableSignal<ChannelInvite | null> = signal(null);</span>
|
|
1929
|
-
<span class="cstat-no" title="statement not covered" > readonly currentInvite: Signal<ChannelInvite | null> = this._currentInvite.asReadonly();</span>
|
|
1930
|
-
<span class="cstat-no" title="statement not covered" ></span>
|
|
1931
|
-
<span class="cstat-no" title="statement not covered" > /** Error message (if any) */</span>
|
|
1932
|
-
<span class="cstat-no" title="statement not covered" > private readonly _error: WritableSignal<string | null> = signal(null);</span>
|
|
1933
|
-
<span class="cstat-no" title="statement not covered" > readonly error: Signal<string | null> = this._error.asReadonly();</span>
|
|
1934
|
-
<span class="cstat-no" title="statement not covered" ></span>
|
|
1935
|
-
<span class="cstat-no" title="statement not covered" > /** Flag to prevent auto-restore from interfering with new connections */</span>
|
|
1936
|
-
<span class="cstat-no" title="statement not covered" > private connectingNewSession = false;</span>
|
|
1937
|
-
<span class="cstat-no" title="statement not covered" ></span>
|
|
1938
|
-
<span class="cstat-no" title="statement not covered" > // ============================================================================</span>
|
|
1939
|
-
<span class="cstat-no" title="statement not covered" > // Computed State</span>
|
|
1940
|
-
<span class="cstat-no" title="statement not covered" > // ============================================================================</span>
|
|
1941
|
-
<span class="cstat-no" title="statement not covered" ></span>
|
|
1942
|
-
<span class="cstat-no" title="statement not covered" > /** Whether the channel is currently connected and active */</span>
|
|
1943
|
-
<span class="cstat-no" title="statement not covered" > readonly isConnected = computed(() => this._state() === 'active');</span>
|
|
1944
|
-
<span class="cstat-no" title="statement not covered" ></span>
|
|
1945
|
-
<span class="cstat-no" title="statement not covered" > /** Whether we're currently connecting */</span>
|
|
1946
|
-
<span class="cstat-no" title="statement not covered" > readonly isConnecting = computed(() => {</span>
|
|
1791
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1792
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">/**
|
|
1793
|
+
* HSuite Native Connect
|
|
1794
|
+
* Copyright 2024-2025 HSuite (https://hsuite.finance)
|
|
1795
|
+
*
|
|
1796
|
+
* SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0
|
|
1797
|
+
*
|
|
1798
|
+
* This file is part of HSuite Native Connect. For commercial licensing,
|
|
1799
|
+
* visit https://hsuite.finance/licensing
|
|
1800
|
+
*/
|
|
1801
|
+
|
|
1802
|
+
/**
|
|
1803
|
+
* @file channel-client.service.ts
|
|
1804
|
+
* @description Angular wrapper for the unified ChannelClient.
|
|
1805
|
+
*
|
|
1806
|
+
* ChannelClientService
|
|
1807
|
+
*
|
|
1808
|
+
* Angular service that wraps the ChannelClient from native-wallet-sdk,
|
|
1809
|
+
* providing reactive signals and Angular-friendly APIs for dApp-wallet
|
|
1810
|
+
* communication using the new unified channel protocol.
|
|
1811
|
+
*
|
|
1812
|
+
* Key features:
|
|
1813
|
+
* - Reactive state via Angular signals
|
|
1814
|
+
* - NgZone integration for proper change detection
|
|
1815
|
+
* - Automatic session persistence
|
|
1816
|
+
* - Support for both session (1:1) and party (N:N) channels
|
|
1817
|
+
*
|
|
1818
|
+
* This service is designed to replace the existing NostrSessionClient
|
|
1819
|
+
* as part of the protocol simplification effort. It can coexist with
|
|
1820
|
+
* the legacy implementation during migration.
|
|
1821
|
+
*
|
|
1822
|
+
* @Component({ ... })
|
|
1823
|
+
* export class AppComponent {
|
|
1824
|
+
* private channelService = inject(ChannelClientService);
|
|
1825
|
+
*
|
|
1826
|
+
* readonly state = this.channelService.state;
|
|
1827
|
+
* readonly accounts = this.channelService.accounts;
|
|
1828
|
+
*
|
|
1829
|
+
* async connect() {
|
|
1830
|
+
* const invite = await this.channelService.connect({
|
|
1831
|
+
* type: 'session',
|
|
1832
|
+
* appId: 'my-dapp',
|
|
1833
|
+
* appName: 'My dApp',
|
|
1834
|
+
* ledgerId: 'hedera',
|
|
1835
|
+
* networkId: 'mainnet',
|
|
1836
|
+
* });
|
|
1837
|
+
* // Open wallet with invite URL
|
|
1838
|
+
* window.open(this.channelService.getWalletInviteUrl(invite, walletUrl));
|
|
1839
|
+
* }
|
|
1840
|
+
* }
|
|
1841
|
+
* ```
|
|
1842
|
+
*/
|
|
1843
|
+
|
|
1844
|
+
import {
|
|
1845
|
+
Injectable,
|
|
1846
|
+
inject,
|
|
1847
|
+
signal,
|
|
1848
|
+
computed,
|
|
1849
|
+
NgZone,
|
|
1850
|
+
type Signal,
|
|
1851
|
+
type WritableSignal,
|
|
1852
|
+
} from '@angular/core';
|
|
1853
|
+
import {
|
|
1854
|
+
ChannelClient,
|
|
1855
|
+
type ChannelInvite,
|
|
1856
|
+
type ChannelState,
|
|
1857
|
+
type ChannelType,
|
|
1858
|
+
type ChannelAccount,
|
|
1859
|
+
type TransportState,
|
|
1860
|
+
type PersistedChannel,
|
|
1861
|
+
encodeChannelInvite,
|
|
1862
|
+
getLogger,
|
|
1863
|
+
} from '@hsuite/native-connect-sdk';
|
|
1864
|
+
|
|
1865
|
+
import { DEFAULT_WALLET_URL } from '../../models/provider-types';
|
|
1866
|
+
import type { UnifiedAccount } from '../../models/unified-account.model';
|
|
1867
|
+
|
|
1868
|
+
const logger = getLogger().scoped?.('ChannelClientService'<span class="branch-0 cbranch-no" title="branch not covered" >) ?? getLogger();</span>
|
|
1869
|
+
|
|
1870
|
+
/**
|
|
1871
|
+
* ChannelConnectConfig
|
|
1872
|
+
*
|
|
1873
|
+
* Configuration for establishing a new channel.
|
|
1874
|
+
*/
|
|
1875
|
+
export interface ChannelConnectConfig {
|
|
1876
|
+
/** Channel type: 'session' for 1:1, 'party' for multisig */
|
|
1877
|
+
type: ChannelType;
|
|
1878
|
+
/** dApp identifier */
|
|
1879
|
+
appId: string;
|
|
1880
|
+
/** dApp display name */
|
|
1881
|
+
appName: string;
|
|
1882
|
+
/** dApp icon URL (optional) */
|
|
1883
|
+
appIcon?: string;
|
|
1884
|
+
/**
|
|
1885
|
+
* dApp origin URL (optional). When omitted, the SDK falls back to
|
|
1886
|
+
* `window.location.origin` so the wallet can always show the user where the
|
|
1887
|
+
* connection request is coming from. Override this only if your dApp serves
|
|
1888
|
+
* the wallet integration from a different origin than the page hosting it.
|
|
1889
|
+
*/
|
|
1890
|
+
appOrigin?: string;
|
|
1891
|
+
/** Target ledger (e.g., 'hedera', 'xrpl') */
|
|
1892
|
+
ledgerId: string;
|
|
1893
|
+
/** Target network (e.g., 'mainnet', 'testnet') */
|
|
1894
|
+
networkId: string;
|
|
1895
|
+
/** Requested permissions */
|
|
1896
|
+
permissions?: string[];
|
|
1897
|
+
/** Nostr relay URLs (optional, uses defaults) */
|
|
1898
|
+
relays?: string[];
|
|
1899
|
+
/** Wallet URL for generating invite links */
|
|
1900
|
+
walletUrl?: string;
|
|
1901
|
+
}
|
|
1902
|
+
|
|
1903
|
+
/**
|
|
1904
|
+
* ChannelClientService
|
|
1905
|
+
*
|
|
1906
|
+
* Angular service for unified channel-based dApp-wallet communication.
|
|
1907
|
+
*/
|
|
1908
|
+
@Injectable({ providedIn: 'root' })
|
|
1909
|
+
export class ChannelClientService {
|
|
1910
|
+
private readonly zone = inject(NgZone);
|
|
1911
|
+
private client: ChannelClient | null = null;
|
|
1912
|
+
|
|
1913
|
+
// ============================================================================
|
|
1914
|
+
// Reactive State
|
|
1915
|
+
// ============================================================================
|
|
1916
|
+
|
|
1917
|
+
/** Current channel state */
|
|
1918
|
+
private readonly _state: WritableSignal<ChannelState> = signal('idle');
|
|
1919
|
+
readonly state: Signal<ChannelState> = this._state.asReadonly();
|
|
1920
|
+
|
|
1921
|
+
/** Current transport state (nostr-only, p2p-connected, etc.) */
|
|
1922
|
+
private readonly _transportState: WritableSignal<TransportState> = signal('nostr-only');
|
|
1923
|
+
readonly transportState: Signal<TransportState> = this._transportState.asReadonly();
|
|
1924
|
+
|
|
1925
|
+
/** Approved accounts from the wallet */
|
|
1926
|
+
private readonly _accounts: WritableSignal<ChannelAccount[]> = signal([]);
|
|
1927
|
+
readonly accounts: Signal<ChannelAccount[]> = this._accounts.asReadonly();
|
|
1928
|
+
|
|
1929
|
+
/** Current channel invite (if connected) */
|
|
1930
|
+
private readonly _currentInvite: WritableSignal<ChannelInvite | null> = signal(null);
|
|
1931
|
+
readonly currentInvite: Signal<ChannelInvite | null> = this._currentInvite.asReadonly();
|
|
1932
|
+
|
|
1933
|
+
/** Error message (if any) */
|
|
1934
|
+
private readonly _error: WritableSignal<string | null> = signal(null);
|
|
1935
|
+
readonly error: Signal<string | null> = this._error.asReadonly();
|
|
1936
|
+
|
|
1937
|
+
/** Flag to prevent auto-restore from interfering with new connections */
|
|
1938
|
+
private connectingNewSession = false;
|
|
1939
|
+
|
|
1940
|
+
// ============================================================================
|
|
1941
|
+
// Computed State
|
|
1942
|
+
// ============================================================================
|
|
1943
|
+
|
|
1944
|
+
/** Whether the channel is currently connected and active */
|
|
1945
|
+
readonly isConnected = computed(() => this._state() === 'active');
|
|
1946
|
+
|
|
1947
|
+
/** Whether we're currently connecting */
|
|
1948
|
+
readonly isConnecting = computed(() => {
|
|
1947
1949
|
<span class="cstat-no" title="statement not covered" > const s = this._state();</span>
|
|
1948
1950
|
<span class="cstat-no" title="statement not covered" > return s === 'connecting' || s === 'pending';</span>
|
|
1949
|
-
|
|
1950
|
-
|
|
1951
|
-
|
|
1952
|
-
|
|
1951
|
+
});
|
|
1952
|
+
|
|
1953
|
+
/** Accounts formatted as UnifiedAccount for compatibility */
|
|
1954
|
+
readonly unifiedAccounts = computed<UnifiedAccount[]>(() => {
|
|
1953
1955
|
<span class="cstat-no" title="statement not covered" > const accounts = this._accounts();</span>
|
|
1954
1956
|
<span class="cstat-no" title="statement not covered" > const invite = this._currentInvite();</span>
|
|
1955
1957
|
<span class="cstat-no" title="statement not covered" > if (!invite) return [];</span>
|
|
@@ -1959,6 +1961,7 @@
|
|
|
1959
1961
|
<span class="cstat-no" title="statement not covered" > return {</span>
|
|
1960
1962
|
<span class="cstat-no" title="statement not covered" > id: `channel-${account.address}`,</span>
|
|
1961
1963
|
<span class="cstat-no" title="statement not covered" > address: account.address,</span>
|
|
1964
|
+
<span class="cstat-no" title="statement not covered" > publicKey: account.publicKey,</span>
|
|
1962
1965
|
<span class="cstat-no" title="statement not covered" > label: account.alias ?? `Account ${index + 1}`,</span>
|
|
1963
1966
|
<span class="cstat-no" title="statement not covered" > ledgerId: account.ledgerId,</span>
|
|
1964
1967
|
<span class="cstat-no" title="statement not covered" > networkId: account.networkId,</span>
|
|
@@ -1975,30 +1978,30 @@
|
|
|
1975
1978
|
<span class="cstat-no" title="statement not covered" > },</span>
|
|
1976
1979
|
<span class="cstat-no" title="statement not covered" > };</span>
|
|
1977
1980
|
<span class="cstat-no" title="statement not covered" > });</span>
|
|
1978
|
-
|
|
1979
|
-
|
|
1980
|
-
|
|
1981
|
-
|
|
1982
|
-
|
|
1983
|
-
|
|
1984
|
-
|
|
1985
|
-
|
|
1986
|
-
|
|
1987
|
-
|
|
1988
|
-
|
|
1989
|
-
|
|
1990
|
-
|
|
1991
|
-
|
|
1992
|
-
|
|
1993
|
-
|
|
1994
|
-
|
|
1995
|
-
|
|
1996
|
-
|
|
1997
|
-
|
|
1998
|
-
|
|
1999
|
-
|
|
2000
|
-
|
|
2001
|
-
<span class="
|
|
1981
|
+
});
|
|
1982
|
+
|
|
1983
|
+
/**
|
|
1984
|
+
*
|
|
1985
|
+
*/
|
|
1986
|
+
constructor() {
|
|
1987
|
+
// Note: Auto-restore is intentionally NOT called here.
|
|
1988
|
+
// Session lifecycle (connect/disconnect/restore) is controlled by
|
|
1989
|
+
// HsuiteNativeProvider, which calls attemptRestore() as needed.
|
|
1990
|
+
// This keeps ChannelClientService as a passive wrapper.
|
|
1991
|
+
}
|
|
1992
|
+
|
|
1993
|
+
// ============================================================================
|
|
1994
|
+
// Public API
|
|
1995
|
+
// ============================================================================
|
|
1996
|
+
|
|
1997
|
+
/**
|
|
1998
|
+
* Establish a new channel connection.
|
|
1999
|
+
* Returns the invite to share with the wallet (via QR code or deep link).
|
|
2000
|
+
*
|
|
2001
|
+
* @param config - Channel configuration
|
|
2002
|
+
* @returns The channel invite for wallet scanning
|
|
2003
|
+
*/
|
|
2004
|
+
<span class="fstat-no" title="function not covered" > async connect(config: ChannelConnectConfig): Promise<ChannelInvite> {</span>
|
|
2002
2005
|
<span class="cstat-no" title="statement not covered" > if (this._state() === 'connecting' || this._state() === 'pending') {</span>
|
|
2003
2006
|
<span class="cstat-no" title="statement not covered" > logger.warn('Connection already in progress');</span>
|
|
2004
2007
|
<span class="cstat-no" title="statement not covered" > const existing = this._currentInvite();</span>
|
|
@@ -2151,33 +2154,33 @@
|
|
|
2151
2154
|
<span class="cstat-no" title="statement not covered" > throw error;</span>
|
|
2152
2155
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2153
2156
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2154
|
-
|
|
2155
|
-
|
|
2156
|
-
|
|
2157
|
-
|
|
2158
|
-
|
|
2159
|
-
|
|
2160
|
-
|
|
2161
|
-
|
|
2162
|
-
|
|
2163
|
-
<span class="
|
|
2164
|
-
<span class="
|
|
2157
|
+
|
|
2158
|
+
/**
|
|
2159
|
+
* Generate a wallet invite URL for the current channel.
|
|
2160
|
+
*
|
|
2161
|
+
* @param invite - The channel invite (defaults to current)
|
|
2162
|
+
* @param walletUrl - Base URL of the wallet
|
|
2163
|
+
* @returns Full URL with invite parameter
|
|
2164
|
+
*/
|
|
2165
|
+
getWalletInviteUrl(invite?: ChannelInvite, walletUrl = DEFAULT_WALLET_URL): string {
|
|
2166
|
+
const inv = <span class="branch-0 cbranch-no" title="branch not covered" >invite ?? this._currentInvite();</span>
|
|
2167
|
+
if (!inv) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
2165
2168
|
<span class="cstat-no" title="statement not covered" > throw new Error('No active invite');</span>
|
|
2166
2169
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2167
|
-
|
|
2168
|
-
|
|
2169
|
-
|
|
2170
|
-
|
|
2171
|
-
|
|
2172
|
-
|
|
2173
|
-
|
|
2174
|
-
|
|
2175
|
-
|
|
2176
|
-
|
|
2177
|
-
|
|
2178
|
-
|
|
2179
|
-
|
|
2180
|
-
<span class="
|
|
2170
|
+
|
|
2171
|
+
const encoded = encodeChannelInvite(inv);
|
|
2172
|
+
return `${walletUrl}?hsuite_invite=${encodeURIComponent(encoded)}`;
|
|
2173
|
+
}
|
|
2174
|
+
|
|
2175
|
+
/**
|
|
2176
|
+
* Send an RPC request to the wallet.
|
|
2177
|
+
*
|
|
2178
|
+
* @param method - RPC method name
|
|
2179
|
+
* @param params - Method parameters
|
|
2180
|
+
* @param timeoutMs - Request timeout (default: 60s)
|
|
2181
|
+
* @returns The RPC response
|
|
2182
|
+
*/
|
|
2183
|
+
<span class="fstat-no" title="function not covered" > async request<T = unknown>(</span>
|
|
2181
2184
|
<span class="cstat-no" title="statement not covered" > method: string,</span>
|
|
2182
2185
|
<span class="cstat-no" title="statement not covered" > params: Record<string, unknown>,</span>
|
|
2183
2186
|
<span class="cstat-no" title="statement not covered" > timeoutMs = 60000,</span>
|
|
@@ -2197,22 +2200,22 @@
|
|
|
2197
2200
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
2198
2201
|
<span class="cstat-no" title="statement not covered" > return this.client.request<T>(method, params, timeoutMs);</span>
|
|
2199
2202
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2200
|
-
|
|
2201
|
-
|
|
2202
|
-
|
|
2203
|
-
|
|
2204
|
-
|
|
2205
|
-
|
|
2206
|
-
|
|
2207
|
-
|
|
2208
|
-
|
|
2209
|
-
|
|
2210
|
-
|
|
2211
|
-
|
|
2212
|
-
|
|
2213
|
-
|
|
2214
|
-
|
|
2215
|
-
<span class="
|
|
2203
|
+
|
|
2204
|
+
/**
|
|
2205
|
+
* Sign a transaction via the wallet.
|
|
2206
|
+
*
|
|
2207
|
+
* @param options
|
|
2208
|
+
* @param accountAddress - Signer account address
|
|
2209
|
+
* @param options.accountAddress
|
|
2210
|
+
* @param options.payload
|
|
2211
|
+
* @param options.ledgerId
|
|
2212
|
+
* @param options.networkId
|
|
2213
|
+
* @param payload - Transaction payload (base64 or hex)
|
|
2214
|
+
* @param ledgerId - Optional ledger override
|
|
2215
|
+
* @param networkId - Optional network override
|
|
2216
|
+
* @returns Sign result with signature
|
|
2217
|
+
*/
|
|
2218
|
+
<span class="fstat-no" title="function not covered" > async signTransaction(options: {</span>
|
|
2216
2219
|
<span class="cstat-no" title="statement not covered" > accountAddress: string;</span>
|
|
2217
2220
|
<span class="cstat-no" title="statement not covered" > payload: string;</span>
|
|
2218
2221
|
<span class="cstat-no" title="statement not covered" > ledgerId?: string;</span>
|
|
@@ -2236,25 +2239,25 @@
|
|
|
2236
2239
|
<span class="cstat-no" title="statement not covered" > metadata: response.metadata,</span>
|
|
2237
2240
|
<span class="cstat-no" title="statement not covered" > };</span>
|
|
2238
2241
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2239
|
-
|
|
2240
|
-
|
|
2241
|
-
|
|
2242
|
-
|
|
2243
|
-
|
|
2244
|
-
|
|
2245
|
-
|
|
2246
|
-
|
|
2247
|
-
|
|
2248
|
-
|
|
2249
|
-
|
|
2250
|
-
|
|
2251
|
-
|
|
2252
|
-
|
|
2253
|
-
|
|
2254
|
-
|
|
2255
|
-
|
|
2256
|
-
|
|
2257
|
-
<span class="
|
|
2242
|
+
|
|
2243
|
+
/**
|
|
2244
|
+
* Sign and submit a transaction in one call (single prompt).
|
|
2245
|
+
*
|
|
2246
|
+
* @param options
|
|
2247
|
+
* @param accountAddress - Signer account address
|
|
2248
|
+
* @param options.accountAddress
|
|
2249
|
+
* @param options.payload
|
|
2250
|
+
* @param options.ledgerId
|
|
2251
|
+
* @param options.networkId
|
|
2252
|
+
* @param options.isBatch
|
|
2253
|
+
* @param options.batchKey
|
|
2254
|
+
* @param options.innerTransactions
|
|
2255
|
+
* @param payload - Transaction payload
|
|
2256
|
+
* @param ledgerId - Optional ledger override
|
|
2257
|
+
* @param networkId - Optional network override
|
|
2258
|
+
* @returns Submit result with transaction ID
|
|
2259
|
+
*/
|
|
2260
|
+
<span class="fstat-no" title="function not covered" > async signAndSubmitTransaction(options: {</span>
|
|
2258
2261
|
<span class="cstat-no" title="statement not covered" > accountAddress: string;</span>
|
|
2259
2262
|
<span class="cstat-no" title="statement not covered" > payload: string;</span>
|
|
2260
2263
|
<span class="cstat-no" title="statement not covered" > ledgerId?: string;</span>
|
|
@@ -2291,11 +2294,11 @@
|
|
|
2291
2294
|
<span class="cstat-no" title="statement not covered" > metadata: response.metadata,</span>
|
|
2292
2295
|
<span class="cstat-no" title="statement not covered" > };</span>
|
|
2293
2296
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2294
|
-
|
|
2295
|
-
|
|
2296
|
-
|
|
2297
|
-
|
|
2298
|
-
<span class="
|
|
2297
|
+
|
|
2298
|
+
/**
|
|
2299
|
+
* Disconnect from the wallet.
|
|
2300
|
+
*/
|
|
2301
|
+
<span class="fstat-no" title="function not covered" > async disconnect(): Promise<void> {</span>
|
|
2299
2302
|
<span class="cstat-no" title="statement not covered" > // Stop state polling first</span>
|
|
2300
2303
|
<span class="cstat-no" title="statement not covered" > this.stopStateSync();</span>
|
|
2301
2304
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
@@ -2320,16 +2323,16 @@
|
|
|
2320
2323
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
2321
2324
|
<span class="cstat-no" title="statement not covered" > logger.info('Disconnected from channel');</span>
|
|
2322
2325
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2323
|
-
|
|
2324
|
-
|
|
2325
|
-
|
|
2326
|
-
|
|
2327
|
-
|
|
2328
|
-
|
|
2329
|
-
|
|
2330
|
-
|
|
2331
|
-
|
|
2332
|
-
<span class="
|
|
2326
|
+
|
|
2327
|
+
/**
|
|
2328
|
+
* Attempt to restore a previous session.
|
|
2329
|
+
*
|
|
2330
|
+
* Note: This method is called by HsuiteNativeProvider as the single point
|
|
2331
|
+
* of session lifecycle control. Do not call from multiple places.
|
|
2332
|
+
*
|
|
2333
|
+
* @returns True if restoration was successful
|
|
2334
|
+
*/
|
|
2335
|
+
<span class="fstat-no" title="function not covered" > async attemptRestore(): Promise<boolean> {</span>
|
|
2333
2336
|
<span class="cstat-no" title="statement not covered" > // Skip restore if a new connection is being initiated</span>
|
|
2334
2337
|
<span class="cstat-no" title="statement not covered" > if (this.connectingNewSession) {</span>
|
|
2335
2338
|
<span class="cstat-no" title="statement not covered" > logger.debug('Skipping restore - new connection in progress');</span>
|
|
@@ -2451,32 +2454,32 @@
|
|
|
2451
2454
|
<span class="cstat-no" title="statement not covered" > return false;</span>
|
|
2452
2455
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2453
2456
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2454
|
-
|
|
2455
|
-
|
|
2456
|
-
|
|
2457
|
-
|
|
2458
|
-
|
|
2459
|
-
|
|
2460
|
-
|
|
2461
|
-
|
|
2462
|
-
|
|
2463
|
-
<span class="
|
|
2457
|
+
|
|
2458
|
+
// ============================================================================
|
|
2459
|
+
// Private Methods
|
|
2460
|
+
// ============================================================================
|
|
2461
|
+
|
|
2462
|
+
/**
|
|
2463
|
+
* Run a function inside NgZone for proper change detection.
|
|
2464
|
+
* @param fn
|
|
2465
|
+
*/
|
|
2466
|
+
private <span class="fstat-no" title="function not covered" >runInZone(fn: () => void): void {</span>
|
|
2464
2467
|
<span class="cstat-no" title="statement not covered" > if (this.zone) {</span>
|
|
2465
2468
|
<span class="cstat-no" title="statement not covered" > this.zone.run(fn);</span>
|
|
2466
2469
|
<span class="cstat-no" title="statement not covered" > } else {</span>
|
|
2467
2470
|
<span class="cstat-no" title="statement not covered" > fn();</span>
|
|
2468
2471
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2469
2472
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2470
|
-
|
|
2471
|
-
|
|
2472
|
-
|
|
2473
|
-
|
|
2474
|
-
|
|
2475
|
-
|
|
2476
|
-
|
|
2477
|
-
|
|
2478
|
-
|
|
2479
|
-
<span class="
|
|
2473
|
+
|
|
2474
|
+
/** Current polling timeout ID for cleanup */
|
|
2475
|
+
private pollingTimeoutId?: ReturnType<typeof setTimeout>;
|
|
2476
|
+
|
|
2477
|
+
/**
|
|
2478
|
+
* Set up state synchronization from the underlying client.
|
|
2479
|
+
* Polling continues as long as the client exists - it doesn't stop on disconnect/error
|
|
2480
|
+
* to properly track state changes during reconnection.
|
|
2481
|
+
*/
|
|
2482
|
+
private <span class="fstat-no" title="function not covered" >setupStateSync(): void {</span>
|
|
2480
2483
|
<span class="cstat-no" title="statement not covered" > if (!this.client) return;</span>
|
|
2481
2484
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
2482
2485
|
<span class="cstat-no" title="statement not covered" > // Clear any existing polling</span>
|
|
@@ -2547,27 +2550,27 @@
|
|
|
2547
2550
|
<span class="cstat-no" title="statement not covered" ></span>
|
|
2548
2551
|
<span class="cstat-no" title="statement not covered" > this.pollingTimeoutId = setTimeout(checkState, 100);</span>
|
|
2549
2552
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2550
|
-
|
|
2551
|
-
|
|
2552
|
-
|
|
2553
|
-
|
|
2554
|
-
<span class="
|
|
2553
|
+
|
|
2554
|
+
/**
|
|
2555
|
+
* Stop state synchronization polling.
|
|
2556
|
+
*/
|
|
2557
|
+
private <span class="fstat-no" title="function not covered" >stopStateSync(): void {</span>
|
|
2555
2558
|
<span class="cstat-no" title="statement not covered" > if (this.pollingTimeoutId) {</span>
|
|
2556
2559
|
<span class="cstat-no" title="statement not covered" > clearTimeout(this.pollingTimeoutId);</span>
|
|
2557
2560
|
<span class="cstat-no" title="statement not covered" > this.pollingTimeoutId = undefined;</span>
|
|
2558
2561
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2559
2562
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2560
|
-
|
|
2561
|
-
|
|
2562
|
-
|
|
2563
|
-
|
|
2564
|
-
|
|
2565
|
-
|
|
2566
|
-
|
|
2567
|
-
|
|
2568
|
-
|
|
2569
|
-
|
|
2570
|
-
<span class="
|
|
2563
|
+
|
|
2564
|
+
// ============================================================================
|
|
2565
|
+
// Storage
|
|
2566
|
+
// ============================================================================
|
|
2567
|
+
|
|
2568
|
+
private static readonly STORAGE_KEY = 'hsuite_channel_persisted';
|
|
2569
|
+
|
|
2570
|
+
/**
|
|
2571
|
+
* Persist current state for reconnection after approval.
|
|
2572
|
+
*/
|
|
2573
|
+
private <span class="fstat-no" title="function not covered" >persistCurrentState(): void {</span>
|
|
2571
2574
|
<span class="cstat-no" title="statement not covered" > if (!this.client) return;</span>
|
|
2572
2575
|
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
2573
2576
|
<span class="cstat-no" title="statement not covered" > const persisted = this.client.exportState();</span>
|
|
@@ -2582,13 +2585,13 @@
|
|
|
2582
2585
|
<span class="cstat-no" title="statement not covered" > logger.warn('Failed to persist channel state', { error });</span>
|
|
2583
2586
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2584
2587
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2585
|
-
|
|
2586
|
-
|
|
2587
|
-
|
|
2588
|
-
|
|
2589
|
-
|
|
2590
|
-
|
|
2591
|
-
<span class="
|
|
2588
|
+
|
|
2589
|
+
/**
|
|
2590
|
+
* Store channel state for reconnection.
|
|
2591
|
+
* Uses client's exportState() to get proper PersistedChannel format.
|
|
2592
|
+
* @param invite
|
|
2593
|
+
*/
|
|
2594
|
+
private <span class="fstat-no" title="function not covered" >storeInvite(invite: ChannelInvite): void {</span>
|
|
2592
2595
|
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
2593
2596
|
<span class="cstat-no" title="statement not covered" > // Use the client's exportState if available, otherwise create minimal persisted data</span>
|
|
2594
2597
|
<span class="cstat-no" title="statement not covered" > const persisted = this.client?.exportState();</span>
|
|
@@ -2622,11 +2625,11 @@
|
|
|
2622
2625
|
<span class="cstat-no" title="statement not covered" > logger.warn('Failed to store channel');</span>
|
|
2623
2626
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2624
2627
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2625
|
-
|
|
2626
|
-
|
|
2627
|
-
|
|
2628
|
-
|
|
2629
|
-
<span class="
|
|
2628
|
+
|
|
2629
|
+
/**
|
|
2630
|
+
* Retrieve stored channel for reconnection.
|
|
2631
|
+
*/
|
|
2632
|
+
private <span class="fstat-no" title="function not covered" >getStoredChannel(): PersistedChannel | null {</span>
|
|
2630
2633
|
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
2631
2634
|
<span class="cstat-no" title="statement not covered" > const stored = localStorage.getItem(ChannelClientService.STORAGE_KEY);</span>
|
|
2632
2635
|
<span class="cstat-no" title="statement not covered" > if (stored) {</span>
|
|
@@ -2637,18 +2640,18 @@
|
|
|
2637
2640
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2638
2641
|
<span class="cstat-no" title="statement not covered" > return null;</span>
|
|
2639
2642
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2640
|
-
|
|
2641
|
-
|
|
2642
|
-
|
|
2643
|
-
|
|
2644
|
-
<span class="
|
|
2643
|
+
|
|
2644
|
+
/**
|
|
2645
|
+
* Clear stored channel data.
|
|
2646
|
+
*/
|
|
2647
|
+
private <span class="fstat-no" title="function not covered" >clearStoredChannel(): void {</span>
|
|
2645
2648
|
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
2646
2649
|
<span class="cstat-no" title="statement not covered" > localStorage.removeItem(ChannelClientService.STORAGE_KEY);</span>
|
|
2647
2650
|
<span class="cstat-no" title="statement not covered" > } catch {</span>
|
|
2648
2651
|
<span class="cstat-no" title="statement not covered" > // Ignore</span>
|
|
2649
2652
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2650
2653
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2651
|
-
|
|
2654
|
+
}
|
|
2652
2655
|
</pre></td></tr></table></pre>
|
|
2653
2656
|
|
|
2654
2657
|
<div class='push'></div><!-- for sticky footer -->
|
|
@@ -2656,7 +2659,7 @@
|
|
|
2656
2659
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
2657
2660
|
Code coverage generated by
|
|
2658
2661
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
2659
|
-
at 2026-06-
|
|
2662
|
+
at 2026-06-27T21:00:37.209Z
|
|
2660
2663
|
</div>
|
|
2661
2664
|
<script src="../../../prettify.js"></script>
|
|
2662
2665
|
<script>
|