@hashgraphonline/standards-sdk 0.1.143 → 0.1.144-feat-solana-register.canary.d5edcec.80

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 (475) hide show
  1. package/dist/cjs/hcs-10/base-client.d.ts.map +1 -1
  2. package/dist/cjs/hcs-10/sdk.d.ts +8 -0
  3. package/dist/cjs/hcs-10/sdk.d.ts.map +1 -1
  4. package/dist/cjs/hcs-11/client.d.ts +2 -2
  5. package/dist/cjs/hcs-11/client.d.ts.map +1 -1
  6. package/dist/cjs/hcs-11/person-builder.d.ts +1 -0
  7. package/dist/cjs/hcs-11/person-builder.d.ts.map +1 -1
  8. package/dist/cjs/hcs-11/types.d.ts +1 -0
  9. package/dist/cjs/hcs-11/types.d.ts.map +1 -1
  10. package/dist/cjs/hcs-12/rendering/resource-manager.d.ts.map +1 -1
  11. package/dist/cjs/hcs-12/validation/schemas.d.ts +8 -8
  12. package/dist/cjs/hcs-14/issuers/hiero.d.ts.map +1 -1
  13. package/dist/cjs/hcs-15/browser.d.ts +2 -0
  14. package/dist/cjs/hcs-15/browser.d.ts.map +1 -1
  15. package/dist/cjs/hcs-15/sdk.d.ts +7 -1
  16. package/dist/cjs/hcs-15/sdk.d.ts.map +1 -1
  17. package/dist/cjs/hcs-15/tx.d.ts +4 -0
  18. package/dist/cjs/hcs-15/tx.d.ts.map +1 -1
  19. package/dist/cjs/hcs-15/types.d.ts +16 -1
  20. package/dist/cjs/hcs-15/types.d.ts.map +1 -1
  21. package/dist/cjs/hcs-16/browser.d.ts +11 -2
  22. package/dist/cjs/hcs-16/browser.d.ts.map +1 -1
  23. package/dist/cjs/hcs-16/sdk.d.ts +62 -1
  24. package/dist/cjs/hcs-16/sdk.d.ts.map +1 -1
  25. package/dist/cjs/hcs-16/tx.d.ts +21 -3
  26. package/dist/cjs/hcs-16/tx.d.ts.map +1 -1
  27. package/dist/cjs/hcs-17/base-client.d.ts +1 -0
  28. package/dist/cjs/hcs-17/base-client.d.ts.map +1 -1
  29. package/dist/cjs/hcs-17/sdk.d.ts.map +1 -1
  30. package/dist/cjs/hcs-17/tx.d.ts +2 -0
  31. package/dist/cjs/hcs-17/tx.d.ts.map +1 -1
  32. package/dist/cjs/hcs-17/types.d.ts +4 -0
  33. package/dist/cjs/hcs-17/types.d.ts.map +1 -1
  34. package/dist/cjs/hcs-21/types.d.ts +75 -75
  35. package/dist/cjs/index.d.ts.map +1 -1
  36. package/dist/cjs/services/registry-broker/client/adapters.d.ts +20 -0
  37. package/dist/cjs/services/registry-broker/client/adapters.d.ts.map +1 -0
  38. package/dist/cjs/services/registry-broker/client/agents.d.ts +16 -0
  39. package/dist/cjs/services/registry-broker/client/agents.d.ts.map +1 -0
  40. package/dist/cjs/services/registry-broker/client/base-client.d.ts +70 -0
  41. package/dist/cjs/services/registry-broker/client/base-client.d.ts.map +1 -0
  42. package/dist/cjs/services/registry-broker/client/chat-history.d.ts +23 -0
  43. package/dist/cjs/services/registry-broker/client/chat-history.d.ts.map +1 -0
  44. package/dist/cjs/services/registry-broker/client/chat.d.ts +33 -0
  45. package/dist/cjs/services/registry-broker/client/chat.d.ts.map +1 -0
  46. package/dist/cjs/services/registry-broker/client/credits.d.ts +40 -0
  47. package/dist/cjs/services/registry-broker/client/credits.d.ts.map +1 -0
  48. package/dist/cjs/services/registry-broker/client/encrypted-chat-manager.d.ts +35 -0
  49. package/dist/cjs/services/registry-broker/client/encrypted-chat-manager.d.ts.map +1 -0
  50. package/dist/cjs/services/registry-broker/client/encryption.d.ts +33 -0
  51. package/dist/cjs/services/registry-broker/client/encryption.d.ts.map +1 -0
  52. package/dist/cjs/services/registry-broker/client/errors.d.ts +19 -0
  53. package/dist/cjs/services/registry-broker/client/errors.d.ts.map +1 -0
  54. package/dist/cjs/services/registry-broker/client/feedback.d.ts +2 -0
  55. package/dist/cjs/services/registry-broker/client/feedback.d.ts.map +1 -0
  56. package/dist/cjs/services/registry-broker/client/ledger-auth.d.ts +10 -0
  57. package/dist/cjs/services/registry-broker/client/ledger-auth.d.ts.map +1 -0
  58. package/dist/cjs/services/registry-broker/client/search.d.ts +19 -0
  59. package/dist/cjs/services/registry-broker/client/search.d.ts.map +1 -0
  60. package/dist/cjs/services/registry-broker/client/utils.d.ts +21 -0
  61. package/dist/cjs/services/registry-broker/client/utils.d.ts.map +1 -0
  62. package/dist/cjs/services/registry-broker/client.d.ts +2 -205
  63. package/dist/cjs/services/registry-broker/client.d.ts.map +1 -1
  64. package/dist/cjs/services/registry-broker/private-key-signer.d.ts +1 -0
  65. package/dist/cjs/services/registry-broker/private-key-signer.d.ts.map +1 -1
  66. package/dist/cjs/services/registry-broker/schemas.d.ts +2509 -816
  67. package/dist/cjs/services/registry-broker/schemas.d.ts.map +1 -1
  68. package/dist/cjs/services/registry-broker/types.d.ts +64 -2
  69. package/dist/cjs/services/registry-broker/types.d.ts.map +1 -1
  70. package/dist/cjs/standards-sdk.cjs +3 -3
  71. package/dist/cjs/standards-sdk.cjs.map +1 -1
  72. package/dist/cjs/utils/crypto-abstraction.d.ts.map +1 -1
  73. package/dist/cjs/utils/crypto-env.d.ts.map +1 -1
  74. package/dist/cjs/utils/dynamic-import.d.ts +5 -1
  75. package/dist/cjs/utils/dynamic-import.d.ts.map +1 -1
  76. package/dist/cjs/utils/hash-adapter.d.ts.map +1 -1
  77. package/dist/es/hcs-10/base-client.d.ts.map +1 -1
  78. package/dist/es/hcs-10/sdk.d.ts +8 -0
  79. package/dist/es/hcs-10/sdk.d.ts.map +1 -1
  80. package/dist/es/hcs-11/client.d.ts +2 -2
  81. package/dist/es/hcs-11/client.d.ts.map +1 -1
  82. package/dist/es/hcs-11/person-builder.d.ts +1 -0
  83. package/dist/es/hcs-11/person-builder.d.ts.map +1 -1
  84. package/dist/es/hcs-11/types.d.ts +1 -0
  85. package/dist/es/hcs-11/types.d.ts.map +1 -1
  86. package/dist/es/hcs-12/rendering/resource-manager.d.ts.map +1 -1
  87. package/dist/es/hcs-12/validation/schemas.d.ts +8 -8
  88. package/dist/es/hcs-14/issuers/hiero.d.ts.map +1 -1
  89. package/dist/es/hcs-15/browser.d.ts +2 -0
  90. package/dist/es/hcs-15/browser.d.ts.map +1 -1
  91. package/dist/es/hcs-15/sdk.d.ts +7 -1
  92. package/dist/es/hcs-15/sdk.d.ts.map +1 -1
  93. package/dist/es/hcs-15/tx.d.ts +4 -0
  94. package/dist/es/hcs-15/tx.d.ts.map +1 -1
  95. package/dist/es/hcs-15/types.d.ts +16 -1
  96. package/dist/es/hcs-15/types.d.ts.map +1 -1
  97. package/dist/es/hcs-16/browser.d.ts +11 -2
  98. package/dist/es/hcs-16/browser.d.ts.map +1 -1
  99. package/dist/es/hcs-16/sdk.d.ts +62 -1
  100. package/dist/es/hcs-16/sdk.d.ts.map +1 -1
  101. package/dist/es/hcs-16/tx.d.ts +21 -3
  102. package/dist/es/hcs-16/tx.d.ts.map +1 -1
  103. package/dist/es/hcs-17/base-client.d.ts +1 -0
  104. package/dist/es/hcs-17/base-client.d.ts.map +1 -1
  105. package/dist/es/hcs-17/sdk.d.ts.map +1 -1
  106. package/dist/es/hcs-17/tx.d.ts +2 -0
  107. package/dist/es/hcs-17/tx.d.ts.map +1 -1
  108. package/dist/es/hcs-17/types.d.ts +4 -0
  109. package/dist/es/hcs-17/types.d.ts.map +1 -1
  110. package/dist/es/hcs-21/types.d.ts +75 -75
  111. package/dist/es/index.d.ts.map +1 -1
  112. package/dist/es/services/registry-broker/client/adapters.d.ts +20 -0
  113. package/dist/es/services/registry-broker/client/adapters.d.ts.map +1 -0
  114. package/dist/es/services/registry-broker/client/agents.d.ts +16 -0
  115. package/dist/es/services/registry-broker/client/agents.d.ts.map +1 -0
  116. package/dist/es/services/registry-broker/client/base-client.d.ts +70 -0
  117. package/dist/es/services/registry-broker/client/base-client.d.ts.map +1 -0
  118. package/dist/es/services/registry-broker/client/chat-history.d.ts +23 -0
  119. package/dist/es/services/registry-broker/client/chat-history.d.ts.map +1 -0
  120. package/dist/es/services/registry-broker/client/chat.d.ts +33 -0
  121. package/dist/es/services/registry-broker/client/chat.d.ts.map +1 -0
  122. package/dist/es/services/registry-broker/client/credits.d.ts +40 -0
  123. package/dist/es/services/registry-broker/client/credits.d.ts.map +1 -0
  124. package/dist/es/services/registry-broker/client/encrypted-chat-manager.d.ts +35 -0
  125. package/dist/es/services/registry-broker/client/encrypted-chat-manager.d.ts.map +1 -0
  126. package/dist/es/services/registry-broker/client/encryption.d.ts +33 -0
  127. package/dist/es/services/registry-broker/client/encryption.d.ts.map +1 -0
  128. package/dist/es/services/registry-broker/client/errors.d.ts +19 -0
  129. package/dist/es/services/registry-broker/client/errors.d.ts.map +1 -0
  130. package/dist/es/services/registry-broker/client/feedback.d.ts +2 -0
  131. package/dist/es/services/registry-broker/client/feedback.d.ts.map +1 -0
  132. package/dist/es/services/registry-broker/client/ledger-auth.d.ts +10 -0
  133. package/dist/es/services/registry-broker/client/ledger-auth.d.ts.map +1 -0
  134. package/dist/es/services/registry-broker/client/search.d.ts +19 -0
  135. package/dist/es/services/registry-broker/client/search.d.ts.map +1 -0
  136. package/dist/es/services/registry-broker/client/utils.d.ts +21 -0
  137. package/dist/es/services/registry-broker/client/utils.d.ts.map +1 -0
  138. package/dist/es/services/registry-broker/client.d.ts +2 -205
  139. package/dist/es/services/registry-broker/client.d.ts.map +1 -1
  140. package/dist/es/services/registry-broker/private-key-signer.d.ts +1 -0
  141. package/dist/es/services/registry-broker/private-key-signer.d.ts.map +1 -1
  142. package/dist/es/services/registry-broker/schemas.d.ts +2509 -816
  143. package/dist/es/services/registry-broker/schemas.d.ts.map +1 -1
  144. package/dist/es/services/registry-broker/types.d.ts +64 -2
  145. package/dist/es/services/registry-broker/types.d.ts.map +1 -1
  146. package/dist/es/standards-sdk.es.js +148 -133
  147. package/dist/es/standards-sdk.es.js.map +1 -1
  148. package/dist/es/standards-sdk.es10.js +70 -90
  149. package/dist/es/standards-sdk.es10.js.map +1 -1
  150. package/dist/es/standards-sdk.es100.js +229 -26
  151. package/dist/es/standards-sdk.es100.js.map +1 -1
  152. package/dist/es/standards-sdk.es101.js +109 -228
  153. package/dist/es/standards-sdk.es101.js.map +1 -1
  154. package/dist/es/standards-sdk.es102.js +15 -94
  155. package/dist/es/standards-sdk.es102.js.map +1 -1
  156. package/dist/es/standards-sdk.es103.js +80 -30
  157. package/dist/es/standards-sdk.es103.js.map +1 -1
  158. package/dist/es/standards-sdk.es104.js +27 -80
  159. package/dist/es/standards-sdk.es104.js.map +1 -1
  160. package/dist/es/standards-sdk.es105.js +136 -25
  161. package/dist/es/standards-sdk.es105.js.map +1 -1
  162. package/dist/es/standards-sdk.es106.js +27 -140
  163. package/dist/es/standards-sdk.es106.js.map +1 -1
  164. package/dist/es/standards-sdk.es107.js +20 -27
  165. package/dist/es/standards-sdk.es107.js.map +1 -1
  166. package/dist/es/standards-sdk.es108.js +156 -18
  167. package/dist/es/standards-sdk.es108.js.map +1 -1
  168. package/dist/es/standards-sdk.es109.js +198 -148
  169. package/dist/es/standards-sdk.es109.js.map +1 -1
  170. package/dist/es/standards-sdk.es11.js +121 -45
  171. package/dist/es/standards-sdk.es11.js.map +1 -1
  172. package/dist/es/standards-sdk.es110.js +747 -160
  173. package/dist/es/standards-sdk.es110.js.map +1 -1
  174. package/dist/es/standards-sdk.es111.js +9 -786
  175. package/dist/es/standards-sdk.es111.js.map +1 -1
  176. package/dist/es/standards-sdk.es112.js +567 -13
  177. package/dist/es/standards-sdk.es112.js.map +1 -1
  178. package/dist/es/standards-sdk.es113.js +576 -541
  179. package/dist/es/standards-sdk.es113.js.map +1 -1
  180. package/dist/es/standards-sdk.es114.js +12 -601
  181. package/dist/es/standards-sdk.es114.js.map +1 -1
  182. package/dist/es/standards-sdk.es115.js +2 -13
  183. package/dist/es/standards-sdk.es115.js.map +1 -1
  184. package/dist/es/standards-sdk.es116.js +87 -2
  185. package/dist/es/standards-sdk.es116.js.map +1 -1
  186. package/dist/es/standards-sdk.es117.js +37 -80
  187. package/dist/es/standards-sdk.es117.js.map +1 -1
  188. package/dist/es/standards-sdk.es118.js +2 -39
  189. package/dist/es/standards-sdk.es118.js.map +1 -1
  190. package/dist/es/standards-sdk.es119.js +231 -2
  191. package/dist/es/standards-sdk.es119.js.map +1 -1
  192. package/dist/es/standards-sdk.es12.js +60 -159
  193. package/dist/es/standards-sdk.es12.js.map +1 -1
  194. package/dist/es/standards-sdk.es120.js +1110 -193
  195. package/dist/es/standards-sdk.es120.js.map +1 -1
  196. package/dist/es/standards-sdk.es121.js +225 -1059
  197. package/dist/es/standards-sdk.es121.js.map +1 -1
  198. package/dist/es/standards-sdk.es122.js +419 -303
  199. package/dist/es/standards-sdk.es122.js.map +1 -1
  200. package/dist/es/standards-sdk.es123.js +351 -418
  201. package/dist/es/standards-sdk.es123.js.map +1 -1
  202. package/dist/es/standards-sdk.es124.js +872 -347
  203. package/dist/es/standards-sdk.es124.js.map +1 -1
  204. package/dist/es/standards-sdk.es125.js +182 -854
  205. package/dist/es/standards-sdk.es125.js.map +1 -1
  206. package/dist/es/standards-sdk.es126.js +1512 -153
  207. package/dist/es/standards-sdk.es126.js.map +1 -1
  208. package/dist/es/standards-sdk.es127.js +157 -1547
  209. package/dist/es/standards-sdk.es127.js.map +1 -1
  210. package/dist/es/standards-sdk.es128.js +184 -2190
  211. package/dist/es/standards-sdk.es128.js.map +1 -1
  212. package/dist/es/standards-sdk.es129.js +100 -63
  213. package/dist/es/standards-sdk.es129.js.map +1 -1
  214. package/dist/es/standards-sdk.es13.js +200 -60
  215. package/dist/es/standards-sdk.es13.js.map +1 -1
  216. package/dist/es/standards-sdk.es130.js +112 -78
  217. package/dist/es/standards-sdk.es130.js.map +1 -1
  218. package/dist/es/standards-sdk.es131.js +232 -144
  219. package/dist/es/standards-sdk.es131.js.map +1 -1
  220. package/dist/es/standards-sdk.es132.js +181 -8
  221. package/dist/es/standards-sdk.es132.js.map +1 -1
  222. package/dist/es/standards-sdk.es133.js +118 -82
  223. package/dist/es/standards-sdk.es133.js.map +1 -1
  224. package/dist/es/standards-sdk.es134.js +322 -61
  225. package/dist/es/standards-sdk.es134.js.map +1 -1
  226. package/dist/es/standards-sdk.es135.js +464 -28
  227. package/dist/es/standards-sdk.es135.js.map +1 -1
  228. package/dist/es/standards-sdk.es136.js +14 -135
  229. package/dist/es/standards-sdk.es136.js.map +1 -1
  230. package/dist/es/standards-sdk.es137.js +78 -39
  231. package/dist/es/standards-sdk.es137.js.map +1 -1
  232. package/dist/es/standards-sdk.es138.js +85 -764
  233. package/dist/es/standards-sdk.es138.js.map +1 -1
  234. package/dist/es/standards-sdk.es139.js +135 -12250
  235. package/dist/es/standards-sdk.es139.js.map +1 -1
  236. package/dist/es/standards-sdk.es14.js +149 -178
  237. package/dist/es/standards-sdk.es14.js.map +1 -1
  238. package/dist/es/standards-sdk.es140.js +7 -56
  239. package/dist/es/standards-sdk.es140.js.map +1 -1
  240. package/dist/es/standards-sdk.es141.js +72 -68
  241. package/dist/es/standards-sdk.es141.js.map +1 -1
  242. package/dist/es/standards-sdk.es142.js +61 -13
  243. package/dist/es/standards-sdk.es142.js.map +1 -1
  244. package/dist/es/standards-sdk.es143.js +30 -172
  245. package/dist/es/standards-sdk.es143.js.map +1 -1
  246. package/dist/es/standards-sdk.es144.js +34 -322
  247. package/dist/es/standards-sdk.es144.js.map +1 -1
  248. package/dist/es/standards-sdk.es145.js +28 -346
  249. package/dist/es/standards-sdk.es145.js.map +1 -1
  250. package/dist/es/standards-sdk.es146.js +112 -427
  251. package/dist/es/standards-sdk.es146.js.map +1 -1
  252. package/dist/es/standards-sdk.es147.js +40 -329
  253. package/dist/es/standards-sdk.es147.js.map +1 -1
  254. package/dist/es/standards-sdk.es148.js +12279 -66
  255. package/dist/es/standards-sdk.es148.js.map +1 -1
  256. package/dist/es/standards-sdk.es149.js +961 -0
  257. package/dist/es/standards-sdk.es149.js.map +1 -0
  258. package/dist/es/standards-sdk.es15.js +152 -151
  259. package/dist/es/standards-sdk.es15.js.map +1 -1
  260. package/dist/es/standards-sdk.es150.js +20 -0
  261. package/dist/es/standards-sdk.es150.js.map +1 -0
  262. package/dist/es/standards-sdk.es151.js +59 -0
  263. package/dist/es/standards-sdk.es151.js.map +1 -0
  264. package/dist/es/standards-sdk.es152.js +87 -0
  265. package/dist/es/standards-sdk.es152.js.map +1 -0
  266. package/dist/es/standards-sdk.es153.js +175 -0
  267. package/dist/es/standards-sdk.es153.js.map +1 -0
  268. package/dist/es/standards-sdk.es154.js +325 -0
  269. package/dist/es/standards-sdk.es154.js.map +1 -0
  270. package/dist/es/standards-sdk.es155.js +349 -0
  271. package/dist/es/standards-sdk.es155.js.map +1 -0
  272. package/dist/es/standards-sdk.es156.js +456 -0
  273. package/dist/es/standards-sdk.es156.js.map +1 -0
  274. package/dist/es/standards-sdk.es157.js +334 -0
  275. package/dist/es/standards-sdk.es157.js.map +1 -0
  276. package/dist/es/standards-sdk.es158.js +79 -0
  277. package/dist/es/standards-sdk.es158.js.map +1 -0
  278. package/dist/es/standards-sdk.es159.js +242 -0
  279. package/dist/es/standards-sdk.es159.js.map +1 -0
  280. package/dist/es/standards-sdk.es16.js +917 -136
  281. package/dist/es/standards-sdk.es16.js.map +1 -1
  282. package/dist/es/standards-sdk.es160.js +247 -0
  283. package/dist/es/standards-sdk.es160.js.map +1 -0
  284. package/dist/es/standards-sdk.es17.js +23 -938
  285. package/dist/es/standards-sdk.es17.js.map +1 -1
  286. package/dist/es/standards-sdk.es18.js +2422 -24
  287. package/dist/es/standards-sdk.es18.js.map +1 -1
  288. package/dist/es/standards-sdk.es19.js +826 -2075
  289. package/dist/es/standards-sdk.es19.js.map +1 -1
  290. package/dist/es/standards-sdk.es2.js +654 -189
  291. package/dist/es/standards-sdk.es2.js.map +1 -1
  292. package/dist/es/standards-sdk.es20.js +205 -1086
  293. package/dist/es/standards-sdk.es20.js.map +1 -1
  294. package/dist/es/standards-sdk.es21.js +858 -221
  295. package/dist/es/standards-sdk.es21.js.map +1 -1
  296. package/dist/es/standards-sdk.es22.js +179 -903
  297. package/dist/es/standards-sdk.es22.js.map +1 -1
  298. package/dist/es/standards-sdk.es23.js +164 -179
  299. package/dist/es/standards-sdk.es23.js.map +1 -1
  300. package/dist/es/standards-sdk.es24.js +62 -118
  301. package/dist/es/standards-sdk.es24.js.map +1 -1
  302. package/dist/es/standards-sdk.es25.js +377 -52
  303. package/dist/es/standards-sdk.es25.js.map +1 -1
  304. package/dist/es/standards-sdk.es26.js +36 -394
  305. package/dist/es/standards-sdk.es26.js.map +1 -1
  306. package/dist/es/standards-sdk.es27.js +901 -50
  307. package/dist/es/standards-sdk.es27.js.map +1 -1
  308. package/dist/es/standards-sdk.es28.js +134 -897
  309. package/dist/es/standards-sdk.es28.js.map +1 -1
  310. package/dist/es/standards-sdk.es29.js +7 -134
  311. package/dist/es/standards-sdk.es29.js.map +1 -1
  312. package/dist/es/standards-sdk.es3.js +63 -680
  313. package/dist/es/standards-sdk.es3.js.map +1 -1
  314. package/dist/es/standards-sdk.es30.js +344 -7
  315. package/dist/es/standards-sdk.es30.js.map +1 -1
  316. package/dist/es/standards-sdk.es31.js +302 -287
  317. package/dist/es/standards-sdk.es31.js.map +1 -1
  318. package/dist/es/standards-sdk.es32.js +94 -322
  319. package/dist/es/standards-sdk.es32.js.map +1 -1
  320. package/dist/es/standards-sdk.es33.js +458 -101
  321. package/dist/es/standards-sdk.es33.js.map +1 -1
  322. package/dist/es/standards-sdk.es34.js +132 -451
  323. package/dist/es/standards-sdk.es34.js.map +1 -1
  324. package/dist/es/standards-sdk.es35.js +216 -130
  325. package/dist/es/standards-sdk.es35.js.map +1 -1
  326. package/dist/es/standards-sdk.es36.js +274 -191
  327. package/dist/es/standards-sdk.es36.js.map +1 -1
  328. package/dist/es/standards-sdk.es37.js +148 -87
  329. package/dist/es/standards-sdk.es37.js.map +1 -1
  330. package/dist/es/standards-sdk.es38.js +183 -320
  331. package/dist/es/standards-sdk.es38.js.map +1 -1
  332. package/dist/es/standards-sdk.es39.js +238 -161
  333. package/dist/es/standards-sdk.es39.js.map +1 -1
  334. package/dist/es/standards-sdk.es4.js +425 -63
  335. package/dist/es/standards-sdk.es4.js.map +1 -1
  336. package/dist/es/standards-sdk.es40.js +136 -254
  337. package/dist/es/standards-sdk.es40.js.map +1 -1
  338. package/dist/es/standards-sdk.es41.js +225 -176
  339. package/dist/es/standards-sdk.es41.js.map +1 -1
  340. package/dist/es/standards-sdk.es42.js +199 -261
  341. package/dist/es/standards-sdk.es42.js.map +1 -1
  342. package/dist/es/standards-sdk.es43.js +237 -199
  343. package/dist/es/standards-sdk.es43.js.map +1 -1
  344. package/dist/es/standards-sdk.es44.js +209 -201
  345. package/dist/es/standards-sdk.es44.js.map +1 -1
  346. package/dist/es/standards-sdk.es45.js +305 -201
  347. package/dist/es/standards-sdk.es45.js.map +1 -1
  348. package/dist/es/standards-sdk.es46.js +371 -261
  349. package/dist/es/standards-sdk.es46.js.map +1 -1
  350. package/dist/es/standards-sdk.es47.js +316 -371
  351. package/dist/es/standards-sdk.es47.js.map +1 -1
  352. package/dist/es/standards-sdk.es48.js +404 -336
  353. package/dist/es/standards-sdk.es48.js.map +1 -1
  354. package/dist/es/standards-sdk.es49.js +83 -449
  355. package/dist/es/standards-sdk.es49.js.map +1 -1
  356. package/dist/es/standards-sdk.es5.js +232 -354
  357. package/dist/es/standards-sdk.es5.js.map +1 -1
  358. package/dist/es/standards-sdk.es50.js +179 -89
  359. package/dist/es/standards-sdk.es50.js.map +1 -1
  360. package/dist/es/standards-sdk.es51.js +231 -165
  361. package/dist/es/standards-sdk.es51.js.map +1 -1
  362. package/dist/es/standards-sdk.es52.js +25 -262
  363. package/dist/es/standards-sdk.es52.js.map +1 -1
  364. package/dist/es/standards-sdk.es53.js +56 -26
  365. package/dist/es/standards-sdk.es53.js.map +1 -1
  366. package/dist/es/standards-sdk.es54.js +12 -57
  367. package/dist/es/standards-sdk.es54.js.map +1 -1
  368. package/dist/es/standards-sdk.es55.js +49 -12
  369. package/dist/es/standards-sdk.es55.js.map +1 -1
  370. package/dist/es/standards-sdk.es56.js +115 -43
  371. package/dist/es/standards-sdk.es56.js.map +1 -1
  372. package/dist/es/standards-sdk.es57.js +42 -115
  373. package/dist/es/standards-sdk.es57.js.map +1 -1
  374. package/dist/es/standards-sdk.es58.js +52 -43
  375. package/dist/es/standards-sdk.es58.js.map +1 -1
  376. package/dist/es/standards-sdk.es59.js +36 -50
  377. package/dist/es/standards-sdk.es59.js.map +1 -1
  378. package/dist/es/standards-sdk.es6.js +125 -246
  379. package/dist/es/standards-sdk.es6.js.map +1 -1
  380. package/dist/es/standards-sdk.es60.js +207 -39
  381. package/dist/es/standards-sdk.es60.js.map +1 -1
  382. package/dist/es/standards-sdk.es61.js +24 -195
  383. package/dist/es/standards-sdk.es61.js.map +1 -1
  384. package/dist/es/standards-sdk.es62.js +87 -25
  385. package/dist/es/standards-sdk.es62.js.map +1 -1
  386. package/dist/es/standards-sdk.es63.js +3 -51
  387. package/dist/es/standards-sdk.es63.js.map +1 -1
  388. package/dist/es/standards-sdk.es64.js +100 -3
  389. package/dist/es/standards-sdk.es64.js.map +1 -1
  390. package/dist/es/standards-sdk.es65.js +61 -62
  391. package/dist/es/standards-sdk.es65.js.map +1 -1
  392. package/dist/es/standards-sdk.es66.js +17 -98
  393. package/dist/es/standards-sdk.es66.js.map +1 -1
  394. package/dist/es/standards-sdk.es67.js +77 -19
  395. package/dist/es/standards-sdk.es67.js.map +1 -1
  396. package/dist/es/standards-sdk.es68.js +458 -77
  397. package/dist/es/standards-sdk.es68.js.map +1 -1
  398. package/dist/es/standards-sdk.es69.js +106 -240
  399. package/dist/es/standards-sdk.es69.js.map +1 -1
  400. package/dist/es/standards-sdk.es7.js +28 -183
  401. package/dist/es/standards-sdk.es7.js.map +1 -1
  402. package/dist/es/standards-sdk.es70.js +170 -286
  403. package/dist/es/standards-sdk.es70.js.map +1 -1
  404. package/dist/es/standards-sdk.es71.js +71 -207
  405. package/dist/es/standards-sdk.es71.js.map +1 -1
  406. package/dist/es/standards-sdk.es72.js +71 -72
  407. package/dist/es/standards-sdk.es72.js.map +1 -1
  408. package/dist/es/standards-sdk.es73.js +143 -71
  409. package/dist/es/standards-sdk.es73.js.map +1 -1
  410. package/dist/es/standards-sdk.es74.js +62 -136
  411. package/dist/es/standards-sdk.es74.js.map +1 -1
  412. package/dist/es/standards-sdk.es75.js +380 -45
  413. package/dist/es/standards-sdk.es75.js.map +1 -1
  414. package/dist/es/standards-sdk.es76.js +222 -130
  415. package/dist/es/standards-sdk.es76.js.map +1 -1
  416. package/dist/es/standards-sdk.es77.js +320 -444
  417. package/dist/es/standards-sdk.es77.js.map +1 -1
  418. package/dist/es/standards-sdk.es78.js +88 -364
  419. package/dist/es/standards-sdk.es78.js.map +1 -1
  420. package/dist/es/standards-sdk.es79.js +125 -89
  421. package/dist/es/standards-sdk.es79.js.map +1 -1
  422. package/dist/es/standards-sdk.es8.js +80 -29
  423. package/dist/es/standards-sdk.es8.js.map +1 -1
  424. package/dist/es/standards-sdk.es80.js +8 -125
  425. package/dist/es/standards-sdk.es80.js.map +1 -1
  426. package/dist/es/standards-sdk.es81.js +45 -6
  427. package/dist/es/standards-sdk.es81.js.map +1 -1
  428. package/dist/es/standards-sdk.es82.js +98 -44
  429. package/dist/es/standards-sdk.es82.js.map +1 -1
  430. package/dist/es/standards-sdk.es83.js +331 -84
  431. package/dist/es/standards-sdk.es83.js.map +1 -1
  432. package/dist/es/standards-sdk.es84.js +93 -160
  433. package/dist/es/standards-sdk.es84.js.map +1 -1
  434. package/dist/es/standards-sdk.es85.js +55 -275
  435. package/dist/es/standards-sdk.es85.js.map +1 -1
  436. package/dist/es/standards-sdk.es86.js +43 -55
  437. package/dist/es/standards-sdk.es86.js.map +1 -1
  438. package/dist/es/standards-sdk.es87.js +145 -22
  439. package/dist/es/standards-sdk.es87.js.map +1 -1
  440. package/dist/es/standards-sdk.es88.js +34 -47
  441. package/dist/es/standards-sdk.es88.js.map +1 -1
  442. package/dist/es/standards-sdk.es89.js +22 -57
  443. package/dist/es/standards-sdk.es89.js.map +1 -1
  444. package/dist/es/standards-sdk.es9.js +104 -80
  445. package/dist/es/standards-sdk.es9.js.map +1 -1
  446. package/dist/es/standards-sdk.es90.js +23 -28
  447. package/dist/es/standards-sdk.es90.js.map +1 -1
  448. package/dist/es/standards-sdk.es91.js +238 -23
  449. package/dist/es/standards-sdk.es91.js.map +1 -1
  450. package/dist/es/standards-sdk.es92.js +265 -152
  451. package/dist/es/standards-sdk.es92.js.map +1 -1
  452. package/dist/es/standards-sdk.es93.js +95 -68
  453. package/dist/es/standards-sdk.es93.js.map +1 -1
  454. package/dist/es/standards-sdk.es94.js +124 -136
  455. package/dist/es/standards-sdk.es94.js.map +1 -1
  456. package/dist/es/standards-sdk.es95.js +42 -138
  457. package/dist/es/standards-sdk.es95.js.map +1 -1
  458. package/dist/es/standards-sdk.es96.js +259 -42
  459. package/dist/es/standards-sdk.es96.js.map +1 -1
  460. package/dist/es/standards-sdk.es97.js +82 -243
  461. package/dist/es/standards-sdk.es97.js.map +1 -1
  462. package/dist/es/standards-sdk.es98.js +48 -47
  463. package/dist/es/standards-sdk.es98.js.map +1 -1
  464. package/dist/es/standards-sdk.es99.js +29 -100
  465. package/dist/es/standards-sdk.es99.js.map +1 -1
  466. package/dist/es/utils/crypto-abstraction.d.ts.map +1 -1
  467. package/dist/es/utils/crypto-env.d.ts.map +1 -1
  468. package/dist/es/utils/dynamic-import.d.ts +5 -1
  469. package/dist/es/utils/dynamic-import.d.ts.map +1 -1
  470. package/dist/es/utils/hash-adapter.d.ts.map +1 -1
  471. package/package.json +15 -16
  472. package/dist/cjs/patches/topic-autorenew-patch.d.ts +0 -2
  473. package/dist/cjs/patches/topic-autorenew-patch.d.ts.map +0 -1
  474. package/dist/es/patches/topic-autorenew-patch.d.ts +0 -2
  475. package/dist/es/patches/topic-autorenew-patch.d.ts.map +0 -1
@@ -1,266 +1,105 @@
1
- import { HederaMirrorNode } from "./standards-sdk.es127.js";
2
- import { Logger } from "./standards-sdk.es106.js";
3
- import { createHash } from "crypto";
4
- import { hcs17MessageSchema, generateHCS17Memo, parseHCS17Memo, HCS17TopicType } from "./standards-sdk.es96.js";
5
- class HCS17BaseClient {
1
+ import { AccountId, Client } from "@hashgraph/sdk";
2
+ import { HCS17BaseClient } from "./standards-sdk.es96.js";
3
+ import { buildHcs17CreateTopicTx, buildHcs17MessageTx } from "./standards-sdk.es99.js";
4
+ import { createNodeOperatorContext } from "./standards-sdk.es146.js";
5
+ class HCS17Client extends HCS17BaseClient {
6
6
  constructor(config) {
7
- this.network = config.network;
8
- this.logger = config.logger || new Logger({ level: config.logLevel || "info", module: "HCS-17" });
9
- this.mirrorNode = new HederaMirrorNode(this.network, this.logger, {
10
- customUrl: config.mirrorNodeUrl
7
+ super(config);
8
+ this.operatorId = AccountId.fromString(config.operatorId);
9
+ this.operatorCtx = createNodeOperatorContext({
10
+ network: this.network,
11
+ operatorId: this.operatorId,
12
+ operatorKey: config.operatorKey,
13
+ keyType: config.keyType,
14
+ mirrorNode: this.mirrorNode,
15
+ logger: this.logger,
16
+ client: config.network === "mainnet" ? Client.forMainnet() : Client.forTestnet()
11
17
  });
18
+ this.client = this.operatorCtx.client;
12
19
  }
13
- /**
14
- * Create a valid HCS‑17 state hash message payload.
15
- */
16
- createMessage(params) {
17
- const msg = {
18
- p: "hcs-17",
19
- op: "state_hash",
20
- state_hash: params.stateHash,
21
- topics: params.topics,
22
- account_id: params.accountId,
23
- timestamp: (/* @__PURE__ */ new Date()).toISOString(),
24
- m: params.memo
25
- };
26
- return msg;
27
- }
28
- /**
29
- * Validate an HCS‑17 message against the schema.
30
- */
31
- validateMessage(message) {
32
- const res = hcs17MessageSchema.safeParse(message);
33
- if (res.success) {
34
- return { valid: true, errors: [] };
35
- }
36
- const errors = res.error.errors.map(
37
- (e) => `${e.path.join(".")}: ${e.message}`
38
- );
39
- this.logger.debug(`HCS-17 message validation failed: ${errors.join(", ")}`);
40
- return { valid: false, errors };
41
- }
42
- /**
43
- * Generate default HCS‑17 topic memo using numeric enum codes.
44
- */
45
- generateTopicMemo(ttl) {
46
- return generateHCS17Memo(ttl);
47
- }
48
- /**
49
- * Validate that a topic is a valid HCS‑17 topic and return parsed info.
50
- */
51
- async validateHCS17Topic(topicId) {
52
- try {
53
- const info = await this.mirrorNode.getTopicInfo(topicId);
54
- const parsed = parseHCS17Memo(info.memo);
55
- if (!parsed) {
56
- return { valid: false, error: "Invalid HCS-17 memo format" };
57
- }
58
- if (parsed.type !== HCS17TopicType.STATE) {
59
- return { valid: false, error: "Unsupported HCS-17 topic type" };
60
- }
61
- return { valid: true, type: parsed.type, ttl: parsed.ttl };
62
- } catch (e) {
63
- return { valid: false, error: String(e) };
64
- }
65
- }
66
- /**
67
- * Fetch recent HCS‑17 messages from a topic via Mirror Node.
68
- */
69
- async getRecentMessages(topicId, options) {
70
- const limit = options?.limit ?? 25;
71
- const order = options?.order ?? "desc";
72
- const items = await this.mirrorNode.getTopicMessages(topicId, {
73
- limit,
74
- order
75
- });
76
- const results = [];
77
- for (const m of items) {
78
- try {
79
- if (m.p !== "hcs-17" || m.op !== "state_hash") {
80
- continue;
81
- }
82
- const envelope = m;
83
- const { valid } = this.validateMessage(envelope);
84
- if (!valid) {
85
- continue;
86
- }
87
- results.push({
88
- message: {
89
- p: "hcs-17",
90
- op: "state_hash",
91
- state_hash: envelope.state_hash,
92
- topics: envelope.topics,
93
- account_id: envelope.account_id,
94
- timestamp: envelope.timestamp,
95
- m: envelope.m
96
- },
97
- consensus_timestamp: envelope.consensus_timestamp,
98
- sequence_number: Number(envelope.sequence_number),
99
- payer: envelope.payer
100
- });
101
- } catch (err) {
102
- this.logger.debug(`Failed to parse HCS-17 message: ${err}`);
103
- }
104
- }
105
- return results;
20
+ getKeyType() {
21
+ return this.operatorCtx.keyType;
106
22
  }
107
23
  /**
108
- * Return the latest valid HCS‑17 message on a topic, if any.
24
+ * Create an HCS topic intended for HCS‑17 state messages.
109
25
  */
110
- async getLatestMessage(topicId) {
111
- const items = await this.getRecentMessages(topicId, {
112
- limit: 1,
113
- order: "desc"
26
+ async createStateTopic(options) {
27
+ const ttl = options?.ttl ?? 86400;
28
+ const tx = buildHcs17CreateTopicTx({
29
+ ttl,
30
+ adminKey: options?.adminKey,
31
+ submitKey: options?.submitKey,
32
+ operatorPublicKey: this.client.operatorPublicKey || void 0
114
33
  });
115
- if (!items.length) {
116
- return null;
34
+ const resp = await tx.execute(this.client);
35
+ const receipt = await resp.getReceipt(this.client);
36
+ if (!receipt.topicId) {
37
+ throw new Error("Failed to create topic: topicId empty");
117
38
  }
118
- const { message, consensus_timestamp, sequence_number } = items[0];
119
- return Object.assign({}, message, { consensus_timestamp, sequence_number });
39
+ const topicId = receipt.topicId.toString();
40
+ this.logger.info(`Created HCS-17 state topic ${topicId}`);
41
+ return topicId;
120
42
  }
121
43
  /**
122
- * Calculate state hash for a single account.
44
+ * Submit a pre‑built HCS‑17 state hash message to a topic.
123
45
  */
124
- calculateAccountStateHash(input) {
125
- try {
126
- this.logger.debug("Calculating account state hash", {
127
- accountId: input.accountId,
128
- topicCount: input.topics.length
129
- });
130
- const sortedTopics = [...input.topics].sort(
131
- (a, b) => a.topicId.localeCompare(b.topicId)
132
- );
133
- let concatenated = "";
134
- for (const topic of sortedTopics) {
135
- concatenated += topic.topicId + topic.latestRunningHash;
136
- }
137
- let publicKeyString = "";
138
- if (typeof input.publicKey === "string") {
139
- publicKeyString = input.publicKey;
140
- } else {
141
- publicKeyString = input.publicKey.toString();
142
- }
143
- concatenated += publicKeyString;
144
- const hash = createHash("sha384");
145
- hash.update(concatenated);
146
- const stateHash = hash.digest("hex");
147
- this.logger.debug("Account state hash calculated", {
148
- accountId: input.accountId,
149
- stateHash
150
- });
151
- return {
152
- stateHash,
153
- accountId: input.accountId,
154
- timestamp: /* @__PURE__ */ new Date(),
155
- topicCount: input.topics.length
156
- };
157
- } catch (error) {
158
- this.logger.error("Failed to calculate account state hash", error);
159
- throw new Error("HCS-17 CALCULATION_FAILED");
46
+ async submitMessage(topicId, message) {
47
+ const { valid, errors } = this.validateMessage(message);
48
+ if (!valid) {
49
+ throw new Error(`Invalid HCS-17 message: ${errors.join(", ")}`);
160
50
  }
51
+ const tx = buildHcs17MessageTx({
52
+ topicId,
53
+ stateHash: message.state_hash,
54
+ accountId: message.account_id,
55
+ topics: message.topics,
56
+ memo: message.m,
57
+ epoch: message.epoch,
58
+ timestamp: message.timestamp
59
+ });
60
+ const resp = await tx.execute(this.client);
61
+ const receipt = await resp.getReceipt(this.client);
62
+ return receipt;
161
63
  }
162
64
  /**
163
- * Calculate composite state hash for composite accounts (e.g., Flora/Bloom).
65
+ * Compute current account state hash from topic running hashes and publish it.
164
66
  */
165
- calculateCompositeStateHash(input) {
166
- try {
167
- this.logger.debug("Calculating composite state hash", {
168
- compositeAccountId: input.compositeAccountId,
169
- memberCount: input.memberStates.length,
170
- topicCount: input.compositeTopics.length
171
- });
172
- const sortedMembers = [...input.memberStates].sort(
173
- (a, b) => a.accountId.localeCompare(b.accountId)
174
- );
175
- const sortedTopics = [...input.compositeTopics].sort(
176
- (a, b) => a.topicId.localeCompare(b.topicId)
177
- );
178
- let concatenated = "";
179
- for (const member of sortedMembers) {
180
- concatenated += member.accountId + member.stateHash;
181
- }
182
- for (const topic of sortedTopics) {
183
- concatenated += topic.topicId + topic.latestRunningHash;
184
- }
185
- concatenated += input.compositePublicKeyFingerprint;
186
- const hash = createHash("sha384");
187
- hash.update(concatenated);
188
- const stateHash = hash.digest("hex");
189
- this.logger.debug("Composite state hash calculated", {
190
- compositeAccountId: input.compositeAccountId,
191
- stateHash
67
+ async computeAndPublish(params) {
68
+ const topicStates = [];
69
+ for (const t of params.topics) {
70
+ const msgs = await this.mirrorNode.getTopicMessages(t, {
71
+ limit: 1,
72
+ order: "desc"
192
73
  });
193
- return {
194
- stateHash,
195
- accountId: input.compositeAccountId,
196
- timestamp: /* @__PURE__ */ new Date(),
197
- topicCount: input.compositeTopics.length,
198
- memberCount: input.memberStates.length,
199
- compositeTopicCount: input.compositeTopics.length
200
- };
201
- } catch (error) {
202
- this.logger.error("Failed to calculate composite state hash", error);
203
- throw new Error("HCS-17 COMPOSITE_CALCULATION_FAILED");
74
+ const latest = msgs[0];
75
+ const running = latest?.running_hash || "";
76
+ topicStates.push({ topicId: t, latestRunningHash: running });
204
77
  }
205
- }
206
- /**
207
- * Calculate deterministic fingerprint for a threshold key from member public keys.
208
- */
209
- calculateKeyFingerprint(keys, threshold) {
210
- try {
211
- const sortedKeys = [...keys].sort(
212
- (a, b) => a.toString().localeCompare(b.toString())
213
- );
214
- const keyData = { threshold, keys: sortedKeys.map((k) => k.toString()) };
215
- const hash = createHash("sha384");
216
- hash.update(JSON.stringify(keyData));
217
- return hash.digest("hex");
218
- } catch (error) {
219
- this.logger.error("Failed to calculate key fingerprint", error);
220
- throw new Error("HCS-17 FINGERPRINT_FAILED");
221
- }
222
- }
223
- /**
224
- * Build a valid HCS‑17 state hash message.
225
- */
226
- createStateHashMessage(stateHash, accountId, topicIds, memo) {
227
- return {
228
- p: "hcs-17",
229
- op: "state_hash",
230
- state_hash: stateHash,
231
- topics: topicIds,
232
- account_id: accountId,
233
- timestamp: (/* @__PURE__ */ new Date()).toISOString(),
234
- m: memo
78
+ const input = {
79
+ accountId: params.accountId,
80
+ publicKey: params.accountPublicKey,
81
+ topics: topicStates
235
82
  };
236
- }
237
- /**
238
- * Recompute and verify a state hash input against an expected value.
239
- */
240
- async verifyStateHash(input, expectedHash) {
241
- try {
242
- let calculatedHash;
243
- if ("publicKey" in input) {
244
- calculatedHash = this.calculateAccountStateHash(input).stateHash;
245
- } else {
246
- calculatedHash = this.calculateCompositeStateHash(input).stateHash;
247
- }
248
- const isValid = calculatedHash === expectedHash;
249
- const accountId = "accountId" in input ? input.accountId : input.compositeAccountId;
250
- this.logger.debug("State hash verification", {
251
- accountId,
252
- isValid,
253
- expected: expectedHash,
254
- calculated: calculatedHash
255
- });
256
- return isValid;
257
- } catch (error) {
258
- this.logger.error("Failed to verify state hash", error);
259
- return false;
260
- }
83
+ const result = this.calculateAccountStateHash(input);
84
+ this.createStateHashMessage(
85
+ result.stateHash,
86
+ params.accountId,
87
+ params.topics,
88
+ params.memo
89
+ );
90
+ const tx = buildHcs17MessageTx({
91
+ topicId: params.publishTopicId,
92
+ stateHash: result.stateHash,
93
+ accountId: params.accountId,
94
+ topics: params.topics,
95
+ memo: params.memo
96
+ });
97
+ const resp = await tx.execute(this.client);
98
+ const receipt = await resp.getReceipt(this.client);
99
+ return { stateHash: result.stateHash, receipt };
261
100
  }
262
101
  }
263
102
  export {
264
- HCS17BaseClient
103
+ HCS17Client
265
104
  };
266
105
  //# sourceMappingURL=standards-sdk.es97.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es97.js","sources":["../../src/hcs-17/base-client.ts"],"sourcesContent":["import { HederaMirrorNode } from '../services/mirror-node';\nimport { Logger, ILogger } from '../utils/logger';\nimport { NetworkType } from '../utils/types';\nimport { createHash } from 'crypto';\nimport {\n hcs17MessageSchema,\n StateHashMessage,\n HCS17ClientConfig,\n parseHCS17Memo,\n generateHCS17Memo,\n HCS17TopicType,\n AccountStateInput,\n CompositeStateInput,\n StateHashResult,\n CompositeStateHashResult,\n} from './types';\nimport { PublicKey } from '@hashgraph/sdk';\n\n/**\n * Base client for HCS‑17 functionality, shared between Node and Browser clients.\n * Provides logging, mirror‑node access, message creation/validation,\n * topic memo helpers, and registry/message querying utilities.\n */\nexport class HCS17BaseClient {\n protected readonly network: NetworkType;\n protected readonly mirrorNode: HederaMirrorNode;\n protected readonly logger: ILogger;\n\n constructor(config: HCS17ClientConfig) {\n this.network = config.network;\n this.logger =\n config.logger ||\n new Logger({ level: config.logLevel || 'info', module: 'HCS-17' });\n this.mirrorNode = new HederaMirrorNode(this.network, this.logger, {\n customUrl: config.mirrorNodeUrl,\n });\n }\n\n /**\n * Create a valid HCS‑17 state hash message payload.\n */\n protected createMessage(params: {\n stateHash: string;\n accountId: string;\n topics: string[];\n memo?: string;\n }): StateHashMessage {\n const msg: StateHashMessage = {\n p: 'hcs-17',\n op: 'state_hash',\n state_hash: params.stateHash,\n topics: params.topics,\n account_id: params.accountId,\n timestamp: new Date().toISOString(),\n m: params.memo,\n };\n return msg;\n }\n\n /**\n * Validate an HCS‑17 message against the schema.\n */\n protected validateMessage(message: unknown): {\n valid: boolean;\n errors: string[];\n } {\n const res = hcs17MessageSchema.safeParse(message);\n if (res.success) {\n return { valid: true, errors: [] };\n }\n const errors = res.error.errors.map(\n e => `${e.path.join('.')}: ${e.message}`,\n );\n this.logger.debug(`HCS-17 message validation failed: ${errors.join(', ')}`);\n return { valid: false, errors };\n }\n\n /**\n * Generate default HCS‑17 topic memo using numeric enum codes.\n */\n protected generateTopicMemo(ttl: number): string {\n return generateHCS17Memo(ttl);\n }\n\n /**\n * Validate that a topic is a valid HCS‑17 topic and return parsed info.\n */\n async validateHCS17Topic(topicId: string): Promise<{\n valid: boolean;\n type?: HCS17TopicType;\n ttl?: number;\n error?: string;\n }> {\n try {\n const info = await this.mirrorNode.getTopicInfo(topicId);\n const parsed = parseHCS17Memo(info.memo);\n if (!parsed) {\n return { valid: false, error: 'Invalid HCS-17 memo format' };\n }\n if (parsed.type !== HCS17TopicType.STATE) {\n return { valid: false, error: 'Unsupported HCS-17 topic type' };\n }\n return { valid: true, type: parsed.type, ttl: parsed.ttl };\n } catch (e: unknown) {\n return { valid: false, error: String(e) };\n }\n }\n\n /**\n * Fetch recent HCS‑17 messages from a topic via Mirror Node.\n */\n async getRecentMessages(\n topicId: string,\n options?: { limit?: number; order?: 'asc' | 'desc' },\n ): Promise<\n Array<{\n message: StateHashMessage;\n consensus_timestamp?: string;\n sequence_number: number;\n payer?: string;\n }>\n > {\n const limit = options?.limit ?? 25;\n const order = options?.order ?? 'desc';\n const items = await this.mirrorNode.getTopicMessages(topicId, {\n limit,\n order,\n });\n type HCS17Envelope = StateHashMessage & {\n consensus_timestamp?: string;\n sequence_number: number;\n payer?: string;\n };\n const results: Array<{\n message: StateHashMessage;\n consensus_timestamp?: string;\n sequence_number: number;\n payer?: string;\n }> = [];\n for (const m of items) {\n try {\n if (m.p !== 'hcs-17' || m.op !== 'state_hash') {\n continue;\n }\n const envelope = m as unknown as HCS17Envelope;\n const { valid } = this.validateMessage(envelope);\n if (!valid) {\n continue;\n }\n results.push({\n message: {\n p: 'hcs-17',\n op: 'state_hash',\n state_hash: envelope.state_hash,\n topics: envelope.topics,\n account_id: envelope.account_id,\n timestamp: envelope.timestamp,\n m: envelope.m,\n },\n consensus_timestamp: envelope.consensus_timestamp,\n sequence_number: Number(envelope.sequence_number),\n payer: envelope.payer,\n });\n } catch (err) {\n this.logger.debug(`Failed to parse HCS-17 message: ${err}`);\n }\n }\n return results;\n }\n\n /**\n * Return the latest valid HCS‑17 message on a topic, if any.\n */\n async getLatestMessage(topicId: string): Promise<\n | (StateHashMessage & {\n consensus_timestamp?: string;\n sequence_number: number;\n })\n | null\n > {\n const items = await this.getRecentMessages(topicId, {\n limit: 1,\n order: 'desc',\n });\n if (!items.length) {\n return null;\n }\n const { message, consensus_timestamp, sequence_number } = items[0];\n return Object.assign({}, message, { consensus_timestamp, sequence_number });\n }\n\n /**\n * Calculate state hash for a single account.\n */\n public calculateAccountStateHash(input: AccountStateInput): StateHashResult {\n try {\n this.logger.debug('Calculating account state hash', {\n accountId: input.accountId,\n topicCount: input.topics.length,\n });\n\n const sortedTopics = [...input.topics].sort((a, b) =>\n a.topicId.localeCompare(b.topicId),\n );\n\n let concatenated = '';\n for (const topic of sortedTopics) {\n concatenated += topic.topicId + topic.latestRunningHash;\n }\n\n let publicKeyString = '';\n if (typeof input.publicKey === 'string') {\n publicKeyString = input.publicKey;\n } else {\n publicKeyString = input.publicKey.toString();\n }\n concatenated += publicKeyString;\n const hash = createHash('sha384');\n hash.update(concatenated);\n const stateHash = hash.digest('hex');\n\n this.logger.debug('Account state hash calculated', {\n accountId: input.accountId,\n stateHash,\n });\n\n return {\n stateHash,\n accountId: input.accountId,\n timestamp: new Date(),\n topicCount: input.topics.length,\n };\n } catch (error) {\n this.logger.error('Failed to calculate account state hash', error);\n throw new Error('HCS-17 CALCULATION_FAILED');\n }\n }\n\n /**\n * Calculate composite state hash for composite accounts (e.g., Flora/Bloom).\n */\n public calculateCompositeStateHash(\n input: CompositeStateInput,\n ): CompositeStateHashResult {\n try {\n this.logger.debug('Calculating composite state hash', {\n compositeAccountId: input.compositeAccountId,\n memberCount: input.memberStates.length,\n topicCount: input.compositeTopics.length,\n });\n\n const sortedMembers = [...input.memberStates].sort((a, b) =>\n a.accountId.localeCompare(b.accountId),\n );\n\n const sortedTopics = [...input.compositeTopics].sort((a, b) =>\n a.topicId.localeCompare(b.topicId),\n );\n\n let concatenated = '';\n for (const member of sortedMembers) {\n concatenated += member.accountId + member.stateHash;\n }\n for (const topic of sortedTopics) {\n concatenated += topic.topicId + topic.latestRunningHash;\n }\n\n concatenated += input.compositePublicKeyFingerprint;\n const hash = createHash('sha384');\n hash.update(concatenated);\n const stateHash = hash.digest('hex');\n\n this.logger.debug('Composite state hash calculated', {\n compositeAccountId: input.compositeAccountId,\n stateHash,\n });\n\n return {\n stateHash,\n accountId: input.compositeAccountId,\n timestamp: new Date(),\n topicCount: input.compositeTopics.length,\n memberCount: input.memberStates.length,\n compositeTopicCount: input.compositeTopics.length,\n };\n } catch (error) {\n this.logger.error('Failed to calculate composite state hash', error);\n throw new Error('HCS-17 COMPOSITE_CALCULATION_FAILED');\n }\n }\n\n /**\n * Calculate deterministic fingerprint for a threshold key from member public keys.\n */\n public calculateKeyFingerprint(keys: PublicKey[], threshold: number): string {\n try {\n const sortedKeys = [...keys].sort((a, b) =>\n a.toString().localeCompare(b.toString()),\n );\n const keyData = { threshold, keys: sortedKeys.map(k => k.toString()) };\n const hash = createHash('sha384');\n hash.update(JSON.stringify(keyData));\n return hash.digest('hex');\n } catch (error) {\n this.logger.error('Failed to calculate key fingerprint', error);\n throw new Error('HCS-17 FINGERPRINT_FAILED');\n }\n }\n\n /**\n * Build a valid HCS‑17 state hash message.\n */\n public createStateHashMessage(\n stateHash: string,\n accountId: string,\n topicIds: string[],\n memo?: string,\n ): StateHashMessage {\n return {\n p: 'hcs-17',\n op: 'state_hash',\n state_hash: stateHash,\n topics: topicIds,\n account_id: accountId,\n timestamp: new Date().toISOString(),\n m: memo,\n };\n }\n\n /**\n * Recompute and verify a state hash input against an expected value.\n */\n public async verifyStateHash(\n input: AccountStateInput | CompositeStateInput,\n expectedHash: string,\n ): Promise<boolean> {\n try {\n let calculatedHash: string;\n if ('publicKey' in input) {\n calculatedHash = this.calculateAccountStateHash(input).stateHash;\n } else {\n calculatedHash = this.calculateCompositeStateHash(input).stateHash;\n }\n const isValid = calculatedHash === expectedHash;\n const accountId =\n 'accountId' in input ? input.accountId : input.compositeAccountId;\n this.logger.debug('State hash verification', {\n accountId,\n isValid,\n expected: expectedHash,\n calculated: calculatedHash,\n });\n return isValid;\n } catch (error) {\n this.logger.error('Failed to verify state hash', error);\n return false;\n }\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"standards-sdk.es97.js","sources":["../../src/hcs-17/sdk.ts"],"sourcesContent":["import {\n Client,\n PublicKey,\n KeyList,\n TransactionReceipt,\n AccountId,\n} from '@hashgraph/sdk';\nimport { HCS17BaseClient } from './base-client';\nimport {\n SDKHCS17ClientConfig,\n StateHashMessage,\n TopicState,\n AccountStateInput,\n} from './types';\nimport { buildHcs17CreateTopicTx, buildHcs17MessageTx } from './tx';\nimport {\n createNodeOperatorContext,\n type NodeOperatorContext,\n} from '../common/node-operator-resolver';\n\n/**\n * Node SDK client for HCS‑17 operations.\n * Creates topics, submits messages, and can compute + publish state hashes.\n */\nexport class HCS17Client extends HCS17BaseClient {\n private client: Client;\n private operatorId: AccountId;\n private operatorCtx: NodeOperatorContext;\n\n constructor(config: SDKHCS17ClientConfig) {\n super(config);\n this.operatorId = AccountId.fromString(config.operatorId);\n this.operatorCtx = createNodeOperatorContext({\n network: this.network,\n operatorId: this.operatorId,\n operatorKey: config.operatorKey,\n keyType: config.keyType,\n mirrorNode: this.mirrorNode,\n logger: this.logger,\n client:\n config.network === 'mainnet'\n ? Client.forMainnet()\n : Client.forTestnet(),\n });\n this.client = this.operatorCtx.client;\n }\n\n public getKeyType(): 'ed25519' | 'ecdsa' {\n return this.operatorCtx.keyType;\n }\n\n /**\n * Create an HCS topic intended for HCS‑17 state messages.\n */\n async createStateTopic(options?: {\n ttl?: number;\n adminKey?: boolean | string | PublicKey | KeyList;\n submitKey?: boolean | string | PublicKey | KeyList;\n }): Promise<string> {\n const ttl = options?.ttl ?? 86400;\n const tx = buildHcs17CreateTopicTx({\n ttl,\n adminKey: options?.adminKey,\n submitKey: options?.submitKey,\n operatorPublicKey: this.client.operatorPublicKey || undefined,\n });\n const resp = await tx.execute(this.client);\n const receipt = await resp.getReceipt(this.client);\n if (!receipt.topicId) {\n throw new Error('Failed to create topic: topicId empty');\n }\n const topicId = receipt.topicId.toString();\n this.logger.info(`Created HCS-17 state topic ${topicId}`);\n return topicId;\n }\n\n /**\n * Submit a pre‑built HCS‑17 state hash message to a topic.\n */\n async submitMessage(\n topicId: string,\n message: StateHashMessage,\n ): Promise<TransactionReceipt> {\n const { valid, errors } = this.validateMessage(message);\n if (!valid) {\n throw new Error(`Invalid HCS-17 message: ${errors.join(', ')}`);\n }\n const tx = buildHcs17MessageTx({\n topicId,\n stateHash: message.state_hash,\n accountId: message.account_id,\n topics: message.topics,\n memo: message.m,\n epoch: message.epoch,\n timestamp: message.timestamp,\n });\n const resp = await tx.execute(this.client);\n const receipt = await resp.getReceipt(this.client);\n return receipt;\n }\n\n /**\n * Compute current account state hash from topic running hashes and publish it.\n */\n async computeAndPublish(params: {\n accountId: string;\n accountPublicKey: string | PublicKey;\n topics: string[];\n publishTopicId: string;\n memo?: string;\n }): Promise<{ stateHash: string; receipt: TransactionReceipt }> {\n const topicStates: TopicState[] = [];\n for (const t of params.topics) {\n const msgs = await this.mirrorNode.getTopicMessages(t, {\n limit: 1,\n order: 'desc',\n });\n const latest = msgs[0];\n const running = latest?.running_hash || '';\n topicStates.push({ topicId: t, latestRunningHash: running });\n }\n\n const input: AccountStateInput = {\n accountId: params.accountId,\n publicKey: params.accountPublicKey,\n topics: topicStates,\n };\n const result = this.calculateAccountStateHash(input);\n const message: StateHashMessage = this.createStateHashMessage(\n result.stateHash,\n params.accountId,\n params.topics,\n params.memo,\n );\n const tx = buildHcs17MessageTx({\n topicId: params.publishTopicId,\n stateHash: result.stateHash,\n accountId: params.accountId,\n topics: params.topics,\n memo: params.memo,\n });\n const resp = await tx.execute(this.client);\n const receipt = await resp.getReceipt(this.client);\n return { stateHash: result.stateHash, receipt };\n }\n}\n"],"names":[],"mappings":";;;;AAwBO,MAAM,oBAAoB,gBAAgB;AAAA,EAK/C,YAAY,QAA8B;AACxC,UAAM,MAAM;AACZ,SAAK,aAAa,UAAU,WAAW,OAAO,UAAU;AACxD,SAAK,cAAc,0BAA0B;AAAA,MAC3C,SAAS,KAAK;AAAA,MACd,YAAY,KAAK;AAAA,MACjB,aAAa,OAAO;AAAA,MACpB,SAAS,OAAO;AAAA,MAChB,YAAY,KAAK;AAAA,MACjB,QAAQ,KAAK;AAAA,MACb,QACE,OAAO,YAAY,YACf,OAAO,WAAA,IACP,OAAO,WAAA;AAAA,IAAW,CACzB;AACD,SAAK,SAAS,KAAK,YAAY;AAAA,EACjC;AAAA,EAEO,aAAkC;AACvC,WAAO,KAAK,YAAY;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAiB,SAIH;AAClB,UAAM,MAAM,SAAS,OAAO;AAC5B,UAAM,KAAK,wBAAwB;AAAA,MACjC;AAAA,MACA,UAAU,SAAS;AAAA,MACnB,WAAW,SAAS;AAAA,MACpB,mBAAmB,KAAK,OAAO,qBAAqB;AAAA,IAAA,CACrD;AACD,UAAM,OAAO,MAAM,GAAG,QAAQ,KAAK,MAAM;AACzC,UAAM,UAAU,MAAM,KAAK,WAAW,KAAK,MAAM;AACjD,QAAI,CAAC,QAAQ,SAAS;AACpB,YAAM,IAAI,MAAM,uCAAuC;AAAA,IACzD;AACA,UAAM,UAAU,QAAQ,QAAQ,SAAA;AAChC,SAAK,OAAO,KAAK,8BAA8B,OAAO,EAAE;AACxD,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cACJ,SACA,SAC6B;AAC7B,UAAM,EAAE,OAAO,OAAA,IAAW,KAAK,gBAAgB,OAAO;AACtD,QAAI,CAAC,OAAO;AACV,YAAM,IAAI,MAAM,2BAA2B,OAAO,KAAK,IAAI,CAAC,EAAE;AAAA,IAChE;AACA,UAAM,KAAK,oBAAoB;AAAA,MAC7B;AAAA,MACA,WAAW,QAAQ;AAAA,MACnB,WAAW,QAAQ;AAAA,MACnB,QAAQ,QAAQ;AAAA,MAChB,MAAM,QAAQ;AAAA,MACd,OAAO,QAAQ;AAAA,MACf,WAAW,QAAQ;AAAA,IAAA,CACpB;AACD,UAAM,OAAO,MAAM,GAAG,QAAQ,KAAK,MAAM;AACzC,UAAM,UAAU,MAAM,KAAK,WAAW,KAAK,MAAM;AACjD,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,kBAAkB,QAMwC;AAC9D,UAAM,cAA4B,CAAA;AAClC,eAAW,KAAK,OAAO,QAAQ;AAC7B,YAAM,OAAO,MAAM,KAAK,WAAW,iBAAiB,GAAG;AAAA,QACrD,OAAO;AAAA,QACP,OAAO;AAAA,MAAA,CACR;AACD,YAAM,SAAS,KAAK,CAAC;AACrB,YAAM,UAAU,QAAQ,gBAAgB;AACxC,kBAAY,KAAK,EAAE,SAAS,GAAG,mBAAmB,SAAS;AAAA,IAC7D;AAEA,UAAM,QAA2B;AAAA,MAC/B,WAAW,OAAO;AAAA,MAClB,WAAW,OAAO;AAAA,MAClB,QAAQ;AAAA,IAAA;AAEV,UAAM,SAAS,KAAK,0BAA0B,KAAK;AACjB,SAAK;AAAA,MACrC,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,IAAA;AAET,UAAM,KAAK,oBAAoB;AAAA,MAC7B,SAAS,OAAO;AAAA,MAChB,WAAW,OAAO;AAAA,MAClB,WAAW,OAAO;AAAA,MAClB,QAAQ,OAAO;AAAA,MACf,MAAM,OAAO;AAAA,IAAA,CACd;AACD,UAAM,OAAO,MAAM,GAAG,QAAQ,KAAK,MAAM;AACzC,UAAM,UAAU,MAAM,KAAK,WAAW,KAAK,MAAM;AACjD,WAAO,EAAE,WAAW,OAAO,WAAW,QAAA;AAAA,EACxC;AACF;"}
@@ -1,53 +1,57 @@
1
- import { AccountId, Client } from "@hashgraph/sdk";
2
- import { HCS17BaseClient } from "./standards-sdk.es97.js";
3
- import { buildHcs17CreateTopicTx, buildHcs17MessageTx } from "./standards-sdk.es100.js";
4
- import { createNodeOperatorContext } from "./standards-sdk.es136.js";
5
- class HCS17Client extends HCS17BaseClient {
1
+ import { HCS17BaseClient } from "./standards-sdk.es96.js";
2
+ import { buildHcs17CreateTopicTx, buildHcs17MessageTx } from "./standards-sdk.es99.js";
3
+ class HCS17BrowserClient extends HCS17BaseClient {
6
4
  constructor(config) {
7
5
  super(config);
8
- this.operatorId = AccountId.fromString(config.operatorId);
9
- this.operatorCtx = createNodeOperatorContext({
10
- network: this.network,
11
- operatorId: this.operatorId,
12
- operatorKey: config.operatorKey,
13
- keyType: config.keyType,
14
- mirrorNode: this.mirrorNode,
15
- logger: this.logger,
16
- client: config.network === "mainnet" ? Client.forMainnet() : Client.forTestnet()
17
- });
18
- this.client = this.operatorCtx.client;
6
+ this.hwc = config.hwc;
7
+ this.signer = config.signer;
8
+ }
9
+ ensureConnected() {
10
+ if (this.signer && typeof this.signer.getAccountId === "function") {
11
+ return this.signer.getAccountId().toString();
12
+ }
13
+ const info = this.hwc?.getAccountInfo?.();
14
+ const accountId = info?.accountId;
15
+ if (!accountId) {
16
+ throw new Error("No active wallet connection");
17
+ }
18
+ return accountId;
19
19
  }
20
- getKeyType() {
21
- return this.operatorCtx.keyType;
20
+ getSigner() {
21
+ if (this.signer) {
22
+ return this.signer;
23
+ }
24
+ this.ensureConnected();
25
+ const s = this.hwc?.dAppConnector?.signers?.[0];
26
+ if (!s) {
27
+ throw new Error("No active wallet signer");
28
+ }
29
+ return s;
22
30
  }
23
31
  /**
24
- * Create an HCS topic intended for HCS‑17 state messages.
32
+ * Create an HCS‑17 state topic, signing with the connected signer.
25
33
  */
26
34
  async createStateTopic(options) {
35
+ this.ensureConnected();
36
+ const signer = this.getSigner();
27
37
  const ttl = options?.ttl ?? 86400;
28
- const tx = buildHcs17CreateTopicTx({
29
- ttl,
30
- adminKey: options?.adminKey,
31
- submitKey: options?.submitKey,
32
- operatorPublicKey: this.client.operatorPublicKey || void 0
33
- });
34
- const resp = await tx.execute(this.client);
35
- const receipt = await resp.getReceipt(this.client);
36
- if (!receipt.topicId) {
37
- throw new Error("Failed to create topic: topicId empty");
38
- }
39
- const topicId = receipt.topicId.toString();
40
- this.logger.info(`Created HCS-17 state topic ${topicId}`);
38
+ const tx = buildHcs17CreateTopicTx({ ttl });
39
+ const frozen = await tx.freezeWithSigner(signer);
40
+ const res = await frozen.executeWithSigner(signer);
41
+ const receipt = await res.getReceiptWithSigner(signer);
42
+ const topicId = receipt?.topicId?.toString?.() || "";
43
+ this.logger.info(`Created HCS-17 state topic via wallet: ${topicId}`);
41
44
  return topicId;
42
45
  }
43
46
  /**
44
- * Submit a pre‑built HCS‑17 state hash message to a topic.
47
+ * Submit an HCS‑17 message to a topic, signing with the connected signer.
45
48
  */
46
49
  async submitMessage(topicId, message) {
47
50
  const { valid, errors } = this.validateMessage(message);
48
51
  if (!valid) {
49
52
  throw new Error(`Invalid HCS-17 message: ${errors.join(", ")}`);
50
53
  }
54
+ const signer = this.getSigner();
51
55
  const tx = buildHcs17MessageTx({
52
56
  topicId,
53
57
  stateHash: message.state_hash,
@@ -55,14 +59,17 @@ class HCS17Client extends HCS17BaseClient {
55
59
  topics: message.topics,
56
60
  memo: message.m
57
61
  });
58
- const resp = await tx.execute(this.client);
59
- const receipt = await resp.getReceipt(this.client);
60
- return receipt;
62
+ const frozen = await tx.freezeWithSigner(signer);
63
+ const res = await frozen.executeWithSigner(signer);
64
+ await res.getReceiptWithSigner(signer);
65
+ return {};
61
66
  }
62
67
  /**
63
68
  * Compute current account state hash from topic running hashes and publish it.
64
69
  */
65
70
  async computeAndPublish(params) {
71
+ this.ensureConnected();
72
+ const signer = this.getSigner();
66
73
  const topicStates = [];
67
74
  for (const t of params.topics) {
68
75
  const msgs = await this.mirrorNode.getTopicMessages(t, {
@@ -70,7 +77,7 @@ class HCS17Client extends HCS17BaseClient {
70
77
  order: "desc"
71
78
  });
72
79
  const latest = msgs[0];
73
- const running = latest?.running_hash || "";
80
+ const running = latest && latest.running_hash || "";
74
81
  topicStates.push({ topicId: t, latestRunningHash: running });
75
82
  }
76
83
  const input = {
@@ -79,12 +86,6 @@ class HCS17Client extends HCS17BaseClient {
79
86
  topics: topicStates
80
87
  };
81
88
  const result = this.calculateAccountStateHash(input);
82
- this.createStateHashMessage(
83
- result.stateHash,
84
- params.accountId,
85
- params.topics,
86
- params.memo
87
- );
88
89
  const tx = buildHcs17MessageTx({
89
90
  topicId: params.publishTopicId,
90
91
  stateHash: result.stateHash,
@@ -92,12 +93,12 @@ class HCS17Client extends HCS17BaseClient {
92
93
  topics: params.topics,
93
94
  memo: params.memo
94
95
  });
95
- const resp = await tx.execute(this.client);
96
- const receipt = await resp.getReceipt(this.client);
97
- return { stateHash: result.stateHash, receipt };
96
+ const frozen = await tx.freezeWithSigner(signer);
97
+ await frozen.executeWithSigner(signer);
98
+ return { stateHash: result.stateHash };
98
99
  }
99
100
  }
100
101
  export {
101
- HCS17Client
102
+ HCS17BrowserClient
102
103
  };
103
104
  //# sourceMappingURL=standards-sdk.es98.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es98.js","sources":["../../src/hcs-17/sdk.ts"],"sourcesContent":["import {\n Client,\n PublicKey,\n KeyList,\n TransactionReceipt,\n AccountId,\n} from '@hashgraph/sdk';\nimport { HCS17BaseClient } from './base-client';\nimport {\n SDKHCS17ClientConfig,\n StateHashMessage,\n TopicState,\n AccountStateInput,\n} from './types';\nimport { buildHcs17CreateTopicTx, buildHcs17MessageTx } from './tx';\nimport {\n createNodeOperatorContext,\n type NodeOperatorContext,\n} from '../common/node-operator-resolver';\n\n/**\n * Node SDK client for HCS‑17 operations.\n * Creates topics, submits messages, and can compute + publish state hashes.\n */\nexport class HCS17Client extends HCS17BaseClient {\n private client: Client;\n private operatorId: AccountId;\n private operatorCtx: NodeOperatorContext;\n\n constructor(config: SDKHCS17ClientConfig) {\n super(config);\n this.operatorId = AccountId.fromString(config.operatorId);\n this.operatorCtx = createNodeOperatorContext({\n network: this.network,\n operatorId: this.operatorId,\n operatorKey: config.operatorKey,\n keyType: config.keyType,\n mirrorNode: this.mirrorNode,\n logger: this.logger,\n client:\n config.network === 'mainnet'\n ? Client.forMainnet()\n : Client.forTestnet(),\n });\n this.client = this.operatorCtx.client;\n }\n\n public getKeyType(): 'ed25519' | 'ecdsa' {\n return this.operatorCtx.keyType;\n }\n\n /**\n * Create an HCS topic intended for HCS‑17 state messages.\n */\n async createStateTopic(options?: {\n ttl?: number;\n adminKey?: boolean | string | PublicKey | KeyList;\n submitKey?: boolean | string | PublicKey | KeyList;\n }): Promise<string> {\n const ttl = options?.ttl ?? 86400;\n const tx = buildHcs17CreateTopicTx({\n ttl,\n adminKey: options?.adminKey,\n submitKey: options?.submitKey,\n operatorPublicKey: this.client.operatorPublicKey || undefined,\n });\n const resp = await tx.execute(this.client);\n const receipt = await resp.getReceipt(this.client);\n if (!receipt.topicId) {\n throw new Error('Failed to create topic: topicId empty');\n }\n const topicId = receipt.topicId.toString();\n this.logger.info(`Created HCS-17 state topic ${topicId}`);\n return topicId;\n }\n\n /**\n * Submit a pre‑built HCS‑17 state hash message to a topic.\n */\n async submitMessage(\n topicId: string,\n message: StateHashMessage,\n ): Promise<TransactionReceipt> {\n const { valid, errors } = this.validateMessage(message);\n if (!valid) {\n throw new Error(`Invalid HCS-17 message: ${errors.join(', ')}`);\n }\n const tx = buildHcs17MessageTx({\n topicId,\n stateHash: message.state_hash,\n accountId: message.account_id,\n topics: message.topics,\n memo: message.m,\n });\n const resp = await tx.execute(this.client);\n const receipt = await resp.getReceipt(this.client);\n return receipt;\n }\n\n /**\n * Compute current account state hash from topic running hashes and publish it.\n */\n async computeAndPublish(params: {\n accountId: string;\n accountPublicKey: string | PublicKey;\n topics: string[];\n publishTopicId: string;\n memo?: string;\n }): Promise<{ stateHash: string; receipt: TransactionReceipt }> {\n const topicStates: TopicState[] = [];\n for (const t of params.topics) {\n const msgs = await this.mirrorNode.getTopicMessages(t, {\n limit: 1,\n order: 'desc',\n });\n const latest = msgs[0];\n const running = latest?.running_hash || '';\n topicStates.push({ topicId: t, latestRunningHash: running });\n }\n\n const input: AccountStateInput = {\n accountId: params.accountId,\n publicKey: params.accountPublicKey,\n topics: topicStates,\n };\n const result = this.calculateAccountStateHash(input);\n const message: StateHashMessage = this.createStateHashMessage(\n result.stateHash,\n params.accountId,\n params.topics,\n params.memo,\n );\n const tx = buildHcs17MessageTx({\n topicId: params.publishTopicId,\n stateHash: result.stateHash,\n accountId: params.accountId,\n topics: params.topics,\n memo: params.memo,\n });\n const resp = await tx.execute(this.client);\n const receipt = await resp.getReceipt(this.client);\n return { stateHash: result.stateHash, receipt };\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"standards-sdk.es98.js","sources":["../../src/hcs-17/browser.ts"],"sourcesContent":["import { HCS17BaseClient } from './base-client';\nimport { BrowserHCS17ClientConfig, StateHashMessage } from './types';\nimport { buildHcs17CreateTopicTx, buildHcs17MessageTx } from './tx';\nimport type { HashinalsWalletConnectSDK } from '@hashgraphonline/hashinal-wc';\nimport type { DAppSigner } from '@hashgraph/hedera-wallet-connect';\nimport type { PublicKey } from '@hashgraph/sdk';\n\n/**\n * Browser client for HCS‑17 operations using a DAppSigner.\n * Builds transactions and executes via signer without helper shims.\n */\nexport class HCS17BrowserClient extends HCS17BaseClient {\n private hwc?: HashinalsWalletConnectSDK;\n private signer?: DAppSigner;\n\n constructor(config: BrowserHCS17ClientConfig) {\n super(config);\n this.hwc = config.hwc;\n this.signer = config.signer;\n }\n\n private ensureConnected(): string {\n if (\n this.signer &&\n typeof (this.signer as DAppSigner).getAccountId === 'function'\n ) {\n return (this.signer as DAppSigner).getAccountId().toString();\n }\n const info = this.hwc?.getAccountInfo?.();\n const accountId = info?.accountId;\n if (!accountId) {\n throw new Error('No active wallet connection');\n }\n return accountId;\n }\n\n private getSigner(): DAppSigner {\n if (this.signer) {\n return this.signer;\n }\n this.ensureConnected();\n const s = this.hwc?.dAppConnector?.signers?.[0];\n if (!s) {\n throw new Error('No active wallet signer');\n }\n return s as unknown as DAppSigner;\n }\n\n /**\n * Create an HCS‑17 state topic, signing with the connected signer.\n */\n async createStateTopic(options?: {\n ttl?: number;\n adminKey?: boolean | string;\n submitKey?: boolean | string;\n }): Promise<string> {\n this.ensureConnected();\n const signer = this.getSigner();\n const ttl = options?.ttl ?? 86400;\n const tx = buildHcs17CreateTopicTx({ ttl });\n const frozen = await tx.freezeWithSigner(signer);\n const res = await frozen.executeWithSigner(signer);\n const receipt = await res.getReceiptWithSigner(signer);\n const topicId = receipt?.topicId?.toString?.() || '';\n this.logger.info(`Created HCS-17 state topic via wallet: ${topicId}`);\n return topicId;\n }\n\n /**\n * Submit an HCS‑17 message to a topic, signing with the connected signer.\n */\n async submitMessage(\n topicId: string,\n message: StateHashMessage,\n ): Promise<{ transactionId?: string }> {\n const { valid, errors } = this.validateMessage(message);\n if (!valid) {\n throw new Error(`Invalid HCS-17 message: ${errors.join(', ')}`);\n }\n const signer = this.getSigner();\n const tx = buildHcs17MessageTx({\n topicId,\n stateHash: message.state_hash,\n accountId: message.account_id,\n topics: message.topics,\n memo: message.m,\n });\n const frozen = await tx.freezeWithSigner(signer);\n const res = await frozen.executeWithSigner(signer);\n await res.getReceiptWithSigner(signer);\n return {};\n }\n\n /**\n * Compute current account state hash from topic running hashes and publish it.\n */\n async computeAndPublish(params: {\n accountId: string;\n accountPublicKey: string | PublicKey;\n topics: string[];\n publishTopicId: string;\n memo?: string;\n }): Promise<{ stateHash: string }> {\n this.ensureConnected();\n const signer = this.getSigner();\n\n const topicStates: { topicId: string; latestRunningHash: string }[] = [];\n for (const t of params.topics) {\n const msgs = await this.mirrorNode.getTopicMessages(t, {\n limit: 1,\n order: 'desc',\n });\n const latest = msgs[0];\n const running = (latest && (latest as any).running_hash) || '';\n topicStates.push({ topicId: t, latestRunningHash: running });\n }\n\n const input = {\n accountId: params.accountId,\n publicKey: params.accountPublicKey,\n topics: topicStates,\n };\n const result = this.calculateAccountStateHash(input);\n const tx = buildHcs17MessageTx({\n topicId: params.publishTopicId,\n stateHash: result.stateHash,\n accountId: params.accountId,\n topics: params.topics,\n memo: params.memo,\n });\n const frozen = await tx.freezeWithSigner(signer);\n await frozen.executeWithSigner(signer);\n return { stateHash: result.stateHash };\n }\n}\n"],"names":[],"mappings":";;AAWO,MAAM,2BAA2B,gBAAgB;AAAA,EAItD,YAAY,QAAkC;AAC5C,UAAM,MAAM;AACZ,SAAK,MAAM,OAAO;AAClB,SAAK,SAAS,OAAO;AAAA,EACvB;AAAA,EAEQ,kBAA0B;AAChC,QACE,KAAK,UACL,OAAQ,KAAK,OAAsB,iBAAiB,YACpD;AACA,aAAQ,KAAK,OAAsB,aAAA,EAAe,SAAA;AAAA,IACpD;AACA,UAAM,OAAO,KAAK,KAAK,iBAAA;AACvB,UAAM,YAAY,MAAM;AACxB,QAAI,CAAC,WAAW;AACd,YAAM,IAAI,MAAM,6BAA6B;AAAA,IAC/C;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,YAAwB;AAC9B,QAAI,KAAK,QAAQ;AACf,aAAO,KAAK;AAAA,IACd;AACA,SAAK,gBAAA;AACL,UAAM,IAAI,KAAK,KAAK,eAAe,UAAU,CAAC;AAC9C,QAAI,CAAC,GAAG;AACN,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAiB,SAIH;AAClB,SAAK,gBAAA;AACL,UAAM,SAAS,KAAK,UAAA;AACpB,UAAM,MAAM,SAAS,OAAO;AAC5B,UAAM,KAAK,wBAAwB,EAAE,KAAK;AAC1C,UAAM,SAAS,MAAM,GAAG,iBAAiB,MAAM;AAC/C,UAAM,MAAM,MAAM,OAAO,kBAAkB,MAAM;AACjD,UAAM,UAAU,MAAM,IAAI,qBAAqB,MAAM;AACrD,UAAM,UAAU,SAAS,SAAS,WAAA,KAAgB;AAClD,SAAK,OAAO,KAAK,0CAA0C,OAAO,EAAE;AACpE,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cACJ,SACA,SACqC;AACrC,UAAM,EAAE,OAAO,OAAA,IAAW,KAAK,gBAAgB,OAAO;AACtD,QAAI,CAAC,OAAO;AACV,YAAM,IAAI,MAAM,2BAA2B,OAAO,KAAK,IAAI,CAAC,EAAE;AAAA,IAChE;AACA,UAAM,SAAS,KAAK,UAAA;AACpB,UAAM,KAAK,oBAAoB;AAAA,MAC7B;AAAA,MACA,WAAW,QAAQ;AAAA,MACnB,WAAW,QAAQ;AAAA,MACnB,QAAQ,QAAQ;AAAA,MAChB,MAAM,QAAQ;AAAA,IAAA,CACf;AACD,UAAM,SAAS,MAAM,GAAG,iBAAiB,MAAM;AAC/C,UAAM,MAAM,MAAM,OAAO,kBAAkB,MAAM;AACjD,UAAM,IAAI,qBAAqB,MAAM;AACrC,WAAO,CAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,kBAAkB,QAMW;AACjC,SAAK,gBAAA;AACL,UAAM,SAAS,KAAK,UAAA;AAEpB,UAAM,cAAgE,CAAA;AACtE,eAAW,KAAK,OAAO,QAAQ;AAC7B,YAAM,OAAO,MAAM,KAAK,WAAW,iBAAiB,GAAG;AAAA,QACrD,OAAO;AAAA,QACP,OAAO;AAAA,MAAA,CACR;AACD,YAAM,SAAS,KAAK,CAAC;AACrB,YAAM,UAAW,UAAW,OAAe,gBAAiB;AAC5D,kBAAY,KAAK,EAAE,SAAS,GAAG,mBAAmB,SAAS;AAAA,IAC7D;AAEA,UAAM,QAAQ;AAAA,MACZ,WAAW,OAAO;AAAA,MAClB,WAAW,OAAO;AAAA,MAClB,QAAQ;AAAA,IAAA;AAEV,UAAM,SAAS,KAAK,0BAA0B,KAAK;AACnD,UAAM,KAAK,oBAAoB;AAAA,MAC7B,SAAS,OAAO;AAAA,MAChB,WAAW,OAAO;AAAA,MAClB,WAAW,OAAO;AAAA,MAClB,QAAQ,OAAO;AAAA,MACf,MAAM,OAAO;AAAA,IAAA,CACd;AACD,UAAM,SAAS,MAAM,GAAG,iBAAiB,MAAM;AAC/C,UAAM,OAAO,kBAAkB,MAAM;AACrC,WAAO,EAAE,WAAW,OAAO,UAAA;AAAA,EAC7B;AACF;"}