@hashgraphonline/standards-sdk 0.1.159 → 0.1.161

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 (329) hide show
  1. package/dist/cjs/hcs-12/validation/schemas.d.ts +4 -4
  2. package/dist/cjs/hcs-14/index.d.ts +5 -0
  3. package/dist/cjs/hcs-14/index.d.ts.map +1 -1
  4. package/dist/cjs/hcs-14/resolvers/aid-dns-web-profile.d.ts +37 -0
  5. package/dist/cjs/hcs-14/resolvers/aid-dns-web-profile.d.ts.map +1 -0
  6. package/dist/cjs/hcs-14/resolvers/dns.d.ts +3 -0
  7. package/dist/cjs/hcs-14/resolvers/dns.d.ts.map +1 -0
  8. package/dist/cjs/hcs-14/resolvers/hcs-11-profile.d.ts +8 -0
  9. package/dist/cjs/hcs-14/resolvers/hcs-11-profile.d.ts.map +1 -0
  10. package/dist/cjs/hcs-14/resolvers/profile-utils.d.ts +9 -0
  11. package/dist/cjs/hcs-14/resolvers/profile-utils.d.ts.map +1 -0
  12. package/dist/cjs/hcs-14/resolvers/registry.d.ts +38 -1
  13. package/dist/cjs/hcs-14/resolvers/registry.d.ts.map +1 -1
  14. package/dist/cjs/hcs-14/resolvers/types.d.ts +123 -5
  15. package/dist/cjs/hcs-14/resolvers/types.d.ts.map +1 -1
  16. package/dist/cjs/hcs-14/resolvers/uaid-did-resolution-profile.d.ts +10 -0
  17. package/dist/cjs/hcs-14/resolvers/uaid-did-resolution-profile.d.ts.map +1 -0
  18. package/dist/cjs/hcs-14/resolvers/uaid-dns-web-profile.d.ts +22 -0
  19. package/dist/cjs/hcs-14/resolvers/uaid-dns-web-profile.d.ts.map +1 -0
  20. package/dist/cjs/hcs-14/sdk.d.ts +31 -5
  21. package/dist/cjs/hcs-14/sdk.d.ts.map +1 -1
  22. package/dist/cjs/inscribe/inscriber.d.ts.map +1 -1
  23. package/dist/cjs/services/registry-broker/schemas.d.ts +1548 -0
  24. package/dist/cjs/services/registry-broker/schemas.d.ts.map +1 -1
  25. package/dist/cjs/standards-sdk.cjs +3 -3
  26. package/dist/cjs/standards-sdk.cjs.map +1 -1
  27. package/dist/es/hcs-12/validation/schemas.d.ts +4 -4
  28. package/dist/es/hcs-14/index.d.ts +5 -0
  29. package/dist/es/hcs-14/index.d.ts.map +1 -1
  30. package/dist/es/hcs-14/resolvers/aid-dns-web-profile.d.ts +37 -0
  31. package/dist/es/hcs-14/resolvers/aid-dns-web-profile.d.ts.map +1 -0
  32. package/dist/es/hcs-14/resolvers/dns.d.ts +3 -0
  33. package/dist/es/hcs-14/resolvers/dns.d.ts.map +1 -0
  34. package/dist/es/hcs-14/resolvers/hcs-11-profile.d.ts +8 -0
  35. package/dist/es/hcs-14/resolvers/hcs-11-profile.d.ts.map +1 -0
  36. package/dist/es/hcs-14/resolvers/profile-utils.d.ts +9 -0
  37. package/dist/es/hcs-14/resolvers/profile-utils.d.ts.map +1 -0
  38. package/dist/es/hcs-14/resolvers/registry.d.ts +38 -1
  39. package/dist/es/hcs-14/resolvers/registry.d.ts.map +1 -1
  40. package/dist/es/hcs-14/resolvers/types.d.ts +123 -5
  41. package/dist/es/hcs-14/resolvers/types.d.ts.map +1 -1
  42. package/dist/es/hcs-14/resolvers/uaid-did-resolution-profile.d.ts +10 -0
  43. package/dist/es/hcs-14/resolvers/uaid-did-resolution-profile.d.ts.map +1 -0
  44. package/dist/es/hcs-14/resolvers/uaid-dns-web-profile.d.ts +22 -0
  45. package/dist/es/hcs-14/resolvers/uaid-dns-web-profile.d.ts.map +1 -0
  46. package/dist/es/hcs-14/sdk.d.ts +31 -5
  47. package/dist/es/hcs-14/sdk.d.ts.map +1 -1
  48. package/dist/es/inscribe/inscriber.d.ts.map +1 -1
  49. package/dist/es/services/registry-broker/schemas.d.ts +1548 -0
  50. package/dist/es/services/registry-broker/schemas.d.ts.map +1 -1
  51. package/dist/es/standards-sdk.es.js +102 -85
  52. package/dist/es/standards-sdk.es.js.map +1 -1
  53. package/dist/es/standards-sdk.es100.js +138 -225
  54. package/dist/es/standards-sdk.es100.js.map +1 -1
  55. package/dist/es/standards-sdk.es101.js +44 -108
  56. package/dist/es/standards-sdk.es101.js.map +1 -1
  57. package/dist/es/standards-sdk.es102.js +255 -24
  58. package/dist/es/standards-sdk.es102.js.map +1 -1
  59. package/dist/es/standards-sdk.es103.js +98 -80
  60. package/dist/es/standards-sdk.es103.js.map +1 -1
  61. package/dist/es/standards-sdk.es104.js +91 -21
  62. package/dist/es/standards-sdk.es104.js.map +1 -1
  63. package/dist/es/standards-sdk.es105.js +29 -251
  64. package/dist/es/standards-sdk.es105.js.map +1 -1
  65. package/dist/es/standards-sdk.es106.js +211 -457
  66. package/dist/es/standards-sdk.es106.js.map +1 -1
  67. package/dist/es/standards-sdk.es107.js +104 -96
  68. package/dist/es/standards-sdk.es107.js.map +1 -1
  69. package/dist/es/standards-sdk.es108.js +26 -152
  70. package/dist/es/standards-sdk.es108.js.map +1 -1
  71. package/dist/es/standards-sdk.es109.js +77 -27
  72. package/dist/es/standards-sdk.es109.js.map +1 -1
  73. package/dist/es/standards-sdk.es11.js +1 -1
  74. package/dist/es/standards-sdk.es110.js +28 -9
  75. package/dist/es/standards-sdk.es110.js.map +1 -1
  76. package/dist/es/standards-sdk.es111.js +247 -137
  77. package/dist/es/standards-sdk.es111.js.map +1 -1
  78. package/dist/es/standards-sdk.es112.js +477 -28
  79. package/dist/es/standards-sdk.es112.js.map +1 -1
  80. package/dist/es/standards-sdk.es113.js +103 -20
  81. package/dist/es/standards-sdk.es113.js.map +1 -1
  82. package/dist/es/standards-sdk.es114.js +141 -141
  83. package/dist/es/standards-sdk.es114.js.map +1 -1
  84. package/dist/es/standards-sdk.es115.js +31 -200
  85. package/dist/es/standards-sdk.es115.js.map +1 -1
  86. package/dist/es/standards-sdk.es116.js +9 -787
  87. package/dist/es/standards-sdk.es116.js.map +1 -1
  88. package/dist/es/standards-sdk.es117.js +140 -11
  89. package/dist/es/standards-sdk.es117.js.map +1 -1
  90. package/dist/es/standards-sdk.es118.js +29 -567
  91. package/dist/es/standards-sdk.es118.js.map +1 -1
  92. package/dist/es/standards-sdk.es119.js +17 -597
  93. package/dist/es/standards-sdk.es119.js.map +1 -1
  94. package/dist/es/standards-sdk.es12.js +1 -1
  95. package/dist/es/standards-sdk.es120.js +159 -12
  96. package/dist/es/standards-sdk.es120.js.map +1 -1
  97. package/dist/es/standards-sdk.es121.js +203 -2
  98. package/dist/es/standards-sdk.es121.js.map +1 -1
  99. package/dist/es/standards-sdk.es122.js +774 -71
  100. package/dist/es/standards-sdk.es122.js.map +1 -1
  101. package/dist/es/standards-sdk.es123.js +11 -38
  102. package/dist/es/standards-sdk.es123.js.map +1 -1
  103. package/dist/es/standards-sdk.es124.js +567 -2
  104. package/dist/es/standards-sdk.es124.js.map +1 -1
  105. package/dist/es/standards-sdk.es125.js +576 -209
  106. package/dist/es/standards-sdk.es125.js.map +1 -1
  107. package/dist/es/standards-sdk.es126.js +12 -1139
  108. package/dist/es/standards-sdk.es126.js.map +1 -1
  109. package/dist/es/standards-sdk.es127.js +2 -306
  110. package/dist/es/standards-sdk.es127.js.map +1 -1
  111. package/dist/es/standards-sdk.es128.js +83 -418
  112. package/dist/es/standards-sdk.es128.js.map +1 -1
  113. package/dist/es/standards-sdk.es129.js +36 -351
  114. package/dist/es/standards-sdk.es129.js.map +1 -1
  115. package/dist/es/standards-sdk.es13.js +1 -1
  116. package/dist/es/standards-sdk.es130.js +2 -1116
  117. package/dist/es/standards-sdk.es130.js.map +1 -1
  118. package/dist/es/standards-sdk.es131.js +215 -188
  119. package/dist/es/standards-sdk.es131.js.map +1 -1
  120. package/dist/es/standards-sdk.es132.js +1055 -1482
  121. package/dist/es/standards-sdk.es132.js.map +1 -1
  122. package/dist/es/standards-sdk.es133.js +306 -1236
  123. package/dist/es/standards-sdk.es133.js.map +1 -1
  124. package/dist/es/standards-sdk.es134.js +419 -14
  125. package/dist/es/standards-sdk.es134.js.map +1 -1
  126. package/dist/es/standards-sdk.es135.js +350 -82
  127. package/dist/es/standards-sdk.es135.js.map +1 -1
  128. package/dist/es/standards-sdk.es136.js +1107 -72
  129. package/dist/es/standards-sdk.es136.js.map +1 -1
  130. package/dist/es/standards-sdk.es137.js +181 -866
  131. package/dist/es/standards-sdk.es137.js.map +1 -1
  132. package/dist/es/standards-sdk.es138.js +1558 -51
  133. package/dist/es/standards-sdk.es138.js.map +1 -1
  134. package/dist/es/standards-sdk.es139.js +1255 -159
  135. package/dist/es/standards-sdk.es139.js.map +1 -1
  136. package/dist/es/standards-sdk.es14.js +1 -1
  137. package/dist/es/standards-sdk.es140.js +17 -7
  138. package/dist/es/standards-sdk.es140.js.map +1 -1
  139. package/dist/es/standards-sdk.es141.js +79 -78
  140. package/dist/es/standards-sdk.es141.js.map +1 -1
  141. package/dist/es/standards-sdk.es142.js +75 -59
  142. package/dist/es/standards-sdk.es142.js.map +1 -1
  143. package/dist/es/standards-sdk.es143.js +893 -30
  144. package/dist/es/standards-sdk.es143.js.map +1 -1
  145. package/dist/es/standards-sdk.es144.js +60 -34
  146. package/dist/es/standards-sdk.es144.js.map +1 -1
  147. package/dist/es/standards-sdk.es145.js +159 -28
  148. package/dist/es/standards-sdk.es145.js.map +1 -1
  149. package/dist/es/standards-sdk.es146.js +7 -138
  150. package/dist/es/standards-sdk.es146.js.map +1 -1
  151. package/dist/es/standards-sdk.es147.js +80 -36
  152. package/dist/es/standards-sdk.es147.js.map +1 -1
  153. package/dist/es/standards-sdk.es148.js +44 -12461
  154. package/dist/es/standards-sdk.es148.js.map +1 -1
  155. package/dist/es/standards-sdk.es149.js +30 -242
  156. package/dist/es/standards-sdk.es149.js.map +1 -1
  157. package/dist/es/standards-sdk.es15.js +1 -1
  158. package/dist/es/standards-sdk.es150.js +34 -172
  159. package/dist/es/standards-sdk.es150.js.map +1 -1
  160. package/dist/es/standards-sdk.es151.js +45 -322
  161. package/dist/es/standards-sdk.es151.js.map +1 -1
  162. package/dist/es/standards-sdk.es152.js +120 -328
  163. package/dist/es/standards-sdk.es152.js.map +1 -1
  164. package/dist/es/standards-sdk.es153.js +40 -451
  165. package/dist/es/standards-sdk.es153.js.map +1 -1
  166. package/dist/es/standards-sdk.es154.js +12418 -267
  167. package/dist/es/standards-sdk.es154.js.map +1 -1
  168. package/dist/es/standards-sdk.es155.js +15 -74
  169. package/dist/es/standards-sdk.es155.js.map +1 -1
  170. package/dist/es/standards-sdk.es156.js +54 -15
  171. package/dist/es/standards-sdk.es156.js.map +1 -1
  172. package/dist/es/standards-sdk.es157.js +70 -59
  173. package/dist/es/standards-sdk.es157.js.map +1 -1
  174. package/dist/es/standards-sdk.es158.js +73 -48
  175. package/dist/es/standards-sdk.es158.js.map +1 -1
  176. package/dist/es/standards-sdk.es159.js +59 -70
  177. package/dist/es/standards-sdk.es159.js.map +1 -1
  178. package/dist/es/standards-sdk.es16.js +5 -5
  179. package/dist/es/standards-sdk.es160.js +160 -160
  180. package/dist/es/standards-sdk.es160.js.map +1 -1
  181. package/dist/es/standards-sdk.es161.js +312 -212
  182. package/dist/es/standards-sdk.es161.js.map +1 -1
  183. package/dist/es/standards-sdk.es162.js +335 -228
  184. package/dist/es/standards-sdk.es162.js.map +1 -1
  185. package/dist/es/standards-sdk.es163.js +446 -112
  186. package/dist/es/standards-sdk.es163.js.map +1 -1
  187. package/dist/es/standards-sdk.es164.js +320 -115
  188. package/dist/es/standards-sdk.es164.js.map +1 -1
  189. package/dist/es/standards-sdk.es165.js +65 -150
  190. package/dist/es/standards-sdk.es165.js.map +1 -1
  191. package/dist/es/standards-sdk.es166.js +223 -166
  192. package/dist/es/standards-sdk.es166.js.map +1 -1
  193. package/dist/es/standards-sdk.es167.js +153 -120
  194. package/dist/es/standards-sdk.es167.js.map +1 -1
  195. package/dist/es/standards-sdk.es168.js +178 -287
  196. package/dist/es/standards-sdk.es168.js.map +1 -1
  197. package/dist/es/standards-sdk.es169.js +218 -238
  198. package/dist/es/standards-sdk.es169.js.map +1 -1
  199. package/dist/es/standards-sdk.es170.js +75 -72
  200. package/dist/es/standards-sdk.es170.js.map +1 -1
  201. package/dist/es/standards-sdk.es171.js +129 -0
  202. package/dist/es/standards-sdk.es171.js.map +1 -0
  203. package/dist/es/standards-sdk.es172.js +164 -0
  204. package/dist/es/standards-sdk.es172.js.map +1 -0
  205. package/dist/es/standards-sdk.es173.js +188 -0
  206. package/dist/es/standards-sdk.es173.js.map +1 -0
  207. package/dist/es/standards-sdk.es174.js +142 -0
  208. package/dist/es/standards-sdk.es174.js.map +1 -0
  209. package/dist/es/standards-sdk.es175.js +334 -0
  210. package/dist/es/standards-sdk.es175.js.map +1 -0
  211. package/dist/es/standards-sdk.es176.js +262 -0
  212. package/dist/es/standards-sdk.es176.js.map +1 -0
  213. package/dist/es/standards-sdk.es177.js +119 -0
  214. package/dist/es/standards-sdk.es177.js.map +1 -0
  215. package/dist/es/standards-sdk.es18.js +12 -12
  216. package/dist/es/standards-sdk.es19.js +9 -9
  217. package/dist/es/standards-sdk.es2.js +2 -2
  218. package/dist/es/standards-sdk.es20.js +1 -1
  219. package/dist/es/standards-sdk.es21.js +1 -1
  220. package/dist/es/standards-sdk.es22.js +1 -1
  221. package/dist/es/standards-sdk.es23.js +1 -1
  222. package/dist/es/standards-sdk.es24.js +1 -1
  223. package/dist/es/standards-sdk.es25.js +1 -1
  224. package/dist/es/standards-sdk.es26.js +1 -1
  225. package/dist/es/standards-sdk.es27.js +12 -12
  226. package/dist/es/standards-sdk.es30.js +2 -2
  227. package/dist/es/standards-sdk.es31.js +4 -4
  228. package/dist/es/standards-sdk.es32.js +1 -1
  229. package/dist/es/standards-sdk.es35.js +6 -6
  230. package/dist/es/standards-sdk.es36.js +4 -4
  231. package/dist/es/standards-sdk.es37.js +2 -2
  232. package/dist/es/standards-sdk.es38.js +2 -2
  233. package/dist/es/standards-sdk.es39.js +1 -1
  234. package/dist/es/standards-sdk.es4.js +2 -2
  235. package/dist/es/standards-sdk.es40.js +1 -1
  236. package/dist/es/standards-sdk.es41.js +2 -2
  237. package/dist/es/standards-sdk.es46.js +1 -1
  238. package/dist/es/standards-sdk.es5.js +2 -2
  239. package/dist/es/standards-sdk.es51.js +1 -1
  240. package/dist/es/standards-sdk.es53.js +1 -1
  241. package/dist/es/standards-sdk.es56.js +2 -2
  242. package/dist/es/standards-sdk.es58.js +11 -55
  243. package/dist/es/standards-sdk.es58.js.map +1 -1
  244. package/dist/es/standards-sdk.es59.js +321 -35
  245. package/dist/es/standards-sdk.es59.js.map +1 -1
  246. package/dist/es/standards-sdk.es6.js +2 -2
  247. package/dist/es/standards-sdk.es60.js +39 -200
  248. package/dist/es/standards-sdk.es60.js.map +1 -1
  249. package/dist/es/standards-sdk.es61.js +103 -25
  250. package/dist/es/standards-sdk.es61.js.map +1 -1
  251. package/dist/es/standards-sdk.es62.js +164 -78
  252. package/dist/es/standards-sdk.es62.js.map +1 -1
  253. package/dist/es/standards-sdk.es63.js +222 -3
  254. package/dist/es/standards-sdk.es63.js.map +1 -1
  255. package/dist/es/standards-sdk.es64.js +122 -92
  256. package/dist/es/standards-sdk.es64.js.map +1 -1
  257. package/dist/es/standards-sdk.es65.js +40 -93
  258. package/dist/es/standards-sdk.es65.js.map +1 -1
  259. package/dist/es/standards-sdk.es66.js +266 -18
  260. package/dist/es/standards-sdk.es66.js.map +1 -1
  261. package/dist/es/standards-sdk.es67.js +34 -77
  262. package/dist/es/standards-sdk.es67.js.map +1 -1
  263. package/dist/es/standards-sdk.es68.js +85 -447
  264. package/dist/es/standards-sdk.es68.js.map +1 -1
  265. package/dist/es/standards-sdk.es69.js +3 -323
  266. package/dist/es/standards-sdk.es69.js.map +1 -1
  267. package/dist/es/standards-sdk.es7.js +1 -1
  268. package/dist/es/standards-sdk.es70.js +87 -194
  269. package/dist/es/standards-sdk.es70.js.map +1 -1
  270. package/dist/es/standards-sdk.es71.js +99 -71
  271. package/dist/es/standards-sdk.es71.js.map +1 -1
  272. package/dist/es/standards-sdk.es72.js +19 -71
  273. package/dist/es/standards-sdk.es72.js.map +1 -1
  274. package/dist/es/standards-sdk.es73.js +77 -143
  275. package/dist/es/standards-sdk.es73.js.map +1 -1
  276. package/dist/es/standards-sdk.es74.js +433 -44
  277. package/dist/es/standards-sdk.es74.js.map +1 -1
  278. package/dist/es/standards-sdk.es75.js +254 -334
  279. package/dist/es/standards-sdk.es75.js.map +1 -1
  280. package/dist/es/standards-sdk.es76.js +166 -454
  281. package/dist/es/standards-sdk.es76.js.map +1 -1
  282. package/dist/es/standards-sdk.es77.js +71 -364
  283. package/dist/es/standards-sdk.es77.js.map +1 -1
  284. package/dist/es/standards-sdk.es78.js +71 -89
  285. package/dist/es/standards-sdk.es78.js.map +1 -1
  286. package/dist/es/standards-sdk.es79.js +143 -125
  287. package/dist/es/standards-sdk.es79.js.map +1 -1
  288. package/dist/es/standards-sdk.es80.js +67 -6
  289. package/dist/es/standards-sdk.es80.js.map +1 -1
  290. package/dist/es/standards-sdk.es81.js +400 -43
  291. package/dist/es/standards-sdk.es81.js.map +1 -1
  292. package/dist/es/standards-sdk.es82.js +476 -81
  293. package/dist/es/standards-sdk.es82.js.map +1 -1
  294. package/dist/es/standards-sdk.es83.js +332 -315
  295. package/dist/es/standards-sdk.es83.js.map +1 -1
  296. package/dist/es/standards-sdk.es84.js +88 -280
  297. package/dist/es/standards-sdk.es84.js.map +1 -1
  298. package/dist/es/standards-sdk.es85.js +125 -61
  299. package/dist/es/standards-sdk.es85.js.map +1 -1
  300. package/dist/es/standards-sdk.es86.js +6 -47
  301. package/dist/es/standards-sdk.es86.js.map +1 -1
  302. package/dist/es/standards-sdk.es87.js +44 -147
  303. package/dist/es/standards-sdk.es87.js.map +1 -1
  304. package/dist/es/standards-sdk.es88.js +94 -60
  305. package/dist/es/standards-sdk.es88.js.map +1 -1
  306. package/dist/es/standards-sdk.es89.js +339 -21
  307. package/dist/es/standards-sdk.es89.js.map +1 -1
  308. package/dist/es/standards-sdk.es9.js +2 -2
  309. package/dist/es/standards-sdk.es90.js +279 -23
  310. package/dist/es/standards-sdk.es90.js.map +1 -1
  311. package/dist/es/standards-sdk.es91.js +51 -230
  312. package/dist/es/standards-sdk.es91.js.map +1 -1
  313. package/dist/es/standards-sdk.es92.js +48 -281
  314. package/dist/es/standards-sdk.es92.js.map +1 -1
  315. package/dist/es/standards-sdk.es93.js +133 -140
  316. package/dist/es/standards-sdk.es93.js.map +1 -1
  317. package/dist/es/standards-sdk.es94.js +54 -132
  318. package/dist/es/standards-sdk.es94.js.map +1 -1
  319. package/dist/es/standards-sdk.es95.js +26 -45
  320. package/dist/es/standards-sdk.es95.js.map +1 -1
  321. package/dist/es/standards-sdk.es96.js +23 -263
  322. package/dist/es/standards-sdk.es96.js.map +1 -1
  323. package/dist/es/standards-sdk.es97.js +233 -95
  324. package/dist/es/standards-sdk.es97.js.map +1 -1
  325. package/dist/es/standards-sdk.es98.js +260 -79
  326. package/dist/es/standards-sdk.es98.js.map +1 -1
  327. package/dist/es/standards-sdk.es99.js +156 -29
  328. package/dist/es/standards-sdk.es99.js.map +1 -1
  329. package/package.json +16 -3
@@ -1,235 +1,148 @@
1
- var DiscoveryOperation = /* @__PURE__ */ ((DiscoveryOperation2) => {
2
- DiscoveryOperation2["ANNOUNCE"] = "announce";
3
- DiscoveryOperation2["PROPOSE"] = "propose";
4
- DiscoveryOperation2["RESPOND"] = "respond";
5
- DiscoveryOperation2["COMPLETE"] = "complete";
6
- DiscoveryOperation2["WITHDRAW"] = "withdraw";
7
- return DiscoveryOperation2;
8
- })(DiscoveryOperation || {});
9
- function isRecord(value) {
10
- return typeof value === "object" && value !== null;
11
- }
12
- function isString(value) {
13
- return typeof value === "string";
14
- }
15
- function isNumber(value) {
16
- return typeof value === "number" && Number.isFinite(value);
17
- }
18
- function isArray(value) {
19
- return Array.isArray(value);
20
- }
21
- function isArrayOfStrings(value) {
22
- return Array.isArray(value) && value.every(isString);
23
- }
24
- function isDiscoveryMessage(value) {
25
- if (!isRecord(value)) {
26
- return false;
27
- }
28
- if (value.p !== "hcs-18") {
29
- return false;
30
- }
31
- if (!isString(value.op)) {
32
- return false;
33
- }
34
- const op = value.op;
35
- if (!["announce", "propose", "respond", "complete", "withdraw"].includes(op)) {
36
- return false;
37
- }
38
- return "data" in value;
39
- }
40
- function isAnnounceMessage(value) {
41
- if (!isDiscoveryMessage(value)) {
42
- return false;
43
- }
44
- const v = value;
45
- if (v.op !== "announce") {
46
- return false;
47
- }
48
- if (!isRecord(v.data)) {
49
- return false;
50
- }
51
- const d = v.data;
52
- if (!isString(d.account)) {
53
- return false;
54
- }
55
- if (!isRecord(d.petal)) {
56
- return false;
57
- }
58
- const petal = d.petal;
59
- if (!isString(petal.name) || !isNumber(petal.priority)) {
60
- return false;
61
- }
62
- if (!isRecord(d.capabilities)) {
63
- return false;
64
- }
65
- const caps = d.capabilities;
66
- if (!isArrayOfStrings(caps.protocols)) {
67
- return false;
68
- }
69
- if ("valid_for" in d && d.valid_for !== void 0 && d.valid_for !== null && !isNumber(d.valid_for)) {
70
- return false;
71
- }
72
- return true;
73
- }
74
- function isProposeMessage(value) {
75
- if (!isDiscoveryMessage(value)) {
76
- return false;
77
- }
78
- const v = value;
79
- if (v.op !== "propose") {
80
- return false;
81
- }
82
- if (!isRecord(v.data)) {
83
- return false;
84
- }
85
- const d = v.data;
86
- if (!isString(d.proposer)) {
87
- return false;
88
- }
89
- if (!isArray(d.members)) {
90
- return false;
1
+ import { HederaMirrorNode } from "./standards-sdk.es138.js";
2
+ import { KeyList } from "@hashgraph/sdk";
3
+ import { buildHcs16CreateFloraTopicTx } from "./standards-sdk.es97.js";
4
+ import { Logger } from "./standards-sdk.es117.js";
5
+ import { FloraTopicType } from "./standards-sdk.es96.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
+ });
13
+ }
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);
91
21
  }
92
- const membersOk = d.members.every((m) => {
93
- if (!isRecord(m)) {
94
- return false;
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);
95
27
  }
96
- const mr = m;
97
- if (!isString(mr.account)) {
98
- return false;
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)$/);
59
+ if (!match) {
60
+ return null;
99
61
  }
100
- if (!("priority" in mr) || !isNumber(mr.priority)) {
101
- return false;
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;
102
66
  }
103
- if ("announce_seq" in mr && mr.announce_seq !== void 0 && mr.announce_seq !== null && !isNumber(mr.announce_seq)) {
104
- return false;
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
+ });
105
123
  }
106
- return true;
107
- });
108
- if (!membersOk) {
109
- return false;
110
- }
111
- if (!isRecord(d.config)) {
112
- return false;
113
- }
114
- const cfg = d.config;
115
- if (!isString(cfg.name) || !isNumber(cfg.threshold)) {
116
- return false;
117
- }
118
- return true;
119
- }
120
- function isRespondMessage(value) {
121
- if (!isDiscoveryMessage(value)) {
122
- return false;
123
- }
124
- const v = value;
125
- if (v.op !== "respond") {
126
- return false;
127
- }
128
- if (!isRecord(v.data)) {
129
- return false;
130
- }
131
- const d = v.data;
132
- if (!isString(d.responder)) {
133
- return false;
134
- }
135
- if (!isNumber(d.proposal_seq)) {
136
- return false;
137
- }
138
- if (!isString(d.decision)) {
139
- return false;
140
- }
141
- if (!["accept", "reject"].includes(d.decision)) {
142
- return false;
143
- }
144
- return true;
145
- }
146
- function isCompleteMessage(value) {
147
- if (!isDiscoveryMessage(value)) {
148
- return false;
149
- }
150
- const v = value;
151
- if (v.op !== "complete") {
152
- return false;
153
- }
154
- if (!isRecord(v.data)) {
155
- return false;
156
- }
157
- const d = v.data;
158
- if (!isString(d.proposer)) {
159
- return false;
160
- }
161
- if (!isNumber(d.proposal_seq)) {
162
- return false;
163
- }
164
- if (!isString(d.flora_account)) {
165
- return false;
166
- }
167
- if (!isRecord(d.topics)) {
168
- return false;
169
- }
170
- const t = d.topics;
171
- if (!isString(t.communication) || !isString(t.transaction) || !isString(t.state)) {
172
- return false;
173
- }
174
- return true;
175
- }
176
- function isWithdrawMessage(value) {
177
- if (!isDiscoveryMessage(value)) {
178
- return false;
179
- }
180
- const v = value;
181
- if (v.op !== "withdraw") {
182
- return false;
183
- }
184
- if (!isRecord(v.data)) {
185
- return false;
186
- }
187
- const d = v.data;
188
- if (!isString(d.account)) {
189
- return false;
190
- }
191
- if (!isNumber(d.announce_seq)) {
192
- return false;
193
- }
194
- if ("reason" in d && d.reason !== void 0 && d.reason !== null && !isString(d.reason)) {
195
- return false;
196
- }
197
- return true;
198
- }
199
- var DiscoveryState = /* @__PURE__ */ ((DiscoveryState2) => {
200
- DiscoveryState2["IDLE"] = "idle";
201
- DiscoveryState2["ANNOUNCED"] = "announced";
202
- DiscoveryState2["PROPOSING"] = "proposing";
203
- DiscoveryState2["FORMING"] = "forming";
204
- DiscoveryState2["ACTIVE"] = "active";
205
- DiscoveryState2["WITHDRAWN"] = "withdrawn";
206
- return DiscoveryState2;
207
- })(DiscoveryState || {});
208
- class DiscoveryError extends Error {
209
- constructor(message, code) {
210
- super(message);
211
- this.code = code;
212
- this.name = "DiscoveryError";
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;
137
+ }
138
+ const first = items[0];
139
+ return Object.assign({}, first.message, {
140
+ consensus_timestamp: first.consensus_timestamp,
141
+ sequence_number: first.sequence_number
142
+ });
213
143
  }
214
144
  }
215
- const DiscoveryErrorCodes = {
216
- INVALID_MESSAGE: "INVALID_MESSAGE",
217
- TIMEOUT: "TIMEOUT",
218
- INSUFFICIENT_PETALS: "INSUFFICIENT_PETALS",
219
- FLORA_CREATION_FAILED: "FLORA_CREATION_FAILED",
220
- ALREADY_IN_DISCOVERY: "ALREADY_IN_DISCOVERY",
221
- INVALID_STATE: "INVALID_STATE"
222
- };
223
145
  export {
224
- DiscoveryError,
225
- DiscoveryErrorCodes,
226
- DiscoveryOperation,
227
- DiscoveryState,
228
- isAnnounceMessage,
229
- isCompleteMessage,
230
- isDiscoveryMessage,
231
- isProposeMessage,
232
- isRespondMessage,
233
- isWithdrawMessage
146
+ HCS16BaseClient
234
147
  };
235
148
  //# sourceMappingURL=standards-sdk.es100.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es100.js","sources":["../../src/hcs-18/types.ts"],"sourcesContent":["/**\n * HCS-18 Flora Discovery Protocol Types\n * Standard for Flora discovery and formation\n */\n\nimport { TopicId } from '@hashgraph/sdk';\n\n/**\n * HCS-18 Operation types\n */\nexport enum DiscoveryOperation {\n ANNOUNCE = 'announce',\n PROPOSE = 'propose',\n RESPOND = 'respond',\n COMPLETE = 'complete',\n WITHDRAW = 'withdraw',\n}\n\n/**\n * Base HCS-18 message structure\n */\nexport interface DiscoveryMessage {\n p: 'hcs-18';\n op: DiscoveryOperation;\n data: any;\n}\n\n/**\n * Announce operation data\n */\nexport interface AnnounceData {\n account: string;\n petal: {\n name: string;\n priority: number;\n };\n capabilities: {\n protocols: string[];\n resources?: {\n compute?: 'high' | 'medium' | 'low';\n storage?: 'high' | 'medium' | 'low';\n bandwidth?: 'high' | 'medium' | 'low';\n };\n group_preferences?: {\n sizes?: number[];\n threshold_ratios?: number[];\n };\n };\n valid_for?: number;\n}\n\n/**\n * Propose operation data\n */\nexport interface ProposeData {\n proposer: string;\n members: Array<{\n account: string;\n announce_seq?: number;\n priority: number;\n status?: 'existing' | 'proposed';\n }>;\n config: {\n name: string;\n threshold: number;\n purpose?: string;\n reason?: string;\n };\n existing_flora?: string;\n}\n\n/**\n * Respond operation data\n */\nexport interface RespondData {\n responder: string;\n proposal_seq: number;\n decision: 'accept' | 'reject';\n reason?: string;\n accepted_seq?: number;\n}\n\n/**\n * Complete operation data\n */\nexport interface CompleteData {\n proposal_seq: number;\n flora_account: string;\n topics: {\n communication: string;\n transaction: string;\n state: string;\n };\n proposer?: string;\n}\n\n/**\n * Withdraw operation data\n */\nexport interface WithdrawData {\n account: string;\n announce_seq: number;\n reason?: string;\n}\n\n/**\n * Typed message operations\n */\nexport interface AnnounceMessage extends DiscoveryMessage {\n op: DiscoveryOperation.ANNOUNCE;\n data: AnnounceData;\n}\n\nexport interface ProposeMessage extends DiscoveryMessage {\n op: DiscoveryOperation.PROPOSE;\n data: ProposeData;\n}\n\nexport interface RespondMessage extends DiscoveryMessage {\n op: DiscoveryOperation.RESPOND;\n data: RespondData;\n}\n\nexport interface CompleteMessage extends DiscoveryMessage {\n op: DiscoveryOperation.COMPLETE;\n data: CompleteData;\n}\n\nexport interface WithdrawMessage extends DiscoveryMessage {\n op: DiscoveryOperation.WITHDRAW;\n data: WithdrawData;\n}\n\n/**\n * Type guard utilities for HCS-18 discovery messages\n */\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nfunction isString(value: unknown): value is string {\n return typeof value === 'string';\n}\n\nfunction isNumber(value: unknown): value is number {\n return typeof value === 'number' && Number.isFinite(value);\n}\n\nfunction isArray(value: unknown): value is unknown[] {\n return Array.isArray(value);\n}\n\nfunction isArrayOfStrings(value: unknown): value is string[] {\n return Array.isArray(value) && value.every(isString);\n}\n\nexport function isDiscoveryMessage(value: unknown): value is DiscoveryMessage {\n if (!isRecord(value)) {\n return false;\n }\n if (value.p !== 'hcs-18') {\n return false;\n }\n if (!isString((value as Record<string, unknown>).op)) {\n return false;\n }\n const op = (value as Record<string, unknown>).op as string;\n if (\n !['announce', 'propose', 'respond', 'complete', 'withdraw'].includes(op)\n ) {\n return false;\n }\n return 'data' in value;\n}\n\nexport function isAnnounceMessage(value: unknown): value is AnnounceMessage {\n if (!isDiscoveryMessage(value)) {\n return false;\n }\n const v = value as DiscoveryMessage;\n if (v.op !== DiscoveryOperation.ANNOUNCE) {\n return false;\n }\n if (!isRecord(v.data)) {\n return false;\n }\n const d = v.data as Record<string, unknown>;\n if (!isString(d.account)) {\n return false;\n }\n if (!isRecord(d.petal)) {\n return false;\n }\n const petal = d.petal as Record<string, unknown>;\n if (!isString(petal.name) || !isNumber(petal.priority)) {\n return false;\n }\n if (!isRecord(d.capabilities)) {\n return false;\n }\n const caps = d.capabilities as Record<string, unknown>;\n if (!isArrayOfStrings(caps.protocols)) {\n return false;\n }\n if (\n 'valid_for' in d &&\n d.valid_for !== undefined &&\n d.valid_for !== null &&\n !isNumber(d.valid_for)\n ) {\n return false;\n }\n return true;\n}\n\nexport function isProposeMessage(value: unknown): value is ProposeMessage {\n if (!isDiscoveryMessage(value)) {\n return false;\n }\n const v = value as DiscoveryMessage;\n if (v.op !== DiscoveryOperation.PROPOSE) {\n return false;\n }\n if (!isRecord(v.data)) {\n return false;\n }\n const d = v.data as Record<string, unknown>;\n if (!isString(d.proposer)) {\n return false;\n }\n if (!isArray(d.members)) {\n return false;\n }\n const membersOk = (d.members as unknown[]).every(m => {\n if (!isRecord(m)) {\n return false;\n }\n const mr = m as Record<string, unknown>;\n if (!isString(mr.account)) {\n return false;\n }\n if (!('priority' in mr) || !isNumber(mr.priority)) {\n return false;\n }\n if (\n 'announce_seq' in mr &&\n mr.announce_seq !== undefined &&\n mr.announce_seq !== null &&\n !isNumber(mr.announce_seq)\n ) {\n return false;\n }\n return true;\n });\n if (!membersOk) {\n return false;\n }\n if (!isRecord(d.config)) {\n return false;\n }\n const cfg = d.config as Record<string, unknown>;\n if (!isString(cfg.name) || !isNumber(cfg.threshold)) {\n return false;\n }\n return true;\n}\n\nexport function isRespondMessage(value: unknown): value is RespondMessage {\n if (!isDiscoveryMessage(value)) {\n return false;\n }\n const v = value as DiscoveryMessage;\n if (v.op !== DiscoveryOperation.RESPOND) {\n return false;\n }\n if (!isRecord(v.data)) {\n return false;\n }\n const d = v.data as Record<string, unknown>;\n if (!isString(d.responder)) {\n return false;\n }\n if (!isNumber(d.proposal_seq)) {\n return false;\n }\n if (!isString(d.decision)) {\n return false;\n }\n if (!['accept', 'reject'].includes(d.decision as string)) {\n return false;\n }\n return true;\n}\n\nexport function isCompleteMessage(value: unknown): value is CompleteMessage {\n if (!isDiscoveryMessage(value)) {\n return false;\n }\n const v = value as DiscoveryMessage;\n if (v.op !== DiscoveryOperation.COMPLETE) {\n return false;\n }\n if (!isRecord(v.data)) {\n return false;\n }\n const d = v.data as Record<string, unknown>;\n if (!isString(d.proposer)) {\n return false;\n }\n if (!isNumber(d.proposal_seq)) {\n return false;\n }\n if (!isString(d.flora_account)) {\n return false;\n }\n if (!isRecord(d.topics)) {\n return false;\n }\n const t = d.topics as Record<string, unknown>;\n if (\n !isString(t.communication) ||\n !isString(t.transaction) ||\n !isString(t.state)\n ) {\n return false;\n }\n return true;\n}\n\nexport function isWithdrawMessage(value: unknown): value is WithdrawMessage {\n if (!isDiscoveryMessage(value)) {\n return false;\n }\n const v = value as DiscoveryMessage;\n if (v.op !== DiscoveryOperation.WITHDRAW) {\n return false;\n }\n if (!isRecord(v.data)) {\n return false;\n }\n const d = v.data as Record<string, unknown>;\n if (!isString(d.account)) {\n return false;\n }\n if (!isNumber(d.announce_seq)) {\n return false;\n }\n if (\n 'reason' in d &&\n d.reason !== undefined &&\n d.reason !== null &&\n !isString(d.reason)\n ) {\n return false;\n }\n return true;\n}\n\n/**\n * Discovery phase states\n */\nexport enum DiscoveryState {\n IDLE = 'idle',\n ANNOUNCED = 'announced',\n PROPOSING = 'proposing',\n FORMING = 'forming',\n ACTIVE = 'active',\n WITHDRAWN = 'withdrawn',\n}\n\n/**\n * Tracked announcement with HCS metadata\n */\nexport interface TrackedAnnouncement {\n account: string;\n sequenceNumber: number;\n consensusTimestamp: string;\n data: AnnounceData;\n}\n\n/**\n * Tracked proposal with HCS metadata\n */\nexport interface TrackedProposal {\n sequenceNumber: number;\n consensusTimestamp: string;\n proposer: string;\n data: ProposeData;\n responses: Map<string, RespondData>;\n}\n\n/**\n * Flora formation result\n */\nexport interface FloraFormation {\n proposalSeq: number;\n floraAccountId: string;\n topics: {\n communication: string;\n transaction: string;\n state: string;\n };\n members: Array<{\n account: string;\n priority: number;\n }>;\n threshold: number;\n createdAt: Date;\n}\n\n/**\n * Discovery event types for monitoring\n */\nexport interface DiscoveryEvent {\n type:\n | 'announcement_received'\n | 'proposal_received'\n | 'response_received'\n | 'formation_complete'\n | 'withdrawal_received'\n | 'discovery_timeout';\n sequenceNumber?: number;\n timestamp: Date;\n data: any;\n}\n\n/**\n * Discovery configuration\n */\nexport interface DiscoveryConfig {\n discoveryTopicId: string | TopicId;\n accountId: string;\n petalName: string;\n priority: number;\n capabilities: {\n protocols: string[];\n resources?: AnnounceData['capabilities']['resources'];\n group_preferences?: AnnounceData['capabilities']['group_preferences'];\n };\n autoAcceptFilter?: (proposal: TrackedProposal) => boolean;\n onDiscoveryEvent?: (event: DiscoveryEvent) => void;\n memberPrivateKeys?: Map<string, string>;\n}\n\n/**\n * HCS-18 Errors\n */\nexport class DiscoveryError extends Error {\n constructor(\n message: string,\n public readonly code: string,\n ) {\n super(message);\n this.name = 'DiscoveryError';\n }\n}\n\nexport const DiscoveryErrorCodes = {\n INVALID_MESSAGE: 'INVALID_MESSAGE',\n TIMEOUT: 'TIMEOUT',\n INSUFFICIENT_PETALS: 'INSUFFICIENT_PETALS',\n FLORA_CREATION_FAILED: 'FLORA_CREATION_FAILED',\n ALREADY_IN_DISCOVERY: 'ALREADY_IN_DISCOVERY',\n INVALID_STATE: 'INVALID_STATE',\n} as const;\n"],"names":["DiscoveryOperation","DiscoveryState"],"mappings":"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"}
1
+ {"version":3,"file":"standards-sdk.es100.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,116 +1,52 @@
1
- import { Client } from "@hashgraph/sdk";
2
- import { Logger } from "./standards-sdk.es111.js";
3
- import { createNodeOperatorContext } from "./standards-sdk.es146.js";
4
- import { buildHcs18CreateDiscoveryTopicTx, buildHcs18AnnounceMessage, buildHcs18SubmitDiscoveryMessageTx, buildHcs18ProposeMessage, buildHcs18RespondMessage, buildHcs18CompleteMessage, buildHcs18WithdrawMessage } from "./standards-sdk.es103.js";
5
- import { HCS18BaseClient } from "./standards-sdk.es104.js";
6
- class HCS18Client extends HCS18BaseClient {
7
- constructor(config) {
8
- super({
9
- network: config.network,
10
- logger: Logger.getInstance({
11
- level: config.logLevel || "info",
12
- module: "HCS-18",
13
- silent: config.silent
14
- })
15
- });
16
- this.operatorCtx = createNodeOperatorContext({
17
- network: this.network,
18
- operatorId: config.operatorId,
19
- operatorKey: config.operatorKey,
20
- mirrorNode: this.mirrorNode,
21
- logger: this.logger,
22
- client: Client.forName(this.network)
23
- });
24
- this.client = this.operatorCtx.client;
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";
25
17
  }
26
- async ensureInitialized() {
27
- await this.operatorCtx.ensureInitialized();
28
- }
29
- async createDiscoveryTopic(options) {
30
- await this.ensureInitialized();
31
- const ttl = options?.ttlSeconds;
32
- let operatorPublicKey;
33
- try {
34
- operatorPublicKey = this.operatorCtx.operatorKey.publicKey;
35
- } catch {
36
- operatorPublicKey = void 0;
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+)$/);
29
+ if (!match) {
30
+ return void 0;
37
31
  }
38
- const tx = buildHcs18CreateDiscoveryTopicTx({
39
- ttlSeconds: ttl,
40
- adminKey: options?.adminKey,
41
- submitKey: options?.submitKey,
42
- operatorPublicKey,
43
- memoOverride: options?.memoOverride
44
- });
45
- const resp = await tx.execute(this.client);
46
- const receipt = await resp.getReceipt(this.client);
47
- const topicId = receipt.topicId?.toString();
48
- if (!topicId) {
49
- throw new Error("Failed to create discovery topic");
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;
50
36
  }
51
- return { topicId, receipt };
52
- }
53
- async announce(params) {
54
- await this.ensureInitialized();
55
- const message = buildHcs18AnnounceMessage(params.data);
56
- const tx = buildHcs18SubmitDiscoveryMessageTx({
57
- topicId: params.discoveryTopicId,
58
- message,
59
- transactionMemo: params.memo
60
- });
61
- const resp = await tx.execute(this.client);
62
- const receipt = await resp.getReceipt(this.client);
63
- const seq = receipt.topicSequenceNumber.toNumber();
64
- return { receipt, sequenceNumber: seq };
65
- }
66
- async propose(params) {
67
- await this.ensureInitialized();
68
- const message = buildHcs18ProposeMessage(params.data);
69
- const tx = buildHcs18SubmitDiscoveryMessageTx({
70
- topicId: params.discoveryTopicId,
71
- message,
72
- transactionMemo: params.memo
73
- });
74
- const resp = await tx.execute(this.client);
75
- const receipt = await resp.getReceipt(this.client);
76
- const seq = receipt.topicSequenceNumber.toNumber();
77
- return { receipt, sequenceNumber: seq };
78
- }
79
- async respond(params) {
80
- await this.ensureInitialized();
81
- const message = buildHcs18RespondMessage(params.data);
82
- const tx = buildHcs18SubmitDiscoveryMessageTx({
83
- topicId: params.discoveryTopicId,
84
- message,
85
- transactionMemo: params.memo
86
- });
87
- const resp = await tx.execute(this.client);
88
- return await resp.getReceipt(this.client);
89
- }
90
- async complete(params) {
91
- await this.ensureInitialized();
92
- const message = buildHcs18CompleteMessage(params.data);
93
- const tx = buildHcs18SubmitDiscoveryMessageTx({
94
- topicId: params.discoveryTopicId,
95
- message,
96
- transactionMemo: params.memo
97
- });
98
- const resp = await tx.execute(this.client);
99
- return await resp.getReceipt(this.client);
100
- }
101
- async withdraw(params) {
102
- await this.ensureInitialized();
103
- const message = buildHcs18WithdrawMessage(params.data);
104
- const tx = buildHcs18SubmitDiscoveryMessageTx({
105
- topicId: params.discoveryTopicId,
106
- message,
107
- transactionMemo: params.memo
108
- });
109
- const resp = await tx.execute(this.client);
110
- return await resp.getReceipt(this.client);
37
+ if (type !== 0) {
38
+ return void 0;
39
+ }
40
+ return { type, ttl };
41
+ } catch {
42
+ return void 0;
111
43
  }
112
44
  }
113
45
  export {
114
- HCS18Client
46
+ HCS17TopicType,
47
+ StateHashError,
48
+ generateHCS17Memo,
49
+ hcs17MessageSchema,
50
+ parseHCS17Memo
115
51
  };
116
52
  //# sourceMappingURL=standards-sdk.es101.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es101.js","sources":["../../src/hcs-18/sdk.ts"],"sourcesContent":["import {\n Client,\n TopicCreateTransaction,\n TransactionReceipt,\n} from '@hashgraph/sdk';\nimport { Logger } from '../utils/logger';\nimport { NetworkType } from '../utils/types';\nimport {\n createNodeOperatorContext,\n type NodeOperatorContext,\n} from '../common/node-operator-resolver';\nimport type { MaybeKey } from '../common/tx/tx-utils';\nimport { buildHcs18CreateDiscoveryTopicTx } from './tx';\nimport { HCS18BaseClient } from './base-client';\nimport type {\n AnnounceData,\n ProposeData,\n RespondData,\n CompleteMessage,\n WithdrawMessage,\n DiscoveryMessage,\n} from './types';\nimport {\n buildHcs18SubmitDiscoveryMessageTx,\n buildHcs18AnnounceMessage,\n buildHcs18ProposeMessage,\n buildHcs18RespondMessage,\n buildHcs18CompleteMessage,\n buildHcs18WithdrawMessage,\n} from './tx';\n\nexport interface SDKHCS18ClientConfig {\n network: NetworkType;\n operatorId: string;\n operatorKey: string | import('@hashgraph/sdk').PrivateKey;\n logLevel?: 'debug' | 'info' | 'warn' | 'error' | 'silent';\n silent?: boolean;\n}\n\nexport class HCS18Client extends HCS18BaseClient {\n private readonly operatorCtx: NodeOperatorContext;\n private readonly client: Client;\n\n constructor(config: SDKHCS18ClientConfig) {\n super({\n network: config.network,\n logger: Logger.getInstance({\n level: config.logLevel || 'info',\n module: 'HCS-18',\n silent: config.silent,\n }),\n });\n this.operatorCtx = createNodeOperatorContext({\n network: this.network,\n operatorId: config.operatorId,\n operatorKey: config.operatorKey,\n mirrorNode: this.mirrorNode,\n logger: this.logger,\n client: Client.forName(this.network),\n });\n this.client = this.operatorCtx.client;\n }\n\n private async ensureInitialized(): Promise<void> {\n await this.operatorCtx.ensureInitialized();\n }\n\n async createDiscoveryTopic(options?: {\n ttlSeconds?: number;\n adminKey?: MaybeKey;\n submitKey?: MaybeKey;\n memoOverride?: string;\n }): Promise<{ topicId: string; receipt: TransactionReceipt }> {\n await this.ensureInitialized();\n const ttl = options?.ttlSeconds;\n\n let operatorPublicKey: import('@hashgraph/sdk').PublicKey | undefined;\n try {\n operatorPublicKey = this.operatorCtx.operatorKey.publicKey;\n } catch {\n operatorPublicKey = undefined;\n }\n const tx: TopicCreateTransaction = buildHcs18CreateDiscoveryTopicTx({\n ttlSeconds: ttl,\n adminKey: options?.adminKey,\n submitKey: options?.submitKey,\n operatorPublicKey,\n memoOverride: options?.memoOverride,\n });\n const resp = await tx.execute(this.client);\n const receipt = await resp.getReceipt(this.client);\n const topicId = receipt.topicId?.toString();\n if (!topicId) {\n throw new Error('Failed to create discovery topic');\n }\n return { topicId, receipt };\n }\n\n async announce(params: {\n discoveryTopicId: string;\n data: AnnounceData;\n memo?: string;\n }): Promise<{ receipt: TransactionReceipt; sequenceNumber: number }> {\n await this.ensureInitialized();\n const message: DiscoveryMessage = buildHcs18AnnounceMessage(params.data);\n const tx = buildHcs18SubmitDiscoveryMessageTx({\n topicId: params.discoveryTopicId,\n message,\n transactionMemo: params.memo,\n });\n const resp = await tx.execute(this.client);\n const receipt = await resp.getReceipt(this.client);\n const seq = receipt.topicSequenceNumber.toNumber();\n return { receipt, sequenceNumber: seq };\n }\n\n async propose(params: {\n discoveryTopicId: string;\n data: ProposeData;\n memo?: string;\n }): Promise<{ receipt: TransactionReceipt; sequenceNumber: number }> {\n await this.ensureInitialized();\n const message: DiscoveryMessage = buildHcs18ProposeMessage(params.data);\n const tx = buildHcs18SubmitDiscoveryMessageTx({\n topicId: params.discoveryTopicId,\n message,\n transactionMemo: params.memo,\n });\n const resp = await tx.execute(this.client);\n const receipt = await resp.getReceipt(this.client);\n const seq = receipt.topicSequenceNumber.toNumber();\n return { receipt, sequenceNumber: seq };\n }\n\n async respond(params: {\n discoveryTopicId: string;\n data: RespondData;\n memo?: string;\n }): Promise<TransactionReceipt> {\n await this.ensureInitialized();\n const message: DiscoveryMessage = buildHcs18RespondMessage(params.data);\n const tx = buildHcs18SubmitDiscoveryMessageTx({\n topicId: params.discoveryTopicId,\n message,\n transactionMemo: params.memo,\n });\n const resp = await tx.execute(this.client);\n return await resp.getReceipt(this.client);\n }\n\n async complete(params: {\n discoveryTopicId: string;\n data: CompleteMessage['data'];\n memo?: string;\n }): Promise<TransactionReceipt> {\n await this.ensureInitialized();\n const message: DiscoveryMessage = buildHcs18CompleteMessage(params.data);\n const tx = buildHcs18SubmitDiscoveryMessageTx({\n topicId: params.discoveryTopicId,\n message,\n transactionMemo: params.memo,\n });\n const resp = await tx.execute(this.client);\n return await resp.getReceipt(this.client);\n }\n\n async withdraw(params: {\n discoveryTopicId: string;\n data: WithdrawMessage['data'];\n memo?: string;\n }): Promise<TransactionReceipt> {\n await this.ensureInitialized();\n const message: DiscoveryMessage = buildHcs18WithdrawMessage(params.data);\n const tx = buildHcs18SubmitDiscoveryMessageTx({\n topicId: params.discoveryTopicId,\n message,\n transactionMemo: params.memo,\n });\n const resp = await tx.execute(this.client);\n return await resp.getReceipt(this.client);\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"standards-sdk.es101.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;"}