@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.
Files changed (276) hide show
  1. package/README.md +48 -0
  2. package/USAGE_EXAMPLES.md +476 -0
  3. package/assets/wallets/extension.svg +7 -0
  4. package/assets/wallets/hashpack.svg +6 -0
  5. package/assets/wallets/hsuite.svg +11 -0
  6. package/assets/wallets/kabila.svg +11 -0
  7. package/assets/wallets/walletconnect.svg +13 -0
  8. package/coverage/base.css +224 -0
  9. package/coverage/block-navigation.js +87 -0
  10. package/coverage/coverage-summary.json +50 -0
  11. package/coverage/favicon.png +0 -0
  12. package/coverage/index.html +476 -0
  13. package/coverage/lcov-report/base.css +224 -0
  14. package/coverage/lcov-report/block-navigation.js +87 -0
  15. package/coverage/lcov-report/favicon.png +0 -0
  16. package/coverage/lcov-report/index.html +476 -0
  17. package/coverage/lcov-report/lib/components/account-selector/account-actions/account-actions.component.ts.html +868 -0
  18. package/coverage/lcov-report/lib/components/account-selector/account-actions/index.html +116 -0
  19. package/coverage/lcov-report/lib/components/account-selector/account-filter/account-filter.component.ts.html +1288 -0
  20. package/coverage/lcov-report/lib/components/account-selector/account-filter/index.html +116 -0
  21. package/coverage/lcov-report/lib/components/account-selector/account-formatting.service.ts.html +685 -0
  22. package/coverage/lcov-report/lib/components/account-selector/account-grouping.service.ts.html +766 -0
  23. package/coverage/lcov-report/lib/components/account-selector/account-list/account-list.component.ts.html +1495 -0
  24. package/coverage/lcov-report/lib/components/account-selector/account-list/index.html +116 -0
  25. package/coverage/lcov-report/lib/components/account-selector/account-selector.component.ts.html +1495 -0
  26. package/coverage/lcov-report/lib/components/account-selector/account-selector.service.ts.html +1588 -0
  27. package/coverage/lcov-report/lib/components/account-selector/index.html +161 -0
  28. package/coverage/lcov-report/lib/components/wallet-account-display/index.html +116 -0
  29. package/coverage/lcov-report/lib/components/wallet-account-display/wallet-account-display.component.ts.html +505 -0
  30. package/coverage/lcov-report/lib/components/wallet-connect-button/index.html +116 -0
  31. package/coverage/lcov-report/lib/components/wallet-connect-button/wallet-connect-button.component.ts.html +805 -0
  32. package/coverage/lcov-report/lib/components/wallet-connect-prompt/index.html +116 -0
  33. package/coverage/lcov-report/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.ts.html +409 -0
  34. package/coverage/lcov-report/lib/components/wallet-connected-guard/index.html +116 -0
  35. package/coverage/lcov-report/lib/components/wallet-connected-guard/wallet-connected-guard.component.ts.html +304 -0
  36. package/coverage/lcov-report/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.ts.html +436 -0
  37. package/coverage/lcov-report/lib/components/wallet-connection-modal/connection-method-step/index.html +116 -0
  38. package/coverage/lcov-report/lib/components/wallet-connection-modal/index.html +116 -0
  39. package/coverage/lcov-report/lib/components/wallet-connection-modal/qr-pairing-step/index.html +116 -0
  40. package/coverage/lcov-report/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.ts.html +2287 -0
  41. package/coverage/lcov-report/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts.html +2275 -0
  42. package/coverage/lcov-report/lib/components/wallet-session-display/index.html +116 -0
  43. package/coverage/lcov-report/lib/components/wallet-session-display/wallet-session-display.component.ts.html +676 -0
  44. package/coverage/lcov-report/lib/components/wallet-transaction-status/index.html +116 -0
  45. package/coverage/lcov-report/lib/components/wallet-transaction-status/wallet-transaction-status.component.ts.html +703 -0
  46. package/coverage/lcov-report/lib/directives/index.html +146 -0
  47. package/coverage/lcov-report/lib/directives/wallet-connected.directive.ts.html +670 -0
  48. package/coverage/lcov-report/lib/directives/wallet-context.directive.ts.html +547 -0
  49. package/coverage/lcov-report/lib/directives/wallet-events.directive.ts.html +781 -0
  50. package/coverage/lcov-report/lib/hsuite-wallet.module.ts.html +715 -0
  51. package/coverage/lcov-report/lib/index.html +116 -0
  52. package/coverage/lcov-report/lib/models/connection-config.model.ts.html +280 -0
  53. package/coverage/lcov-report/lib/models/index.html +131 -0
  54. package/coverage/lcov-report/lib/models/provider-types.ts.html +577 -0
  55. package/coverage/lcov-report/lib/providers/base-wallet-provider.ts.html +1138 -0
  56. package/coverage/lcov-report/lib/providers/hsuite-native/channel-client.service.ts.html +2671 -0
  57. package/coverage/lcov-report/lib/providers/hsuite-native/index.html +116 -0
  58. package/coverage/lcov-report/lib/providers/hsuite-native-provider.ts.html +2347 -0
  59. package/coverage/lcov-report/lib/providers/index.html +146 -0
  60. package/coverage/lcov-report/lib/providers/p2p-native/index.html +131 -0
  61. package/coverage/lcov-report/lib/providers/p2p-native/p2p-native.provider.ts.html +2254 -0
  62. package/coverage/lcov-report/lib/providers/p2p-native/p2p-session-manager.ts.html +2170 -0
  63. package/coverage/lcov-report/lib/providers/wallet-error-handler.ts.html +1132 -0
  64. package/coverage/lcov-report/lib/providers/walletconnect/core/index.html +176 -0
  65. package/coverage/lcov-report/lib/providers/walletconnect/core/session-health.ts.html +673 -0
  66. package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-client-manager.ts.html +1177 -0
  67. package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-provider.ts.html +2563 -0
  68. package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-session-store.ts.html +904 -0
  69. package/coverage/lcov-report/lib/providers/walletconnect/core/walletconnect-signing-orchestrator.ts.html +982 -0
  70. package/coverage/lcov-report/lib/providers/walletconnect/signers/hedera-signer.ts.html +1915 -0
  71. package/coverage/lcov-report/lib/providers/walletconnect/signers/index.html +146 -0
  72. package/coverage/lcov-report/lib/providers/walletconnect/signers/signer-factory.ts.html +445 -0
  73. package/coverage/lcov-report/lib/providers/walletconnect/signers/xrpl-signer.ts.html +1519 -0
  74. package/coverage/lcov-report/lib/services/index.html +191 -0
  75. package/coverage/lcov-report/lib/services/logger.service.ts.html +463 -0
  76. package/coverage/lcov-report/lib/services/transaction-builders/base-transaction-builder.service.ts.html +1840 -0
  77. package/coverage/lcov-report/lib/services/transaction-builders/hedera-amount-utils.ts.html +337 -0
  78. package/coverage/lcov-report/lib/services/transaction-builders/hedera-transaction-builder.service.ts.html +3940 -0
  79. package/coverage/lcov-report/lib/services/transaction-builders/index.html +161 -0
  80. package/coverage/lcov-report/lib/services/transaction-builders/xrpl-transaction-builder.service.ts.html +2581 -0
  81. package/coverage/lcov-report/lib/services/transaction.service.ts.html +1123 -0
  82. package/coverage/lcov-report/lib/services/unified-wallet.service.ts.html +2641 -0
  83. package/coverage/lcov-report/lib/services/wallet-context.service.ts.html +637 -0
  84. package/coverage/lcov-report/lib/services/wallet-event-bus.service.ts.html +643 -0
  85. package/coverage/lcov-report/lib/services/wallet-providers.service.ts.html +496 -0
  86. package/coverage/lcov-report/lib/transports/chrome-extension-transport.ts.html +823 -0
  87. package/coverage/lcov-report/lib/transports/index.html +116 -0
  88. package/coverage/lcov-report/lib/utils/index.html +116 -0
  89. package/coverage/lcov-report/lib/utils/ledger-icons.util.ts.html +319 -0
  90. package/coverage/lcov-report/prettify.css +1 -0
  91. package/coverage/lcov-report/prettify.js +2 -0
  92. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  93. package/coverage/lcov-report/sorter.js +210 -0
  94. package/coverage/lcov.info +19252 -0
  95. package/coverage/lib/components/account-selector/account-actions/account-actions.component.ts.html +868 -0
  96. package/coverage/lib/components/account-selector/account-actions/index.html +116 -0
  97. package/coverage/lib/components/account-selector/account-filter/account-filter.component.ts.html +1288 -0
  98. package/coverage/lib/components/account-selector/account-filter/index.html +116 -0
  99. package/coverage/lib/components/account-selector/account-formatting.service.ts.html +685 -0
  100. package/coverage/lib/components/account-selector/account-grouping.service.ts.html +766 -0
  101. package/coverage/lib/components/account-selector/account-list/account-list.component.ts.html +1495 -0
  102. package/coverage/lib/components/account-selector/account-list/index.html +116 -0
  103. package/coverage/lib/components/account-selector/account-selector.component.ts.html +1495 -0
  104. package/coverage/lib/components/account-selector/account-selector.service.ts.html +1588 -0
  105. package/coverage/lib/components/account-selector/index.html +161 -0
  106. package/coverage/lib/components/wallet-account-display/index.html +116 -0
  107. package/coverage/lib/components/wallet-account-display/wallet-account-display.component.ts.html +505 -0
  108. package/coverage/lib/components/wallet-connect-button/index.html +116 -0
  109. package/coverage/lib/components/wallet-connect-button/wallet-connect-button.component.ts.html +805 -0
  110. package/coverage/lib/components/wallet-connect-prompt/index.html +116 -0
  111. package/coverage/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.ts.html +409 -0
  112. package/coverage/lib/components/wallet-connected-guard/index.html +116 -0
  113. package/coverage/lib/components/wallet-connected-guard/wallet-connected-guard.component.ts.html +304 -0
  114. package/coverage/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.ts.html +436 -0
  115. package/coverage/lib/components/wallet-connection-modal/connection-method-step/index.html +116 -0
  116. package/coverage/lib/components/wallet-connection-modal/index.html +116 -0
  117. package/coverage/lib/components/wallet-connection-modal/qr-pairing-step/index.html +116 -0
  118. package/coverage/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.ts.html +2287 -0
  119. package/coverage/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts.html +2275 -0
  120. package/coverage/lib/components/wallet-session-display/index.html +116 -0
  121. package/coverage/lib/components/wallet-session-display/wallet-session-display.component.ts.html +676 -0
  122. package/coverage/lib/components/wallet-transaction-status/index.html +116 -0
  123. package/coverage/lib/components/wallet-transaction-status/wallet-transaction-status.component.ts.html +703 -0
  124. package/coverage/lib/directives/index.html +146 -0
  125. package/coverage/lib/directives/wallet-connected.directive.ts.html +670 -0
  126. package/coverage/lib/directives/wallet-context.directive.ts.html +547 -0
  127. package/coverage/lib/directives/wallet-events.directive.ts.html +781 -0
  128. package/coverage/lib/hsuite-wallet.module.ts.html +715 -0
  129. package/coverage/lib/index.html +116 -0
  130. package/coverage/lib/models/connection-config.model.ts.html +280 -0
  131. package/coverage/lib/models/index.html +131 -0
  132. package/coverage/lib/models/provider-types.ts.html +577 -0
  133. package/coverage/lib/providers/base-wallet-provider.ts.html +1138 -0
  134. package/coverage/lib/providers/hsuite-native/channel-client.service.ts.html +2671 -0
  135. package/coverage/lib/providers/hsuite-native/index.html +116 -0
  136. package/coverage/lib/providers/hsuite-native-provider.ts.html +2347 -0
  137. package/coverage/lib/providers/index.html +146 -0
  138. package/coverage/lib/providers/p2p-native/index.html +131 -0
  139. package/coverage/lib/providers/p2p-native/p2p-native.provider.ts.html +2254 -0
  140. package/coverage/lib/providers/p2p-native/p2p-session-manager.ts.html +2170 -0
  141. package/coverage/lib/providers/wallet-error-handler.ts.html +1132 -0
  142. package/coverage/lib/providers/walletconnect/core/index.html +176 -0
  143. package/coverage/lib/providers/walletconnect/core/session-health.ts.html +673 -0
  144. package/coverage/lib/providers/walletconnect/core/walletconnect-client-manager.ts.html +1177 -0
  145. package/coverage/lib/providers/walletconnect/core/walletconnect-provider.ts.html +2563 -0
  146. package/coverage/lib/providers/walletconnect/core/walletconnect-session-store.ts.html +904 -0
  147. package/coverage/lib/providers/walletconnect/core/walletconnect-signing-orchestrator.ts.html +982 -0
  148. package/coverage/lib/providers/walletconnect/signers/hedera-signer.ts.html +1915 -0
  149. package/coverage/lib/providers/walletconnect/signers/index.html +146 -0
  150. package/coverage/lib/providers/walletconnect/signers/signer-factory.ts.html +445 -0
  151. package/coverage/lib/providers/walletconnect/signers/xrpl-signer.ts.html +1519 -0
  152. package/coverage/lib/services/index.html +191 -0
  153. package/coverage/lib/services/logger.service.ts.html +463 -0
  154. package/coverage/lib/services/transaction-builders/base-transaction-builder.service.ts.html +1840 -0
  155. package/coverage/lib/services/transaction-builders/hedera-amount-utils.ts.html +337 -0
  156. package/coverage/lib/services/transaction-builders/hedera-transaction-builder.service.ts.html +3940 -0
  157. package/coverage/lib/services/transaction-builders/index.html +161 -0
  158. package/coverage/lib/services/transaction-builders/xrpl-transaction-builder.service.ts.html +2581 -0
  159. package/coverage/lib/services/transaction.service.ts.html +1123 -0
  160. package/coverage/lib/services/unified-wallet.service.ts.html +2641 -0
  161. package/coverage/lib/services/wallet-context.service.ts.html +637 -0
  162. package/coverage/lib/services/wallet-event-bus.service.ts.html +643 -0
  163. package/coverage/lib/services/wallet-providers.service.ts.html +496 -0
  164. package/coverage/lib/transports/chrome-extension-transport.ts.html +823 -0
  165. package/coverage/lib/transports/index.html +116 -0
  166. package/coverage/lib/utils/index.html +116 -0
  167. package/coverage/lib/utils/ledger-icons.util.ts.html +319 -0
  168. package/coverage/prettify.css +1 -0
  169. package/coverage/prettify.js +2 -0
  170. package/coverage/sort-arrow-sprite.png +0 -0
  171. package/coverage/sorter.js +210 -0
  172. package/dist/README.md +48 -0
  173. package/dist/fesm2022/hsuite-native-connect-angular.mjs +14592 -0
  174. package/dist/fesm2022/hsuite-native-connect-angular.mjs.map +1 -0
  175. package/dist/index.d.ts +6949 -0
  176. package/examples/minimal-connect.ts +178 -0
  177. package/examples/multi-protocol.ts +495 -0
  178. package/examples/transaction-signing.ts +361 -0
  179. package/jest.config.json +45 -0
  180. package/karma.conf.js +42 -0
  181. package/ng-package.json +20 -0
  182. package/package.json +60 -0
  183. package/src/index.ts +203 -0
  184. package/src/lib/components/account-selector/account-actions/account-actions.component.ts +261 -0
  185. package/src/lib/components/account-selector/account-filter/account-filter.component.ts +401 -0
  186. package/src/lib/components/account-selector/account-formatting.service.ts +200 -0
  187. package/src/lib/components/account-selector/account-grouping.service.ts +227 -0
  188. package/src/lib/components/account-selector/account-list/account-list.component.ts +470 -0
  189. package/src/lib/components/account-selector/account-selector.component.html +135 -0
  190. package/src/lib/components/account-selector/account-selector.component.scss +2039 -0
  191. package/src/lib/components/account-selector/account-selector.component.ts +470 -0
  192. package/src/lib/components/account-selector/account-selector.service.ts +501 -0
  193. package/src/lib/components/wallet-account-display/wallet-account-display.component.html +34 -0
  194. package/src/lib/components/wallet-account-display/wallet-account-display.component.scss +99 -0
  195. package/src/lib/components/wallet-account-display/wallet-account-display.component.ts +140 -0
  196. package/src/lib/components/wallet-connect-button/wallet-connect-button.component.html +14 -0
  197. package/src/lib/components/wallet-connect-button/wallet-connect-button.component.scss +272 -0
  198. package/src/lib/components/wallet-connect-button/wallet-connect-button.component.ts +240 -0
  199. package/src/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.html +24 -0
  200. package/src/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.scss +50 -0
  201. package/src/lib/components/wallet-connect-prompt/wallet-connect-prompt.component.ts +108 -0
  202. package/src/lib/components/wallet-connected-guard/wallet-connected-guard.component.html +24 -0
  203. package/src/lib/components/wallet-connected-guard/wallet-connected-guard.component.ts +73 -0
  204. package/src/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.html +56 -0
  205. package/src/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.scss +218 -0
  206. package/src/lib/components/wallet-connection-modal/connection-method-step/connection-method-step.component.ts +117 -0
  207. package/src/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.html +94 -0
  208. package/src/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.scss +272 -0
  209. package/src/lib/components/wallet-connection-modal/qr-pairing-step/qr-pairing-step.component.ts +734 -0
  210. package/src/lib/components/wallet-connection-modal/wallet-connection-modal.component.html +197 -0
  211. package/src/lib/components/wallet-connection-modal/wallet-connection-modal.component.scss +678 -0
  212. package/src/lib/components/wallet-connection-modal/wallet-connection-modal.component.ts +730 -0
  213. package/src/lib/components/wallet-session-display/wallet-session-display.component.html +110 -0
  214. package/src/lib/components/wallet-session-display/wallet-session-display.component.scss +179 -0
  215. package/src/lib/components/wallet-session-display/wallet-session-display.component.ts +197 -0
  216. package/src/lib/components/wallet-transaction-status/wallet-transaction-status.component.html +65 -0
  217. package/src/lib/components/wallet-transaction-status/wallet-transaction-status.component.scss +254 -0
  218. package/src/lib/components/wallet-transaction-status/wallet-transaction-status.component.ts +206 -0
  219. package/src/lib/directives/wallet-connected.directive.ts +195 -0
  220. package/src/lib/directives/wallet-context.directive.ts +154 -0
  221. package/src/lib/directives/wallet-events.directive.ts +232 -0
  222. package/src/lib/hsuite-wallet.module.ts +210 -0
  223. package/src/lib/models/connection-config.model.ts +65 -0
  224. package/src/lib/models/provider-types.ts +164 -0
  225. package/src/lib/models/unified-account.model.ts +76 -0
  226. package/src/lib/models/wallet-context.model.ts +121 -0
  227. package/src/lib/models/wallet-events.model.ts +158 -0
  228. package/src/lib/providers/base-wallet-provider.ts +351 -0
  229. package/src/lib/providers/hsuite-native/channel-client.service.spec.ts +73 -0
  230. package/src/lib/providers/hsuite-native/channel-client.service.ts +862 -0
  231. package/src/lib/providers/hsuite-native/index.ts +8 -0
  232. package/src/lib/providers/hsuite-native-provider.ts +754 -0
  233. package/src/lib/providers/mobile-native/mobile-native.provider.spec.ts +19 -0
  234. package/src/lib/providers/p2p-native/index.ts +30 -0
  235. package/src/lib/providers/p2p-native/p2p-native.provider.spec.ts +523 -0
  236. package/src/lib/providers/p2p-native/p2p-native.provider.ts +723 -0
  237. package/src/lib/providers/p2p-native/p2p-session-manager.ts +695 -0
  238. package/src/lib/providers/wallet-error-handler.ts +349 -0
  239. package/src/lib/providers/walletconnect/core/base-signer.interface.ts +122 -0
  240. package/src/lib/providers/walletconnect/core/session-health.ts +196 -0
  241. package/src/lib/providers/walletconnect/core/walletconnect-client-manager.ts +364 -0
  242. package/src/lib/providers/walletconnect/core/walletconnect-provider.integration.spec.ts +348 -0
  243. package/src/lib/providers/walletconnect/core/walletconnect-provider.ts +826 -0
  244. package/src/lib/providers/walletconnect/core/walletconnect-session-store.ts +273 -0
  245. package/src/lib/providers/walletconnect/core/walletconnect-signing-orchestrator.ts +299 -0
  246. package/src/lib/providers/walletconnect/core/walletconnect-types.ts +48 -0
  247. package/src/lib/providers/walletconnect/index.ts +33 -0
  248. package/src/lib/providers/walletconnect/signers/hedera-signer.spec.ts +367 -0
  249. package/src/lib/providers/walletconnect/signers/hedera-signer.ts +610 -0
  250. package/src/lib/providers/walletconnect/signers/signer-factory.spec.ts +62 -0
  251. package/src/lib/providers/walletconnect/signers/signer-factory.ts +120 -0
  252. package/src/lib/providers/walletconnect/signers/xrpl-signer.spec.ts +296 -0
  253. package/src/lib/providers/walletconnect/signers/xrpl-signer.ts +478 -0
  254. package/src/lib/services/logger.service.ts +126 -0
  255. package/src/lib/services/transaction-builders/base-transaction-builder.service.ts +585 -0
  256. package/src/lib/services/transaction-builders/hedera-amount-utils.ts +84 -0
  257. package/src/lib/services/transaction-builders/hedera-transaction-builder.service.spec.ts +741 -0
  258. package/src/lib/services/transaction-builders/hedera-transaction-builder.service.ts +1285 -0
  259. package/src/lib/services/transaction-builders/index.ts +54 -0
  260. package/src/lib/services/transaction-builders/xrpl-transaction-builder.service.spec.ts +937 -0
  261. package/src/lib/services/transaction-builders/xrpl-transaction-builder.service.ts +832 -0
  262. package/src/lib/services/transaction.service.ts +346 -0
  263. package/src/lib/services/unified-wallet.service.spec.ts +1382 -0
  264. package/src/lib/services/unified-wallet.service.ts +852 -0
  265. package/src/lib/services/wallet-context.service.ts +184 -0
  266. package/src/lib/services/wallet-event-bus.service.ts +186 -0
  267. package/src/lib/services/wallet-providers.service.ts +137 -0
  268. package/src/lib/transports/chrome-extension-transport.ts +246 -0
  269. package/src/lib/utils/index.ts +14 -0
  270. package/src/lib/utils/ledger-icons.util.ts +78 -0
  271. package/test/test-setup.ts +21 -0
  272. package/test-setup.ts +63 -0
  273. package/tsconfig.build.json +11 -0
  274. package/tsconfig.json +29 -0
  275. package/tsconfig.spec.json +15 -0
  276. 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
+ }