@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 +1 @@
1
- {"version":3,"file":"standards-sdk.es106.js","sources":["../../src/hcs-26/resolver.ts"],"sourcesContent":["import { Logger, type ILogger } from '../utils/logger';\nimport { HederaMirrorNode } from '../services/mirror-node';\nimport { HRLResolver } from '../utils/hrl-resolver';\nimport type { MirrorNodeConfig } from '../services/mirror-node';\nimport { hash } from '../utils/crypto-abstraction';\nimport {\n hcs26DiscoveryRegisterSchema,\n hcs26DiscoveryRegisterLegacySchema,\n hcs26DiscoveryMetadataSchema,\n hcs26DiscoveryMetadataPatchSchema,\n hcs26DiscoveryUpdateSchema,\n hcs26DiscoveryUpdateLegacySchema,\n hcs26DiscoveryDeleteSchema,\n hcs26SkillManifestSchema,\n hcs26VersionRegisterSchema,\n hcs26VersionRegisterLegacySchema,\n hcs26VersionUpdateSchema,\n hcs26VersionDeleteSchema,\n type HCS26Network,\n type Hcs26DiscoveryRegister,\n type Hcs26DiscoveryRegisterLegacy,\n type Hcs26SkillManifest,\n type Hcs26VersionRegister,\n type Hcs26VersionRegisterLegacy,\n type Hcs26VersionUpdate,\n} from './types';\n\ntype Hcs26ResolverDeps = {\n network: HCS26Network;\n logger?: ILogger;\n mirrorNode?: MirrorNodeConfig;\n};\n\ntype ParsedSemver = {\n major: number;\n minor: number;\n patch: number;\n prerelease: (string | number)[];\n};\n\nfunction parseSemver(versionRaw: string): ParsedSemver | null {\n const trimmed = versionRaw.trim().replace(/^v/i, '');\n const match = trimmed.match(\n /^(\\d+)\\.(\\d+)\\.(\\d+)(?:-([0-9A-Za-z.-]+))?(?:\\+[0-9A-Za-z.-]+)?$/,\n );\n if (!match) {\n return null;\n }\n\n const major = Number(match[1]);\n const minor = Number(match[2]);\n const patch = Number(match[3]);\n if (![major, minor, patch].every(Number.isFinite)) {\n return null;\n }\n\n const prereleaseRaw = match[4];\n const prerelease = prereleaseRaw\n ? prereleaseRaw.split('.').map(part => {\n if (/^(0|[1-9]\\d*)$/.test(part)) {\n return Number(part);\n }\n return part;\n })\n : [];\n\n return { major, minor, patch, prerelease };\n}\n\nfunction compareSemver(a: ParsedSemver, b: ParsedSemver): number {\n if (a.major !== b.major) return a.major - b.major;\n if (a.minor !== b.minor) return a.minor - b.minor;\n if (a.patch !== b.patch) return a.patch - b.patch;\n\n const aHasPre = a.prerelease.length > 0;\n const bHasPre = b.prerelease.length > 0;\n if (!aHasPre && bHasPre) return 1;\n if (aHasPre && !bHasPre) return -1;\n if (!aHasPre && !bHasPre) return 0;\n\n const len = Math.max(a.prerelease.length, b.prerelease.length);\n for (let index = 0; index < len; index += 1) {\n const aId = a.prerelease[index];\n const bId = b.prerelease[index];\n if (aId === undefined && bId !== undefined) return -1;\n if (aId !== undefined && bId === undefined) return 1;\n if (aId === bId) continue;\n\n if (typeof aId === 'number' && typeof bId === 'number') {\n return aId - bId;\n }\n if (typeof aId === 'number' && typeof bId === 'string') {\n return -1;\n }\n if (typeof aId === 'string' && typeof bId === 'number') {\n return 1;\n }\n if (typeof aId === 'string' && typeof bId === 'string') {\n return aId < bId ? -1 : 1;\n }\n }\n\n return 0;\n}\n\nfunction isActiveStatus(\n status: (Hcs26VersionRegister | Hcs26VersionRegisterLegacy)['status'],\n): boolean {\n return !status || status === 'active';\n}\n\nfunction normalizeUidString(value: unknown): string | null {\n if (typeof value !== 'string') {\n return null;\n }\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : null;\n}\n\nfunction resolveSequenceNumber(\n primary: unknown,\n fallback: unknown,\n): number | null {\n if (typeof primary === 'number') {\n return primary;\n }\n if (typeof fallback === 'number') {\n return fallback;\n }\n return null;\n}\n\nfunction parseSequenceFromUid(uid: string): number | null {\n if (!/^\\d+$/.test(uid)) {\n return null;\n }\n const parsed = Number(uid);\n return Number.isSafeInteger(parsed) ? parsed : null;\n}\n\nfunction ensureNonEmptyString(value: unknown, field: string): string {\n if (typeof value !== 'string') {\n throw new Error(`Expected ${field} to be a string`);\n }\n const trimmed = value.trim();\n if (!trimmed) {\n throw new Error(`Expected ${field} to be a non-empty string`);\n }\n return trimmed;\n}\n\ntype NormalizedDiscoveryRegister = {\n p: 'hcs-26';\n op: 'register';\n t_id: string;\n account_id: string;\n metadata: Record<string, unknown>;\n m?: string;\n sequence_number?: number;\n};\n\ntype NormalizedDiscoveryRegisterRaw = Omit<\n NormalizedDiscoveryRegister,\n 'metadata'\n> & {\n metadata: Record<string, unknown> | string;\n};\n\nfunction mergeDiscoveryMetadata(\n base: Record<string, unknown>,\n update?: Record<string, unknown>,\n): Record<string, unknown> {\n if (!update) {\n return base;\n }\n return { ...base, ...update };\n}\n\nfunction normalizeDiscoveryRegister(\n input: Hcs26DiscoveryRegister | Hcs26DiscoveryRegisterLegacy,\n messageSequenceNumber?: number,\n): NormalizedDiscoveryRegisterRaw {\n const seq =\n typeof input.sequence_number === 'number'\n ? input.sequence_number\n : typeof messageSequenceNumber === 'number'\n ? messageSequenceNumber\n : undefined;\n\n if ('t_id' in input) {\n return {\n p: 'hcs-26',\n op: 'register',\n t_id: ensureNonEmptyString(input.t_id, 't_id'),\n account_id: ensureNonEmptyString(input.account_id, 'account_id'),\n metadata: input.metadata,\n ...(input.m ? { m: input.m } : {}),\n ...(typeof seq === 'number' ? { sequence_number: seq } : {}),\n };\n }\n\n return {\n p: 'hcs-26',\n op: 'register',\n t_id: ensureNonEmptyString(input.version_registry, 'version_registry'),\n account_id: ensureNonEmptyString(input.publisher, 'publisher'),\n metadata: input.metadata,\n ...(input.m ? { m: input.m } : {}),\n ...(typeof seq === 'number' ? { sequence_number: seq } : {}),\n };\n}\n\nexport class Hcs26SkillRegistryResolver {\n private readonly logger: ILogger;\n private readonly mirrorNode: HederaMirrorNode;\n private readonly hrlResolver: HRLResolver;\n private readonly network: HCS26Network;\n\n constructor(deps: Hcs26ResolverDeps) {\n this.network = deps.network;\n this.logger =\n deps.logger ??\n Logger.getInstance({\n module: 'HCS26Resolver',\n level: 'info',\n });\n this.mirrorNode = new HederaMirrorNode(\n deps.network,\n this.logger,\n deps.mirrorNode,\n );\n this.hrlResolver = new HRLResolver('warn');\n }\n\n private async resolveDiscoveryMetadataHrl(\n metadataHrl: string,\n mode: 'full' | 'patch',\n ): Promise<Record<string, unknown>> {\n const resolved = await this.hrlResolver.resolve(metadataHrl, {\n network: this.network,\n returnRaw: true,\n });\n\n const bytes =\n resolved.content instanceof ArrayBuffer\n ? Buffer.from(resolved.content)\n : Buffer.from(String(resolved.content), 'utf8');\n\n let raw: unknown;\n try {\n raw = JSON.parse(bytes.toString('utf8'));\n } catch {\n throw new Error('Discovery metadata HRL content is not valid JSON');\n }\n\n const schema =\n mode === 'full'\n ? hcs26DiscoveryMetadataSchema\n : hcs26DiscoveryMetadataPatchSchema;\n const parsed = schema.safeParse(raw);\n if (!parsed.success) {\n throw new Error(`Invalid discovery metadata: ${parsed.error.message}`);\n }\n return this.normalizeDiscoveryMetadataObject(\n parsed.data as unknown as Record<string, unknown>,\n );\n }\n\n private normalizeDiscoveryMetadataObject(\n metadata: Record<string, unknown>,\n ): Record<string, unknown> {\n if (\n typeof metadata.icon !== 'string' ||\n metadata.icon.trim().length === 0\n ) {\n const iconLegacy = metadata.icon_hcs1;\n if (typeof iconLegacy === 'string' && iconLegacy.trim().length > 0) {\n return { ...metadata, icon: iconLegacy };\n }\n }\n return metadata;\n }\n\n private async resolveDiscoveryMetadataUri(\n metadataUri: string,\n mode: 'full' | 'patch',\n ): Promise<Record<string, unknown>> {\n const trimmed = metadataUri.trim();\n if (trimmed.startsWith('hcs://1/')) {\n return this.resolveDiscoveryMetadataHrl(trimmed, mode);\n }\n throw new Error(`Unsupported discovery metadata URI: ${trimmed}`);\n }\n\n private resolveDiscoveryMetadataObject(params: {\n metadata: unknown;\n mode: 'full' | 'patch';\n }): Promise<Record<string, unknown>> {\n if (typeof params.metadata === 'string') {\n return this.resolveDiscoveryMetadataUri(params.metadata, params.mode);\n }\n\n const schema =\n params.mode === 'full'\n ? hcs26DiscoveryMetadataSchema\n : hcs26DiscoveryMetadataPatchSchema;\n const parsed = schema.safeParse(params.metadata);\n if (!parsed.success) {\n throw new Error(`Invalid discovery metadata: ${parsed.error.message}`);\n }\n return Promise.resolve(\n this.normalizeDiscoveryMetadataObject(\n parsed.data as unknown as Record<string, unknown>,\n ),\n );\n }\n\n async getDiscoveryRegister(params: {\n directoryTopicId: string;\n skillUid: number;\n }): Promise<NormalizedDiscoveryRegister | null> {\n const messages = await this.mirrorNode.getTopicMessages(\n params.directoryTopicId,\n {\n sequenceNumber: `eq:${params.skillUid}`,\n limit: 5,\n order: 'asc',\n },\n );\n\n for (const message of messages) {\n const parsedNew = hcs26DiscoveryRegisterSchema.safeParse(message);\n const parsedLegacy = parsedNew.success\n ? null\n : hcs26DiscoveryRegisterLegacySchema.safeParse(message);\n const parsed = parsedNew.success\n ? parsedNew\n : parsedLegacy && parsedLegacy.success\n ? parsedLegacy\n : null;\n if (!parsed) {\n continue;\n }\n\n const normalized = normalizeDiscoveryRegister(\n parsed.data as Hcs26DiscoveryRegister | Hcs26DiscoveryRegisterLegacy,\n message.sequence_number,\n );\n const seq = normalized.sequence_number;\n if (typeof seq === 'number' && seq === params.skillUid) {\n const metadata = await this.resolveDiscoveryMetadataObject({\n metadata: normalized.metadata,\n mode: 'full',\n });\n return { ...normalized, metadata };\n }\n }\n\n return null;\n }\n\n async resolveDiscoveryRecord(params: {\n directoryTopicId: string;\n skillUid: number;\n scanLimit?: number;\n }): Promise<NormalizedDiscoveryRegister | null> {\n const register = await this.getDiscoveryRegister({\n directoryTopicId: params.directoryTopicId,\n skillUid: params.skillUid,\n });\n if (!register) {\n return null;\n }\n\n const scanLimit =\n typeof params.scanLimit === 'number' && params.scanLimit > 0\n ? Math.min(5000, Math.floor(params.scanLimit))\n : 1000;\n\n const messages = await this.mirrorNode.getTopicMessages(\n params.directoryTopicId,\n {\n limit: scanLimit,\n order: 'asc',\n },\n );\n\n const uid = String(params.skillUid);\n const registerSequence = resolveSequenceNumber(\n register.sequence_number,\n params.skillUid,\n );\n\n let current: NormalizedDiscoveryRegister = register;\n for (const message of messages) {\n const messageSequence = resolveSequenceNumber(\n undefined,\n message.sequence_number,\n );\n const deleteParsed = hcs26DiscoveryDeleteSchema.safeParse(message);\n if (deleteParsed.success && deleteParsed.data.uid === uid) {\n const deleteSequence = resolveSequenceNumber(\n deleteParsed.data.sequence_number,\n messageSequence,\n );\n if (\n registerSequence !== null &&\n deleteSequence !== null &&\n deleteSequence <= registerSequence\n ) {\n continue;\n }\n return null;\n }\n\n const updateParsedNew = hcs26DiscoveryUpdateSchema.safeParse(message);\n const updateParsedLegacy = updateParsedNew.success\n ? null\n : hcs26DiscoveryUpdateLegacySchema.safeParse(message);\n const updateParsed = updateParsedNew.success\n ? updateParsedNew\n : updateParsedLegacy && updateParsedLegacy.success\n ? updateParsedLegacy\n : null;\n if (!updateParsed || updateParsed.data.uid !== uid) {\n continue;\n }\n const updateSequence = resolveSequenceNumber(\n updateParsed.data.sequence_number,\n messageSequence,\n );\n if (\n registerSequence !== null &&\n updateSequence !== null &&\n updateSequence <= registerSequence\n ) {\n continue;\n }\n\n const nextAccountId =\n 'account_id' in updateParsed.data\n ? normalizeUidString(updateParsed.data.account_id)\n : normalizeUidString(updateParsed.data.publisher);\n const nextMetadataRaw = updateParsed.data.metadata;\n const nextMetadata =\n nextMetadataRaw !== undefined\n ? await this.resolveDiscoveryMetadataObject({\n metadata: nextMetadataRaw,\n mode: 'patch',\n })\n : undefined;\n current = {\n ...current,\n ...(nextAccountId ? { account_id: nextAccountId } : {}),\n metadata: mergeDiscoveryMetadata(current.metadata, nextMetadata),\n };\n }\n\n return current;\n }\n\n async listVersionRegisters(params: {\n versionRegistryTopicId: string;\n skillUid: number;\n limit?: number;\n }): Promise<Array<Hcs26VersionRegister | Hcs26VersionRegisterLegacy>> {\n const limit =\n typeof params.limit === 'number' && params.limit > 0\n ? Math.min(1000, params.limit)\n : 500;\n const messages = await this.mirrorNode.getTopicMessages(\n params.versionRegistryTopicId,\n {\n limit,\n order: 'desc',\n },\n );\n\n const registersByUid = new Map<\n string,\n {\n register: Hcs26VersionRegister | Hcs26VersionRegisterLegacy;\n sequenceNumber: number | null;\n }\n >();\n const updatesByUid = new Map<\n string,\n Array<{ update: Hcs26VersionUpdate; sequenceNumber: number | null }>\n >();\n const deletedByUid = new Map<string, number[]>();\n\n for (const message of messages) {\n const parsedNew = hcs26VersionRegisterSchema.safeParse(message);\n const parsedLegacy = parsedNew.success\n ? null\n : hcs26VersionRegisterLegacySchema.safeParse(message);\n const registerParsed = parsedNew.success\n ? parsedNew\n : parsedLegacy && parsedLegacy.success\n ? parsedLegacy\n : null;\n\n if (registerParsed) {\n if (registerParsed.data.skill_uid !== params.skillUid) {\n continue;\n }\n const uid =\n typeof registerParsed.data.sequence_number === 'number'\n ? String(registerParsed.data.sequence_number)\n : typeof message.sequence_number === 'number'\n ? String(message.sequence_number)\n : null;\n if (uid) {\n const registerSequence = resolveSequenceNumber(\n registerParsed.data.sequence_number,\n message.sequence_number,\n );\n registersByUid.set(uid, {\n register: registerParsed.data as\n | Hcs26VersionRegister\n | Hcs26VersionRegisterLegacy,\n sequenceNumber: registerSequence,\n });\n }\n continue;\n }\n\n const updateParsed = hcs26VersionUpdateSchema.safeParse(message);\n if (updateParsed.success) {\n const uid = updateParsed.data.uid.trim();\n const list = updatesByUid.get(uid) ?? [];\n list.push({\n update: updateParsed.data,\n sequenceNumber: resolveSequenceNumber(\n updateParsed.data.sequence_number,\n message.sequence_number,\n ),\n });\n updatesByUid.set(uid, list);\n continue;\n }\n\n const deleteParsed = hcs26VersionDeleteSchema.safeParse(message);\n if (deleteParsed.success) {\n const uid = deleteParsed.data.uid.trim();\n const list = deletedByUid.get(uid) ?? [];\n const sequenceNumber = resolveSequenceNumber(\n deleteParsed.data.sequence_number,\n message.sequence_number,\n );\n if (sequenceNumber !== null) {\n list.push(sequenceNumber);\n deletedByUid.set(uid, list);\n }\n }\n }\n\n const entries: Array<Hcs26VersionRegister | Hcs26VersionRegisterLegacy> =\n [];\n for (const [uid, registerState] of registersByUid.entries()) {\n const registerSequence =\n registerState.sequenceNumber ?? parseSequenceFromUid(uid);\n const deleteSequences = deletedByUid.get(uid) ?? [];\n const hasDeleteAfterRegister = deleteSequences.some(sequence =>\n registerSequence === null ? true : sequence > registerSequence,\n );\n if (hasDeleteAfterRegister) {\n continue;\n }\n\n const updates = updatesByUid.get(uid);\n if (!updates || updates.length === 0) {\n entries.push(registerState.register);\n continue;\n }\n\n const sorted = [...updates]\n .filter(update =>\n registerSequence === null\n ? true\n : update.sequenceNumber !== null &&\n update.sequenceNumber > registerSequence,\n )\n .sort((a, b) => {\n const aSeq = a.sequenceNumber ?? 0;\n const bSeq = b.sequenceNumber ?? 0;\n return aSeq - bSeq;\n });\n if (sorted.length === 0) {\n entries.push(registerState.register);\n continue;\n }\n\n const final = sorted.reduce<\n Hcs26VersionRegister | Hcs26VersionRegisterLegacy\n >((acc, updateState) => {\n if (updateState.update.status) {\n return { ...acc, status: updateState.update.status };\n }\n return acc;\n }, registerState.register);\n entries.push(final);\n }\n\n return entries;\n }\n\n async getLatestVersionRegister(params: {\n versionRegistryTopicId: string;\n skillUid: number;\n }): Promise<(Hcs26VersionRegister | Hcs26VersionRegisterLegacy) | null> {\n const entries = await this.listVersionRegisters({\n versionRegistryTopicId: params.versionRegistryTopicId,\n skillUid: params.skillUid,\n limit: 100,\n });\n const active = entries.filter(entry => isActiveStatus(entry.status));\n if (active.length === 0) {\n return null;\n }\n\n let best = active[0];\n let bestParsed = parseSemver(best.version);\n\n for (let index = 1; index < active.length; index += 1) {\n const candidate = active[index];\n const candidateParsed = parseSemver(candidate.version);\n\n if (!bestParsed && candidateParsed) {\n best = candidate;\n bestParsed = candidateParsed;\n continue;\n }\n\n if (bestParsed && candidateParsed) {\n const cmp = compareSemver(candidateParsed, bestParsed);\n if (cmp > 0) {\n best = candidate;\n bestParsed = candidateParsed;\n continue;\n }\n\n if (cmp === 0) {\n const bestSeq =\n typeof best.sequence_number === 'number' ? best.sequence_number : 0;\n const candSeq =\n typeof candidate.sequence_number === 'number'\n ? candidate.sequence_number\n : 0;\n if (candSeq > bestSeq) {\n best = candidate;\n bestParsed = candidateParsed;\n }\n }\n }\n }\n\n return best;\n }\n\n async resolveManifest(params: {\n manifestHrl?: string;\n manifestTopicId?: string;\n }): Promise<{\n manifest: Hcs26SkillManifest;\n raw: unknown;\n sha256Hex: string;\n }> {\n const manifestHrl =\n typeof params.manifestHrl === 'string' &&\n params.manifestHrl.trim().length > 0\n ? params.manifestHrl.trim()\n : typeof params.manifestTopicId === 'string' &&\n params.manifestTopicId.trim().length > 0\n ? `hcs://1/${params.manifestTopicId.trim()}`\n : null;\n if (!manifestHrl) {\n throw new Error('Manifest HRL or topic id is required');\n }\n\n const resolved = await this.hrlResolver.resolve(manifestHrl, {\n network: this.network,\n returnRaw: true,\n });\n\n const contentType = resolved.contentType ?? '';\n if (!contentType.toLowerCase().startsWith('application/json')) {\n throw new Error(\n `Expected application/json for manifest, got ${resolved.contentType ?? 'unknown'}`,\n );\n }\n\n const bytes =\n resolved.content instanceof ArrayBuffer\n ? Buffer.from(resolved.content)\n : Buffer.from(String(resolved.content), 'utf8');\n\n const sha256Hex = await hash(bytes, 'sha256');\n\n let raw: unknown;\n try {\n raw = JSON.parse(bytes.toString('utf8'));\n } catch {\n throw new Error('Manifest content is not valid JSON');\n }\n\n const parsed = hcs26SkillManifestSchema.safeParse(raw);\n if (!parsed.success) {\n throw new Error(`Invalid HCS-26 manifest: ${parsed.error.message}`);\n }\n\n const hasSkillMd = parsed.data.files.some(file => file.path === 'SKILL.md');\n if (!hasSkillMd) {\n throw new Error(\n 'HCS-26 manifest must include SKILL.md at path \"SKILL.md\"',\n );\n }\n\n return { manifest: parsed.data, raw, sha256Hex };\n }\n\n async verifyVersionRegisterMatchesManifest(params: {\n versionRegister: Hcs26VersionRegister | Hcs26VersionRegisterLegacy;\n manifestSha256Hex: string;\n }): Promise<void> {\n const checksumRaw = params.versionRegister.checksum;\n if (!checksumRaw) {\n this.logger.warn(\n 'HCS-26 version register is missing checksum; skipping manifest verification.',\n );\n return;\n }\n\n const checksum = checksumRaw.trim();\n if (!checksum.startsWith('sha256:')) {\n throw new Error(`Unsupported checksum: ${checksum}`);\n }\n const expectedHex = checksum.slice('sha256:'.length);\n if (params.manifestSha256Hex !== expectedHex) {\n throw new Error(\n `Manifest checksum mismatch (expected ${expectedHex}, got ${params.manifestSha256Hex})`,\n );\n }\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"standards-sdk.es106.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,108 +1,116 @@
1
- import { z } from "zod";
2
- import { hcs26TopicTypeEnumSchema, HCS26_PROTOCOL, hcs26OperationEnumSchema } from "./standards-sdk.es105.js";
3
- const HCS26_DEFAULT_TTL_SECONDS = 86400;
4
- function toPositiveInt(value) {
5
- if (!Number.isFinite(value)) {
6
- throw new Error("Expected a finite number");
1
+ import { Client } from "@hashgraph/sdk";
2
+ import { Logger } from "./standards-sdk.es117.js";
3
+ import { createNodeOperatorContext } from "./standards-sdk.es152.js";
4
+ import { buildHcs18CreateDiscoveryTopicTx, buildHcs18AnnounceMessage, buildHcs18SubmitDiscoveryMessageTx, buildHcs18ProposeMessage, buildHcs18RespondMessage, buildHcs18CompleteMessage, buildHcs18WithdrawMessage } from "./standards-sdk.es109.js";
5
+ import { HCS18BaseClient } from "./standards-sdk.es110.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;
7
25
  }
8
- const intValue = Math.floor(value);
9
- if (intValue <= 0) {
10
- throw new Error("Expected a positive integer");
26
+ async ensureInitialized() {
27
+ await this.operatorCtx.ensureInitialized();
11
28
  }
12
- return intValue;
13
- }
14
- function buildHcs26TopicMemo(input) {
15
- const indexed = input.indexed ?? true;
16
- const ttlSeconds = toPositiveInt(
17
- input.ttlSeconds ?? HCS26_DEFAULT_TTL_SECONDS
18
- );
19
- const topicType = hcs26TopicTypeEnumSchema.parse(input.topicType);
20
- const indexedSegment = indexed ? "0" : "1";
21
- return `${HCS26_PROTOCOL}:${indexedSegment}:${ttlSeconds}:${topicType}`;
22
- }
23
- function parseHcs26TopicMemo(memoRaw) {
24
- const memo = memoRaw.trim();
25
- if (!memo) {
26
- return null;
27
- }
28
- const match = memo.match(/^hcs-26:(\d+):(\d+):(\d+)$/);
29
- if (!match) {
30
- return null;
31
- }
32
- const indexedSegment = Number(match[1]);
33
- const ttlSeconds = Number(match[2]);
34
- const topicType = Number(match[3]);
35
- if (![indexedSegment, ttlSeconds, topicType].every(Number.isFinite)) {
36
- return null;
37
- }
38
- const parsedTopicType = hcs26TopicTypeEnumSchema.safeParse(topicType);
39
- if (!parsedTopicType.success) {
40
- return null;
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;
37
+ }
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");
50
+ }
51
+ return { topicId, receipt };
41
52
  }
42
- if (indexedSegment !== 0 && indexedSegment !== 1) {
43
- return null;
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 };
44
65
  }
45
- return {
46
- protocol: HCS26_PROTOCOL,
47
- indexed: indexedSegment === 0,
48
- ttlSeconds,
49
- topicType: parsedTopicType.data
50
- };
51
- }
52
- function buildHcs26TransactionMemo(input) {
53
- const operation = hcs26OperationEnumSchema.parse(input.operation);
54
- const topicType = hcs26TopicTypeEnumSchema.parse(input.topicType);
55
- return `${HCS26_PROTOCOL}:op:${operation}:${topicType}`;
56
- }
57
- function parseHcs26TransactionMemo(memoRaw) {
58
- const memo = memoRaw.trim();
59
- if (!memo) {
60
- return null;
61
- }
62
- const match = memo.match(/^hcs-26:op:(\d+):(\d+)$/);
63
- if (!match) {
64
- return null;
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 };
65
78
  }
66
- const operation = Number(match[1]);
67
- const topicType = Number(match[2]);
68
- if (![operation, topicType].every(Number.isFinite)) {
69
- return null;
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);
70
89
  }
71
- const parsedOperation = hcs26OperationEnumSchema.safeParse(operation);
72
- if (!parsedOperation.success) {
73
- return null;
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);
74
100
  }
75
- const parsedTopicType = hcs26TopicTypeEnumSchema.safeParse(topicType);
76
- if (!parsedTopicType.success) {
77
- return null;
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);
78
111
  }
79
- return {
80
- protocol: HCS26_PROTOCOL,
81
- operation: parsedOperation.data,
82
- topicType: parsedTopicType.data
83
- };
84
112
  }
85
- const hcs26TopicMemoSchema = z.string().transform((value) => {
86
- const parsed = parseHcs26TopicMemo(value);
87
- if (!parsed) {
88
- throw new Error("Invalid HCS-26 topic memo");
89
- }
90
- return parsed;
91
- });
92
- const hcs26TransactionMemoSchema = z.string().transform((value) => {
93
- const parsed = parseHcs26TransactionMemo(value);
94
- if (!parsed) {
95
- throw new Error("Invalid HCS-26 transaction memo");
96
- }
97
- return parsed;
98
- });
99
113
  export {
100
- HCS26_DEFAULT_TTL_SECONDS,
101
- buildHcs26TopicMemo,
102
- buildHcs26TransactionMemo,
103
- hcs26TopicMemoSchema,
104
- hcs26TransactionMemoSchema,
105
- parseHcs26TopicMemo,
106
- parseHcs26TransactionMemo
114
+ HCS18Client
107
115
  };
108
116
  //# sourceMappingURL=standards-sdk.es107.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es107.js","sources":["../../src/hcs-26/memos.ts"],"sourcesContent":["import { z } from 'zod';\nimport {\n HCS26_PROTOCOL,\n hcs26OperationEnumSchema,\n hcs26TopicTypeEnumSchema,\n type Hcs26OperationEnum,\n type Hcs26TopicTypeEnum,\n} from './types';\n\nexport type Hcs26TopicMemo = {\n protocol: typeof HCS26_PROTOCOL;\n indexed: boolean;\n ttlSeconds: number;\n topicType: Hcs26TopicTypeEnum;\n};\n\nexport const HCS26_DEFAULT_TTL_SECONDS = 86400;\n\nfunction toPositiveInt(value: number): number {\n if (!Number.isFinite(value)) {\n throw new Error('Expected a finite number');\n }\n const intValue = Math.floor(value);\n if (intValue <= 0) {\n throw new Error('Expected a positive integer');\n }\n return intValue;\n}\n\nexport function buildHcs26TopicMemo(input: {\n indexed?: boolean;\n ttlSeconds?: number;\n topicType: Hcs26TopicTypeEnum;\n}): string {\n const indexed = input.indexed ?? true;\n const ttlSeconds = toPositiveInt(\n input.ttlSeconds ?? HCS26_DEFAULT_TTL_SECONDS,\n );\n const topicType = hcs26TopicTypeEnumSchema.parse(input.topicType);\n\n // HCS-2 memo convention: indexed topics use \"0\" in the second segment.\n const indexedSegment = indexed ? '0' : '1';\n return `${HCS26_PROTOCOL}:${indexedSegment}:${ttlSeconds}:${topicType}`;\n}\n\nexport function parseHcs26TopicMemo(memoRaw: string): Hcs26TopicMemo | null {\n const memo = memoRaw.trim();\n if (!memo) {\n return null;\n }\n\n const match = memo.match(/^hcs-26:(\\d+):(\\d+):(\\d+)$/);\n if (!match) {\n return null;\n }\n\n const indexedSegment = Number(match[1]);\n const ttlSeconds = Number(match[2]);\n const topicType = Number(match[3]);\n\n if (![indexedSegment, ttlSeconds, topicType].every(Number.isFinite)) {\n return null;\n }\n\n const parsedTopicType = hcs26TopicTypeEnumSchema.safeParse(topicType);\n if (!parsedTopicType.success) {\n return null;\n }\n\n if (indexedSegment !== 0 && indexedSegment !== 1) {\n return null;\n }\n\n return {\n protocol: HCS26_PROTOCOL,\n indexed: indexedSegment === 0,\n ttlSeconds,\n topicType: parsedTopicType.data,\n };\n}\n\nexport function buildHcs26TransactionMemo(input: {\n operation: Hcs26OperationEnum;\n topicType: Hcs26TopicTypeEnum;\n}): string {\n const operation = hcs26OperationEnumSchema.parse(input.operation);\n const topicType = hcs26TopicTypeEnumSchema.parse(input.topicType);\n return `${HCS26_PROTOCOL}:op:${operation}:${topicType}`;\n}\n\nexport type Hcs26TransactionMemo = {\n protocol: typeof HCS26_PROTOCOL;\n operation: Hcs26OperationEnum;\n topicType: Hcs26TopicTypeEnum;\n};\n\nexport function parseHcs26TransactionMemo(\n memoRaw: string,\n): Hcs26TransactionMemo | null {\n const memo = memoRaw.trim();\n if (!memo) {\n return null;\n }\n\n const match = memo.match(/^hcs-26:op:(\\d+):(\\d+)$/);\n if (!match) {\n return null;\n }\n\n const operation = Number(match[1]);\n const topicType = Number(match[2]);\n if (![operation, topicType].every(Number.isFinite)) {\n return null;\n }\n\n const parsedOperation = hcs26OperationEnumSchema.safeParse(operation);\n if (!parsedOperation.success) {\n return null;\n }\n const parsedTopicType = hcs26TopicTypeEnumSchema.safeParse(topicType);\n if (!parsedTopicType.success) {\n return null;\n }\n\n return {\n protocol: HCS26_PROTOCOL,\n operation: parsedOperation.data,\n topicType: parsedTopicType.data,\n };\n}\n\nexport const hcs26TopicMemoSchema = z.string().transform(value => {\n const parsed = parseHcs26TopicMemo(value);\n if (!parsed) {\n throw new Error('Invalid HCS-26 topic memo');\n }\n return parsed;\n});\n\nexport const hcs26TransactionMemoSchema = z.string().transform(value => {\n const parsed = parseHcs26TransactionMemo(value);\n if (!parsed) {\n throw new Error('Invalid HCS-26 transaction memo');\n }\n return parsed;\n});\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"standards-sdk.es107.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,163 +1,37 @@
1
- import { Logger } from "./standards-sdk.es111.js";
2
- import { Hcs26SkillRegistryResolver } from "./standards-sdk.es106.js";
3
- function getManifestTopicId(entry) {
4
- const topicIdCandidate = entry.t_id;
5
- if (typeof topicIdCandidate === "string" && topicIdCandidate.trim()) {
6
- return topicIdCandidate.trim();
1
+ import { buildHcs18AnnounceMessage, buildHcs18ProposeMessage, buildHcs18RespondMessage, buildHcs18CompleteMessage, buildHcs18WithdrawMessage } from "./standards-sdk.es109.js";
2
+ class HCS18BrowserClient {
3
+ constructor(config) {
4
+ this.hwc = config.hwc;
7
5
  }
8
- const hrlCandidate = entry.manifest_hcs1;
9
- if (typeof hrlCandidate !== "string" || !hrlCandidate.trim()) {
10
- throw new Error("Missing manifest reference in version register entry");
6
+ async submit(discoveryTopicId, message) {
7
+ const receipt = await this.hwc.submitMessageToTopic(
8
+ discoveryTopicId,
9
+ JSON.stringify(message)
10
+ );
11
+ return receipt;
11
12
  }
12
- const hrl = hrlCandidate.trim();
13
- const prefix = "hcs://1/";
14
- if (!hrl.startsWith(prefix)) {
15
- throw new Error(`Invalid manifest HRL: ${hrl}`);
13
+ async announce(params) {
14
+ const message = buildHcs18AnnounceMessage(params.data);
15
+ return this.submit(params.discoveryTopicId, message);
16
16
  }
17
- return hrl.slice(prefix.length);
18
- }
19
- class HCS26BaseClient {
20
- constructor(config) {
21
- this.network = config.network;
22
- this.logger = config.logger ?? Logger.getInstance({
23
- module: "HCS26Client",
24
- level: "info"
25
- });
26
- this.verificationProvider = config.verificationProvider;
27
- this.resolver = new Hcs26SkillRegistryResolver({
28
- network: this.network,
29
- logger: this.logger,
30
- mirrorNode: config.mirrorNode
31
- });
17
+ async propose(params) {
18
+ const message = buildHcs18ProposeMessage(params.data);
19
+ return this.submit(params.discoveryTopicId, message);
32
20
  }
33
- async resolveSkill(params) {
34
- const discovery = await this.resolver.resolveDiscoveryRecord({
35
- directoryTopicId: params.directoryTopicId,
36
- skillUid: params.skillUid,
37
- scanLimit: params.discoveryScanLimit
38
- });
39
- if (!discovery) {
40
- return null;
41
- }
42
- const versionRegistryTopicId = discovery.t_id;
43
- const latestVersion = await this.resolver.getLatestVersionRegister({
44
- versionRegistryTopicId,
45
- skillUid: params.skillUid
46
- });
47
- if (!latestVersion) {
48
- throw new Error(
49
- `No active version entries found for skill ${params.skillUid} in version registry ${versionRegistryTopicId}`
50
- );
51
- }
52
- const manifestTopicId = getManifestTopicId(latestVersion);
53
- const { manifest, sha256Hex } = await this.resolver.resolveManifest({
54
- manifestTopicId
55
- });
56
- await this.resolver.verifyVersionRegisterMatchesManifest({
57
- versionRegister: latestVersion,
58
- manifestSha256Hex: sha256Hex
59
- });
60
- let verification;
61
- const provider = this.verificationProvider;
62
- const includeVerification = params.includeVerification === true;
63
- const name = typeof discovery.metadata?.name === "string" ? discovery.metadata.name.trim() : "";
64
- if (includeVerification && provider && name) {
65
- try {
66
- verification = await provider.getSkillVerificationStatus({ name });
67
- } catch (error) {
68
- const detail = error instanceof Error ? error.message : String(error);
69
- this.logger.warn(
70
- `Failed to resolve verification status for skill "${name}": ${detail}`
71
- );
72
- verification = null;
73
- }
74
- }
75
- return {
76
- directoryTopicId: params.directoryTopicId,
77
- skillUid: params.skillUid,
78
- discovery,
79
- versionRegistryTopicId,
80
- latestVersion,
81
- manifest,
82
- manifestSha256Hex: sha256Hex,
83
- ...includeVerification ? { verification } : {}
84
- };
21
+ async respond(params) {
22
+ const message = buildHcs18RespondMessage(params.data);
23
+ return this.submit(params.discoveryTopicId, message);
85
24
  }
86
- async listSkillVersions(params) {
87
- const discovery = await this.resolver.resolveDiscoveryRecord({
88
- directoryTopicId: params.directoryTopicId,
89
- skillUid: params.skillUid,
90
- scanLimit: params.discoveryScanLimit
91
- });
92
- if (!discovery) {
93
- return [];
94
- }
95
- const versionRegistryTopicId = discovery.t_id;
96
- return this.resolver.listVersionRegisters({
97
- versionRegistryTopicId,
98
- skillUid: params.skillUid,
99
- limit: params.limit
100
- });
25
+ async complete(params) {
26
+ const message = buildHcs18CompleteMessage(params.data);
27
+ return this.submit(params.discoveryTopicId, message);
101
28
  }
102
- async resolveSkillVersion(params) {
103
- const versionRaw = params.version.trim();
104
- if (!versionRaw) {
105
- throw new Error("version is required");
106
- }
107
- const discovery = await this.resolver.resolveDiscoveryRecord({
108
- directoryTopicId: params.directoryTopicId,
109
- skillUid: params.skillUid,
110
- scanLimit: params.discoveryScanLimit
111
- });
112
- if (!discovery) {
113
- return null;
114
- }
115
- const versionRegistryTopicId = discovery.t_id;
116
- const entries = await this.resolver.listVersionRegisters({
117
- versionRegistryTopicId,
118
- skillUid: params.skillUid,
119
- limit: 250
120
- });
121
- const target = entries.find((entry) => entry.version.trim() === versionRaw);
122
- if (!target) {
123
- return null;
124
- }
125
- const manifestTopicId = getManifestTopicId(target);
126
- const { manifest, sha256Hex } = await this.resolver.resolveManifest({
127
- manifestTopicId
128
- });
129
- await this.resolver.verifyVersionRegisterMatchesManifest({
130
- versionRegister: target,
131
- manifestSha256Hex: sha256Hex
132
- });
133
- let verification;
134
- const provider = this.verificationProvider;
135
- const includeVerification = params.includeVerification === true;
136
- const name = typeof discovery.metadata?.name === "string" ? discovery.metadata.name.trim() : "";
137
- if (includeVerification && provider && name) {
138
- try {
139
- verification = await provider.getSkillVerificationStatus({ name });
140
- } catch (error) {
141
- const detail = error instanceof Error ? error.message : String(error);
142
- this.logger.warn(
143
- `Failed to resolve verification status for skill "${name}": ${detail}`
144
- );
145
- verification = null;
146
- }
147
- }
148
- return {
149
- directoryTopicId: params.directoryTopicId,
150
- skillUid: params.skillUid,
151
- discovery,
152
- versionRegistryTopicId,
153
- versionEntry: target,
154
- manifest,
155
- manifestSha256Hex: sha256Hex,
156
- ...includeVerification ? { verification } : {}
157
- };
29
+ async withdraw(params) {
30
+ const message = buildHcs18WithdrawMessage(params.data);
31
+ return this.submit(params.discoveryTopicId, message);
158
32
  }
159
33
  }
160
34
  export {
161
- HCS26BaseClient
35
+ HCS18BrowserClient
162
36
  };
163
37
  //# sourceMappingURL=standards-sdk.es108.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es108.js","sources":["../../src/hcs-26/base-client.ts"],"sourcesContent":["import type { ILogger } from '../utils/logger';\nimport { Logger } from '../utils/logger';\nimport type { NetworkType } from '../utils/types';\nimport type { MirrorNodeConfig } from '../services/mirror-node';\nimport { Hcs26SkillRegistryResolver } from './resolver';\nimport type {\n Hcs26SkillManifest,\n Hcs26VersionRegister,\n Hcs26VersionRegisterLegacy,\n} from './types';\n\nexport type HCS26SkillVerificationStatus = {\n name: string;\n verified: boolean;\n previouslyVerified: boolean;\n pendingRequest?: unknown;\n};\n\nexport interface HCS26SkillVerificationProvider {\n getSkillVerificationStatus(params: {\n name: string;\n }): Promise<HCS26SkillVerificationStatus | null>;\n}\n\nexport interface HCS26ClientConfig {\n network: NetworkType;\n logger?: ILogger;\n mirrorNode?: MirrorNodeConfig;\n verificationProvider?: HCS26SkillVerificationProvider;\n}\n\nexport type HCS26DiscoveryRecord = {\n p: 'hcs-26';\n op: 'register';\n t_id: string;\n account_id: string;\n metadata: Record<string, unknown>;\n m?: string;\n sequence_number?: number;\n};\n\nexport type HCS26ResolvedSkill = {\n directoryTopicId: string;\n skillUid: number;\n discovery: HCS26DiscoveryRecord;\n versionRegistryTopicId: string;\n latestVersion:\n | (Hcs26VersionRegister & { sequence_number?: number })\n | (Hcs26VersionRegisterLegacy & { sequence_number?: number });\n manifest: Hcs26SkillManifest;\n manifestSha256Hex: string;\n verification?: HCS26SkillVerificationStatus | null;\n};\n\nexport type HCS26ResolvedSkillVersion = Omit<\n HCS26ResolvedSkill,\n 'latestVersion'\n> & {\n versionEntry:\n | (Hcs26VersionRegister & { sequence_number?: number })\n | (Hcs26VersionRegisterLegacy & { sequence_number?: number });\n};\n\nfunction getManifestTopicId(\n entry: Hcs26VersionRegister | Hcs26VersionRegisterLegacy,\n): string {\n const topicIdCandidate = (entry as { t_id?: unknown }).t_id;\n if (typeof topicIdCandidate === 'string' && topicIdCandidate.trim()) {\n return topicIdCandidate.trim();\n }\n\n const hrlCandidate = (entry as { manifest_hcs1?: unknown }).manifest_hcs1;\n if (typeof hrlCandidate !== 'string' || !hrlCandidate.trim()) {\n throw new Error('Missing manifest reference in version register entry');\n }\n\n const hrl = hrlCandidate.trim();\n const prefix = 'hcs://1/';\n if (!hrl.startsWith(prefix)) {\n throw new Error(`Invalid manifest HRL: ${hrl}`);\n }\n return hrl.slice(prefix.length);\n}\n\nexport class HCS26BaseClient {\n protected readonly network: NetworkType;\n protected readonly logger: ILogger;\n protected readonly resolver: Hcs26SkillRegistryResolver;\n protected readonly verificationProvider?: HCS26SkillVerificationProvider;\n\n constructor(config: HCS26ClientConfig) {\n this.network = config.network;\n this.logger =\n config.logger ??\n Logger.getInstance({\n module: 'HCS26Client',\n level: 'info',\n });\n this.verificationProvider = config.verificationProvider;\n\n this.resolver = new Hcs26SkillRegistryResolver({\n network: this.network,\n logger: this.logger,\n mirrorNode: config.mirrorNode,\n });\n }\n\n async resolveSkill(params: {\n directoryTopicId: string;\n skillUid: number;\n discoveryScanLimit?: number;\n includeVerification?: boolean;\n }): Promise<HCS26ResolvedSkill | null> {\n const discovery = (await this.resolver.resolveDiscoveryRecord({\n directoryTopicId: params.directoryTopicId,\n skillUid: params.skillUid,\n scanLimit: params.discoveryScanLimit,\n })) as HCS26DiscoveryRecord | null;\n\n if (!discovery) {\n return null;\n }\n\n const versionRegistryTopicId = discovery.t_id;\n const latestVersion = await this.resolver.getLatestVersionRegister({\n versionRegistryTopicId,\n skillUid: params.skillUid,\n });\n\n if (!latestVersion) {\n throw new Error(\n `No active version entries found for skill ${params.skillUid} in version registry ${versionRegistryTopicId}`,\n );\n }\n\n const manifestTopicId = getManifestTopicId(latestVersion);\n const { manifest, sha256Hex } = await this.resolver.resolveManifest({\n manifestTopicId,\n });\n\n await this.resolver.verifyVersionRegisterMatchesManifest({\n versionRegister: latestVersion,\n manifestSha256Hex: sha256Hex,\n });\n\n let verification: HCS26SkillVerificationStatus | null | undefined;\n const provider = this.verificationProvider;\n const includeVerification = params.includeVerification === true;\n const name =\n typeof discovery.metadata?.name === 'string'\n ? discovery.metadata.name.trim()\n : '';\n\n if (includeVerification && provider && name) {\n try {\n verification = await provider.getSkillVerificationStatus({ name });\n } catch (error) {\n const detail = error instanceof Error ? error.message : String(error);\n this.logger.warn(\n `Failed to resolve verification status for skill \"${name}\": ${detail}`,\n );\n verification = null;\n }\n }\n\n return {\n directoryTopicId: params.directoryTopicId,\n skillUid: params.skillUid,\n discovery,\n versionRegistryTopicId,\n latestVersion,\n manifest,\n manifestSha256Hex: sha256Hex,\n ...(includeVerification ? { verification } : {}),\n };\n }\n\n async listSkillVersions(params: {\n directoryTopicId: string;\n skillUid: number;\n discoveryScanLimit?: number;\n limit?: number;\n }): Promise<\n Array<\n | (Hcs26VersionRegister & { sequence_number?: number })\n | (Hcs26VersionRegisterLegacy & { sequence_number?: number })\n >\n > {\n const discovery = (await this.resolver.resolveDiscoveryRecord({\n directoryTopicId: params.directoryTopicId,\n skillUid: params.skillUid,\n scanLimit: params.discoveryScanLimit,\n })) as HCS26DiscoveryRecord | null;\n\n if (!discovery) {\n return [];\n }\n\n const versionRegistryTopicId = discovery.t_id;\n return this.resolver.listVersionRegisters({\n versionRegistryTopicId,\n skillUid: params.skillUid,\n limit: params.limit,\n });\n }\n\n async resolveSkillVersion(params: {\n directoryTopicId: string;\n skillUid: number;\n version: string;\n discoveryScanLimit?: number;\n includeVerification?: boolean;\n }): Promise<HCS26ResolvedSkillVersion | null> {\n const versionRaw = params.version.trim();\n if (!versionRaw) {\n throw new Error('version is required');\n }\n\n const discovery = (await this.resolver.resolveDiscoveryRecord({\n directoryTopicId: params.directoryTopicId,\n skillUid: params.skillUid,\n scanLimit: params.discoveryScanLimit,\n })) as HCS26DiscoveryRecord | null;\n\n if (!discovery) {\n return null;\n }\n\n const versionRegistryTopicId = discovery.t_id;\n const entries = await this.resolver.listVersionRegisters({\n versionRegistryTopicId,\n skillUid: params.skillUid,\n limit: 250,\n });\n\n const target = entries.find(entry => entry.version.trim() === versionRaw);\n if (!target) {\n return null;\n }\n\n const manifestTopicId = getManifestTopicId(target);\n const { manifest, sha256Hex } = await this.resolver.resolveManifest({\n manifestTopicId,\n });\n\n await this.resolver.verifyVersionRegisterMatchesManifest({\n versionRegister: target,\n manifestSha256Hex: sha256Hex,\n });\n\n let verification: HCS26SkillVerificationStatus | null | undefined;\n const provider = this.verificationProvider;\n const includeVerification = params.includeVerification === true;\n const name =\n typeof discovery.metadata?.name === 'string'\n ? discovery.metadata.name.trim()\n : '';\n\n if (includeVerification && provider && name) {\n try {\n verification = await provider.getSkillVerificationStatus({ name });\n } catch (error) {\n const detail = error instanceof Error ? error.message : String(error);\n this.logger.warn(\n `Failed to resolve verification status for skill \"${name}\": ${detail}`,\n );\n verification = null;\n }\n }\n\n return {\n directoryTopicId: params.directoryTopicId,\n skillUid: params.skillUid,\n discovery,\n versionRegistryTopicId,\n versionEntry: target,\n manifest,\n manifestSha256Hex: sha256Hex,\n ...(includeVerification ? { verification } : {}),\n };\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"standards-sdk.es108.js","sources":["../../src/hcs-18/browser.ts"],"sourcesContent":["import type { TransactionReceipt } from '@hashgraph/sdk';\nimport { HashinalsWalletConnectSDK } from '@hashgraphonline/hashinal-wc';\nimport type {\n DiscoveryMessage,\n AnnounceData,\n ProposeData,\n RespondData,\n CompleteMessage,\n WithdrawMessage,\n} from './types';\nimport {\n buildHcs18AnnounceMessage,\n buildHcs18ProposeMessage,\n buildHcs18RespondMessage,\n buildHcs18CompleteMessage,\n buildHcs18WithdrawMessage,\n} from './tx';\n\nexport interface BrowserHCS18ClientConfig {\n network: 'testnet' | 'mainnet';\n hwc: HashinalsWalletConnectSDK;\n}\n\nexport class HCS18BrowserClient {\n private readonly hwc: HashinalsWalletConnectSDK;\n\n constructor(config: BrowserHCS18ClientConfig) {\n this.hwc = config.hwc;\n }\n\n async submit(\n discoveryTopicId: string,\n message: DiscoveryMessage,\n ): Promise<TransactionReceipt> {\n const receipt = await this.hwc.submitMessageToTopic(\n discoveryTopicId,\n JSON.stringify(message),\n );\n return receipt;\n }\n\n async announce(params: {\n discoveryTopicId: string;\n data: AnnounceData;\n }): Promise<TransactionReceipt> {\n const message = buildHcs18AnnounceMessage(params.data);\n return this.submit(params.discoveryTopicId, message);\n }\n\n async propose(params: {\n discoveryTopicId: string;\n data: ProposeData;\n }): Promise<TransactionReceipt> {\n const message = buildHcs18ProposeMessage(params.data);\n return this.submit(params.discoveryTopicId, message);\n }\n\n async respond(params: {\n discoveryTopicId: string;\n data: RespondData;\n }): Promise<TransactionReceipt> {\n const message = buildHcs18RespondMessage(params.data);\n return this.submit(params.discoveryTopicId, message);\n }\n\n async complete(params: {\n discoveryTopicId: string;\n data: CompleteMessage['data'];\n }): Promise<TransactionReceipt> {\n const message = buildHcs18CompleteMessage(params.data);\n return this.submit(params.discoveryTopicId, message);\n }\n\n async withdraw(params: {\n discoveryTopicId: string;\n data: WithdrawMessage['data'];\n }): Promise<TransactionReceipt> {\n const message = buildHcs18WithdrawMessage(params.data);\n return this.submit(params.discoveryTopicId, message);\n }\n}\n"],"names":[],"mappings":";AAuBO,MAAM,mBAAmB;AAAA,EAG9B,YAAY,QAAkC;AAC5C,SAAK,MAAM,OAAO;AAAA,EACpB;AAAA,EAEA,MAAM,OACJ,kBACA,SAC6B;AAC7B,UAAM,UAAU,MAAM,KAAK,IAAI;AAAA,MAC7B;AAAA,MACA,KAAK,UAAU,OAAO;AAAA,IAAA;AAExB,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,SAAS,QAGiB;AAC9B,UAAM,UAAU,0BAA0B,OAAO,IAAI;AACrD,WAAO,KAAK,OAAO,OAAO,kBAAkB,OAAO;AAAA,EACrD;AAAA,EAEA,MAAM,QAAQ,QAGkB;AAC9B,UAAM,UAAU,yBAAyB,OAAO,IAAI;AACpD,WAAO,KAAK,OAAO,OAAO,kBAAkB,OAAO;AAAA,EACrD;AAAA,EAEA,MAAM,QAAQ,QAGkB;AAC9B,UAAM,UAAU,yBAAyB,OAAO,IAAI;AACpD,WAAO,KAAK,OAAO,OAAO,kBAAkB,OAAO;AAAA,EACrD;AAAA,EAEA,MAAM,SAAS,QAGiB;AAC9B,UAAM,UAAU,0BAA0B,OAAO,IAAI;AACrD,WAAO,KAAK,OAAO,OAAO,kBAAkB,OAAO;AAAA,EACrD;AAAA,EAEA,MAAM,SAAS,QAGiB;AAC9B,UAAM,UAAU,0BAA0B,OAAO,IAAI;AACrD,WAAO,KAAK,OAAO,OAAO,kBAAkB,OAAO;AAAA,EACrD;AACF;"}