@hsuite/native-connect-angular 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +48 -0
- package/USAGE_EXAMPLES.md +476 -0
- package/assets/wallets/extension.svg +7 -0
- package/assets/wallets/hashpack.svg +6 -0
- package/assets/wallets/hsuite.svg +11 -0
- package/assets/wallets/kabila.svg +11 -0
- package/assets/wallets/walletconnect.svg +13 -0
- package/coverage/base.css +224 -0
- package/coverage/block-navigation.js +87 -0
- package/coverage/coverage-summary.json +50 -0
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +476 -0
- package/coverage/lcov-report/base.css +224 -0
- package/coverage/lcov-report/block-navigation.js +87 -0
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +476 -0
- package/coverage/lcov-report/lib/components/account-selector/account-actions/account-actions.component.ts.html +868 -0
- package/coverage/lcov-report/lib/components/account-selector/account-actions/index.html +116 -0
- package/coverage/lcov-report/lib/components/account-selector/account-filter/account-filter.component.ts.html +1288 -0
- package/coverage/lcov-report/lib/components/account-selector/account-filter/index.html +116 -0
- package/coverage/lcov-report/lib/components/account-selector/account-formatting.service.ts.html +685 -0
- package/coverage/lcov-report/lib/components/account-selector/account-grouping.service.ts.html +766 -0
- package/coverage/lcov-report/lib/components/account-selector/account-list/account-list.component.ts.html +1495 -0
- package/coverage/lcov-report/lib/components/account-selector/account-list/index.html +116 -0
- package/coverage/lcov-report/lib/components/account-selector/account-selector.component.ts.html +1495 -0
- package/coverage/lcov-report/lib/components/account-selector/account-selector.service.ts.html +1588 -0
- package/coverage/lcov-report/lib/components/account-selector/index.html +161 -0
- package/coverage/lcov-report/lib/components/wallet-account-display/index.html +116 -0
- package/coverage/lcov-report/lib/components/wallet-account-display/wallet-account-display.component.ts.html +505 -0
- package/coverage/lcov-report/lib/components/wallet-connect-button/index.html +116 -0
- package/coverage/lcov-report/lib/components/wallet-connect-button/wallet-connect-button.component.ts.html +805 -0
- package/coverage/lcov-report/lib/components/wallet-connect-prompt/index.html +116 -0
- package/coverage/lcov-report/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.ts.html +409 -0
- package/coverage/lcov-report/lib/components/wallet-connected-guard/index.html +116 -0
- package/coverage/lcov-report/lib/components/wallet-connected-guard/wallet-connected-guard.component.ts.html +304 -0
- package/coverage/lcov-report/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.ts.html +436 -0
- package/coverage/lcov-report/lib/components/wallet-connection-modal/connection-method-step/index.html +116 -0
- package/coverage/lcov-report/lib/components/wallet-connection-modal/index.html +116 -0
- package/coverage/lcov-report/lib/components/wallet-connection-modal/qr-pairing-step/index.html +116 -0
- package/coverage/lcov-report/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.ts.html +2287 -0
- package/coverage/lcov-report/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts.html +2275 -0
- package/coverage/lcov-report/lib/components/wallet-session-display/index.html +116 -0
- package/coverage/lcov-report/lib/components/wallet-session-display/wallet-session-display.component.ts.html +676 -0
- package/coverage/lcov-report/lib/components/wallet-transaction-status/index.html +116 -0
- package/coverage/lcov-report/lib/components/wallet-transaction-status/wallet-transaction-status.component.ts.html +703 -0
- package/coverage/lcov-report/lib/directives/index.html +146 -0
- package/coverage/lcov-report/lib/directives/wallet-connected.directive.ts.html +670 -0
- package/coverage/lcov-report/lib/directives/wallet-context.directive.ts.html +547 -0
- package/coverage/lcov-report/lib/directives/wallet-events.directive.ts.html +781 -0
- package/coverage/lcov-report/lib/hsuite-wallet.module.ts.html +715 -0
- package/coverage/lcov-report/lib/index.html +116 -0
- package/coverage/lcov-report/lib/models/connection-config.model.ts.html +280 -0
- package/coverage/lcov-report/lib/models/index.html +131 -0
- package/coverage/lcov-report/lib/models/provider-types.ts.html +577 -0
- package/coverage/lcov-report/lib/providers/base-wallet-provider.ts.html +1138 -0
- package/coverage/lcov-report/lib/providers/hsuite-native/channel-client.service.ts.html +2671 -0
- package/coverage/lcov-report/lib/providers/hsuite-native/index.html +116 -0
- package/coverage/lcov-report/lib/providers/hsuite-native-provider.ts.html +2347 -0
- package/coverage/lcov-report/lib/providers/index.html +146 -0
- package/coverage/lcov-report/lib/providers/p2p-native/index.html +131 -0
- package/coverage/lcov-report/lib/providers/p2p-native/p2p-native.provider.ts.html +2254 -0
- package/coverage/lcov-report/lib/providers/p2p-native/p2p-session-manager.ts.html +2170 -0
- package/coverage/lcov-report/lib/providers/wallet-error-handler.ts.html +1132 -0
- package/coverage/lcov-report/lib/providers/walletconnect/core/index.html +176 -0
- package/coverage/lcov-report/lib/providers/walletconnect/core/session-health.ts.html +673 -0
- package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-client-manager.ts.html +1177 -0
- package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-provider.ts.html +2563 -0
- package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-session-store.ts.html +904 -0
- package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-signing-orchestrator.ts.html +982 -0
- package/coverage/lcov-report/lib/providers/walletconnect/signers/hedera-signer.ts.html +1915 -0
- package/coverage/lcov-report/lib/providers/walletconnect/signers/index.html +146 -0
- package/coverage/lcov-report/lib/providers/walletconnect/signers/signer-factory.ts.html +445 -0
- package/coverage/lcov-report/lib/providers/walletconnect/signers/xrpl-signer.ts.html +1519 -0
- package/coverage/lcov-report/lib/services/index.html +191 -0
- package/coverage/lcov-report/lib/services/logger.service.ts.html +463 -0
- package/coverage/lcov-report/lib/services/transaction-builders/base-transaction-builder.service.ts.html +1840 -0
- package/coverage/lcov-report/lib/services/transaction-builders/hedera-amount-utils.ts.html +337 -0
- package/coverage/lcov-report/lib/services/transaction-builders/hedera-transaction-builder.service.ts.html +3940 -0
- package/coverage/lcov-report/lib/services/transaction-builders/index.html +161 -0
- package/coverage/lcov-report/lib/services/transaction-builders/xrpl-transaction-builder.service.ts.html +2581 -0
- package/coverage/lcov-report/lib/services/transaction.service.ts.html +1123 -0
- package/coverage/lcov-report/lib/services/unified-wallet.service.ts.html +2641 -0
- package/coverage/lcov-report/lib/services/wallet-context.service.ts.html +637 -0
- package/coverage/lcov-report/lib/services/wallet-event-bus.service.ts.html +643 -0
- package/coverage/lcov-report/lib/services/wallet-providers.service.ts.html +496 -0
- package/coverage/lcov-report/lib/transports/chrome-extension-transport.ts.html +823 -0
- package/coverage/lcov-report/lib/transports/index.html +116 -0
- package/coverage/lcov-report/lib/utils/index.html +116 -0
- package/coverage/lcov-report/lib/utils/ledger-icons.util.ts.html +319 -0
- package/coverage/lcov-report/prettify.css +1 -0
- package/coverage/lcov-report/prettify.js +2 -0
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +210 -0
- package/coverage/lcov.info +19252 -0
- package/coverage/lib/components/account-selector/account-actions/account-actions.component.ts.html +868 -0
- package/coverage/lib/components/account-selector/account-actions/index.html +116 -0
- package/coverage/lib/components/account-selector/account-filter/account-filter.component.ts.html +1288 -0
- package/coverage/lib/components/account-selector/account-filter/index.html +116 -0
- package/coverage/lib/components/account-selector/account-formatting.service.ts.html +685 -0
- package/coverage/lib/components/account-selector/account-grouping.service.ts.html +766 -0
- package/coverage/lib/components/account-selector/account-list/account-list.component.ts.html +1495 -0
- package/coverage/lib/components/account-selector/account-list/index.html +116 -0
- package/coverage/lib/components/account-selector/account-selector.component.ts.html +1495 -0
- package/coverage/lib/components/account-selector/account-selector.service.ts.html +1588 -0
- package/coverage/lib/components/account-selector/index.html +161 -0
- package/coverage/lib/components/wallet-account-display/index.html +116 -0
- package/coverage/lib/components/wallet-account-display/wallet-account-display.component.ts.html +505 -0
- package/coverage/lib/components/wallet-connect-button/index.html +116 -0
- package/coverage/lib/components/wallet-connect-button/wallet-connect-button.component.ts.html +805 -0
- package/coverage/lib/components/wallet-connect-prompt/index.html +116 -0
- package/coverage/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.ts.html +409 -0
- package/coverage/lib/components/wallet-connected-guard/index.html +116 -0
- package/coverage/lib/components/wallet-connected-guard/wallet-connected-guard.component.ts.html +304 -0
- package/coverage/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.ts.html +436 -0
- package/coverage/lib/components/wallet-connection-modal/connection-method-step/index.html +116 -0
- package/coverage/lib/components/wallet-connection-modal/index.html +116 -0
- package/coverage/lib/components/wallet-connection-modal/qr-pairing-step/index.html +116 -0
- package/coverage/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.ts.html +2287 -0
- package/coverage/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts.html +2275 -0
- package/coverage/lib/components/wallet-session-display/index.html +116 -0
- package/coverage/lib/components/wallet-session-display/wallet-session-display.component.ts.html +676 -0
- package/coverage/lib/components/wallet-transaction-status/index.html +116 -0
- package/coverage/lib/components/wallet-transaction-status/wallet-transaction-status.component.ts.html +703 -0
- package/coverage/lib/directives/index.html +146 -0
- package/coverage/lib/directives/wallet-connected.directive.ts.html +670 -0
- package/coverage/lib/directives/wallet-context.directive.ts.html +547 -0
- package/coverage/lib/directives/wallet-events.directive.ts.html +781 -0
- package/coverage/lib/hsuite-wallet.module.ts.html +715 -0
- package/coverage/lib/index.html +116 -0
- package/coverage/lib/models/connection-config.model.ts.html +280 -0
- package/coverage/lib/models/index.html +131 -0
- package/coverage/lib/models/provider-types.ts.html +577 -0
- package/coverage/lib/providers/base-wallet-provider.ts.html +1138 -0
- package/coverage/lib/providers/hsuite-native/channel-client.service.ts.html +2671 -0
- package/coverage/lib/providers/hsuite-native/index.html +116 -0
- package/coverage/lib/providers/hsuite-native-provider.ts.html +2347 -0
- package/coverage/lib/providers/index.html +146 -0
- package/coverage/lib/providers/p2p-native/index.html +131 -0
- package/coverage/lib/providers/p2p-native/p2p-native.provider.ts.html +2254 -0
- package/coverage/lib/providers/p2p-native/p2p-session-manager.ts.html +2170 -0
- package/coverage/lib/providers/wallet-error-handler.ts.html +1132 -0
- package/coverage/lib/providers/walletconnect/core/index.html +176 -0
- package/coverage/lib/providers/walletconnect/core/session-health.ts.html +673 -0
- package/coverage/lib/providers/walletconnect/core/walletconnect-client-manager.ts.html +1177 -0
- package/coverage/lib/providers/walletconnect/core/walletconnect-provider.ts.html +2563 -0
- package/coverage/lib/providers/walletconnect/core/walletconnect-session-store.ts.html +904 -0
- package/coverage/lib/providers/walletconnect/core/walletconnect-signing-orchestrator.ts.html +982 -0
- package/coverage/lib/providers/walletconnect/signers/hedera-signer.ts.html +1915 -0
- package/coverage/lib/providers/walletconnect/signers/index.html +146 -0
- package/coverage/lib/providers/walletconnect/signers/signer-factory.ts.html +445 -0
- package/coverage/lib/providers/walletconnect/signers/xrpl-signer.ts.html +1519 -0
- package/coverage/lib/services/index.html +191 -0
- package/coverage/lib/services/logger.service.ts.html +463 -0
- package/coverage/lib/services/transaction-builders/base-transaction-builder.service.ts.html +1840 -0
- package/coverage/lib/services/transaction-builders/hedera-amount-utils.ts.html +337 -0
- package/coverage/lib/services/transaction-builders/hedera-transaction-builder.service.ts.html +3940 -0
- package/coverage/lib/services/transaction-builders/index.html +161 -0
- package/coverage/lib/services/transaction-builders/xrpl-transaction-builder.service.ts.html +2581 -0
- package/coverage/lib/services/transaction.service.ts.html +1123 -0
- package/coverage/lib/services/unified-wallet.service.ts.html +2641 -0
- package/coverage/lib/services/wallet-context.service.ts.html +637 -0
- package/coverage/lib/services/wallet-event-bus.service.ts.html +643 -0
- package/coverage/lib/services/wallet-providers.service.ts.html +496 -0
- package/coverage/lib/transports/chrome-extension-transport.ts.html +823 -0
- package/coverage/lib/transports/index.html +116 -0
- package/coverage/lib/utils/index.html +116 -0
- package/coverage/lib/utils/ledger-icons.util.ts.html +319 -0
- package/coverage/prettify.css +1 -0
- package/coverage/prettify.js +2 -0
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +210 -0
- package/dist/README.md +48 -0
- package/dist/fesm2022/hsuite-native-connect-angular.mjs +14592 -0
- package/dist/fesm2022/hsuite-native-connect-angular.mjs.map +1 -0
- package/dist/index.d.ts +6949 -0
- package/examples/minimal-connect.ts +178 -0
- package/examples/multi-protocol.ts +495 -0
- package/examples/transaction-signing.ts +361 -0
- package/jest.config.json +45 -0
- package/karma.conf.js +42 -0
- package/ng-package.json +20 -0
- package/package.json +60 -0
- package/src/index.ts +203 -0
- package/src/lib/components/account-selector/account-actions/account-actions.component.ts +261 -0
- package/src/lib/components/account-selector/account-filter/account-filter.component.ts +401 -0
- package/src/lib/components/account-selector/account-formatting.service.ts +200 -0
- package/src/lib/components/account-selector/account-grouping.service.ts +227 -0
- package/src/lib/components/account-selector/account-list/account-list.component.ts +470 -0
- package/src/lib/components/account-selector/account-selector.component.html +135 -0
- package/src/lib/components/account-selector/account-selector.component.scss +2039 -0
- package/src/lib/components/account-selector/account-selector.component.ts +470 -0
- package/src/lib/components/account-selector/account-selector.service.ts +501 -0
- package/src/lib/components/wallet-account-display/wallet-account-display.component.html +34 -0
- package/src/lib/components/wallet-account-display/wallet-account-display.component.scss +99 -0
- package/src/lib/components/wallet-account-display/wallet-account-display.component.ts +140 -0
- package/src/lib/components/wallet-connect-button/wallet-connect-button.component.html +14 -0
- package/src/lib/components/wallet-connect-button/wallet-connect-button.component.scss +272 -0
- package/src/lib/components/wallet-connect-button/wallet-connect-button.component.ts +240 -0
- package/src/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.html +24 -0
- package/src/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.scss +50 -0
- package/src/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.ts +108 -0
- package/src/lib/components/wallet-connected-guard/wallet-connected-guard.component.html +24 -0
- package/src/lib/components/wallet-connected-guard/wallet-connected-guard.component.ts +73 -0
- package/src/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.html +56 -0
- package/src/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.scss +218 -0
- package/src/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.ts +117 -0
- package/src/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.html +94 -0
- package/src/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.scss +272 -0
- package/src/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.ts +734 -0
- package/src/lib/components/wallet-connection-modal/wallet-connection-modal.component.html +197 -0
- package/src/lib/components/wallet-connection-modal/wallet-connection-modal.component.scss +678 -0
- package/src/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts +730 -0
- package/src/lib/components/wallet-session-display/wallet-session-display.component.html +110 -0
- package/src/lib/components/wallet-session-display/wallet-session-display.component.scss +179 -0
- package/src/lib/components/wallet-session-display/wallet-session-display.component.ts +197 -0
- package/src/lib/components/wallet-transaction-status/wallet-transaction-status.component.html +65 -0
- package/src/lib/components/wallet-transaction-status/wallet-transaction-status.component.scss +254 -0
- package/src/lib/components/wallet-transaction-status/wallet-transaction-status.component.ts +206 -0
- package/src/lib/directives/wallet-connected.directive.ts +195 -0
- package/src/lib/directives/wallet-context.directive.ts +154 -0
- package/src/lib/directives/wallet-events.directive.ts +232 -0
- package/src/lib/hsuite-wallet.module.ts +210 -0
- package/src/lib/models/connection-config.model.ts +65 -0
- package/src/lib/models/provider-types.ts +164 -0
- package/src/lib/models/unified-account.model.ts +76 -0
- package/src/lib/models/wallet-context.model.ts +121 -0
- package/src/lib/models/wallet-events.model.ts +158 -0
- package/src/lib/providers/base-wallet-provider.ts +351 -0
- package/src/lib/providers/hsuite-native/channel-client.service.spec.ts +73 -0
- package/src/lib/providers/hsuite-native/channel-client.service.ts +862 -0
- package/src/lib/providers/hsuite-native/index.ts +8 -0
- package/src/lib/providers/hsuite-native-provider.ts +754 -0
- package/src/lib/providers/mobile-native/mobile-native.provider.spec.ts +19 -0
- package/src/lib/providers/p2p-native/index.ts +30 -0
- package/src/lib/providers/p2p-native/p2p-native.provider.spec.ts +523 -0
- package/src/lib/providers/p2p-native/p2p-native.provider.ts +723 -0
- package/src/lib/providers/p2p-native/p2p-session-manager.ts +695 -0
- package/src/lib/providers/wallet-error-handler.ts +349 -0
- package/src/lib/providers/walletconnect/core/base-signer.interface.ts +122 -0
- package/src/lib/providers/walletconnect/core/session-health.ts +196 -0
- package/src/lib/providers/walletconnect/core/walletconnect-client-manager.ts +364 -0
- package/src/lib/providers/walletconnect/core/walletconnect-provider.integration.spec.ts +348 -0
- package/src/lib/providers/walletconnect/core/walletconnect-provider.ts +826 -0
- package/src/lib/providers/walletconnect/core/walletconnect-session-store.ts +273 -0
- package/src/lib/providers/walletconnect/core/walletconnect-signing-orchestrator.ts +299 -0
- package/src/lib/providers/walletconnect/core/walletconnect-types.ts +48 -0
- package/src/lib/providers/walletconnect/index.ts +33 -0
- package/src/lib/providers/walletconnect/signers/hedera-signer.spec.ts +367 -0
- package/src/lib/providers/walletconnect/signers/hedera-signer.ts +610 -0
- package/src/lib/providers/walletconnect/signers/signer-factory.spec.ts +62 -0
- package/src/lib/providers/walletconnect/signers/signer-factory.ts +120 -0
- package/src/lib/providers/walletconnect/signers/xrpl-signer.spec.ts +296 -0
- package/src/lib/providers/walletconnect/signers/xrpl-signer.ts +478 -0
- package/src/lib/services/logger.service.ts +126 -0
- package/src/lib/services/transaction-builders/base-transaction-builder.service.ts +585 -0
- package/src/lib/services/transaction-builders/hedera-amount-utils.ts +84 -0
- package/src/lib/services/transaction-builders/hedera-transaction-builder.service.spec.ts +741 -0
- package/src/lib/services/transaction-builders/hedera-transaction-builder.service.ts +1285 -0
- package/src/lib/services/transaction-builders/index.ts +54 -0
- package/src/lib/services/transaction-builders/xrpl-transaction-builder.service.spec.ts +937 -0
- package/src/lib/services/transaction-builders/xrpl-transaction-builder.service.ts +832 -0
- package/src/lib/services/transaction.service.ts +346 -0
- package/src/lib/services/unified-wallet.service.spec.ts +1382 -0
- package/src/lib/services/unified-wallet.service.ts +852 -0
- package/src/lib/services/wallet-context.service.ts +184 -0
- package/src/lib/services/wallet-event-bus.service.ts +186 -0
- package/src/lib/services/wallet-providers.service.ts +137 -0
- package/src/lib/transports/chrome-extension-transport.ts +246 -0
- package/src/lib/utils/index.ts +14 -0
- package/src/lib/utils/ledger-icons.util.ts +78 -0
- package/test/test-setup.ts +21 -0
- package/test-setup.ts +63 -0
- package/tsconfig.build.json +11 -0
- package/tsconfig.json +29 -0
- package/tsconfig.spec.json +15 -0
- package/vitest.config.ts +48 -0
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HSuite Native Connect
|
|
3
|
+
* Copyright 2024-2025 HSuite (https://hsuite.finance)
|
|
4
|
+
*
|
|
5
|
+
* SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0
|
|
6
|
+
*
|
|
7
|
+
* This file is part of HSuite Native Connect. For commercial licensing,
|
|
8
|
+
* visit https://hsuite.finance/licensing
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @fileoverview Centralized wallet context aggregation service.
|
|
13
|
+
*
|
|
14
|
+
* @module services/wallet-context
|
|
15
|
+
*
|
|
16
|
+
* @description
|
|
17
|
+
* WalletContextService computes and exposes a unified, reactive wallet context by aggregating
|
|
18
|
+
* state from UnifiedWalletService. It provides a single computed signal containing all
|
|
19
|
+
* wallet state, eliminating the need to manually track multiple signals across different services.
|
|
20
|
+
*
|
|
21
|
+
* This service is the primary data source for the structural directives (`*walletContext`
|
|
22
|
+
* and `*walletConnected`) that enable declarative wallet state access in templates.
|
|
23
|
+
*
|
|
24
|
+
* **Key Capabilities:**
|
|
25
|
+
* - Aggregates connection status, accounts, sessions, and providers into a single context
|
|
26
|
+
* - Provides both signal-based (modern) and Observable-based (RxJS) access patterns
|
|
27
|
+
* - Automatically recomputes when any underlying state changes
|
|
28
|
+
* - Handles edge cases like P2P sessions with restored accounts
|
|
29
|
+
*
|
|
30
|
+
* @Component({ template: `...` })
|
|
31
|
+
* export class MyComponent {
|
|
32
|
+
* private contextService = inject(WalletContextService);
|
|
33
|
+
*
|
|
34
|
+
* constructor() {
|
|
35
|
+
* effect(() => {
|
|
36
|
+
* const context = this.contextService.context();
|
|
37
|
+
* console.log('Connected:', context.isConnected);
|
|
38
|
+
* console.log('Active:', context.activeAccount?.address);
|
|
39
|
+
* });
|
|
40
|
+
* }
|
|
41
|
+
* }
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
|
|
45
|
+
import { Injectable, computed, inject } from '@angular/core';
|
|
46
|
+
import { toObservable } from '@angular/core/rxjs-interop';
|
|
47
|
+
import { Observable } from 'rxjs';
|
|
48
|
+
import { UnifiedWalletService } from './unified-wallet.service';
|
|
49
|
+
import type { WalletContext } from '../models/wallet-context.model';
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Angular service that aggregates wallet state into a unified context.
|
|
53
|
+
*
|
|
54
|
+
* @service WalletContextService
|
|
55
|
+
*
|
|
56
|
+
* @description
|
|
57
|
+
* Provides a single reactive context object that combines all wallet state:
|
|
58
|
+
* - Connection status (computed from provider states and account availability)
|
|
59
|
+
* - Active account (currently selected account across all providers)
|
|
60
|
+
* - All accounts (aggregated from all connected providers)
|
|
61
|
+
* - Active sessions (with metadata for each provider)
|
|
62
|
+
* - Provider instances (both connected and disconnected)
|
|
63
|
+
*
|
|
64
|
+
* This service is used internally by `*walletContext` and `*walletConnected` directives
|
|
65
|
+
* to provide declarative state access in templates.
|
|
66
|
+
*
|
|
67
|
+
* @providedIn root
|
|
68
|
+
*
|
|
69
|
+
* @Component({
|
|
70
|
+
* template: `
|
|
71
|
+
* @if (isConnected()) {
|
|
72
|
+
* <p>Connected as {{ activeAccount()?.address }}</p>
|
|
73
|
+
* }
|
|
74
|
+
* `
|
|
75
|
+
* })
|
|
76
|
+
* export class MyComponent {
|
|
77
|
+
* private contextService = inject(WalletContextService);
|
|
78
|
+
*
|
|
79
|
+
* isConnected = () => this.contextService.isConnected();
|
|
80
|
+
* activeAccount = () => this.contextService.getActiveAccount();
|
|
81
|
+
* }
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
@Injectable({ providedIn: 'root' })
|
|
85
|
+
export class WalletContextService {
|
|
86
|
+
private readonly walletService = inject(UnifiedWalletService);
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Computed wallet context signal
|
|
90
|
+
*
|
|
91
|
+
* Automatically recomputes when unknown underlying state changes.
|
|
92
|
+
*
|
|
93
|
+
* **Connection Status Logic:**
|
|
94
|
+
* - `isConnected = true` if:
|
|
95
|
+
* - Any provider is actively connected AND has accounts, OR
|
|
96
|
+
* - Any provider has restored accounts (e.g., P2P session metadata from localStorage)
|
|
97
|
+
*
|
|
98
|
+
* This ensures P2P sessions with restored accounts show as "connected" in the UI,
|
|
99
|
+
* even though WebRTC needs re-pairing for actual operations. Operations will fail
|
|
100
|
+
* gracefully if the transport isn't connected.
|
|
101
|
+
*/
|
|
102
|
+
readonly context = computed<WalletContext>(() => {
|
|
103
|
+
const activeAccount = this.walletService.activeAccount();
|
|
104
|
+
const allAccounts = this.walletService.allAccounts();
|
|
105
|
+
const connectedProviders = this.walletService.connectedProviders();
|
|
106
|
+
const sessions = this.walletService.getActiveSessions();
|
|
107
|
+
|
|
108
|
+
// Compute connection status:
|
|
109
|
+
// Consider "connected" if we have accounts available (even from restored sessions)
|
|
110
|
+
// This allows P2P sessions with persisted accounts to show in the UI
|
|
111
|
+
const isConnected = allAccounts.length > 0;
|
|
112
|
+
|
|
113
|
+
return {
|
|
114
|
+
isConnected,
|
|
115
|
+
activeAccount,
|
|
116
|
+
allAccounts,
|
|
117
|
+
sessions,
|
|
118
|
+
providers: Array.from(this.getAllProviders()),
|
|
119
|
+
connectedProviders,
|
|
120
|
+
};
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Observable stream of wallet context for RxJS composition
|
|
125
|
+
*/
|
|
126
|
+
readonly context$: Observable<WalletContext> = toObservable(this.context);
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Checks if any wallet provider is currently connected.
|
|
130
|
+
*
|
|
131
|
+
* @description
|
|
132
|
+
* Convenience method that returns the isConnected property from the context.
|
|
133
|
+
* Connection is determined by account availability, not just provider state.
|
|
134
|
+
*
|
|
135
|
+
* @returns True if at least one account is available
|
|
136
|
+
*/
|
|
137
|
+
isConnected(): boolean {
|
|
138
|
+
return this.context().isConnected;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Gets the currently active account.
|
|
143
|
+
*
|
|
144
|
+
* @description
|
|
145
|
+
* Convenience method that returns the activeAccount property from the context.
|
|
146
|
+
* The active account is the one currently selected for wallet operations.
|
|
147
|
+
*
|
|
148
|
+
* @returns The active account, or null if no account is selected
|
|
149
|
+
*/
|
|
150
|
+
getActiveAccount() {
|
|
151
|
+
return this.context().activeAccount;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Gets all accounts from all connected providers.
|
|
156
|
+
*
|
|
157
|
+
* @description
|
|
158
|
+
* Convenience method that returns the allAccounts array from the context.
|
|
159
|
+
* Includes accounts from all providers (HSuite Native, WalletConnect, P2P).
|
|
160
|
+
*
|
|
161
|
+
* @returns Array of all connected accounts, empty if none
|
|
162
|
+
*/
|
|
163
|
+
getAllAccounts() {
|
|
164
|
+
return this.context().allAccounts;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Get all providers from UnifiedWalletService
|
|
169
|
+
* Private helper to access providers map
|
|
170
|
+
*/
|
|
171
|
+
private getAllProviders() {
|
|
172
|
+
// Access through public methods since providers map is private
|
|
173
|
+
const hsuite = this.walletService.getProvider('hsuite-native');
|
|
174
|
+
const walletconnect = this.walletService.getProvider('walletconnect-v2');
|
|
175
|
+
const mobileNative = this.walletService.getProvider('mobile-native');
|
|
176
|
+
|
|
177
|
+
const providers = [];
|
|
178
|
+
if (hsuite) providers.push(hsuite);
|
|
179
|
+
if (walletconnect) providers.push(walletconnect);
|
|
180
|
+
if (mobileNative) providers.push(mobileNative);
|
|
181
|
+
|
|
182
|
+
return providers;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HSuite Native Connect
|
|
3
|
+
* Copyright 2024-2025 HSuite (https://hsuite.finance)
|
|
4
|
+
*
|
|
5
|
+
* SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0
|
|
6
|
+
*
|
|
7
|
+
* This file is part of HSuite Native Connect. For commercial licensing,
|
|
8
|
+
* visit https://hsuite.finance/licensing
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @file Centralized event bus for wallet-level events.
|
|
13
|
+
*
|
|
14
|
+
* @module services/wallet-event-bus
|
|
15
|
+
*
|
|
16
|
+
* @description
|
|
17
|
+
* WalletEventBus provides a decoupled way for the angular-sdk to emit events
|
|
18
|
+
* that dApps can subscribe to. It enables reactive handling of wallet lifecycle
|
|
19
|
+
* events without tight coupling between components.
|
|
20
|
+
*
|
|
21
|
+
* **Supported Events:**
|
|
22
|
+
* - `connected` - Provider successfully connected
|
|
23
|
+
* - `disconnected` - Provider disconnected (user or wallet initiated)
|
|
24
|
+
* - `accountChanged` - Active account switched
|
|
25
|
+
* - `accountsUpdated` - Provider's account list changed
|
|
26
|
+
* - `sessionCreated` - New session established
|
|
27
|
+
* - `sessionDeleted` - Session terminated
|
|
28
|
+
* - `sessionRestored` - Session restored from storage
|
|
29
|
+
* - `providerStatusChanged` - Provider status changed
|
|
30
|
+
* - `providerError` - Provider encountered an error
|
|
31
|
+
*
|
|
32
|
+
* Each event is available as both an Angular EventEmitter (for template bindings)
|
|
33
|
+
* and an RxJS Observable (for advanced composition with operators).
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
import { Injectable, EventEmitter } from '@angular/core';
|
|
37
|
+
import { getLogger } from '@hsuite/native-connect-sdk';
|
|
38
|
+
import { Observable } from 'rxjs';
|
|
39
|
+
|
|
40
|
+
import type {
|
|
41
|
+
ConnectionEvent,
|
|
42
|
+
DisconnectionEvent,
|
|
43
|
+
AccountChangeEvent,
|
|
44
|
+
AccountsUpdateEvent,
|
|
45
|
+
SessionEvent,
|
|
46
|
+
ProviderStatusEvent,
|
|
47
|
+
ProviderErrorEvent,
|
|
48
|
+
} from '../models/wallet-events.model';
|
|
49
|
+
|
|
50
|
+
const logger = getLogger().scoped?.('WalletEventBus') ?? getLogger();
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Centralized event bus for wallet events.
|
|
54
|
+
*
|
|
55
|
+
* @service WalletEventBus
|
|
56
|
+
*
|
|
57
|
+
* @description
|
|
58
|
+
* Provides EventEmitters for all wallet-level events that dApps might want to react to.
|
|
59
|
+
* This service is automatically used by UnifiedWalletService to emit events, and dApps
|
|
60
|
+
* can subscribe to these events to handle wallet state changes.
|
|
61
|
+
*
|
|
62
|
+
* All events include a `timestamp` field for ordering and debugging purposes.
|
|
63
|
+
*
|
|
64
|
+
* @providedIn root
|
|
65
|
+
*/
|
|
66
|
+
@Injectable({ providedIn: 'root' })
|
|
67
|
+
export class WalletEventBus {
|
|
68
|
+
/**
|
|
69
|
+
* Emitted when a provider successfully connects
|
|
70
|
+
*
|
|
71
|
+
* @event connected
|
|
72
|
+
*/
|
|
73
|
+
readonly connected = new EventEmitter<ConnectionEvent>();
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Emitted when a provider disconnects
|
|
77
|
+
*
|
|
78
|
+
* @event disconnected
|
|
79
|
+
*/
|
|
80
|
+
readonly disconnected = new EventEmitter<DisconnectionEvent>();
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Emitted when the active account changes
|
|
84
|
+
*
|
|
85
|
+
* @event accountChanged
|
|
86
|
+
*/
|
|
87
|
+
readonly accountChanged = new EventEmitter<AccountChangeEvent>();
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Emitted when a provider's account list updates
|
|
91
|
+
*
|
|
92
|
+
* @event accountsUpdated
|
|
93
|
+
*/
|
|
94
|
+
readonly accountsUpdated = new EventEmitter<AccountsUpdateEvent>();
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Emitted when a new session is created
|
|
98
|
+
*
|
|
99
|
+
* @event sessionCreated
|
|
100
|
+
*/
|
|
101
|
+
readonly sessionCreated = new EventEmitter<SessionEvent>();
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Emitted when a session is deleted
|
|
105
|
+
*
|
|
106
|
+
* @event sessionDeleted
|
|
107
|
+
*/
|
|
108
|
+
readonly sessionDeleted = new EventEmitter<SessionEvent>();
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Emitted when a session is restored from storage
|
|
112
|
+
*
|
|
113
|
+
* @event sessionRestored
|
|
114
|
+
*/
|
|
115
|
+
readonly sessionRestored = new EventEmitter<SessionEvent>();
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Emitted when a provider's status changes
|
|
119
|
+
*
|
|
120
|
+
* @event providerStatusChanged
|
|
121
|
+
*/
|
|
122
|
+
readonly providerStatusChanged = new EventEmitter<ProviderStatusEvent>();
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Emitted when a provider encounters an error
|
|
126
|
+
*
|
|
127
|
+
* @event providerError
|
|
128
|
+
*/
|
|
129
|
+
readonly providerError = new EventEmitter<ProviderErrorEvent>();
|
|
130
|
+
|
|
131
|
+
// RxJS Observable streams for advanced composition
|
|
132
|
+
// These allow using RxJS operators like debounceTime, switchMap, filter, etc.
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Observable stream for connection events
|
|
136
|
+
*/
|
|
137
|
+
readonly connected$: Observable<ConnectionEvent> = this.connected.asObservable();
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Observable stream for disconnection events
|
|
141
|
+
*/
|
|
142
|
+
readonly disconnected$: Observable<DisconnectionEvent> = this.disconnected.asObservable();
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Observable stream for account change events
|
|
146
|
+
*/
|
|
147
|
+
readonly accountChanged$: Observable<AccountChangeEvent> = this.accountChanged.asObservable();
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Observable stream for accounts update events
|
|
151
|
+
*/
|
|
152
|
+
readonly accountsUpdated$: Observable<AccountsUpdateEvent> = this.accountsUpdated.asObservable();
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Observable stream for session creation events
|
|
156
|
+
*/
|
|
157
|
+
readonly sessionCreated$: Observable<SessionEvent> = this.sessionCreated.asObservable();
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Observable stream for session deletion events
|
|
161
|
+
*/
|
|
162
|
+
readonly sessionDeleted$: Observable<SessionEvent> = this.sessionDeleted.asObservable();
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Observable stream for session restoration events
|
|
166
|
+
*/
|
|
167
|
+
readonly sessionRestored$: Observable<SessionEvent> = this.sessionRestored.asObservable();
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Observable stream for provider status change events
|
|
171
|
+
*/
|
|
172
|
+
readonly providerStatusChanged$: Observable<ProviderStatusEvent> =
|
|
173
|
+
this.providerStatusChanged.asObservable();
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Observable stream for provider error events
|
|
177
|
+
*/
|
|
178
|
+
readonly providerError$: Observable<ProviderErrorEvent> = this.providerError.asObservable();
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
*
|
|
182
|
+
*/
|
|
183
|
+
constructor() {
|
|
184
|
+
logger.debug('Event bus initialized');
|
|
185
|
+
}
|
|
186
|
+
}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HSuite Native Connect
|
|
3
|
+
* Copyright 2024-2025 HSuite (https://hsuite.finance)
|
|
4
|
+
*
|
|
5
|
+
* SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0
|
|
6
|
+
*
|
|
7
|
+
* This file is part of HSuite Native Connect. For commercial licensing,
|
|
8
|
+
* visit https://hsuite.finance/licensing
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @file Singleton service that manages shared wallet provider instances.
|
|
13
|
+
*
|
|
14
|
+
* @module services/wallet-providers
|
|
15
|
+
*
|
|
16
|
+
* @description
|
|
17
|
+
* WalletProvidersService manages the lifecycle and registration of wallet provider
|
|
18
|
+
* instances at application startup. It ensures that providers are created once and
|
|
19
|
+
* shared across all components and pages.
|
|
20
|
+
*
|
|
21
|
+
* **Key Responsibilities:**
|
|
22
|
+
* - Creates provider instances once during construction
|
|
23
|
+
* - Registers providers with UnifiedWalletService
|
|
24
|
+
* - Maintains references to provider instances for direct access
|
|
25
|
+
* - Ensures consistent provider state across the application
|
|
26
|
+
*
|
|
27
|
+
* **Note:** This service is typically not needed in most applications. The
|
|
28
|
+
* UnifiedWalletService automatically creates and registers built-in providers.
|
|
29
|
+
* This service exists for advanced use cases requiring direct provider access.
|
|
30
|
+
*
|
|
31
|
+
* @Component({ selector: 'app-root', ... })
|
|
32
|
+
* export class AppComponent {
|
|
33
|
+
* // Inject to trigger initialization at app startup
|
|
34
|
+
* constructor(private walletProviders: WalletProvidersService) {}
|
|
35
|
+
* }
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
|
|
39
|
+
import { Injectable } from '@angular/core';
|
|
40
|
+
import { getLogger } from '@hsuite/native-connect-sdk';
|
|
41
|
+
|
|
42
|
+
import { HsuiteNativeProvider } from '../providers/hsuite-native-provider';
|
|
43
|
+
import { WalletConnectV2Provider } from '../providers/walletconnect/core/walletconnect-provider';
|
|
44
|
+
|
|
45
|
+
import { UnifiedWalletService } from './unified-wallet.service';
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
const logger = getLogger().scoped?.('WalletProvidersService') ?? getLogger();
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Singleton service that creates and registers wallet providers at app startup.
|
|
52
|
+
*
|
|
53
|
+
* @service WalletProvidersService
|
|
54
|
+
*
|
|
55
|
+
* @description
|
|
56
|
+
* This service ensures providers are shared across all pages and components by
|
|
57
|
+
* creating and registering them once at application startup. It maintains references
|
|
58
|
+
* to provider instances for cases where direct access is needed.
|
|
59
|
+
*
|
|
60
|
+
* **When to Use:**
|
|
61
|
+
* - When you need direct access to a specific provider instance
|
|
62
|
+
* - When debugging provider-specific behavior
|
|
63
|
+
* - For advanced configurations not exposed through UnifiedWalletService
|
|
64
|
+
*
|
|
65
|
+
* **When NOT to Use:**
|
|
66
|
+
* - For typical wallet operations (use UnifiedWalletService instead)
|
|
67
|
+
* - For connecting/disconnecting (use UnifiedWalletService.connect/disconnect)
|
|
68
|
+
* - For signing transactions (use UnifiedWalletService or TransactionService)
|
|
69
|
+
*
|
|
70
|
+
* @providedIn root
|
|
71
|
+
*
|
|
72
|
+
* @Component({ selector: 'app-root', ... })
|
|
73
|
+
* export class AppComponent {
|
|
74
|
+
* // Injection triggers provider registration
|
|
75
|
+
* constructor(private walletProviders: WalletProvidersService) {}
|
|
76
|
+
* }
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
@Injectable({ providedIn: 'root' })
|
|
80
|
+
export class WalletProvidersService {
|
|
81
|
+
/**
|
|
82
|
+
* Shared HSuite Native provider instance
|
|
83
|
+
*/
|
|
84
|
+
readonly hsuiteProvider: HsuiteNativeProvider;
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Shared WalletConnect v2 provider instance
|
|
88
|
+
*/
|
|
89
|
+
readonly walletConnectProvider: WalletConnectV2Provider;
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
*
|
|
93
|
+
* @param wallet
|
|
94
|
+
* @param hsuiteProvider
|
|
95
|
+
* @param walletConnectProvider
|
|
96
|
+
*/
|
|
97
|
+
constructor(
|
|
98
|
+
private readonly wallet: UnifiedWalletService,
|
|
99
|
+
hsuiteProvider: HsuiteNativeProvider,
|
|
100
|
+
walletConnectProvider: WalletConnectV2Provider,
|
|
101
|
+
) {
|
|
102
|
+
// Store injected provider instances
|
|
103
|
+
this.hsuiteProvider = hsuiteProvider;
|
|
104
|
+
this.walletConnectProvider = walletConnectProvider;
|
|
105
|
+
|
|
106
|
+
// Register providers once at app startup
|
|
107
|
+
this.wallet.registerProvider(this.hsuiteProvider);
|
|
108
|
+
this.wallet.registerProvider(this.walletConnectProvider);
|
|
109
|
+
|
|
110
|
+
logger.info('Providers registered', {
|
|
111
|
+
hsuite: this.hsuiteProvider.id,
|
|
112
|
+
walletConnect: this.walletConnectProvider.id,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Gets a specific provider by its identifier.
|
|
118
|
+
*
|
|
119
|
+
* @description
|
|
120
|
+
* Returns the provider instance for direct access. Use this only when you
|
|
121
|
+
* need provider-specific functionality not exposed through UnifiedWalletService.
|
|
122
|
+
*
|
|
123
|
+
* @param id - The provider identifier ('hsuite-native' or 'walletconnect-v2')
|
|
124
|
+
*
|
|
125
|
+
* @returns The provider instance, or null if the ID is invalid
|
|
126
|
+
*/
|
|
127
|
+
getProvider(id: 'hsuite-native' | 'walletconnect-v2') {
|
|
128
|
+
switch (id) {
|
|
129
|
+
case 'hsuite-native':
|
|
130
|
+
return this.hsuiteProvider;
|
|
131
|
+
case 'walletconnect-v2':
|
|
132
|
+
return this.walletConnectProvider;
|
|
133
|
+
default:
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|