@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,346 @@
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 High-level transaction service with automatic state management.
13
+ *
14
+ * @module services/transaction
15
+ *
16
+ * @description
17
+ * TransactionService provides simplified methods for common transaction operations
18
+ * with built-in state management, error handling, and UI feedback. It wraps
19
+ * UnifiedWalletService operations with additional convenience features.
20
+ *
21
+ * **Key Features:**
22
+ * - Automatic processing state tracking via Angular signals
23
+ * - Toast notifications for success and error states
24
+ * - Error propagation with proper error types
25
+ * - Result and error state tracking for UI binding
26
+ * - Support for batch transactions
27
+ *
28
+ * **Signal-based State:**
29
+ * - `isProcessing()` - True while a transaction is in progress
30
+ * - `lastResult()` - The result of the last successful transaction
31
+ * - `lastError()` - The error from the last failed transaction
32
+ *
33
+ * @Component({
34
+ * template: `
35
+ * <button [disabled]="txService.isProcessing()" (click)="send()">
36
+ * {{ txService.isProcessing() ? 'Processing...' : 'Send' }}
37
+ * </button>
38
+ * `
39
+ * })
40
+ * export class MyComponent {
41
+ * txService = inject(TransactionService);
42
+ *
43
+ * async send() {
44
+ * const result = await this.txService.signAndSubmit(payload);
45
+ * console.log('Transaction ID:', result.transactionId);
46
+ * }
47
+ * }
48
+ * ```
49
+ */
50
+
51
+ import { Injectable, inject, signal, type Signal, type WritableSignal } from '@angular/core';
52
+ import { getLogger } from '@hsuite/native-connect-sdk';
53
+ import { ToastController } from '@ionic/angular/standalone';
54
+
55
+ import type { SignResult, SubmitResult } from '../providers/base-wallet-provider';
56
+
57
+ import { UnifiedWalletService } from './unified-wallet.service';
58
+ import { WalletEventBus } from './wallet-event-bus.service';
59
+
60
+
61
+ const logger = getLogger().scoped?.('TransactionService') ?? getLogger();
62
+
63
+ /**
64
+ * High-level transaction service with automatic state management.
65
+ *
66
+ * @service TransactionService
67
+ *
68
+ * @description
69
+ * Simplifies common transaction operations with built-in features:
70
+ * - Automatic processing state management via Angular signals
71
+ * - Error propagation with toast notifications
72
+ * - Event emission for tracking and debugging
73
+ * - Signal-based reactive state (modern Angular pattern)
74
+ *
75
+ * This service is the recommended way to perform transactions in dApps,
76
+ * as it handles all the boilerplate around state management and user feedback.
77
+ *
78
+ * @providedIn root
79
+ */
80
+ @Injectable({ providedIn: 'root' })
81
+ export class TransactionService {
82
+ private readonly walletService = inject(UnifiedWalletService);
83
+ private readonly eventBus = inject(WalletEventBus);
84
+ private readonly toastController = inject(ToastController);
85
+
86
+ // Internal writable signals for state management
87
+ private readonly _isProcessing: WritableSignal<boolean> = signal(false);
88
+ private readonly _lastResult: WritableSignal<unknown> = signal(null);
89
+ private readonly _lastError: WritableSignal<Error | null> = signal(null);
90
+
91
+ /**
92
+ * Signal indicating if a transaction is currently processing
93
+ */
94
+ readonly isProcessing: Signal<boolean> = this._isProcessing.asReadonly();
95
+
96
+ /**
97
+ * Signal of the last transaction result
98
+ */
99
+ readonly lastResult: Signal<unknown> = this._lastResult.asReadonly();
100
+
101
+ /**
102
+ * Signal of the last error
103
+ */
104
+ readonly lastError: Signal<Error | null> = this._lastError.asReadonly();
105
+
106
+ /**
107
+ * Sign a transaction
108
+ *
109
+ * Automatically handles:
110
+ * - Processing state
111
+ * - Error propagation
112
+ * - Success toast notification
113
+ *
114
+ * @param payload - Transaction payload (base64 or transaction bytes)
115
+ * @returns Sign result
116
+ */
117
+ async signTransaction(payload: string): Promise<SignResult> {
118
+ return this.executeTransaction(async () => {
119
+ const result = (await this.walletService.signTransaction(payload)) as SignResult;
120
+ logger.info('Transaction signed', {
121
+ hasSignature: !!(result as { signedTransaction?: string }).signedTransaction,
122
+ });
123
+ await this.showSuccessToast(
124
+ 'Transaction Signed',
125
+ 'Your transaction has been signed successfully.',
126
+ );
127
+ return result;
128
+ });
129
+ }
130
+
131
+ /**
132
+ * Submit a transaction
133
+ *
134
+ * Automatically handles:
135
+ * - Processing state
136
+ * - Error propagation
137
+ * - Success toast notification
138
+ *
139
+ * @param payload - Transaction payload (base64 or transaction bytes)
140
+ * @returns Submit result
141
+ */
142
+ async submitTransaction(payload: string): Promise<SubmitResult> {
143
+ return this.executeTransaction(async () => {
144
+ const result = (await this.walletService.submitTransaction(payload)) as SubmitResult;
145
+ logger.info('Transaction submitted', { transactionId: result.transactionId });
146
+ await this.showSuccessToast(
147
+ 'Transaction Submitted',
148
+ `Transaction ID: ${result.transactionId || 'Success'}`,
149
+ );
150
+ return result;
151
+ });
152
+ }
153
+
154
+ /**
155
+ * Sign and submit a transaction in one call
156
+ *
157
+ * Uses the wallet's native sign+submit method when available (e.g., WalletConnect's signAndExecuteTransaction).
158
+ * This prevents double prompts and provides a better UX.
159
+ *
160
+ * @param payload - Transaction payload
161
+ * @returns Submit result
162
+ */
163
+ async signAndSubmit(payload: string): Promise<SubmitResult> {
164
+ return this.executeTransaction(async () => {
165
+ // Use the wallet's signAndExecuteTransaction method directly
166
+ // This uses hedera_signAndExecuteTransaction for WalletConnect (one prompt!)
167
+ const result = (await this.walletService.signAndExecuteTransaction(payload)) as SubmitResult;
168
+ logger.info('Transaction signed and submitted', { transactionId: result.transactionId });
169
+ await this.showSuccessToast(
170
+ 'Transaction Complete',
171
+ `Transaction ID: ${result.transactionId || 'Success'}`,
172
+ );
173
+ return result;
174
+ });
175
+ }
176
+
177
+ /**
178
+ * Submit a batch transaction
179
+ *
180
+ * Batch transactions require unsigned inner transactions that the wallet will sign.
181
+ * The wallet signs each inner transaction with the account's key, then builds and
182
+ * executes the BatchTransaction.
183
+ *
184
+ * @param options - Batch transaction options
185
+ * @param options.batchKey - Public key for batch (typically account's public key)
186
+ * @param options.innerTransactions - Array of unsigned inner transactions
187
+ * @returns Submit result
188
+ */
189
+ async submitBatchTransaction(options: {
190
+ batchKey: string;
191
+ innerTransactions: Array<{ payload: string; description?: string }>;
192
+ }): Promise<SubmitResult> {
193
+ return this.executeTransaction(async () => {
194
+ const result = (await this.walletService.submitTransaction('', {
195
+ isBatch: true,
196
+ batchKey: options.batchKey,
197
+ innerTransactions: options.innerTransactions,
198
+ })) as SubmitResult;
199
+ logger.info('Batch transaction submitted', { transactionId: result.transactionId });
200
+ await this.showSuccessToast(
201
+ 'Batch Transaction Complete',
202
+ `Transaction ID: ${result.transactionId || 'Success'}`,
203
+ );
204
+ return result;
205
+ });
206
+ }
207
+
208
+ /**
209
+ * Sign a message
210
+ *
211
+ * @param message - Message to sign
212
+ * @returns Sign result with signature
213
+ */
214
+ async signMessage(message: string): Promise<SignResult> {
215
+ return this.executeTransaction(async () => {
216
+ const result = (await this.walletService.signMessage(message)) as SignResult;
217
+ logger.info('Message signed', { hasSignature: !!result.signature });
218
+ await this.showSuccessToast('Message Signed', 'Your message has been signed successfully.');
219
+ return result;
220
+ });
221
+ }
222
+
223
+ /**
224
+ * Show a success toast notification
225
+ * Uses cssClass-only styling (no Ionic color property) for theme compatibility.
226
+ * @param header
227
+ * @param message
228
+ */
229
+ private async showSuccessToast(header: string, message: string): Promise<void> {
230
+ const toast = await this.toastController.create({
231
+ header,
232
+ message,
233
+ icon: 'checkmark-circle-outline',
234
+ cssClass: 'toast-success toast-compact',
235
+ duration: 4000,
236
+ position: 'top',
237
+ buttons: [{ icon: 'close', role: 'cancel' }],
238
+ });
239
+ await toast.present();
240
+ }
241
+
242
+ /**
243
+ * Show an error toast notification
244
+ * Uses cssClass-only styling (no Ionic color property) for theme compatibility.
245
+ * @param header
246
+ * @param message
247
+ */
248
+ private async showErrorToast(header: string, message: string): Promise<void> {
249
+ const toast = await this.toastController.create({
250
+ header,
251
+ message,
252
+ icon: 'close-circle-outline',
253
+ cssClass: 'toast-danger toast-compact',
254
+ duration: 6000,
255
+ position: 'top',
256
+ buttons: [{ icon: 'close', role: 'cancel' }],
257
+ });
258
+ await toast.present();
259
+ }
260
+
261
+ /**
262
+ * Execute a transaction with automatic state management
263
+ *
264
+ * Internal helper that wraps transaction operations with:
265
+ * - Processing state updates
266
+ * - Error handling with toast notifications
267
+ * - Result tracking
268
+ * @param operation
269
+ */
270
+ private async executeTransaction<T>(operation: () => Promise<T>): Promise<T> {
271
+ // Set processing state
272
+ this.setProcessing(true);
273
+ this.clearError();
274
+
275
+ try {
276
+ // Execute the operation
277
+ const result = await operation();
278
+
279
+ // Update result state
280
+ this.setResult(result);
281
+
282
+ return result;
283
+ } catch (error) {
284
+ // Update error state
285
+ const err = error instanceof Error ? error : new Error(String(error));
286
+ this.setError(err);
287
+
288
+ // Show error toast
289
+ await this.showErrorToast(
290
+ 'Transaction Failed',
291
+ err.message || 'An error occurred during the transaction.',
292
+ );
293
+
294
+ // Re-throw for caller to handle
295
+ throw err;
296
+ } finally {
297
+ // Clear processing state
298
+ this.setProcessing(false);
299
+ }
300
+ }
301
+
302
+ /**
303
+ * Update processing state
304
+ * @param processing
305
+ */
306
+ private setProcessing(processing: boolean): void {
307
+ this._isProcessing.set(processing);
308
+ }
309
+
310
+ /**
311
+ * Update result state
312
+ * @param result
313
+ */
314
+ private setResult(result: unknown): void {
315
+ this._lastResult.set(result);
316
+ }
317
+
318
+ /**
319
+ * Update error state
320
+ * @param error
321
+ */
322
+ private setError(error: Error): void {
323
+ this._lastError.set(error);
324
+ }
325
+
326
+ /**
327
+ * Clear error state
328
+ */
329
+ private clearError(): void {
330
+ this._lastError.set(null);
331
+ }
332
+
333
+ /**
334
+ * Resets all transaction state to initial values.
335
+ *
336
+ * @description
337
+ * Clears the processing flag, last result, and last error.
338
+ * Useful when navigating away from a transaction page or
339
+ * starting a fresh transaction flow.
340
+ */
341
+ resetState(): void {
342
+ this.setProcessing(false);
343
+ this.setResult(null);
344
+ this.clearError();
345
+ }
346
+ }