@hashgraphonline/standards-sdk 0.1.144 → 0.1.146-chore-jsr-improvements.canary.74bacb9.89

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 (442) hide show
  1. package/README.md +2 -2
  2. package/dist/cjs/hcs-10/base-client.d.ts.map +1 -1
  3. package/dist/cjs/hcs-10/sdk.d.ts +8 -0
  4. package/dist/cjs/hcs-10/sdk.d.ts.map +1 -1
  5. package/dist/cjs/hcs-11/client.d.ts +2 -2
  6. package/dist/cjs/hcs-11/client.d.ts.map +1 -1
  7. package/dist/cjs/hcs-11/person-builder.d.ts +1 -0
  8. package/dist/cjs/hcs-11/person-builder.d.ts.map +1 -1
  9. package/dist/cjs/hcs-11/types.d.ts +1 -0
  10. package/dist/cjs/hcs-11/types.d.ts.map +1 -1
  11. package/dist/cjs/hcs-12/rendering/resource-manager.d.ts.map +1 -1
  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-3/src/types.d.ts +60 -0
  35. package/dist/cjs/hcs-3/src/types.d.ts.map +1 -0
  36. package/dist/cjs/hcs-7/types.d.ts +4 -4
  37. package/dist/cjs/index.d.ts.map +1 -1
  38. package/dist/cjs/inscribe/inscriber.d.ts +89 -0
  39. package/dist/cjs/inscribe/inscriber.d.ts.map +1 -1
  40. package/dist/cjs/jsr-entry.d.ts +16 -0
  41. package/dist/cjs/jsr-entry.d.ts.map +1 -0
  42. package/dist/cjs/services/registry-broker/client/base-client.d.ts +14 -1
  43. package/dist/cjs/services/registry-broker/client/base-client.d.ts.map +1 -1
  44. package/dist/cjs/services/registry-broker/client/feedback.d.ts +2 -0
  45. package/dist/cjs/services/registry-broker/client/feedback.d.ts.map +1 -0
  46. package/dist/cjs/services/registry-broker/hol-chat-ops.d.ts +24 -0
  47. package/dist/cjs/services/registry-broker/hol-chat-ops.d.ts.map +1 -0
  48. package/dist/cjs/services/registry-broker/index.d.ts +1 -0
  49. package/dist/cjs/services/registry-broker/index.d.ts.map +1 -1
  50. package/dist/cjs/services/registry-broker/private-key-signer.d.ts +1 -0
  51. package/dist/cjs/services/registry-broker/private-key-signer.d.ts.map +1 -1
  52. package/dist/cjs/services/registry-broker/schemas.d.ts +1010 -586
  53. package/dist/cjs/services/registry-broker/schemas.d.ts.map +1 -1
  54. package/dist/cjs/services/registry-broker/types.d.ts +20 -1
  55. package/dist/cjs/services/registry-broker/types.d.ts.map +1 -1
  56. package/dist/cjs/standards-sdk.cjs +3 -3
  57. package/dist/cjs/standards-sdk.cjs.map +1 -1
  58. package/dist/cjs/utils/crypto-abstraction.d.ts.map +1 -1
  59. package/dist/cjs/utils/crypto-env.d.ts.map +1 -1
  60. package/dist/cjs/utils/dynamic-import.d.ts +5 -1
  61. package/dist/cjs/utils/dynamic-import.d.ts.map +1 -1
  62. package/dist/cjs/utils/hash-adapter.d.ts.map +1 -1
  63. package/dist/es/hcs-10/base-client.d.ts.map +1 -1
  64. package/dist/es/hcs-10/sdk.d.ts +8 -0
  65. package/dist/es/hcs-10/sdk.d.ts.map +1 -1
  66. package/dist/es/hcs-11/client.d.ts +2 -2
  67. package/dist/es/hcs-11/client.d.ts.map +1 -1
  68. package/dist/es/hcs-11/person-builder.d.ts +1 -0
  69. package/dist/es/hcs-11/person-builder.d.ts.map +1 -1
  70. package/dist/es/hcs-11/types.d.ts +1 -0
  71. package/dist/es/hcs-11/types.d.ts.map +1 -1
  72. package/dist/es/hcs-12/rendering/resource-manager.d.ts.map +1 -1
  73. package/dist/es/hcs-14/issuers/hiero.d.ts.map +1 -1
  74. package/dist/es/hcs-15/browser.d.ts +2 -0
  75. package/dist/es/hcs-15/browser.d.ts.map +1 -1
  76. package/dist/es/hcs-15/sdk.d.ts +7 -1
  77. package/dist/es/hcs-15/sdk.d.ts.map +1 -1
  78. package/dist/es/hcs-15/tx.d.ts +4 -0
  79. package/dist/es/hcs-15/tx.d.ts.map +1 -1
  80. package/dist/es/hcs-15/types.d.ts +16 -1
  81. package/dist/es/hcs-15/types.d.ts.map +1 -1
  82. package/dist/es/hcs-16/browser.d.ts +11 -2
  83. package/dist/es/hcs-16/browser.d.ts.map +1 -1
  84. package/dist/es/hcs-16/sdk.d.ts +62 -1
  85. package/dist/es/hcs-16/sdk.d.ts.map +1 -1
  86. package/dist/es/hcs-16/tx.d.ts +21 -3
  87. package/dist/es/hcs-16/tx.d.ts.map +1 -1
  88. package/dist/es/hcs-17/base-client.d.ts +1 -0
  89. package/dist/es/hcs-17/base-client.d.ts.map +1 -1
  90. package/dist/es/hcs-17/sdk.d.ts.map +1 -1
  91. package/dist/es/hcs-17/tx.d.ts +2 -0
  92. package/dist/es/hcs-17/tx.d.ts.map +1 -1
  93. package/dist/es/hcs-17/types.d.ts +4 -0
  94. package/dist/es/hcs-17/types.d.ts.map +1 -1
  95. package/dist/es/hcs-3/src/types.d.ts +60 -0
  96. package/dist/es/hcs-3/src/types.d.ts.map +1 -0
  97. package/dist/es/hcs-7/types.d.ts +4 -4
  98. package/dist/es/index.d.ts.map +1 -1
  99. package/dist/es/inscribe/inscriber.d.ts +89 -0
  100. package/dist/es/inscribe/inscriber.d.ts.map +1 -1
  101. package/dist/es/jsr-entry.d.ts +16 -0
  102. package/dist/es/jsr-entry.d.ts.map +1 -0
  103. package/dist/es/services/registry-broker/client/base-client.d.ts +14 -1
  104. package/dist/es/services/registry-broker/client/base-client.d.ts.map +1 -1
  105. package/dist/es/services/registry-broker/client/feedback.d.ts +2 -0
  106. package/dist/es/services/registry-broker/client/feedback.d.ts.map +1 -0
  107. package/dist/es/services/registry-broker/hol-chat-ops.d.ts +24 -0
  108. package/dist/es/services/registry-broker/hol-chat-ops.d.ts.map +1 -0
  109. package/dist/es/services/registry-broker/index.d.ts +1 -0
  110. package/dist/es/services/registry-broker/index.d.ts.map +1 -1
  111. package/dist/es/services/registry-broker/private-key-signer.d.ts +1 -0
  112. package/dist/es/services/registry-broker/private-key-signer.d.ts.map +1 -1
  113. package/dist/es/services/registry-broker/schemas.d.ts +1010 -586
  114. package/dist/es/services/registry-broker/schemas.d.ts.map +1 -1
  115. package/dist/es/services/registry-broker/types.d.ts +20 -1
  116. package/dist/es/services/registry-broker/types.d.ts.map +1 -1
  117. package/dist/es/standards-sdk.es.js +146 -131
  118. package/dist/es/standards-sdk.es10.js +70 -90
  119. package/dist/es/standards-sdk.es10.js.map +1 -1
  120. package/dist/es/standards-sdk.es100.js +229 -26
  121. package/dist/es/standards-sdk.es100.js.map +1 -1
  122. package/dist/es/standards-sdk.es101.js +109 -228
  123. package/dist/es/standards-sdk.es101.js.map +1 -1
  124. package/dist/es/standards-sdk.es102.js +15 -94
  125. package/dist/es/standards-sdk.es102.js.map +1 -1
  126. package/dist/es/standards-sdk.es103.js +80 -30
  127. package/dist/es/standards-sdk.es103.js.map +1 -1
  128. package/dist/es/standards-sdk.es104.js +27 -80
  129. package/dist/es/standards-sdk.es104.js.map +1 -1
  130. package/dist/es/standards-sdk.es105.js +136 -25
  131. package/dist/es/standards-sdk.es105.js.map +1 -1
  132. package/dist/es/standards-sdk.es106.js +27 -140
  133. package/dist/es/standards-sdk.es106.js.map +1 -1
  134. package/dist/es/standards-sdk.es107.js +20 -27
  135. package/dist/es/standards-sdk.es107.js.map +1 -1
  136. package/dist/es/standards-sdk.es108.js +156 -18
  137. package/dist/es/standards-sdk.es108.js.map +1 -1
  138. package/dist/es/standards-sdk.es109.js +198 -148
  139. package/dist/es/standards-sdk.es109.js.map +1 -1
  140. package/dist/es/standards-sdk.es11.js +121 -45
  141. package/dist/es/standards-sdk.es11.js.map +1 -1
  142. package/dist/es/standards-sdk.es110.js +747 -166
  143. package/dist/es/standards-sdk.es110.js.map +1 -1
  144. package/dist/es/standards-sdk.es111.js +9 -786
  145. package/dist/es/standards-sdk.es111.js.map +1 -1
  146. package/dist/es/standards-sdk.es112.js +567 -13
  147. package/dist/es/standards-sdk.es112.js.map +1 -1
  148. package/dist/es/standards-sdk.es113.js +576 -541
  149. package/dist/es/standards-sdk.es113.js.map +1 -1
  150. package/dist/es/standards-sdk.es114.js +12 -601
  151. package/dist/es/standards-sdk.es114.js.map +1 -1
  152. package/dist/es/standards-sdk.es115.js +2 -13
  153. package/dist/es/standards-sdk.es115.js.map +1 -1
  154. package/dist/es/standards-sdk.es116.js +87 -2
  155. package/dist/es/standards-sdk.es116.js.map +1 -1
  156. package/dist/es/standards-sdk.es117.js +37 -80
  157. package/dist/es/standards-sdk.es117.js.map +1 -1
  158. package/dist/es/standards-sdk.es118.js +2 -39
  159. package/dist/es/standards-sdk.es118.js.map +1 -1
  160. package/dist/es/standards-sdk.es119.js +231 -2
  161. package/dist/es/standards-sdk.es119.js.map +1 -1
  162. package/dist/es/standards-sdk.es12.js +60 -159
  163. package/dist/es/standards-sdk.es12.js.map +1 -1
  164. package/dist/es/standards-sdk.es120.js +1110 -193
  165. package/dist/es/standards-sdk.es120.js.map +1 -1
  166. package/dist/es/standards-sdk.es121.js +225 -1059
  167. package/dist/es/standards-sdk.es121.js.map +1 -1
  168. package/dist/es/standards-sdk.es122.js +419 -303
  169. package/dist/es/standards-sdk.es122.js.map +1 -1
  170. package/dist/es/standards-sdk.es123.js +351 -418
  171. package/dist/es/standards-sdk.es123.js.map +1 -1
  172. package/dist/es/standards-sdk.es124.js +1109 -347
  173. package/dist/es/standards-sdk.es124.js.map +1 -1
  174. package/dist/es/standards-sdk.es125.js +182 -854
  175. package/dist/es/standards-sdk.es125.js.map +1 -1
  176. package/dist/es/standards-sdk.es126.js +1512 -153
  177. package/dist/es/standards-sdk.es126.js.map +1 -1
  178. package/dist/es/standards-sdk.es127.js +157 -1547
  179. package/dist/es/standards-sdk.es127.js.map +1 -1
  180. package/dist/es/standards-sdk.es128.js +192 -162
  181. package/dist/es/standards-sdk.es128.js.map +1 -1
  182. package/dist/es/standards-sdk.es129.js +61 -164
  183. package/dist/es/standards-sdk.es129.js.map +1 -1
  184. package/dist/es/standards-sdk.es13.js +200 -60
  185. package/dist/es/standards-sdk.es13.js.map +1 -1
  186. package/dist/es/standards-sdk.es130.js +102 -85
  187. package/dist/es/standards-sdk.es130.js.map +1 -1
  188. package/dist/es/standards-sdk.es131.js +222 -96
  189. package/dist/es/standards-sdk.es131.js.map +1 -1
  190. package/dist/es/standards-sdk.es132.js +153 -220
  191. package/dist/es/standards-sdk.es132.js.map +1 -1
  192. package/dist/es/standards-sdk.es133.js +104 -162
  193. package/dist/es/standards-sdk.es133.js.map +1 -1
  194. package/dist/es/standards-sdk.es134.js +296 -92
  195. package/dist/es/standards-sdk.es134.js.map +1 -1
  196. package/dist/es/standards-sdk.es135.js +432 -294
  197. package/dist/es/standards-sdk.es135.js.map +1 -1
  198. package/dist/es/standards-sdk.es136.js +14 -363
  199. package/dist/es/standards-sdk.es136.js.map +1 -1
  200. package/dist/es/standards-sdk.es137.js +79 -15
  201. package/dist/es/standards-sdk.es137.js.map +1 -1
  202. package/dist/es/standards-sdk.es138.js +79 -59
  203. package/dist/es/standards-sdk.es138.js.map +1 -1
  204. package/dist/es/standards-sdk.es139.js +53 -80
  205. package/dist/es/standards-sdk.es139.js.map +1 -1
  206. package/dist/es/standards-sdk.es14.js +149 -178
  207. package/dist/es/standards-sdk.es14.js.map +1 -1
  208. package/dist/es/standards-sdk.es140.js +1 -1
  209. package/dist/es/standards-sdk.es142.js +1 -1
  210. package/dist/es/standards-sdk.es143.js +1 -1
  211. package/dist/es/standards-sdk.es144.js +30 -28
  212. package/dist/es/standards-sdk.es144.js.map +1 -1
  213. package/dist/es/standards-sdk.es145.js +34 -138
  214. package/dist/es/standards-sdk.es145.js.map +1 -1
  215. package/dist/es/standards-sdk.es146.js +28 -42
  216. package/dist/es/standards-sdk.es146.js.map +1 -1
  217. package/dist/es/standards-sdk.es147.js +105 -12256
  218. package/dist/es/standards-sdk.es147.js.map +1 -1
  219. package/dist/es/standards-sdk.es148.js +40 -15
  220. package/dist/es/standards-sdk.es148.js.map +1 -1
  221. package/dist/es/standards-sdk.es149.js +959 -56
  222. package/dist/es/standards-sdk.es149.js.map +1 -1
  223. package/dist/es/standards-sdk.es15.js +152 -151
  224. package/dist/es/standards-sdk.es15.js.map +1 -1
  225. package/dist/es/standards-sdk.es150.js +12264 -57
  226. package/dist/es/standards-sdk.es150.js.map +1 -1
  227. package/dist/es/standards-sdk.es151.js +51 -167
  228. package/dist/es/standards-sdk.es151.js.map +1 -1
  229. package/dist/es/standards-sdk.es152.js +70 -308
  230. package/dist/es/standards-sdk.es152.js.map +1 -1
  231. package/dist/es/standards-sdk.es153.js +13 -342
  232. package/dist/es/standards-sdk.es153.js.map +1 -1
  233. package/dist/es/standards-sdk.es154.js +129 -410
  234. package/dist/es/standards-sdk.es154.js.map +1 -1
  235. package/dist/es/standards-sdk.es155.js +200 -209
  236. package/dist/es/standards-sdk.es155.js.map +1 -1
  237. package/dist/es/standards-sdk.es156.js +334 -64
  238. package/dist/es/standards-sdk.es156.js.map +1 -1
  239. package/dist/es/standards-sdk.es157.js +453 -871
  240. package/dist/es/standards-sdk.es157.js.map +1 -1
  241. package/dist/es/standards-sdk.es158.js +314 -222
  242. package/dist/es/standards-sdk.es158.js.map +1 -1
  243. package/dist/es/standards-sdk.es159.js +60 -228
  244. package/dist/es/standards-sdk.es159.js.map +1 -1
  245. package/dist/es/standards-sdk.es16.js +917 -136
  246. package/dist/es/standards-sdk.es16.js.map +1 -1
  247. package/dist/es/standards-sdk.es160.js +242 -0
  248. package/dist/es/standards-sdk.es160.js.map +1 -0
  249. package/dist/es/standards-sdk.es161.js +247 -0
  250. package/dist/es/standards-sdk.es161.js.map +1 -0
  251. package/dist/es/standards-sdk.es17.js +23 -944
  252. package/dist/es/standards-sdk.es17.js.map +1 -1
  253. package/dist/es/standards-sdk.es18.js +2422 -24
  254. package/dist/es/standards-sdk.es18.js.map +1 -1
  255. package/dist/es/standards-sdk.es19.js +817 -2071
  256. package/dist/es/standards-sdk.es19.js.map +1 -1
  257. package/dist/es/standards-sdk.es2.js +654 -189
  258. package/dist/es/standards-sdk.es2.js.map +1 -1
  259. package/dist/es/standards-sdk.es20.js +205 -1091
  260. package/dist/es/standards-sdk.es20.js.map +1 -1
  261. package/dist/es/standards-sdk.es21.js +858 -221
  262. package/dist/es/standards-sdk.es21.js.map +1 -1
  263. package/dist/es/standards-sdk.es22.js +179 -903
  264. package/dist/es/standards-sdk.es22.js.map +1 -1
  265. package/dist/es/standards-sdk.es23.js +164 -179
  266. package/dist/es/standards-sdk.es23.js.map +1 -1
  267. package/dist/es/standards-sdk.es24.js +62 -118
  268. package/dist/es/standards-sdk.es24.js.map +1 -1
  269. package/dist/es/standards-sdk.es25.js +377 -52
  270. package/dist/es/standards-sdk.es25.js.map +1 -1
  271. package/dist/es/standards-sdk.es26.js +36 -394
  272. package/dist/es/standards-sdk.es26.js.map +1 -1
  273. package/dist/es/standards-sdk.es27.js +901 -50
  274. package/dist/es/standards-sdk.es27.js.map +1 -1
  275. package/dist/es/standards-sdk.es28.js +134 -902
  276. package/dist/es/standards-sdk.es28.js.map +1 -1
  277. package/dist/es/standards-sdk.es29.js +7 -134
  278. package/dist/es/standards-sdk.es29.js.map +1 -1
  279. package/dist/es/standards-sdk.es3.js +63 -680
  280. package/dist/es/standards-sdk.es3.js.map +1 -1
  281. package/dist/es/standards-sdk.es30.js +344 -7
  282. package/dist/es/standards-sdk.es30.js.map +1 -1
  283. package/dist/es/standards-sdk.es31.js +302 -287
  284. package/dist/es/standards-sdk.es31.js.map +1 -1
  285. package/dist/es/standards-sdk.es32.js +94 -322
  286. package/dist/es/standards-sdk.es32.js.map +1 -1
  287. package/dist/es/standards-sdk.es33.js +458 -101
  288. package/dist/es/standards-sdk.es33.js.map +1 -1
  289. package/dist/es/standards-sdk.es34.js +132 -451
  290. package/dist/es/standards-sdk.es34.js.map +1 -1
  291. package/dist/es/standards-sdk.es35.js +216 -130
  292. package/dist/es/standards-sdk.es35.js.map +1 -1
  293. package/dist/es/standards-sdk.es36.js +273 -195
  294. package/dist/es/standards-sdk.es36.js.map +1 -1
  295. package/dist/es/standards-sdk.es37.js +148 -87
  296. package/dist/es/standards-sdk.es37.js.map +1 -1
  297. package/dist/es/standards-sdk.es38.js +183 -320
  298. package/dist/es/standards-sdk.es38.js.map +1 -1
  299. package/dist/es/standards-sdk.es39.js +238 -161
  300. package/dist/es/standards-sdk.es39.js.map +1 -1
  301. package/dist/es/standards-sdk.es4.js +425 -63
  302. package/dist/es/standards-sdk.es4.js.map +1 -1
  303. package/dist/es/standards-sdk.es40.js +136 -254
  304. package/dist/es/standards-sdk.es40.js.map +1 -1
  305. package/dist/es/standards-sdk.es41.js +225 -176
  306. package/dist/es/standards-sdk.es41.js.map +1 -1
  307. package/dist/es/standards-sdk.es42.js +199 -261
  308. package/dist/es/standards-sdk.es42.js.map +1 -1
  309. package/dist/es/standards-sdk.es43.js +237 -199
  310. package/dist/es/standards-sdk.es43.js.map +1 -1
  311. package/dist/es/standards-sdk.es44.js +209 -201
  312. package/dist/es/standards-sdk.es44.js.map +1 -1
  313. package/dist/es/standards-sdk.es45.js +305 -201
  314. package/dist/es/standards-sdk.es45.js.map +1 -1
  315. package/dist/es/standards-sdk.es46.js +371 -261
  316. package/dist/es/standards-sdk.es46.js.map +1 -1
  317. package/dist/es/standards-sdk.es47.js +316 -371
  318. package/dist/es/standards-sdk.es47.js.map +1 -1
  319. package/dist/es/standards-sdk.es48.js +404 -336
  320. package/dist/es/standards-sdk.es48.js.map +1 -1
  321. package/dist/es/standards-sdk.es49.js +83 -449
  322. package/dist/es/standards-sdk.es49.js.map +1 -1
  323. package/dist/es/standards-sdk.es5.js +232 -354
  324. package/dist/es/standards-sdk.es5.js.map +1 -1
  325. package/dist/es/standards-sdk.es50.js +179 -89
  326. package/dist/es/standards-sdk.es50.js.map +1 -1
  327. package/dist/es/standards-sdk.es51.js +231 -165
  328. package/dist/es/standards-sdk.es51.js.map +1 -1
  329. package/dist/es/standards-sdk.es52.js +25 -262
  330. package/dist/es/standards-sdk.es52.js.map +1 -1
  331. package/dist/es/standards-sdk.es53.js +56 -26
  332. package/dist/es/standards-sdk.es53.js.map +1 -1
  333. package/dist/es/standards-sdk.es54.js +12 -57
  334. package/dist/es/standards-sdk.es54.js.map +1 -1
  335. package/dist/es/standards-sdk.es55.js +49 -12
  336. package/dist/es/standards-sdk.es55.js.map +1 -1
  337. package/dist/es/standards-sdk.es56.js +115 -43
  338. package/dist/es/standards-sdk.es56.js.map +1 -1
  339. package/dist/es/standards-sdk.es57.js +42 -115
  340. package/dist/es/standards-sdk.es57.js.map +1 -1
  341. package/dist/es/standards-sdk.es58.js +52 -43
  342. package/dist/es/standards-sdk.es58.js.map +1 -1
  343. package/dist/es/standards-sdk.es59.js +36 -50
  344. package/dist/es/standards-sdk.es59.js.map +1 -1
  345. package/dist/es/standards-sdk.es6.js +125 -246
  346. package/dist/es/standards-sdk.es6.js.map +1 -1
  347. package/dist/es/standards-sdk.es60.js +207 -39
  348. package/dist/es/standards-sdk.es60.js.map +1 -1
  349. package/dist/es/standards-sdk.es61.js +24 -200
  350. package/dist/es/standards-sdk.es61.js.map +1 -1
  351. package/dist/es/standards-sdk.es62.js +87 -25
  352. package/dist/es/standards-sdk.es62.js.map +1 -1
  353. package/dist/es/standards-sdk.es63.js +3 -51
  354. package/dist/es/standards-sdk.es63.js.map +1 -1
  355. package/dist/es/standards-sdk.es64.js +100 -3
  356. package/dist/es/standards-sdk.es64.js.map +1 -1
  357. package/dist/es/standards-sdk.es65.js +61 -62
  358. package/dist/es/standards-sdk.es65.js.map +1 -1
  359. package/dist/es/standards-sdk.es66.js +17 -98
  360. package/dist/es/standards-sdk.es66.js.map +1 -1
  361. package/dist/es/standards-sdk.es67.js +77 -19
  362. package/dist/es/standards-sdk.es67.js.map +1 -1
  363. package/dist/es/standards-sdk.es68.js +458 -77
  364. package/dist/es/standards-sdk.es68.js.map +1 -1
  365. package/dist/es/standards-sdk.es69.js +106 -240
  366. package/dist/es/standards-sdk.es69.js.map +1 -1
  367. package/dist/es/standards-sdk.es7.js +28 -183
  368. package/dist/es/standards-sdk.es7.js.map +1 -1
  369. package/dist/es/standards-sdk.es70.js +170 -286
  370. package/dist/es/standards-sdk.es70.js.map +1 -1
  371. package/dist/es/standards-sdk.es71.js +71 -207
  372. package/dist/es/standards-sdk.es71.js.map +1 -1
  373. package/dist/es/standards-sdk.es72.js +71 -72
  374. package/dist/es/standards-sdk.es72.js.map +1 -1
  375. package/dist/es/standards-sdk.es73.js +143 -71
  376. package/dist/es/standards-sdk.es73.js.map +1 -1
  377. package/dist/es/standards-sdk.es74.js +62 -136
  378. package/dist/es/standards-sdk.es74.js.map +1 -1
  379. package/dist/es/standards-sdk.es75.js +380 -45
  380. package/dist/es/standards-sdk.es75.js.map +1 -1
  381. package/dist/es/standards-sdk.es76.js +222 -130
  382. package/dist/es/standards-sdk.es76.js.map +1 -1
  383. package/dist/es/standards-sdk.es77.js +320 -444
  384. package/dist/es/standards-sdk.es77.js.map +1 -1
  385. package/dist/es/standards-sdk.es78.js +88 -370
  386. package/dist/es/standards-sdk.es78.js.map +1 -1
  387. package/dist/es/standards-sdk.es79.js +125 -89
  388. package/dist/es/standards-sdk.es79.js.map +1 -1
  389. package/dist/es/standards-sdk.es8.js +80 -29
  390. package/dist/es/standards-sdk.es8.js.map +1 -1
  391. package/dist/es/standards-sdk.es80.js +8 -125
  392. package/dist/es/standards-sdk.es80.js.map +1 -1
  393. package/dist/es/standards-sdk.es81.js +45 -6
  394. package/dist/es/standards-sdk.es81.js.map +1 -1
  395. package/dist/es/standards-sdk.es82.js +98 -44
  396. package/dist/es/standards-sdk.es82.js.map +1 -1
  397. package/dist/es/standards-sdk.es83.js +331 -84
  398. package/dist/es/standards-sdk.es83.js.map +1 -1
  399. package/dist/es/standards-sdk.es84.js +93 -160
  400. package/dist/es/standards-sdk.es84.js.map +1 -1
  401. package/dist/es/standards-sdk.es85.js +55 -275
  402. package/dist/es/standards-sdk.es85.js.map +1 -1
  403. package/dist/es/standards-sdk.es86.js +43 -55
  404. package/dist/es/standards-sdk.es86.js.map +1 -1
  405. package/dist/es/standards-sdk.es87.js +145 -22
  406. package/dist/es/standards-sdk.es87.js.map +1 -1
  407. package/dist/es/standards-sdk.es88.js +34 -47
  408. package/dist/es/standards-sdk.es88.js.map +1 -1
  409. package/dist/es/standards-sdk.es89.js +22 -57
  410. package/dist/es/standards-sdk.es89.js.map +1 -1
  411. package/dist/es/standards-sdk.es9.js +104 -80
  412. package/dist/es/standards-sdk.es9.js.map +1 -1
  413. package/dist/es/standards-sdk.es90.js +23 -28
  414. package/dist/es/standards-sdk.es90.js.map +1 -1
  415. package/dist/es/standards-sdk.es91.js +238 -23
  416. package/dist/es/standards-sdk.es91.js.map +1 -1
  417. package/dist/es/standards-sdk.es92.js +265 -152
  418. package/dist/es/standards-sdk.es92.js.map +1 -1
  419. package/dist/es/standards-sdk.es93.js +95 -68
  420. package/dist/es/standards-sdk.es93.js.map +1 -1
  421. package/dist/es/standards-sdk.es94.js +124 -136
  422. package/dist/es/standards-sdk.es94.js.map +1 -1
  423. package/dist/es/standards-sdk.es95.js +42 -138
  424. package/dist/es/standards-sdk.es95.js.map +1 -1
  425. package/dist/es/standards-sdk.es96.js +259 -42
  426. package/dist/es/standards-sdk.es96.js.map +1 -1
  427. package/dist/es/standards-sdk.es97.js +82 -243
  428. package/dist/es/standards-sdk.es97.js.map +1 -1
  429. package/dist/es/standards-sdk.es98.js +48 -47
  430. package/dist/es/standards-sdk.es98.js.map +1 -1
  431. package/dist/es/standards-sdk.es99.js +29 -100
  432. package/dist/es/standards-sdk.es99.js.map +1 -1
  433. package/dist/es/utils/crypto-abstraction.d.ts.map +1 -1
  434. package/dist/es/utils/crypto-env.d.ts.map +1 -1
  435. package/dist/es/utils/dynamic-import.d.ts +5 -1
  436. package/dist/es/utils/dynamic-import.d.ts.map +1 -1
  437. package/dist/es/utils/hash-adapter.d.ts.map +1 -1
  438. package/package.json +36 -13
  439. package/dist/cjs/patches/topic-autorenew-patch.d.ts +0 -2
  440. package/dist/cjs/patches/topic-autorenew-patch.d.ts.map +0 -1
  441. package/dist/es/patches/topic-autorenew-patch.d.ts +0 -2
  442. package/dist/es/patches/topic-autorenew-patch.d.ts.map +0 -1
@@ -1,148 +1,52 @@
1
- import { HederaMirrorNode } from "./standards-sdk.es127.js";
2
- import { KeyList } from "@hashgraph/sdk";
3
- import { buildHcs16CreateFloraTopicTx } from "./standards-sdk.es92.js";
4
- import { Logger } from "./standards-sdk.es106.js";
5
- import { FloraTopicType } from "./standards-sdk.es91.js";
6
- class HCS16BaseClient {
7
- constructor(params) {
8
- this.network = params.network;
9
- this.logger = params.logger || new Logger({ level: "info", module: "HCS-16" });
10
- this.mirrorNode = new HederaMirrorNode(this.network, this.logger, {
11
- customUrl: params.mirrorNodeUrl
12
- });
1
+ import { z } from "zod";
2
+ const hcs17MessageSchema = z.object({
3
+ p: z.literal("hcs-17"),
4
+ op: z.literal("state_hash"),
5
+ state_hash: z.string().min(1),
6
+ topics: z.array(z.string()),
7
+ account_id: z.string().min(1),
8
+ epoch: z.number().int().nonnegative().optional(),
9
+ timestamp: z.string().optional(),
10
+ m: z.string().optional()
11
+ });
12
+ class StateHashError extends Error {
13
+ constructor(message, code) {
14
+ super(message);
15
+ this.code = code;
16
+ this.name = "StateHashError";
13
17
  }
14
- async assembleKeyList(params) {
15
- const keys = [];
16
- for (const accountId of params.members) {
17
- const pub = await this.mirrorNode.getPublicKey(accountId);
18
- keys.push(pub);
19
- }
20
- return new KeyList(keys, params.threshold);
21
- }
22
- async assembleSubmitKeyList(members) {
23
- const keys = [];
24
- for (const accountId of members) {
25
- const pub = await this.mirrorNode.getPublicKey(accountId);
26
- keys.push(pub);
27
- }
28
- return new KeyList(keys, 1);
29
- }
30
- buildFloraTopicCreateTxs(params) {
31
- const communication = buildHcs16CreateFloraTopicTx({
32
- floraAccountId: params.floraAccountId,
33
- topicType: FloraTopicType.COMMUNICATION,
34
- adminKey: params.keyList,
35
- submitKey: params.submitList,
36
- autoRenewAccountId: params.autoRenewAccountId
37
- });
38
- const transaction = buildHcs16CreateFloraTopicTx({
39
- floraAccountId: params.floraAccountId,
40
- topicType: FloraTopicType.TRANSACTION,
41
- adminKey: params.keyList,
42
- submitKey: params.submitList,
43
- autoRenewAccountId: params.autoRenewAccountId
44
- });
45
- const state = buildHcs16CreateFloraTopicTx({
46
- floraAccountId: params.floraAccountId,
47
- topicType: FloraTopicType.STATE,
48
- adminKey: params.keyList,
49
- submitKey: params.submitList,
50
- autoRenewAccountId: params.autoRenewAccountId
51
- });
52
- return { communication, transaction, state };
53
- }
54
- /**
55
- * Parse an HCS‑16 Flora topic memo of the form `hcs-16:<floraAccountId>:<topicType>`.
56
- */
57
- parseTopicMemo(memo) {
58
- const match = memo.match(/^hcs-16:([0-9.]+):(\d)$/);
18
+ }
19
+ var HCS17TopicType = /* @__PURE__ */ ((HCS17TopicType2) => {
20
+ HCS17TopicType2[HCS17TopicType2["STATE"] = 0] = "STATE";
21
+ return HCS17TopicType2;
22
+ })(HCS17TopicType || {});
23
+ function generateHCS17Memo(ttl) {
24
+ return `hcs-17:${0}:${ttl}`;
25
+ }
26
+ function parseHCS17Memo(memo) {
27
+ try {
28
+ const match = memo.match(/^hcs-17:(\d+):(\d+)$/);
59
29
  if (!match) {
60
- return null;
30
+ return void 0;
61
31
  }
62
- const floraAccountId = match[1];
63
- const topicType = Number(match[2]);
64
- if (topicType !== FloraTopicType.COMMUNICATION && topicType !== FloraTopicType.TRANSACTION && topicType !== FloraTopicType.STATE) {
65
- return null;
32
+ const type = Number(match[1]);
33
+ const ttl = Number(match[2]);
34
+ if (Number.isNaN(type) || Number.isNaN(ttl) || ttl <= 0) {
35
+ return void 0;
66
36
  }
67
- return {
68
- protocol: "hcs-16",
69
- floraAccountId,
70
- topicType
71
- };
72
- }
73
- /**
74
- * Build a Flora message envelope by merging an operation body into the HCS‑16 envelope.
75
- */
76
- createFloraMessage(op, operatorId, body) {
77
- const payload = {
78
- p: "hcs-16",
79
- op,
80
- operator_id: operatorId,
81
- ...body || {}
82
- };
83
- return payload;
84
- }
85
- /**
86
- * Fetch recent HCS‑16 messages from a topic via Mirror Node.
87
- */
88
- async getRecentMessages(topicId, options) {
89
- const limit = options?.limit ?? 25;
90
- const order = options?.order ?? "desc";
91
- const items = await this.mirrorNode.getTopicMessages(topicId, { limit, order });
92
- const results = [];
93
- for (const raw of items) {
94
- if (raw.p !== "hcs-16") {
95
- continue;
96
- }
97
- const {
98
- consensus_timestamp,
99
- sequence_number,
100
- running_hash,
101
- running_hash_version,
102
- topic_id,
103
- payer,
104
- created,
105
- chunk_info,
106
- ...payload
107
- } = raw;
108
- const op = payload.op;
109
- const operatorId = payload.operator_id;
110
- if (options?.opFilter && op !== options.opFilter) {
111
- continue;
112
- }
113
- if (typeof operatorId !== "string") {
114
- continue;
115
- }
116
- const message = payload;
117
- results.push({
118
- message,
119
- consensus_timestamp,
120
- sequence_number: Number(sequence_number),
121
- payer
122
- });
123
- }
124
- return results;
125
- }
126
- /**
127
- * Return the latest valid HCS‑16 message on a topic, if any.
128
- */
129
- async getLatestMessage(topicId, opFilter) {
130
- const items = await this.getRecentMessages(topicId, {
131
- limit: 1,
132
- order: "desc",
133
- opFilter
134
- });
135
- if (items.length === 0) {
136
- return null;
37
+ if (type !== 0) {
38
+ return void 0;
137
39
  }
138
- const first = items[0];
139
- return Object.assign({}, first.message, {
140
- consensus_timestamp: first.consensus_timestamp,
141
- sequence_number: first.sequence_number
142
- });
40
+ return { type, ttl };
41
+ } catch {
42
+ return void 0;
143
43
  }
144
44
  }
145
45
  export {
146
- HCS16BaseClient
46
+ HCS17TopicType,
47
+ StateHashError,
48
+ generateHCS17Memo,
49
+ hcs17MessageSchema,
50
+ parseHCS17Memo
147
51
  };
148
52
  //# sourceMappingURL=standards-sdk.es95.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es95.js","sources":["../../src/hcs-16/base-client.ts"],"sourcesContent":["import { HederaMirrorNode } from '../services/mirror-node';\nimport { KeyList, TopicCreateTransaction, PublicKey } from '@hashgraph/sdk';\nimport { buildHcs16CreateFloraTopicTx } from './tx';\nimport { Logger, ILogger } from '../utils/logger';\nimport { NetworkType } from '../utils/types';\nimport { FloraTopicType, FloraMessage, FloraOperation } from './types';\nimport type { HCSMessageWithCommonFields } from '../services/types';\n\n/**\n * Base client for HCS‑16 functionality. Provides logging, mirror‑node access,\n * memo helpers, and light message utilities shared by Node and Browser clients.\n */\nexport class HCS16BaseClient {\n protected readonly network: NetworkType;\n public mirrorNode: HederaMirrorNode;\n protected readonly logger: ILogger;\n\n constructor(params: {\n network: NetworkType;\n logger?: ILogger;\n mirrorNodeUrl?: string;\n }) {\n this.network = params.network;\n this.logger =\n params.logger || new Logger({ level: 'info', module: 'HCS-16' });\n this.mirrorNode = new HederaMirrorNode(this.network, this.logger, {\n customUrl: params.mirrorNodeUrl,\n });\n }\n\n async assembleKeyList(params: {\n members: string[];\n threshold: number;\n }): Promise<KeyList> {\n const keys: PublicKey[] = [];\n for (const accountId of params.members) {\n const pub = await this.mirrorNode.getPublicKey(accountId);\n keys.push(pub);\n }\n return new KeyList(keys, params.threshold);\n }\n\n async assembleSubmitKeyList(members: string[]): Promise<KeyList> {\n const keys: PublicKey[] = [];\n for (const accountId of members) {\n const pub = await this.mirrorNode.getPublicKey(accountId);\n keys.push(pub);\n }\n return new KeyList(keys, 1);\n }\n\n buildFloraTopicCreateTxs(params: {\n floraAccountId: string;\n keyList: KeyList;\n submitList: KeyList;\n autoRenewAccountId?: string;\n }): {\n communication: TopicCreateTransaction;\n transaction: TopicCreateTransaction;\n state: TopicCreateTransaction;\n } {\n const communication = buildHcs16CreateFloraTopicTx({\n floraAccountId: params.floraAccountId,\n topicType: FloraTopicType.COMMUNICATION,\n adminKey: params.keyList,\n submitKey: params.submitList,\n autoRenewAccountId: params.autoRenewAccountId,\n });\n const transaction = buildHcs16CreateFloraTopicTx({\n floraAccountId: params.floraAccountId,\n topicType: FloraTopicType.TRANSACTION,\n adminKey: params.keyList,\n submitKey: params.submitList,\n autoRenewAccountId: params.autoRenewAccountId,\n });\n const state = buildHcs16CreateFloraTopicTx({\n floraAccountId: params.floraAccountId,\n topicType: FloraTopicType.STATE,\n adminKey: params.keyList,\n submitKey: params.submitList,\n autoRenewAccountId: params.autoRenewAccountId,\n });\n return { communication, transaction, state };\n }\n\n /**\n * Parse an HCS‑16 Flora topic memo of the form `hcs-16:<floraAccountId>:<topicType>`.\n */\n parseTopicMemo(memo: string): {\n protocol: 'hcs-16';\n floraAccountId: string;\n topicType: FloraTopicType;\n } | null {\n const match = memo.match(/^hcs-16:([0-9.]+):(\\d)$/);\n if (!match) {\n return null;\n }\n const floraAccountId = match[1];\n const topicType = Number(match[2]) as FloraTopicType;\n if (\n topicType !== FloraTopicType.COMMUNICATION &&\n topicType !== FloraTopicType.TRANSACTION &&\n topicType !== FloraTopicType.STATE\n ) {\n return null;\n }\n return {\n protocol: 'hcs-16',\n floraAccountId,\n topicType,\n };\n }\n\n /**\n * Build a Flora message envelope by merging an operation body into the HCS‑16 envelope.\n */\n protected createFloraMessage(\n op: FloraOperation,\n operatorId: string,\n body?: Record<string, unknown>,\n ): FloraMessage {\n const payload: FloraMessage = {\n p: 'hcs-16',\n op,\n operator_id: operatorId,\n ...(body || {}),\n } as FloraMessage;\n return payload;\n }\n\n /**\n * Fetch recent HCS‑16 messages from a topic via Mirror Node.\n */\n async getRecentMessages(\n topicId: string,\n options?: {\n limit?: number;\n order?: 'asc' | 'desc';\n opFilter?: FloraOperation | string;\n },\n ): Promise<\n Array<{\n message: FloraMessage;\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: HCSMessageWithCommonFields[] =\n await this.mirrorNode.getTopicMessages(topicId, { limit, order });\n\n const results: Array<{\n message: FloraMessage;\n consensus_timestamp?: string;\n sequence_number: number;\n payer?: string;\n }> = [];\n\n for (const raw of items) {\n if (raw.p !== 'hcs-16') {\n continue;\n }\n\n const {\n consensus_timestamp,\n sequence_number,\n running_hash,\n running_hash_version,\n topic_id,\n payer,\n created,\n chunk_info,\n ...payload\n } = raw as unknown as Record<string, unknown>;\n\n const op = payload.op as FloraOperation | string | undefined;\n const operatorId = payload.operator_id as string | undefined;\n\n if (options?.opFilter && op !== options.opFilter) {\n continue;\n }\n if (typeof operatorId !== 'string') {\n continue;\n }\n\n const message = payload as unknown as FloraMessage;\n\n results.push({\n message,\n consensus_timestamp: consensus_timestamp as string | undefined,\n sequence_number: Number(sequence_number),\n payer: payer as string | undefined,\n });\n }\n return results;\n }\n\n /**\n * Return the latest valid HCS‑16 message on a topic, if any.\n */\n async getLatestMessage(\n topicId: string,\n opFilter?: FloraOperation | string,\n ): Promise<\n | (FloraMessage & { consensus_timestamp?: string; sequence_number: number })\n | null\n > {\n const items = await this.getRecentMessages(topicId, {\n limit: 1,\n order: 'desc',\n opFilter,\n });\n if (items.length === 0) {\n return null;\n }\n const first = items[0];\n return Object.assign({}, first.message, {\n consensus_timestamp: first.consensus_timestamp,\n sequence_number: first.sequence_number,\n });\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"standards-sdk.es95.js","sources":["../../src/hcs-17/types.ts"],"sourcesContent":["import { PublicKey, PrivateKey } from '@hashgraph/sdk';\nimport type { HashinalsWalletConnectSDK } from '@hashgraphonline/hashinal-wc';\nimport type { DAppSigner } from '@hashgraph/hedera-wallet-connect';\nimport { z } from 'zod';\nimport { Logger, LogLevel } from '../utils/logger';\nimport { NetworkType } from '../utils/types';\n\n/**\n * HCS-17 Topic state information\n */\nexport interface TopicState {\n topicId: string;\n latestRunningHash: string;\n}\n\n/**\n * HCS-17 Account state hash input\n */\nexport interface AccountStateInput {\n accountId: string;\n publicKey: PublicKey | string;\n topics: TopicState[];\n}\n\n/**\n * HCS-17 Composite state hash input for Flora/Bloom\n */\nexport interface CompositeStateInput {\n compositeAccountId: string;\n compositePublicKeyFingerprint: string;\n memberStates: Array<{\n accountId: string;\n stateHash: string;\n }>;\n compositeTopics: TopicState[];\n}\n\n/**\n * HCS-17 State hash message format\n */\nexport interface StateHashMessage {\n p: 'hcs-17';\n op: 'state_hash';\n state_hash: string;\n topics: string[];\n account_id: string;\n epoch?: number;\n timestamp?: string;\n m?: string;\n}\n\nexport const hcs17MessageSchema = z.object({\n p: z.literal('hcs-17'),\n op: z.literal('state_hash'),\n state_hash: z.string().min(1),\n topics: z.array(z.string()),\n account_id: z.string().min(1),\n epoch: z.number().int().nonnegative().optional(),\n timestamp: z.string().optional(),\n m: z.string().optional(),\n});\n\n/**\n * HCS-17 State hash result\n */\nexport interface StateHashResult {\n stateHash: string;\n accountId: string;\n timestamp: Date;\n topicCount: number;\n}\n\n/**\n * HCS-17 Composite state hash result\n */\nexport interface CompositeStateHashResult extends StateHashResult {\n memberCount: number;\n compositeTopicCount: number;\n}\n\n/**\n * HCS-17 errors\n */\nexport class StateHashError extends Error {\n constructor(\n message: string,\n public readonly code: string,\n ) {\n super(message);\n this.name = 'StateHashError';\n }\n}\n\n/**\n * Base configuration shared by HCS‑17 Node and Browser clients.\n */\nexport interface HCS17ClientConfig {\n network: NetworkType;\n logLevel?: LogLevel;\n silent?: boolean;\n mirrorNodeUrl?: string;\n logger?: Logger;\n}\n\n/**\n * Node SDK configuration for HCS‑17 client.\n */\nexport interface SDKHCS17ClientConfig extends HCS17ClientConfig {\n operatorId: string;\n operatorKey: string | PrivateKey;\n keyType?: 'ed25519' | 'ecdsa';\n}\n\n/**\n * Browser client configuration for HCS‑17 operations.\n */\nexport interface BrowserHCS17ClientConfig extends HCS17ClientConfig {\n hwc?: HashinalsWalletConnectSDK;\n signer?: DAppSigner;\n}\n\n/**\n * HCS‑17 topic types (numeric codes for memo encoding).\n */\nexport enum HCS17TopicType {\n STATE = 0,\n}\n\n/**\n * Generate the standard HCS‑17 topic memo: `hcs-17:<type>:<ttl>`.\n */\nexport function generateHCS17Memo(ttl: number): string {\n return `hcs-17:${HCS17TopicType.STATE}:${ttl}`;\n}\n\n/**\n * Parse an HCS‑17 memo into `{ type, ttl }` if valid.\n */\nexport function parseHCS17Memo(\n memo: string,\n): { type: HCS17TopicType; ttl: number } | undefined {\n try {\n const match = memo.match(/^hcs-17:(\\d+):(\\d+)$/);\n if (!match) {\n return undefined;\n }\n const type = Number(match[1]) as HCS17TopicType;\n const ttl = Number(match[2]);\n if (Number.isNaN(type) || Number.isNaN(ttl) || ttl <= 0) {\n return undefined;\n }\n if (type !== HCS17TopicType.STATE) {\n return undefined;\n }\n return { type, ttl };\n } catch {\n return undefined;\n }\n}\n"],"names":["HCS17TopicType"],"mappings":";AAmDO,MAAM,qBAAqB,EAAE,OAAO;AAAA,EACzC,GAAG,EAAE,QAAQ,QAAQ;AAAA,EACrB,IAAI,EAAE,QAAQ,YAAY;AAAA,EAC1B,YAAY,EAAE,SAAS,IAAI,CAAC;AAAA,EAC5B,QAAQ,EAAE,MAAM,EAAE,QAAQ;AAAA,EAC1B,YAAY,EAAE,SAAS,IAAI,CAAC;AAAA,EAC5B,OAAO,EAAE,OAAA,EAAS,MAAM,YAAA,EAAc,SAAA;AAAA,EACtC,WAAW,EAAE,OAAA,EAAS,SAAA;AAAA,EACtB,GAAG,EAAE,OAAA,EAAS,SAAA;AAChB,CAAC;AAuBM,MAAM,uBAAuB,MAAM;AAAA,EACxC,YACE,SACgB,MAChB;AACA,UAAM,OAAO;AAFG,SAAA,OAAA;AAGhB,SAAK,OAAO;AAAA,EACd;AACF;AAiCO,IAAK,mCAAAA,oBAAL;AACLA,kBAAAA,gBAAA,WAAQ,CAAA,IAAR;AADU,SAAAA;AAAA,GAAA,kBAAA,CAAA,CAAA;AAOL,SAAS,kBAAkB,KAAqB;AACrD,SAAO,UAAU,KAAwB,GAAG;AAC9C;AAKO,SAAS,eACd,MACmD;AACnD,MAAI;AACF,UAAM,QAAQ,KAAK,MAAM,sBAAsB;AAC/C,QAAI,CAAC,OAAO;AACV,aAAO;AAAA,IACT;AACA,UAAM,OAAO,OAAO,MAAM,CAAC,CAAC;AAC5B,UAAM,MAAM,OAAO,MAAM,CAAC,CAAC;AAC3B,QAAI,OAAO,MAAM,IAAI,KAAK,OAAO,MAAM,GAAG,KAAK,OAAO,GAAG;AACvD,aAAO;AAAA,IACT;AACA,QAAI,SAAS,GAAsB;AACjC,aAAO;AAAA,IACT;AACA,WAAO,EAAE,MAAM,IAAA;AAAA,EACjB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;"}
@@ -1,51 +1,268 @@
1
- import { z } from "zod";
2
- const hcs17MessageSchema = z.object({
3
- p: z.literal("hcs-17"),
4
- op: z.literal("state_hash"),
5
- state_hash: z.string().min(1),
6
- topics: z.array(z.string()),
7
- account_id: z.string().min(1),
8
- timestamp: z.string().optional(),
9
- m: z.string().optional()
10
- });
11
- class StateHashError extends Error {
12
- constructor(message, code) {
13
- super(message);
14
- this.code = code;
15
- this.name = "StateHashError";
1
+ import { HederaMirrorNode } from "./standards-sdk.es126.js";
2
+ import { Logger } from "./standards-sdk.es105.js";
3
+ import { createHash } from "crypto";
4
+ import { hcs17MessageSchema, generateHCS17Memo, parseHCS17Memo, HCS17TopicType } from "./standards-sdk.es95.js";
5
+ class HCS17BaseClient {
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
11
+ });
16
12
  }
17
- }
18
- var HCS17TopicType = /* @__PURE__ */ ((HCS17TopicType2) => {
19
- HCS17TopicType2[HCS17TopicType2["STATE"] = 0] = "STATE";
20
- return HCS17TopicType2;
21
- })(HCS17TopicType || {});
22
- function generateHCS17Memo(ttl) {
23
- return `hcs-17:${0}:${ttl}`;
24
- }
25
- function parseHCS17Memo(memo) {
26
- try {
27
- const match = memo.match(/^hcs-17:(\d+):(\d+)$/);
28
- if (!match) {
29
- return void 0;
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
+ epoch: params.epoch,
24
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
25
+ m: params.memo
26
+ };
27
+ return msg;
28
+ }
29
+ /**
30
+ * Validate an HCS‑17 message against the schema.
31
+ */
32
+ validateMessage(message) {
33
+ const res = hcs17MessageSchema.safeParse(message);
34
+ if (res.success) {
35
+ return { valid: true, errors: [] };
30
36
  }
31
- const type = Number(match[1]);
32
- const ttl = Number(match[2]);
33
- if (Number.isNaN(type) || Number.isNaN(ttl) || ttl <= 0) {
34
- return void 0;
37
+ const errors = res.error.errors.map(
38
+ (e) => `${e.path.join(".")}: ${e.message}`
39
+ );
40
+ this.logger.debug(`HCS-17 message validation failed: ${errors.join(", ")}`);
41
+ return { valid: false, errors };
42
+ }
43
+ /**
44
+ * Generate default HCS‑17 topic memo using numeric enum codes.
45
+ */
46
+ generateTopicMemo(ttl) {
47
+ return generateHCS17Memo(ttl);
48
+ }
49
+ /**
50
+ * Validate that a topic is a valid HCS‑17 topic and return parsed info.
51
+ */
52
+ async validateHCS17Topic(topicId) {
53
+ try {
54
+ const info = await this.mirrorNode.getTopicInfo(topicId);
55
+ const parsed = parseHCS17Memo(info.memo);
56
+ if (!parsed) {
57
+ return { valid: false, error: "Invalid HCS-17 memo format" };
58
+ }
59
+ if (parsed.type !== HCS17TopicType.STATE) {
60
+ return { valid: false, error: "Unsupported HCS-17 topic type" };
61
+ }
62
+ return { valid: true, type: parsed.type, ttl: parsed.ttl };
63
+ } catch (e) {
64
+ return { valid: false, error: String(e) };
65
+ }
66
+ }
67
+ /**
68
+ * Fetch recent HCS‑17 messages from a topic via Mirror Node.
69
+ */
70
+ async getRecentMessages(topicId, options) {
71
+ const limit = options?.limit ?? 25;
72
+ const order = options?.order ?? "desc";
73
+ const items = await this.mirrorNode.getTopicMessages(topicId, {
74
+ limit,
75
+ order
76
+ });
77
+ const results = [];
78
+ for (const m of items) {
79
+ try {
80
+ if (m.p !== "hcs-17" || m.op !== "state_hash") {
81
+ continue;
82
+ }
83
+ const envelope = m;
84
+ const { valid } = this.validateMessage(envelope);
85
+ if (!valid) {
86
+ continue;
87
+ }
88
+ results.push({
89
+ message: {
90
+ p: "hcs-17",
91
+ op: "state_hash",
92
+ state_hash: envelope.state_hash,
93
+ topics: envelope.topics,
94
+ account_id: envelope.account_id,
95
+ epoch: envelope.epoch,
96
+ timestamp: envelope.timestamp,
97
+ m: envelope.m
98
+ },
99
+ consensus_timestamp: envelope.consensus_timestamp,
100
+ sequence_number: Number(envelope.sequence_number),
101
+ payer: envelope.payer
102
+ });
103
+ } catch (err) {
104
+ this.logger.debug(`Failed to parse HCS-17 message: ${err}`);
105
+ }
106
+ }
107
+ return results;
108
+ }
109
+ /**
110
+ * Return the latest valid HCS‑17 message on a topic, if any.
111
+ */
112
+ async getLatestMessage(topicId) {
113
+ const items = await this.getRecentMessages(topicId, {
114
+ limit: 1,
115
+ order: "desc"
116
+ });
117
+ if (!items.length) {
118
+ return null;
35
119
  }
36
- if (type !== 0) {
37
- return void 0;
120
+ const { message, consensus_timestamp, sequence_number } = items[0];
121
+ return Object.assign({}, message, { consensus_timestamp, sequence_number });
122
+ }
123
+ /**
124
+ * Calculate state hash for a single account.
125
+ */
126
+ calculateAccountStateHash(input) {
127
+ try {
128
+ this.logger.debug("Calculating account state hash", {
129
+ accountId: input.accountId,
130
+ topicCount: input.topics.length
131
+ });
132
+ const sortedTopics = [...input.topics].sort(
133
+ (a, b) => a.topicId.localeCompare(b.topicId)
134
+ );
135
+ let concatenated = "";
136
+ for (const topic of sortedTopics) {
137
+ concatenated += topic.topicId + topic.latestRunningHash;
138
+ }
139
+ let publicKeyString = "";
140
+ if (typeof input.publicKey === "string") {
141
+ publicKeyString = input.publicKey;
142
+ } else {
143
+ publicKeyString = input.publicKey.toString();
144
+ }
145
+ concatenated += publicKeyString;
146
+ const hash = createHash("sha384");
147
+ hash.update(concatenated);
148
+ const stateHash = hash.digest("hex");
149
+ this.logger.debug("Account state hash calculated", {
150
+ accountId: input.accountId,
151
+ stateHash
152
+ });
153
+ return {
154
+ stateHash,
155
+ accountId: input.accountId,
156
+ timestamp: /* @__PURE__ */ new Date(),
157
+ topicCount: input.topics.length
158
+ };
159
+ } catch (error) {
160
+ this.logger.error("Failed to calculate account state hash", error);
161
+ throw new Error("HCS-17 CALCULATION_FAILED");
162
+ }
163
+ }
164
+ /**
165
+ * Calculate composite state hash for composite accounts (e.g., Flora/Bloom).
166
+ */
167
+ calculateCompositeStateHash(input) {
168
+ try {
169
+ this.logger.debug("Calculating composite state hash", {
170
+ compositeAccountId: input.compositeAccountId,
171
+ memberCount: input.memberStates.length,
172
+ topicCount: input.compositeTopics.length
173
+ });
174
+ const sortedMembers = [...input.memberStates].sort(
175
+ (a, b) => a.accountId.localeCompare(b.accountId)
176
+ );
177
+ const sortedTopics = [...input.compositeTopics].sort(
178
+ (a, b) => a.topicId.localeCompare(b.topicId)
179
+ );
180
+ let concatenated = "";
181
+ for (const member of sortedMembers) {
182
+ concatenated += member.accountId + member.stateHash;
183
+ }
184
+ for (const topic of sortedTopics) {
185
+ concatenated += topic.topicId + topic.latestRunningHash;
186
+ }
187
+ concatenated += input.compositePublicKeyFingerprint;
188
+ const hash = createHash("sha384");
189
+ hash.update(concatenated);
190
+ const stateHash = hash.digest("hex");
191
+ this.logger.debug("Composite state hash calculated", {
192
+ compositeAccountId: input.compositeAccountId,
193
+ stateHash
194
+ });
195
+ return {
196
+ stateHash,
197
+ accountId: input.compositeAccountId,
198
+ timestamp: /* @__PURE__ */ new Date(),
199
+ topicCount: input.compositeTopics.length,
200
+ memberCount: input.memberStates.length,
201
+ compositeTopicCount: input.compositeTopics.length
202
+ };
203
+ } catch (error) {
204
+ this.logger.error("Failed to calculate composite state hash", error);
205
+ throw new Error("HCS-17 COMPOSITE_CALCULATION_FAILED");
206
+ }
207
+ }
208
+ /**
209
+ * Calculate deterministic fingerprint for a threshold key from member public keys.
210
+ */
211
+ calculateKeyFingerprint(keys, threshold) {
212
+ try {
213
+ const sortedKeys = [...keys].sort(
214
+ (a, b) => a.toString().localeCompare(b.toString())
215
+ );
216
+ const keyData = { threshold, keys: sortedKeys.map((k) => k.toString()) };
217
+ const hash = createHash("sha384");
218
+ hash.update(JSON.stringify(keyData));
219
+ return hash.digest("hex");
220
+ } catch (error) {
221
+ this.logger.error("Failed to calculate key fingerprint", error);
222
+ throw new Error("HCS-17 FINGERPRINT_FAILED");
223
+ }
224
+ }
225
+ /**
226
+ * Build a valid HCS‑17 state hash message.
227
+ */
228
+ createStateHashMessage(stateHash, accountId, topicIds, memo) {
229
+ return {
230
+ p: "hcs-17",
231
+ op: "state_hash",
232
+ state_hash: stateHash,
233
+ topics: topicIds,
234
+ account_id: accountId,
235
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
236
+ m: memo
237
+ };
238
+ }
239
+ /**
240
+ * Recompute and verify a state hash input against an expected value.
241
+ */
242
+ async verifyStateHash(input, expectedHash) {
243
+ try {
244
+ let calculatedHash;
245
+ if ("publicKey" in input) {
246
+ calculatedHash = this.calculateAccountStateHash(input).stateHash;
247
+ } else {
248
+ calculatedHash = this.calculateCompositeStateHash(input).stateHash;
249
+ }
250
+ const isValid = calculatedHash === expectedHash;
251
+ const accountId = "accountId" in input ? input.accountId : input.compositeAccountId;
252
+ this.logger.debug("State hash verification", {
253
+ accountId,
254
+ isValid,
255
+ expected: expectedHash,
256
+ calculated: calculatedHash
257
+ });
258
+ return isValid;
259
+ } catch (error) {
260
+ this.logger.error("Failed to verify state hash", error);
261
+ return false;
38
262
  }
39
- return { type, ttl };
40
- } catch {
41
- return void 0;
42
263
  }
43
264
  }
44
265
  export {
45
- HCS17TopicType,
46
- StateHashError,
47
- generateHCS17Memo,
48
- hcs17MessageSchema,
49
- parseHCS17Memo
266
+ HCS17BaseClient
50
267
  };
51
268
  //# sourceMappingURL=standards-sdk.es96.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es96.js","sources":["../../src/hcs-17/types.ts"],"sourcesContent":["import { PublicKey, PrivateKey } from '@hashgraph/sdk';\nimport type { HashinalsWalletConnectSDK } from '@hashgraphonline/hashinal-wc';\nimport type { DAppSigner } from '@hashgraph/hedera-wallet-connect';\nimport { z } from 'zod';\nimport { Logger, LogLevel } from '../utils/logger';\nimport { NetworkType } from '../utils/types';\n\n/**\n * HCS-17 Topic state information\n */\nexport interface TopicState {\n topicId: string;\n latestRunningHash: string;\n}\n\n/**\n * HCS-17 Account state hash input\n */\nexport interface AccountStateInput {\n accountId: string;\n publicKey: PublicKey | string;\n topics: TopicState[];\n}\n\n/**\n * HCS-17 Composite state hash input for Flora/Bloom\n */\nexport interface CompositeStateInput {\n compositeAccountId: string;\n compositePublicKeyFingerprint: string;\n memberStates: Array<{\n accountId: string;\n stateHash: string;\n }>;\n compositeTopics: TopicState[];\n}\n\n/**\n * HCS-17 State hash message format\n */\nexport interface StateHashMessage {\n p: 'hcs-17';\n op: 'state_hash';\n state_hash: string;\n topics: string[];\n account_id: string;\n timestamp?: string;\n m?: string;\n}\n\nexport const hcs17MessageSchema = z.object({\n p: z.literal('hcs-17'),\n op: z.literal('state_hash'),\n state_hash: z.string().min(1),\n topics: z.array(z.string()),\n account_id: z.string().min(1),\n timestamp: z.string().optional(),\n m: z.string().optional(),\n});\n\n/**\n * HCS-17 State hash result\n */\nexport interface StateHashResult {\n stateHash: string;\n accountId: string;\n timestamp: Date;\n topicCount: number;\n}\n\n/**\n * HCS-17 Composite state hash result\n */\nexport interface CompositeStateHashResult extends StateHashResult {\n memberCount: number;\n compositeTopicCount: number;\n}\n\n/**\n * HCS-17 errors\n */\nexport class StateHashError extends Error {\n constructor(\n message: string,\n public readonly code: string,\n ) {\n super(message);\n this.name = 'StateHashError';\n }\n}\n\n/**\n * Base configuration shared by HCS‑17 Node and Browser clients.\n */\nexport interface HCS17ClientConfig {\n network: NetworkType;\n logLevel?: LogLevel;\n silent?: boolean;\n mirrorNodeUrl?: string;\n logger?: Logger;\n}\n\n/**\n * Node SDK configuration for HCS‑17 client.\n */\nexport interface SDKHCS17ClientConfig extends HCS17ClientConfig {\n operatorId: string;\n operatorKey: string | PrivateKey;\n keyType?: 'ed25519' | 'ecdsa';\n}\n\n/**\n * Browser client configuration for HCS‑17 operations.\n */\nexport interface BrowserHCS17ClientConfig extends HCS17ClientConfig {\n hwc?: HashinalsWalletConnectSDK;\n signer?: DAppSigner;\n}\n\n/**\n * HCS‑17 topic types (numeric codes for memo encoding).\n */\nexport enum HCS17TopicType {\n STATE = 0,\n}\n\n/**\n * Generate the standard HCS‑17 topic memo: `hcs-17:<type>:<ttl>`.\n */\nexport function generateHCS17Memo(ttl: number): string {\n return `hcs-17:${HCS17TopicType.STATE}:${ttl}`;\n}\n\n/**\n * Parse an HCS‑17 memo into `{ type, ttl }` if valid.\n */\nexport function parseHCS17Memo(\n memo: string,\n): { type: HCS17TopicType; ttl: number } | undefined {\n try {\n const match = memo.match(/^hcs-17:(\\d+):(\\d+)$/);\n if (!match) {\n return undefined;\n }\n const type = Number(match[1]) as HCS17TopicType;\n const ttl = Number(match[2]);\n if (Number.isNaN(type) || Number.isNaN(ttl) || ttl <= 0) {\n return undefined;\n }\n if (type !== HCS17TopicType.STATE) {\n return undefined;\n }\n return { type, ttl };\n } catch {\n return undefined;\n }\n}\n"],"names":["HCS17TopicType"],"mappings":";AAkDO,MAAM,qBAAqB,EAAE,OAAO;AAAA,EACzC,GAAG,EAAE,QAAQ,QAAQ;AAAA,EACrB,IAAI,EAAE,QAAQ,YAAY;AAAA,EAC1B,YAAY,EAAE,SAAS,IAAI,CAAC;AAAA,EAC5B,QAAQ,EAAE,MAAM,EAAE,QAAQ;AAAA,EAC1B,YAAY,EAAE,SAAS,IAAI,CAAC;AAAA,EAC5B,WAAW,EAAE,OAAA,EAAS,SAAA;AAAA,EACtB,GAAG,EAAE,OAAA,EAAS,SAAA;AAChB,CAAC;AAuBM,MAAM,uBAAuB,MAAM;AAAA,EACxC,YACE,SACgB,MAChB;AACA,UAAM,OAAO;AAFG,SAAA,OAAA;AAGhB,SAAK,OAAO;AAAA,EACd;AACF;AAiCO,IAAK,mCAAAA,oBAAL;AACLA,kBAAAA,gBAAA,WAAQ,CAAA,IAAR;AADU,SAAAA;AAAA,GAAA,kBAAA,CAAA,CAAA;AAOL,SAAS,kBAAkB,KAAqB;AACrD,SAAO,UAAU,KAAwB,GAAG;AAC9C;AAKO,SAAS,eACd,MACmD;AACnD,MAAI;AACF,UAAM,QAAQ,KAAK,MAAM,sBAAsB;AAC/C,QAAI,CAAC,OAAO;AACV,aAAO;AAAA,IACT;AACA,UAAM,OAAO,OAAO,MAAM,CAAC,CAAC;AAC5B,UAAM,MAAM,OAAO,MAAM,CAAC,CAAC;AAC3B,QAAI,OAAO,MAAM,IAAI,KAAK,OAAO,MAAM,GAAG,KAAK,OAAO,GAAG;AACvD,aAAO;AAAA,IACT;AACA,QAAI,SAAS,GAAsB;AACjC,aAAO;AAAA,IACT;AACA,WAAO,EAAE,MAAM,IAAA;AAAA,EACjB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;"}
1
+ {"version":3,"file":"standards-sdk.es96.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 epoch?: number;\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 epoch: params.epoch,\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 epoch: envelope.epoch,\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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"}