@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,361 @@
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 transaction-signing.ts
13
+ * @description Example of signing and submitting transactions using the Angular SDK
14
+ *
15
+ * This example demonstrates:
16
+ * - Building Hedera transactions with @hashgraph/sdk
17
+ * - Serializing transactions for wallet signing
18
+ * - Using the TransactionService for simplified signing
19
+ * - Handling transaction results
20
+ */
21
+
22
+ import { Component, inject, signal, computed } from '@angular/core';
23
+ import { UnifiedWalletService, TransactionService } from '@hsuite/native-connect-angular';
24
+ import { TransferTransaction, Hbar, AccountId, Client } from '@hashgraph/sdk';
25
+
26
+ @Component({
27
+ selector: 'app-transaction-signing',
28
+ template: `
29
+ <div class="tx-demo">
30
+ <h2>Transaction Signing Demo</h2>
31
+
32
+ <!-- Connection Required -->
33
+ @if (!isConnected()) {
34
+ <p class="warning">Please connect your wallet first.</p>
35
+ } @else {
36
+ <div class="tx-form">
37
+ <h3>Send HBAR</h3>
38
+
39
+ <div class="form-group">
40
+ <label>From (Your Account)</label>
41
+ <input type="text" [value]="activeAccount()?.address" disabled />
42
+ </div>
43
+
44
+ <div class="form-group">
45
+ <label>To (Recipient)</label>
46
+ <input
47
+ type="text"
48
+ [value]="recipient()"
49
+ (input)="updateRecipient($event)"
50
+ placeholder="0.0.12345"
51
+ />
52
+ </div>
53
+
54
+ <div class="form-group">
55
+ <label>Amount (HBAR)</label>
56
+ <input
57
+ type="number"
58
+ [value]="amount()"
59
+ (input)="updateAmount($event)"
60
+ placeholder="1.0"
61
+ step="0.1"
62
+ min="0.01"
63
+ />
64
+ </div>
65
+
66
+ <!-- Sign Only -->
67
+ <button (click)="signOnly()" [disabled]="isProcessing() || !canSubmit()">
68
+ Sign Transaction
69
+ </button>
70
+
71
+ <!-- Sign and Submit -->
72
+ <button
73
+ (click)="signAndSubmit()"
74
+ [disabled]="isProcessing() || !canSubmit()"
75
+ class="primary"
76
+ >
77
+ Sign & Submit
78
+ </button>
79
+
80
+ <!-- Processing Indicator -->
81
+ @if (isProcessing()) {
82
+ <div class="processing">
83
+ <span class="spinner"></span>
84
+ Processing transaction...
85
+ </div>
86
+ }
87
+
88
+ <!-- Result Display -->
89
+ @if (lastResult()) {
90
+ <div class="result success">
91
+ <h4>Transaction Complete!</h4>
92
+ <p>Transaction ID: {{ getTransactionId() }}</p>
93
+ </div>
94
+ }
95
+
96
+ <!-- Error Display -->
97
+ @if (lastError()) {
98
+ <div class="result error">
99
+ <h4>Transaction Failed</h4>
100
+ <p>{{ lastError()?.message }}</p>
101
+ </div>
102
+ }
103
+ </div>
104
+ }
105
+ </div>
106
+ `,
107
+ styles: [
108
+ `
109
+ .tx-demo {
110
+ padding: 20px;
111
+ max-width: 500px;
112
+ margin: 0 auto;
113
+ }
114
+
115
+ .warning {
116
+ color: var(--ion-color-warning, orange);
117
+ padding: 16px;
118
+ background: var(--ion-color-warning-tint, #fff3e0);
119
+ border-radius: 8px;
120
+ }
121
+
122
+ .tx-form {
123
+ margin-top: 20px;
124
+ }
125
+
126
+ .form-group {
127
+ margin-bottom: 16px;
128
+ }
129
+
130
+ .form-group label {
131
+ display: block;
132
+ margin-bottom: 4px;
133
+ font-weight: 500;
134
+ }
135
+
136
+ .form-group input {
137
+ width: 100%;
138
+ padding: 12px;
139
+ border: 1px solid var(--ion-color-medium, #ccc);
140
+ border-radius: 8px;
141
+ font-size: 16px;
142
+ }
143
+
144
+ button {
145
+ padding: 12px 24px;
146
+ margin-right: 12px;
147
+ margin-top: 12px;
148
+ font-size: 16px;
149
+ cursor: pointer;
150
+ background: var(--ion-color-secondary, #6c757d);
151
+ color: white;
152
+ border: none;
153
+ border-radius: 8px;
154
+ }
155
+
156
+ button.primary {
157
+ background: var(--ion-color-primary, #3880ff);
158
+ }
159
+
160
+ button:disabled {
161
+ opacity: 0.5;
162
+ cursor: not-allowed;
163
+ }
164
+
165
+ .processing {
166
+ margin-top: 16px;
167
+ padding: 16px;
168
+ background: var(--ion-color-light, #f4f4f4);
169
+ border-radius: 8px;
170
+ display: flex;
171
+ align-items: center;
172
+ gap: 12px;
173
+ }
174
+
175
+ .spinner {
176
+ width: 20px;
177
+ height: 20px;
178
+ border: 2px solid var(--ion-color-primary, #3880ff);
179
+ border-top-color: transparent;
180
+ border-radius: 50%;
181
+ animation: spin 1s linear infinite;
182
+ }
183
+
184
+ @keyframes spin {
185
+ to {
186
+ transform: rotate(360deg);
187
+ }
188
+ }
189
+
190
+ .result {
191
+ margin-top: 16px;
192
+ padding: 16px;
193
+ border-radius: 8px;
194
+ }
195
+
196
+ .result.success {
197
+ background: var(--ion-color-success-tint, #e8f5e9);
198
+ color: var(--ion-color-success, green);
199
+ }
200
+
201
+ .result.error {
202
+ background: var(--ion-color-danger-tint, #ffebee);
203
+ color: var(--ion-color-danger, red);
204
+ }
205
+
206
+ .result h4 {
207
+ margin: 0 0 8px;
208
+ }
209
+
210
+ .result p {
211
+ margin: 0;
212
+ font-family: monospace;
213
+ }
214
+ `,
215
+ ],
216
+ })
217
+ export class TransactionSigningComponent {
218
+ private readonly wallet = inject(UnifiedWalletService);
219
+ private readonly txService = inject(TransactionService);
220
+
221
+ // Form state
222
+ readonly recipient = signal('');
223
+ readonly amount = signal(1.0);
224
+
225
+ // Wallet state
226
+ readonly isConnected = this.wallet.isConnected;
227
+ readonly activeAccount = this.wallet.activeAccount;
228
+
229
+ // Transaction state
230
+ readonly isProcessing = this.txService.isProcessing;
231
+ readonly lastResult = this.txService.lastResult;
232
+ readonly lastError = this.txService.lastError;
233
+
234
+ // Form validation
235
+ readonly canSubmit = computed(() => {
236
+ const account = this.activeAccount();
237
+ const recipient = this.recipient();
238
+ const amount = this.amount();
239
+
240
+ return account && recipient && recipient.startsWith('0.0.') && amount > 0;
241
+ });
242
+
243
+ updateRecipient(event: Event): void {
244
+ const value = (event.target as HTMLInputElement).value;
245
+ this.recipient.set(value);
246
+ }
247
+
248
+ updateAmount(event: Event): void {
249
+ const value = parseFloat((event.target as HTMLInputElement).value) || 0;
250
+ this.amount.set(value);
251
+ }
252
+
253
+ getTransactionId(): string {
254
+ const result = this.lastResult() as { transactionId?: string } | null;
255
+ return result?.transactionId || 'N/A';
256
+ }
257
+
258
+ /**
259
+ * Build a Hedera transfer transaction and serialize it
260
+ *
261
+ * This is the standard pattern for building transactions:
262
+ * 1. Create the transaction using Hashgraph SDK
263
+ * 2. Freeze it with a client (to set node accounts)
264
+ * 3. Serialize to bytes
265
+ * 4. Encode as base64 for the wallet
266
+ */
267
+ private async buildTransaction(): Promise<string> {
268
+ const from = this.activeAccount();
269
+ if (!from) throw new Error('No active account');
270
+
271
+ const to = this.recipient();
272
+ const hbarAmount = this.amount();
273
+
274
+ // Create transfer transaction
275
+ const transaction = new TransferTransaction()
276
+ .addHbarTransfer(AccountId.fromString(from.address), new Hbar(-hbarAmount))
277
+ .addHbarTransfer(AccountId.fromString(to), new Hbar(hbarAmount));
278
+
279
+ // Get network from account
280
+ const network = from.networkId?.split(':')[1] || 'testnet';
281
+ const client = network === 'mainnet' ? Client.forMainnet() : Client.forTestnet();
282
+
283
+ // Freeze the transaction (sets node account IDs)
284
+ const frozen = await transaction.freezeWith(client);
285
+
286
+ // Serialize to bytes
287
+ const bytes = frozen.toBytes();
288
+
289
+ // Encode as base64
290
+ return this.uint8ArrayToBase64(bytes);
291
+ }
292
+
293
+ /**
294
+ * Sign the transaction only (without submitting)
295
+ *
296
+ * Use this when you want to:
297
+ * - Collect multiple signatures
298
+ * - Submit the transaction yourself
299
+ * - Store the signed transaction for later
300
+ */
301
+ async signOnly(): Promise<void> {
302
+ try {
303
+ const payload = await this.buildTransaction();
304
+ const result = await this.txService.signTransaction(payload);
305
+ console.log('Transaction signed:', result);
306
+ } catch (error) {
307
+ console.error('Sign failed:', error);
308
+ }
309
+ }
310
+
311
+ /**
312
+ * Sign and submit the transaction in one step
313
+ *
314
+ * This is the recommended approach for simple transactions.
315
+ * The wallet will sign the transaction and submit it to the network.
316
+ */
317
+ async signAndSubmit(): Promise<void> {
318
+ try {
319
+ const payload = await this.buildTransaction();
320
+ const result = await this.txService.signAndSubmit(payload);
321
+ console.log('Transaction submitted:', result);
322
+ } catch (error) {
323
+ console.error('Submit failed:', error);
324
+ }
325
+ }
326
+
327
+ /**
328
+ * Convert Uint8Array to base64 string
329
+ */
330
+ private uint8ArrayToBase64(bytes: Uint8Array): string {
331
+ let binary = '';
332
+ for (let i = 0; i < bytes.length; i++) {
333
+ binary += String.fromCharCode(bytes[i]);
334
+ }
335
+ return btoa(binary);
336
+ }
337
+ }
338
+
339
+ /**
340
+ * Key Points:
341
+ *
342
+ * 1. TRANSACTION BUILDING:
343
+ * - Use @hashgraph/sdk to build transactions
344
+ * - Freeze with appropriate client (testnet/mainnet)
345
+ * - Serialize to bytes and encode as base64
346
+ *
347
+ * 2. SIGNING OPTIONS:
348
+ * - signTransaction(): Sign only, return signed bytes
349
+ * - signAndSubmit(): Sign and submit in one wallet prompt
350
+ * - signAndSubmit is preferred for better UX (one prompt)
351
+ *
352
+ * 3. TRANSACTION SERVICE:
353
+ * - Provides reactive state (isProcessing, lastResult, lastError)
354
+ * - Automatically shows toast notifications
355
+ * - Handles error propagation
356
+ *
357
+ * 4. ERROR HANDLING:
358
+ * - Wrap in try/catch
359
+ * - Check lastError signal for UI display
360
+ * - Log errors for debugging
361
+ */
@@ -0,0 +1,45 @@
1
+ {
2
+ "displayName": "angular-sdk",
3
+ "preset": "../../jest.preset.js",
4
+ "setupFilesAfterEnv": ["<rootDir>/test-setup.ts"],
5
+ "globals": {},
6
+ "coverageDirectory": "../../coverage/packages/angular-sdk",
7
+ "transform": {
8
+ "^.+\\.(ts|mts|js|html)$": [
9
+ "jest-preset-angular",
10
+ {
11
+ "tsconfig": "<rootDir>/tsconfig.spec.json",
12
+ "stringifyContentPathRegex": "\\.(html|svg)$"
13
+ }
14
+ ]
15
+ },
16
+ "transformIgnorePatterns": ["node_modules/(?!.*\\.mjs$)"],
17
+ "snapshotSerializers": [
18
+ "jest-preset-angular/build/serializers/no-ng-attributes",
19
+ "jest-preset-angular/build/serializers/ng-snapshot",
20
+ "jest-preset-angular/build/serializers/html-comment"
21
+ ],
22
+ "testMatch": [
23
+ "<rootDir>/**/__tests__/**/*.[jt]s?(x)",
24
+ "<rootDir>/**/*(*.)@(spec|test).[jt]s?(x)"
25
+ ],
26
+ "collectCoverageFrom": [
27
+ "src/**/*.ts",
28
+ "!src/**/*.spec.ts",
29
+ "!src/**/*.d.ts",
30
+ "!src/index.ts",
31
+ "!src/test-setup.ts"
32
+ ],
33
+ "coverageThreshold": {
34
+ "global": {
35
+ "branches": 80,
36
+ "functions": 80,
37
+ "lines": 80,
38
+ "statements": 80
39
+ }
40
+ },
41
+ "moduleNameMapper": {
42
+ "^@hsuite/native-connect-angular$": "<rootDir>/src/index.ts",
43
+ "^@hsuite/native-connect-angular/(.*)$": "<rootDir>/src/$1"
44
+ }
45
+ }
package/karma.conf.js ADDED
@@ -0,0 +1,42 @@
1
+ // Karma configuration file, see link for more information
2
+ // https://karma-runner.github.io/1.0/config/configuration-file.html
3
+
4
+ module.exports = function (config) {
5
+ config.set({
6
+ basePath: '',
7
+ frameworks: ['jasmine', '@angular-devkit/build-angular'],
8
+ plugins: [
9
+ require('karma-jasmine'),
10
+ require('karma-chrome-launcher'),
11
+ require('karma-jasmine-html-reporter'),
12
+ require('karma-coverage'),
13
+ require('@angular-devkit/build-angular/plugins/karma')
14
+ ],
15
+ client: {
16
+ jasmine: {
17
+ // you can add configuration options for Jasmine here
18
+ // the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html
19
+ // for example, you can disable the random execution with `random: false`
20
+ // or set a specific seed with `seed: 4321`
21
+ },
22
+ clearContext: false // leave Jasmine Spec Runner output visible in browser
23
+ },
24
+ jasmineHtmlReporter: {
25
+ suppressAll: true // removes the duplicated traces
26
+ },
27
+ coverageReporter: {
28
+ dir: require('path').join(__dirname, './coverage'),
29
+ subdir: '.',
30
+ reporters: [
31
+ { type: 'html' },
32
+ { type: 'text-summary' },
33
+ { type: 'lcovonly' }
34
+ ]
35
+ },
36
+ reporters: ['progress', 'kjhtml'],
37
+ browsers: ['ChromeHeadless'],
38
+ restartOnFileChange: true,
39
+ singleRun: true
40
+ });
41
+ };
42
+
@@ -0,0 +1,20 @@
1
+ {
2
+ "$schema": "node_modules/ng-packagr/ng-package.json",
3
+ "dest": "./dist",
4
+ "lib": {
5
+ "entryFile": "src/index.ts"
6
+ },
7
+ "allowedNonPeerDependencies": [
8
+ "@hashgraph/proto",
9
+ "@hashgraph/sdk",
10
+ "@walletconnect/modal",
11
+ "@walletconnect/sign-client",
12
+ "@walletconnect/types",
13
+ "qrcode",
14
+ "qr-scanner",
15
+ "@hsuite/native-connect-sdk",
16
+ "@hsuite/native-connect-types",
17
+ "@hsuite/native-connect-ui",
18
+ "xrpl"
19
+ ]
20
+ }
package/package.json ADDED
@@ -0,0 +1,60 @@
1
+ {
2
+ "name": "@hsuite/native-connect-angular",
3
+ "version": "1.0.0",
4
+ "license": "PolyForm-Noncommercial-1.0.0",
5
+ "description": "Angular integration SDK for HSuite Wallet - provides direct SDK integration without wrappers",
6
+ "type": "module",
7
+ "types": "dist/index.d.ts",
8
+ "scripts": {
9
+ "build": "./node_modules/.bin/ng-packagr -p ng-package.json",
10
+ "clean": "rm -rf dist",
11
+ "test": "vitest run",
12
+ "test:watch": "vitest --watch",
13
+ "test:coverage": "vitest run --coverage",
14
+ "docs": "compodoc -p tsconfig.json -c ../../compodoc.base.json -d dist/docs --name 'Angular SDK API' --includes docs"
15
+ },
16
+ "peerDependencies": {
17
+ "@angular/common": "^20.0.0",
18
+ "@angular/core": "^20.0.0",
19
+ "@ionic/angular": "^8.0.0",
20
+ "ionicons": "^7.0.0",
21
+ "rxjs": "~7.8.0"
22
+ },
23
+ "dependencies": {
24
+ "@hashgraph/proto": "^2.25.0",
25
+ "@hashgraph/sdk": "^2.76.0",
26
+ "@hsuite/native-connect-sdk": "^1.0.0",
27
+ "@hsuite/native-connect-types": "^1.0.0",
28
+ "@hsuite/native-connect-ui": "^1.0.0",
29
+ "@walletconnect/modal": "^2.7.0",
30
+ "@walletconnect/sign-client": "^2.23.0",
31
+ "@walletconnect/types": "^2.23.0",
32
+ "qr-scanner": "^1.4.2",
33
+ "qrcode": "^1.5.4",
34
+ "tslib": "^2.6.0",
35
+ "xrpl": "^3.0.0"
36
+ },
37
+ "devDependencies": {
38
+ "@angular-devkit/build-angular": "^20.3.14",
39
+ "@angular/common": "^20.3.16",
40
+ "@angular/compiler": "^20.3.16",
41
+ "@angular/core": "^20.3.16",
42
+ "@angular/platform-browser": "^20.3.16",
43
+ "@angular/platform-browser-dynamic": "^20.3.16",
44
+ "@ionic/angular": "^8.0.0",
45
+ "@types/jasmine": "~5.1.0",
46
+ "@types/qrcode": "^1.5.5",
47
+ "@vitest/coverage-v8": "^1.6.0",
48
+ "@vitest/ui": "^4.0.8",
49
+ "ionicons": "^7.0.0",
50
+ "jasmine-core": "~5.1.0",
51
+ "jsdom": "^27.1.0",
52
+ "ng-packagr": "^20.0.0",
53
+ "typescript": "~5.8.3",
54
+ "vitest": "^1.6.0",
55
+ "zone.js": "~0.15.0"
56
+ },
57
+ "publishConfig": {
58
+ "access": "public"
59
+ }
60
+ }