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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (340) hide show
  1. package/dist/cjs/hcs-10/sdk.d.ts.map +1 -1
  2. package/dist/cjs/hcs-14/issuers/hiero.d.ts.map +1 -1
  3. package/dist/cjs/index.d.ts.map +1 -1
  4. package/dist/cjs/services/registry-broker/schemas.d.ts +153 -153
  5. package/dist/cjs/standards-sdk.cjs +2 -2
  6. package/dist/cjs/standards-sdk.cjs.map +1 -1
  7. package/dist/cjs/utils/dynamic-import.d.ts +5 -1
  8. package/dist/cjs/utils/dynamic-import.d.ts.map +1 -1
  9. package/dist/es/hcs-10/sdk.d.ts.map +1 -1
  10. package/dist/es/hcs-14/issuers/hiero.d.ts.map +1 -1
  11. package/dist/es/index.d.ts.map +1 -1
  12. package/dist/es/services/registry-broker/schemas.d.ts +153 -153
  13. package/dist/es/standards-sdk.es.js +134 -135
  14. package/dist/es/standards-sdk.es.js.map +1 -1
  15. package/dist/es/standards-sdk.es10.js +70 -90
  16. package/dist/es/standards-sdk.es10.js.map +1 -1
  17. package/dist/es/standards-sdk.es100.js +229 -27
  18. package/dist/es/standards-sdk.es100.js.map +1 -1
  19. package/dist/es/standards-sdk.es101.js +109 -228
  20. package/dist/es/standards-sdk.es101.js.map +1 -1
  21. package/dist/es/standards-sdk.es102.js +15 -94
  22. package/dist/es/standards-sdk.es102.js.map +1 -1
  23. package/dist/es/standards-sdk.es103.js +80 -30
  24. package/dist/es/standards-sdk.es103.js.map +1 -1
  25. package/dist/es/standards-sdk.es104.js +27 -80
  26. package/dist/es/standards-sdk.es104.js.map +1 -1
  27. package/dist/es/standards-sdk.es105.js +136 -25
  28. package/dist/es/standards-sdk.es105.js.map +1 -1
  29. package/dist/es/standards-sdk.es106.js +27 -140
  30. package/dist/es/standards-sdk.es106.js.map +1 -1
  31. package/dist/es/standards-sdk.es107.js +20 -27
  32. package/dist/es/standards-sdk.es107.js.map +1 -1
  33. package/dist/es/standards-sdk.es108.js +156 -18
  34. package/dist/es/standards-sdk.es108.js.map +1 -1
  35. package/dist/es/standards-sdk.es109.js +198 -148
  36. package/dist/es/standards-sdk.es109.js.map +1 -1
  37. package/dist/es/standards-sdk.es11.js +121 -45
  38. package/dist/es/standards-sdk.es11.js.map +1 -1
  39. package/dist/es/standards-sdk.es110.js +747 -167
  40. package/dist/es/standards-sdk.es110.js.map +1 -1
  41. package/dist/es/standards-sdk.es111.js +9 -786
  42. package/dist/es/standards-sdk.es111.js.map +1 -1
  43. package/dist/es/standards-sdk.es112.js +567 -13
  44. package/dist/es/standards-sdk.es112.js.map +1 -1
  45. package/dist/es/standards-sdk.es113.js +576 -541
  46. package/dist/es/standards-sdk.es113.js.map +1 -1
  47. package/dist/es/standards-sdk.es114.js +12 -601
  48. package/dist/es/standards-sdk.es114.js.map +1 -1
  49. package/dist/es/standards-sdk.es115.js +2 -13
  50. package/dist/es/standards-sdk.es115.js.map +1 -1
  51. package/dist/es/standards-sdk.es116.js +87 -2
  52. package/dist/es/standards-sdk.es116.js.map +1 -1
  53. package/dist/es/standards-sdk.es117.js +37 -84
  54. package/dist/es/standards-sdk.es117.js.map +1 -1
  55. package/dist/es/standards-sdk.es118.js +2 -40
  56. package/dist/es/standards-sdk.es118.js.map +1 -1
  57. package/dist/es/standards-sdk.es119.js +231 -2
  58. package/dist/es/standards-sdk.es119.js.map +1 -1
  59. package/dist/es/standards-sdk.es12.js +60 -159
  60. package/dist/es/standards-sdk.es12.js.map +1 -1
  61. package/dist/es/standards-sdk.es120.js +1110 -201
  62. package/dist/es/standards-sdk.es120.js.map +1 -1
  63. package/dist/es/standards-sdk.es121.js +225 -1059
  64. package/dist/es/standards-sdk.es121.js.map +1 -1
  65. package/dist/es/standards-sdk.es122.js +419 -303
  66. package/dist/es/standards-sdk.es122.js.map +1 -1
  67. package/dist/es/standards-sdk.es123.js +351 -418
  68. package/dist/es/standards-sdk.es123.js.map +1 -1
  69. package/dist/es/standards-sdk.es124.js +872 -347
  70. package/dist/es/standards-sdk.es124.js.map +1 -1
  71. package/dist/es/standards-sdk.es125.js +182 -854
  72. package/dist/es/standards-sdk.es125.js.map +1 -1
  73. package/dist/es/standards-sdk.es126.js +1512 -153
  74. package/dist/es/standards-sdk.es126.js.map +1 -1
  75. package/dist/es/standards-sdk.es127.js +157 -1547
  76. package/dist/es/standards-sdk.es127.js.map +1 -1
  77. package/dist/es/standards-sdk.es128.js +192 -162
  78. package/dist/es/standards-sdk.es128.js.map +1 -1
  79. package/dist/es/standards-sdk.es129.js +61 -164
  80. package/dist/es/standards-sdk.es129.js.map +1 -1
  81. package/dist/es/standards-sdk.es13.js +200 -60
  82. package/dist/es/standards-sdk.es13.js.map +1 -1
  83. package/dist/es/standards-sdk.es130.js +102 -85
  84. package/dist/es/standards-sdk.es130.js.map +1 -1
  85. package/dist/es/standards-sdk.es131.js +222 -96
  86. package/dist/es/standards-sdk.es131.js.map +1 -1
  87. package/dist/es/standards-sdk.es132.js +153 -220
  88. package/dist/es/standards-sdk.es132.js.map +1 -1
  89. package/dist/es/standards-sdk.es133.js +104 -162
  90. package/dist/es/standards-sdk.es133.js.map +1 -1
  91. package/dist/es/standards-sdk.es134.js +296 -92
  92. package/dist/es/standards-sdk.es134.js.map +1 -1
  93. package/dist/es/standards-sdk.es135.js +432 -294
  94. package/dist/es/standards-sdk.es135.js.map +1 -1
  95. package/dist/es/standards-sdk.es136.js +14 -461
  96. package/dist/es/standards-sdk.es136.js.map +1 -1
  97. package/dist/es/standards-sdk.es137.js +79 -15
  98. package/dist/es/standards-sdk.es137.js.map +1 -1
  99. package/dist/es/standards-sdk.es138.js +77 -71
  100. package/dist/es/standards-sdk.es138.js.map +1 -1
  101. package/dist/es/standards-sdk.es139.js +152 -80
  102. package/dist/es/standards-sdk.es139.js.map +1 -1
  103. package/dist/es/standards-sdk.es14.js +149 -178
  104. package/dist/es/standards-sdk.es14.js.map +1 -1
  105. package/dist/es/standards-sdk.es140.js +7 -159
  106. package/dist/es/standards-sdk.es140.js.map +1 -1
  107. package/dist/es/standards-sdk.es141.js +86 -7
  108. package/dist/es/standards-sdk.es141.js.map +1 -1
  109. package/dist/es/standards-sdk.es142.js +44 -65
  110. package/dist/es/standards-sdk.es142.js.map +1 -1
  111. package/dist/es/standards-sdk.es143.js +30 -65
  112. package/dist/es/standards-sdk.es143.js.map +1 -1
  113. package/dist/es/standards-sdk.es144.js +34 -30
  114. package/dist/es/standards-sdk.es144.js.map +1 -1
  115. package/dist/es/standards-sdk.es145.js +28 -34
  116. package/dist/es/standards-sdk.es145.js.map +1 -1
  117. package/dist/es/standards-sdk.es146.js +138 -28
  118. package/dist/es/standards-sdk.es146.js.map +1 -1
  119. package/dist/es/standards-sdk.es147.js +37 -133
  120. package/dist/es/standards-sdk.es147.js.map +1 -1
  121. package/dist/es/standards-sdk.es148.js +12280 -33
  122. package/dist/es/standards-sdk.es148.js.map +1 -1
  123. package/dist/es/standards-sdk.es149.js +1 -1
  124. package/dist/es/standards-sdk.es15.js +152 -151
  125. package/dist/es/standards-sdk.es15.js.map +1 -1
  126. package/dist/es/standards-sdk.es150.js +12 -12284
  127. package/dist/es/standards-sdk.es150.js.map +1 -1
  128. package/dist/es/standards-sdk.es151.js +54 -15
  129. package/dist/es/standards-sdk.es151.js.map +1 -1
  130. package/dist/es/standards-sdk.es152.js +72 -160
  131. package/dist/es/standards-sdk.es152.js.map +1 -1
  132. package/dist/es/standards-sdk.es153.js +139 -289
  133. package/dist/es/standards-sdk.es153.js.map +1 -1
  134. package/dist/es/standards-sdk.es154.js +274 -298
  135. package/dist/es/standards-sdk.es154.js.map +1 -1
  136. package/dist/es/standards-sdk.es155.js +262 -369
  137. package/dist/es/standards-sdk.es155.js.map +1 -1
  138. package/dist/es/standards-sdk.es156.js +316 -194
  139. package/dist/es/standards-sdk.es156.js.map +1 -1
  140. package/dist/es/standards-sdk.es157.js +319 -64
  141. package/dist/es/standards-sdk.es157.js.map +1 -1
  142. package/dist/es/standards-sdk.es158.js +69 -49
  143. package/dist/es/standards-sdk.es158.js.map +1 -1
  144. package/dist/es/standards-sdk.es159.js +222 -65
  145. package/dist/es/standards-sdk.es159.js.map +1 -1
  146. package/dist/es/standards-sdk.es16.js +917 -136
  147. package/dist/es/standards-sdk.es16.js.map +1 -1
  148. package/dist/es/standards-sdk.es160.js +223 -218
  149. package/dist/es/standards-sdk.es160.js.map +1 -1
  150. package/dist/es/standards-sdk.es17.js +23 -948
  151. package/dist/es/standards-sdk.es17.js.map +1 -1
  152. package/dist/es/standards-sdk.es18.js +2422 -24
  153. package/dist/es/standards-sdk.es18.js.map +1 -1
  154. package/dist/es/standards-sdk.es19.js +818 -2092
  155. package/dist/es/standards-sdk.es19.js.map +1 -1
  156. package/dist/es/standards-sdk.es2.js +654 -189
  157. package/dist/es/standards-sdk.es2.js.map +1 -1
  158. package/dist/es/standards-sdk.es20.js +205 -1092
  159. package/dist/es/standards-sdk.es20.js.map +1 -1
  160. package/dist/es/standards-sdk.es21.js +858 -221
  161. package/dist/es/standards-sdk.es21.js.map +1 -1
  162. package/dist/es/standards-sdk.es22.js +179 -903
  163. package/dist/es/standards-sdk.es22.js.map +1 -1
  164. package/dist/es/standards-sdk.es23.js +164 -179
  165. package/dist/es/standards-sdk.es23.js.map +1 -1
  166. package/dist/es/standards-sdk.es24.js +62 -118
  167. package/dist/es/standards-sdk.es24.js.map +1 -1
  168. package/dist/es/standards-sdk.es25.js +377 -57
  169. package/dist/es/standards-sdk.es25.js.map +1 -1
  170. package/dist/es/standards-sdk.es26.js +36 -394
  171. package/dist/es/standards-sdk.es26.js.map +1 -1
  172. package/dist/es/standards-sdk.es27.js +901 -50
  173. package/dist/es/standards-sdk.es27.js.map +1 -1
  174. package/dist/es/standards-sdk.es28.js +134 -922
  175. package/dist/es/standards-sdk.es28.js.map +1 -1
  176. package/dist/es/standards-sdk.es29.js +7 -134
  177. package/dist/es/standards-sdk.es29.js.map +1 -1
  178. package/dist/es/standards-sdk.es3.js +63 -680
  179. package/dist/es/standards-sdk.es3.js.map +1 -1
  180. package/dist/es/standards-sdk.es30.js +344 -7
  181. package/dist/es/standards-sdk.es30.js.map +1 -1
  182. package/dist/es/standards-sdk.es31.js +302 -287
  183. package/dist/es/standards-sdk.es31.js.map +1 -1
  184. package/dist/es/standards-sdk.es32.js +94 -322
  185. package/dist/es/standards-sdk.es32.js.map +1 -1
  186. package/dist/es/standards-sdk.es33.js +458 -101
  187. package/dist/es/standards-sdk.es33.js.map +1 -1
  188. package/dist/es/standards-sdk.es34.js +132 -451
  189. package/dist/es/standards-sdk.es34.js.map +1 -1
  190. package/dist/es/standards-sdk.es35.js +216 -130
  191. package/dist/es/standards-sdk.es35.js.map +1 -1
  192. package/dist/es/standards-sdk.es36.js +273 -196
  193. package/dist/es/standards-sdk.es36.js.map +1 -1
  194. package/dist/es/standards-sdk.es37.js +148 -87
  195. package/dist/es/standards-sdk.es37.js.map +1 -1
  196. package/dist/es/standards-sdk.es38.js +183 -320
  197. package/dist/es/standards-sdk.es38.js.map +1 -1
  198. package/dist/es/standards-sdk.es39.js +238 -161
  199. package/dist/es/standards-sdk.es39.js.map +1 -1
  200. package/dist/es/standards-sdk.es4.js +425 -63
  201. package/dist/es/standards-sdk.es4.js.map +1 -1
  202. package/dist/es/standards-sdk.es40.js +136 -254
  203. package/dist/es/standards-sdk.es40.js.map +1 -1
  204. package/dist/es/standards-sdk.es41.js +225 -176
  205. package/dist/es/standards-sdk.es41.js.map +1 -1
  206. package/dist/es/standards-sdk.es42.js +199 -261
  207. package/dist/es/standards-sdk.es42.js.map +1 -1
  208. package/dist/es/standards-sdk.es43.js +237 -199
  209. package/dist/es/standards-sdk.es43.js.map +1 -1
  210. package/dist/es/standards-sdk.es44.js +209 -201
  211. package/dist/es/standards-sdk.es44.js.map +1 -1
  212. package/dist/es/standards-sdk.es45.js +305 -201
  213. package/dist/es/standards-sdk.es45.js.map +1 -1
  214. package/dist/es/standards-sdk.es46.js +371 -261
  215. package/dist/es/standards-sdk.es46.js.map +1 -1
  216. package/dist/es/standards-sdk.es47.js +316 -372
  217. package/dist/es/standards-sdk.es47.js.map +1 -1
  218. package/dist/es/standards-sdk.es48.js +404 -336
  219. package/dist/es/standards-sdk.es48.js.map +1 -1
  220. package/dist/es/standards-sdk.es49.js +83 -449
  221. package/dist/es/standards-sdk.es49.js.map +1 -1
  222. package/dist/es/standards-sdk.es5.js +232 -354
  223. package/dist/es/standards-sdk.es5.js.map +1 -1
  224. package/dist/es/standards-sdk.es50.js +179 -89
  225. package/dist/es/standards-sdk.es50.js.map +1 -1
  226. package/dist/es/standards-sdk.es51.js +231 -165
  227. package/dist/es/standards-sdk.es51.js.map +1 -1
  228. package/dist/es/standards-sdk.es52.js +25 -262
  229. package/dist/es/standards-sdk.es52.js.map +1 -1
  230. package/dist/es/standards-sdk.es53.js +56 -26
  231. package/dist/es/standards-sdk.es53.js.map +1 -1
  232. package/dist/es/standards-sdk.es54.js +12 -57
  233. package/dist/es/standards-sdk.es54.js.map +1 -1
  234. package/dist/es/standards-sdk.es55.js +49 -12
  235. package/dist/es/standards-sdk.es55.js.map +1 -1
  236. package/dist/es/standards-sdk.es56.js +115 -43
  237. package/dist/es/standards-sdk.es56.js.map +1 -1
  238. package/dist/es/standards-sdk.es57.js +42 -115
  239. package/dist/es/standards-sdk.es57.js.map +1 -1
  240. package/dist/es/standards-sdk.es58.js +52 -43
  241. package/dist/es/standards-sdk.es58.js.map +1 -1
  242. package/dist/es/standards-sdk.es59.js +36 -50
  243. package/dist/es/standards-sdk.es59.js.map +1 -1
  244. package/dist/es/standards-sdk.es6.js +125 -246
  245. package/dist/es/standards-sdk.es6.js.map +1 -1
  246. package/dist/es/standards-sdk.es60.js +207 -39
  247. package/dist/es/standards-sdk.es60.js.map +1 -1
  248. package/dist/es/standards-sdk.es61.js +24 -201
  249. package/dist/es/standards-sdk.es61.js.map +1 -1
  250. package/dist/es/standards-sdk.es62.js +87 -25
  251. package/dist/es/standards-sdk.es62.js.map +1 -1
  252. package/dist/es/standards-sdk.es63.js +3 -51
  253. package/dist/es/standards-sdk.es63.js.map +1 -1
  254. package/dist/es/standards-sdk.es64.js +100 -3
  255. package/dist/es/standards-sdk.es64.js.map +1 -1
  256. package/dist/es/standards-sdk.es65.js +61 -62
  257. package/dist/es/standards-sdk.es65.js.map +1 -1
  258. package/dist/es/standards-sdk.es66.js +17 -98
  259. package/dist/es/standards-sdk.es66.js.map +1 -1
  260. package/dist/es/standards-sdk.es67.js +77 -19
  261. package/dist/es/standards-sdk.es67.js.map +1 -1
  262. package/dist/es/standards-sdk.es68.js +458 -77
  263. package/dist/es/standards-sdk.es68.js.map +1 -1
  264. package/dist/es/standards-sdk.es69.js +106 -240
  265. package/dist/es/standards-sdk.es69.js.map +1 -1
  266. package/dist/es/standards-sdk.es7.js +28 -183
  267. package/dist/es/standards-sdk.es7.js.map +1 -1
  268. package/dist/es/standards-sdk.es70.js +170 -286
  269. package/dist/es/standards-sdk.es70.js.map +1 -1
  270. package/dist/es/standards-sdk.es71.js +71 -207
  271. package/dist/es/standards-sdk.es71.js.map +1 -1
  272. package/dist/es/standards-sdk.es72.js +71 -72
  273. package/dist/es/standards-sdk.es72.js.map +1 -1
  274. package/dist/es/standards-sdk.es73.js +143 -71
  275. package/dist/es/standards-sdk.es73.js.map +1 -1
  276. package/dist/es/standards-sdk.es74.js +62 -136
  277. package/dist/es/standards-sdk.es74.js.map +1 -1
  278. package/dist/es/standards-sdk.es75.js +380 -45
  279. package/dist/es/standards-sdk.es75.js.map +1 -1
  280. package/dist/es/standards-sdk.es76.js +222 -130
  281. package/dist/es/standards-sdk.es76.js.map +1 -1
  282. package/dist/es/standards-sdk.es77.js +320 -444
  283. package/dist/es/standards-sdk.es77.js.map +1 -1
  284. package/dist/es/standards-sdk.es78.js +88 -371
  285. package/dist/es/standards-sdk.es78.js.map +1 -1
  286. package/dist/es/standards-sdk.es79.js +125 -89
  287. package/dist/es/standards-sdk.es79.js.map +1 -1
  288. package/dist/es/standards-sdk.es8.js +80 -29
  289. package/dist/es/standards-sdk.es8.js.map +1 -1
  290. package/dist/es/standards-sdk.es80.js +8 -125
  291. package/dist/es/standards-sdk.es80.js.map +1 -1
  292. package/dist/es/standards-sdk.es81.js +45 -6
  293. package/dist/es/standards-sdk.es81.js.map +1 -1
  294. package/dist/es/standards-sdk.es82.js +98 -44
  295. package/dist/es/standards-sdk.es82.js.map +1 -1
  296. package/dist/es/standards-sdk.es83.js +331 -84
  297. package/dist/es/standards-sdk.es83.js.map +1 -1
  298. package/dist/es/standards-sdk.es84.js +93 -160
  299. package/dist/es/standards-sdk.es84.js.map +1 -1
  300. package/dist/es/standards-sdk.es85.js +55 -275
  301. package/dist/es/standards-sdk.es85.js.map +1 -1
  302. package/dist/es/standards-sdk.es86.js +43 -55
  303. package/dist/es/standards-sdk.es86.js.map +1 -1
  304. package/dist/es/standards-sdk.es87.js +145 -44
  305. package/dist/es/standards-sdk.es87.js.map +1 -1
  306. package/dist/es/standards-sdk.es88.js +30 -113
  307. package/dist/es/standards-sdk.es88.js.map +1 -1
  308. package/dist/es/standards-sdk.es89.js +22 -59
  309. package/dist/es/standards-sdk.es89.js.map +1 -1
  310. package/dist/es/standards-sdk.es9.js +104 -80
  311. package/dist/es/standards-sdk.es9.js.map +1 -1
  312. package/dist/es/standards-sdk.es90.js +23 -28
  313. package/dist/es/standards-sdk.es90.js.map +1 -1
  314. package/dist/es/standards-sdk.es91.js +238 -23
  315. package/dist/es/standards-sdk.es91.js.map +1 -1
  316. package/dist/es/standards-sdk.es92.js +267 -225
  317. package/dist/es/standards-sdk.es92.js.map +1 -1
  318. package/dist/es/standards-sdk.es93.js +95 -220
  319. package/dist/es/standards-sdk.es93.js.map +1 -1
  320. package/dist/es/standards-sdk.es94.js +124 -136
  321. package/dist/es/standards-sdk.es94.js.map +1 -1
  322. package/dist/es/standards-sdk.es95.js +42 -138
  323. package/dist/es/standards-sdk.es95.js.map +1 -1
  324. package/dist/es/standards-sdk.es96.js +259 -43
  325. package/dist/es/standards-sdk.es96.js.map +1 -1
  326. package/dist/es/standards-sdk.es97.js +82 -245
  327. package/dist/es/standards-sdk.es97.js.map +1 -1
  328. package/dist/es/standards-sdk.es98.js +49 -50
  329. package/dist/es/standards-sdk.es98.js.map +1 -1
  330. package/dist/es/standards-sdk.es99.js +29 -100
  331. package/dist/es/standards-sdk.es99.js.map +1 -1
  332. package/dist/es/utils/dynamic-import.d.ts +5 -1
  333. package/dist/es/utils/dynamic-import.d.ts.map +1 -1
  334. package/package.json +4 -4
  335. package/dist/cjs/patches/topic-autorenew-patch.d.ts +0 -2
  336. package/dist/cjs/patches/topic-autorenew-patch.d.ts.map +0 -1
  337. package/dist/es/patches/topic-autorenew-patch.d.ts +0 -2
  338. package/dist/es/patches/topic-autorenew-patch.d.ts.map +0 -1
  339. package/dist/es/standards-sdk.es161.js +0 -247
  340. package/dist/es/standards-sdk.es161.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es5.js","sources":["../../src/hcs-6/sdk.ts"],"sourcesContent":["import { HCS6BaseClient } from './base-client';\nimport {\n HCS6ClientConfig,\n HCS6CreateHashinalOptions,\n HCS6CreateHashinalResponse,\n HCS6RegisterOptions,\n HCS6RegisterEntryOptions,\n HCS6TopicRegistrationResponse,\n HCS6RegistryOperationResponse,\n HCS6QueryRegistryOptions,\n HCS6TopicRegistry,\n HCS6Message,\n HCS6RegistryType,\n HCS6MintOptions,\n HCS6InscribeAndMintOptions,\n HCS6MintResponse,\n buildHcs6Hrl,\n} from './types';\nimport {\n Client,\n TopicCreateTransaction,\n TopicMessageSubmitTransaction,\n PrivateKey,\n TopicId,\n TransactionReceipt,\n AccountId,\n PublicKey,\n TokenMintTransaction,\n TokenId,\n} from '@hashgraph/sdk';\nimport { NetworkType } from '../utils/types';\nimport { buildHcs6CreateRegistryTx } from './tx';\nimport {\n NodeOperatorResolver,\n createNodeOperatorContext,\n type NodeOperatorContext,\n} from '../common/node-operator-resolver';\nimport {\n inscribe,\n type InscriptionInput,\n type InscriptionOptions,\n} from '../inscribe/inscriber';\n\nexport interface SDKHCS6ClientConfig extends HCS6ClientConfig {\n operatorId: string | AccountId;\n operatorKey: string | PrivateKey;\n keyType?: 'ed25519' | 'ecdsa';\n}\n\nexport class HCS6Client extends HCS6BaseClient {\n private client: Client;\n private operatorId: AccountId;\n private operatorCtx: NodeOperatorContext;\n\n constructor(config: SDKHCS6ClientConfig) {\n super({\n network: config.network,\n logLevel: config.logLevel,\n silent: config.silent,\n mirrorNodeUrl: config.mirrorNodeUrl,\n logger: config.logger,\n });\n\n this.operatorId =\n typeof config.operatorId === 'string'\n ? AccountId.fromString(config.operatorId)\n : config.operatorId;\n\n this.operatorCtx = createNodeOperatorContext({\n network: this.network,\n operatorId: this.operatorId,\n operatorKey: config.operatorKey,\n keyType: config.keyType,\n mirrorNode: this.mirrorNode,\n logger: this.logger,\n client: this.createClient(config.network),\n });\n this.client = this.operatorCtx.client;\n }\n\n private async ensureInitialized(): Promise<void> {\n await this.operatorCtx.ensureInitialized();\n }\n\n private createClient(network: NetworkType): Client {\n if (network === 'mainnet') {\n return Client.forMainnet();\n } else {\n return Client.forTestnet();\n }\n }\n\n public close(): void {\n this.logger.info('HCS-6 client closed.');\n }\n\n public getKeyType(): 'ed25519' | 'ecdsa' {\n return this.operatorCtx.keyType;\n }\n\n public getOperatorKey(): PrivateKey {\n return this.operatorCtx.operatorKey;\n }\n\n public async submitMessage(\n topicId: string,\n payload: HCS6Message,\n ): Promise<TransactionReceipt> {\n return this.submitMessageWithKey(topicId, payload, undefined);\n }\n\n public async submitMessageWithKey(\n topicId: string,\n payload: HCS6Message,\n submitKey?: string | PrivateKey,\n ): Promise<TransactionReceipt> {\n const { valid, errors } = this.validateMessage(payload);\n if (!valid) {\n throw new Error(`Invalid HCS-6 message: ${errors.join(', ')}`);\n }\n\n let tx = new TopicMessageSubmitTransaction()\n .setTopicId(TopicId.fromString(topicId))\n .setMessage(JSON.stringify(payload));\n\n if (!submitKey) {\n const txResponse = await tx.execute(this.client);\n return await txResponse.getReceipt(this.client);\n }\n const privateKey =\n typeof submitKey === 'string'\n ? PrivateKey.fromString(submitKey)\n : submitKey;\n const frozen = await tx.freezeWith(this.client);\n await frozen.sign(privateKey);\n const resp = await frozen.execute(this.client);\n return await resp.getReceipt(this.client);\n }\n\n public async registerEntryWithKey(\n registryTopicId: string,\n options: HCS6RegisterEntryOptions,\n submitKey?: string | PrivateKey,\n ): Promise<HCS6RegistryOperationResponse> {\n try {\n const payload: HCS6Message = this.createRegisterMessage(\n options.targetTopicId,\n options.memo,\n );\n const receipt = await this.submitMessageWithKey(\n registryTopicId,\n payload,\n submitKey,\n );\n const sequenceNumber = (\n receipt as TransactionReceipt\n ).topicSequenceNumber?.toNumber();\n return { success: true, receipt, sequenceNumber };\n } catch (error) {\n this.logger.error(`Failed to register HCS-6 entry: ${error}`);\n return { success: false, error: String(error) };\n }\n }\n\n public async createRegistry(\n options: { ttl?: number; submitKey?: string | boolean | PrivateKey } = {},\n ): Promise<HCS6TopicRegistrationResponse> {\n try {\n await this.ensureInitialized();\n const ttl = options.ttl ?? 86400;\n if (!(ttl >= 3600)) {\n throw new Error('TTL must be at least 3600 seconds (1 hour)');\n }\n let submitKeyPublic: PublicKey | undefined;\n let submitKeyPrivate: PrivateKey | undefined;\n if (options.submitKey) {\n if (typeof options.submitKey === 'string') {\n try {\n submitKeyPublic = PublicKey.fromString(options.submitKey);\n } catch {\n const keyBytes = Buffer.from(\n options.submitKey.replace(/^0x/i, ''),\n 'hex',\n );\n submitKeyPublic =\n this.operatorCtx.keyType === 'ed25519'\n ? PublicKey.fromBytesED25519(keyBytes)\n : PublicKey.fromBytesECDSA(keyBytes);\n }\n } else if (typeof options.submitKey === 'boolean') {\n submitKeyPublic = this.operatorCtx.operatorKey.publicKey;\n } else {\n submitKeyPublic = options.submitKey.publicKey;\n submitKeyPrivate = options.submitKey;\n }\n }\n\n let transaction = buildHcs6CreateRegistryTx({\n ttl,\n submitKey: submitKeyPublic,\n adminKey: this.operatorCtx.operatorKey.publicKey,\n operatorPublicKey: this.operatorCtx.operatorKey.publicKey,\n });\n\n const frozenTx = await transaction.freezeWith(this.client);\n if (submitKeyPrivate) {\n await frozenTx.sign(submitKeyPrivate);\n }\n const txResponse = await frozenTx.execute(this.client);\n const receipt = await txResponse.getReceipt(this.client);\n const topicId = receipt.topicId;\n if (!topicId) {\n throw new Error(\n 'Failed to create HCS-6 registry: No topic ID in receipt',\n );\n }\n return {\n success: true,\n topicId: topicId.toString(),\n transactionId: txResponse.transactionId.toString(),\n };\n } catch (error) {\n this.logger.error(`Failed to create HCS-6 registry: ${error}`);\n return {\n success: false,\n error: `Failed to create HCS-6 registry: ${error}`,\n };\n }\n }\n\n public async registerEntry(\n registryTopicId: string,\n options: HCS6RegisterEntryOptions,\n ): Promise<HCS6RegistryOperationResponse> {\n await this.ensureInitialized();\n return this.registerEntryWithKey(registryTopicId, options, undefined);\n }\n\n public async getRegistry(\n topicId: string,\n options: HCS6QueryRegistryOptions = {},\n ): Promise<HCS6TopicRegistry> {\n await this.ensureInitialized();\n const topicInfo = await this.mirrorNode.getTopicInfo(topicId);\n const memo = topicInfo.memo || '';\n const match = memo.match(/^hcs-6:(\\d):(\\d+)$/);\n if (!match) {\n throw new Error(\n `Topic ${topicId} is not an HCS-6 registry (invalid memo format)`,\n );\n }\n const ttl = parseInt(match[2]);\n const regType = parseInt(match[1]) as HCS6RegistryType;\n const messages = await this.mirrorNode.getTopicMessages(topicId, {\n sequenceNumber:\n options.skip && options.skip > 0 ? `gt:${options.skip}` : undefined,\n limit: options.limit ?? 100,\n order: options.order ?? 'asc',\n });\n const entries = messages\n .map(m => {\n try {\n const decoded = m as unknown as HCS6Message & {\n consensus_timestamp?: string;\n sequence_number: number;\n payer?: string;\n };\n const { valid } = this.validateMessage(\n decoded as unknown as HCS6Message,\n );\n if (!valid) return null;\n return {\n topicId,\n sequence: decoded.sequence_number,\n timestamp: decoded.consensus_timestamp || '',\n payer: decoded.payer || '',\n message: decoded as unknown as HCS6Message,\n consensus_timestamp: decoded.consensus_timestamp || '',\n registry_type: regType,\n };\n } catch {\n return null;\n }\n })\n .filter(\n (\n v,\n ): v is {\n topicId: string;\n sequence: number;\n timestamp: string;\n payer: string;\n message: HCS6Message;\n consensus_timestamp: string;\n registry_type: HCS6RegistryType;\n } => Boolean(v),\n );\n const latest = entries.length > 0 ? entries[entries.length - 1] : undefined;\n return {\n topicId,\n registryType: regType,\n ttl,\n entries,\n latestEntry: latest,\n };\n }\n\n public async mint(options: HCS6MintOptions): Promise<HCS6MintResponse> {\n try {\n await this.ensureInitialized();\n if (!options.metadataTopicId) {\n return {\n success: false,\n error: 'metadataTopicId is required for mint()',\n };\n }\n const metadata = buildHcs6Hrl(options.metadataTopicId);\n let tx = new TokenMintTransaction()\n .setTokenId(TokenId.fromString(options.tokenId))\n .setMetadata([Buffer.from(metadata)]);\n const frozen = await tx.freezeWith(this.client);\n\n if (options.supplyKey) {\n const resolver = new NodeOperatorResolver({\n mirrorNode: this.mirrorNode,\n logger: this.logger,\n });\n const privKey =\n typeof options.supplyKey === 'string'\n ? await resolver.resolveSupplyKey(\n options.tokenId,\n options.supplyKey,\n this.operatorCtx.keyType,\n )\n : options.supplyKey;\n await frozen.sign(privKey);\n }\n\n const resp = await frozen.execute(this.client);\n const receipt = await resp.getReceipt(this.client);\n const serial =\n receipt.serials && receipt.serials[0]\n ? Number(receipt.serials[0].toString())\n : undefined;\n return {\n success: true,\n serialNumber: serial,\n transactionId: resp.transactionId?.toString?.(),\n metadata,\n };\n } catch (e) {\n return { success: false, error: String(e) };\n }\n }\n\n public async inscribeAndMint(\n options: HCS6InscribeAndMintOptions,\n ): Promise<HCS6MintResponse> {\n try {\n await this.ensureInitialized();\n const inscribeOptions: InscriptionOptions = {\n ...(options.inscriptionOptions as InscriptionOptions | undefined),\n mode: 'hashinal',\n waitForConfirmation: true,\n };\n const result = await inscribe(\n options.inscriptionInput as InscriptionInput,\n {\n accountId: this.operatorId.toString(),\n privateKey: this.operatorCtx.operatorKey,\n network: this.network,\n },\n inscribeOptions,\n );\n if (!result.confirmed || !result.inscription) {\n return { success: false, error: 'Failed to inscribe content' };\n }\n const topicId =\n result.inscription.jsonTopicId || result.inscription.topic_id;\n if (!topicId) {\n return { success: false, error: 'No topic ID from inscription' };\n }\n return await this.mint({\n tokenId: options.tokenId,\n metadataTopicId: topicId,\n supplyKey: options.supplyKey,\n memo: options.memo,\n });\n } catch (e) {\n return { success: false, error: String(e) };\n }\n }\n\n public async createHashinal(\n options: HCS6CreateHashinalOptions,\n ): Promise<HCS6CreateHashinalResponse> {\n try {\n await this.ensureInitialized();\n\n let registryTopicId: string;\n let registryTransactionId: string | undefined;\n\n if (options.registryTopicId) {\n registryTopicId = options.registryTopicId;\n const topicInfo = await this.mirrorNode.getTopicInfo(registryTopicId);\n const memo = topicInfo.memo || '';\n if (!/^hcs-6:\\d:\\d+$/.test(memo)) {\n throw new Error(\n `Topic ${registryTopicId} is not a valid HCS-6 registry`,\n );\n }\n } else {\n const res = await this.createRegistry({\n ttl: options.ttl,\n submitKey: true,\n });\n if (!res.success || !res.topicId) {\n throw new Error(res.error || 'Failed to create HCS-6 registry');\n }\n registryTopicId = res.topicId;\n registryTransactionId = res.transactionId;\n }\n\n const inscriptionBuffer = Buffer.from(JSON.stringify(options.metadata));\n const inscribeOptions: InscriptionOptions = {\n ...(options.inscriptionOptions as InscriptionOptions | undefined),\n mode: 'hashinal',\n metadata: options.metadata,\n waitForConfirmation: true,\n };\n\n const result = await inscribe(\n {\n type: 'buffer',\n buffer: inscriptionBuffer,\n fileName: 'metadata.json',\n mimeType: 'application/json',\n },\n {\n accountId: this.operatorId.toString(),\n privateKey: this.operatorCtx.operatorKey,\n network: this.network,\n },\n inscribeOptions,\n );\n\n if (!result.confirmed || !result.inscription) {\n throw new Error('Failed to inscribe metadata');\n }\n const topicId =\n result.inscription.jsonTopicId || result.inscription.topic_id;\n if (!topicId) {\n throw new Error('No inscription topic ID available');\n }\n\n const reg = await this.registerEntryWithKey(\n registryTopicId,\n {\n targetTopicId: topicId,\n memo: options.memo || 'Dynamic hashinal registration',\n },\n options.submitKey,\n );\n if (!reg.success) {\n throw new Error(reg.error || 'Failed to register entry');\n }\n\n return {\n success: true,\n registryTopicId,\n inscriptionTopicId: topicId,\n transactionId: registryTransactionId,\n };\n } catch (e) {\n return { success: false, error: String(e) };\n }\n }\n\n public async register(\n options: HCS6RegisterOptions,\n ): Promise<HCS6CreateHashinalResponse> {\n try {\n await this.ensureInitialized();\n\n let registryTopicId: string;\n let registryTransactionId: string | undefined;\n\n if (options.registryTopicId) {\n registryTopicId = options.registryTopicId;\n const topicInfo = await this.mirrorNode.getTopicInfo(registryTopicId);\n const memo = topicInfo.memo || '';\n if (!/^hcs-6:\\d:\\d+$/.test(memo)) {\n throw new Error(\n `Topic ${registryTopicId} is not a valid HCS-6 registry`,\n );\n }\n } else {\n const res = await this.createRegistry({\n ttl: options.ttl,\n submitKey: true,\n });\n if (!res.success || !res.topicId) {\n throw new Error(res.error || 'Failed to create HCS-6 registry');\n }\n registryTopicId = res.topicId;\n registryTransactionId = res.transactionId;\n }\n\n let inscriptionInput: InscriptionInput;\n if (options.data?.base64) {\n const buffer = Buffer.from(options.data.base64, 'base64');\n inscriptionInput = {\n type: 'buffer',\n buffer,\n fileName: `data.${options.data.mimeType?.split('/')[1] || 'bin'}`,\n mimeType: options.data.mimeType || 'application/octet-stream',\n };\n } else if (options.data?.url) {\n inscriptionInput = { type: 'url', url: options.data.url };\n } else {\n inscriptionInput = {\n type: 'buffer',\n buffer: Buffer.from(JSON.stringify(options.metadata)),\n fileName: 'metadata.json',\n mimeType: 'application/json',\n };\n }\n\n const inscribeOptions: InscriptionOptions = {\n ...(options.inscriptionOptions as InscriptionOptions | undefined),\n mode: 'hashinal',\n metadata: options.metadata,\n waitForConfirmation: true,\n };\n\n const result = await inscribe(\n inscriptionInput,\n {\n accountId: this.operatorId.toString(),\n privateKey: this.operatorCtx.operatorKey,\n network: this.network,\n },\n inscribeOptions,\n );\n if (!result.confirmed || !result.inscription) {\n throw new Error('Failed to inscribe data');\n }\n const topicId =\n result.inscription.jsonTopicId || result.inscription.topic_id;\n if (!topicId) {\n throw new Error('No inscription topic ID available');\n }\n\n const reg = await this.registerEntryWithKey(\n registryTopicId,\n {\n targetTopicId: topicId,\n memo: options.memo || 'Dynamic hashinal registration',\n },\n options.submitKey,\n );\n if (!reg.success) {\n throw new Error(reg.error || 'Failed to register entry');\n }\n\n return {\n success: true,\n registryTopicId,\n inscriptionTopicId: topicId,\n transactionId: registryTransactionId,\n };\n } catch (e) {\n return { success: false, error: String(e) };\n }\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"standards-sdk.es5.js","sources":["../../src/hcs-6/browser.ts"],"sourcesContent":["import { HCS6BaseClient } from './base-client';\nimport {\n HCS6ClientConfig,\n HCS6Message,\n HCS6TopicRegistrationResponse,\n HCS6RegistryOperationResponse,\n HCS6TopicRegistry,\n HCS6CreateRegistryOptions,\n HCS6RegisterEntryOptions,\n HCS6QueryRegistryOptions,\n HCS6CreateHashinalOptions,\n HCS6CreateHashinalResponse,\n HCS6RegisterOptions,\n HCS6RegistryType,\n} from './types';\nimport type { DAppSigner } from '@hashgraph/hedera-wallet-connect';\nimport { HashinalsWalletConnectSDK } from '@hashgraphonline/hashinal-wc';\nimport { TransactionReceipt } from '@hashgraph/sdk';\nimport {\n inscribeWithSigner,\n type InscriptionInput,\n type InscriptionOptions,\n type InscriptionResponse,\n} from '../inscribe/inscriber';\nimport { getTopicId as getInscriptionTopicId } from '../utils/topic-id-utils';\n\n/**\n * Browser client configuration for HCS-6\n */\nexport interface BrowserHCS6ClientConfig extends HCS6ClientConfig {\n hwc: HashinalsWalletConnectSDK;\n signer?: DAppSigner;\n}\n\n/**\n * Browser client for HCS-6 operations\n * This client is designed to work in browser environments where direct key management is not available\n */\nexport class HCS6BrowserClient extends HCS6BaseClient {\n private hwc: HashinalsWalletConnectSDK;\n private signer?: DAppSigner;\n /**\n * Create a new HCS-6 browser client\n * @param config Client configuration\n */\n constructor(config: BrowserHCS6ClientConfig) {\n super(config);\n this.hwc = config.hwc;\n this.signer = config.signer;\n }\n\n private ensureConnected(): string {\n const info = this.hwc.getAccountInfo();\n const accountId = info?.accountId;\n if (!accountId) {\n throw new Error(\n 'No active wallet connection: wallet integration required to perform write operations',\n );\n }\n return accountId;\n }\n\n public getSigner(): DAppSigner {\n const explicit = this.signer;\n if (explicit) {\n return explicit;\n }\n this.ensureConnected();\n const dc = this.hwc.dAppConnector;\n const signer = dc?.signers?.[0];\n if (!signer) {\n throw new Error('No active wallet signer');\n }\n return signer;\n }\n\n /**\n * Create a new HCS-6 registry topic (for dynamic hashinals)\n * Note: In browser environment, this would typically be called through a wallet or proxy service\n * @param options Registry creation options\n * @returns Promise resolving to the transaction result\n */\n async createRegistry(\n options: HCS6CreateRegistryOptions,\n ): Promise<HCS6TopicRegistrationResponse> {\n try {\n this.ensureConnected();\n const ttl = options?.ttl ?? 86400;\n const memo = this.generateRegistryMemo(ttl);\n const topicId = await this.hwc.createTopic(memo);\n this.logger.info(\n `Created HCS-6 registry topic via wallet: ${topicId} (TTL ${ttl})`,\n );\n return { success: true, topicId };\n } catch (error) {\n this.logger.error(`Failed to create HCS-6 registry: ${error}`);\n return { success: false, error: String(error) };\n }\n }\n\n /**\n * Register a new dynamic hashinal update in the registry\n * Note: In browser environment, this would typically be called through a wallet or proxy service\n * @param registryTopicId The topic ID of the HCS-6 registry\n * @param options Registration options\n * @returns Promise resolving to the operation result\n */\n async registerEntry(\n registryTopicId: string,\n options: HCS6RegisterEntryOptions,\n ): Promise<HCS6RegistryOperationResponse> {\n try {\n const valid = await this.validateHCS6Topic(registryTopicId);\n if (!valid) {\n throw new Error(\n `Topic ${registryTopicId} is not a valid HCS-6 registry`,\n );\n }\n\n const message = this.createRegisterMessage(\n options.targetTopicId,\n options.memo,\n );\n const receipt = await this.submitMessage(registryTopicId, message);\n const seqField = receipt.topicSequenceNumber as\n | number\n | { low: number }\n | undefined;\n const sequenceNumber =\n typeof seqField === 'number' ? seqField : seqField?.low;\n return { success: true, receipt, sequenceNumber };\n } catch (error) {\n this.logger.error(`Failed to register HCS-6 entry: ${error}`);\n return { success: false, error: String(error) };\n }\n }\n\n /**\n * Get the latest entry from a HCS-6 registry (non-indexed, so only latest matters)\n * @param topicId The topic ID of the registry\n * @param options Query options\n * @returns Promise resolving to the registry information\n */\n async getRegistry(\n topicId: string,\n options: HCS6QueryRegistryOptions = {},\n ): Promise<HCS6TopicRegistry> {\n try {\n const topicInfo = await this.mirrorNode.getTopicInfo(topicId);\n this.logger.debug(\n `Retrieved topic info for HCS-6 ${topicId}: ${JSON.stringify(topicInfo)}`,\n );\n\n const memoInfo = this.parseRegistryTypeFromMemo(topicInfo.memo);\n\n if (!memoInfo) {\n throw new Error(\n `Topic ${topicId} is not an HCS-6 registry (invalid memo format)`,\n );\n }\n\n this.logger.debug(\n `Retrieving messages for HCS-6 topic ${topicId} with limit ${options.limit ?? 100}`,\n );\n const rawMessagesResult = (await this.mirrorNode.getTopicMessages(\n topicId,\n {\n sequenceNumber:\n options.skip && options.skip > 0 ? `gt:${options.skip}` : undefined,\n limit: options.limit ?? 100,\n order: options.order ?? 'asc',\n },\n )) as unknown as Array<{\n message?: string;\n sequence_number: number;\n consensus_timestamp: string;\n payer_account_id: string;\n }>;\n\n const rawMessages = options.limit\n ? rawMessagesResult.slice(0, options.limit)\n : rawMessagesResult;\n\n this.logger.debug(\n `Retrieved ${rawMessagesResult.length} messages, using ${rawMessages.length} after applying limit.`,\n );\n\n return this.parseRegistryEntries(\n topicId,\n rawMessages,\n memoInfo.registryType,\n memoInfo.ttl,\n );\n } catch (error) {\n this.logger.error(`Failed to get HCS-6 registry: ${error}`);\n throw error;\n }\n }\n\n /**\n * Submit a message to a HCS-6 topic\n * Note: In browser environment, this would typically be called through a wallet or proxy service\n * @param topicId The topic ID to submit to\n * @param payload The message payload\n * @returns Promise resolving to the transaction receipt\n */\n async submitMessage(\n topicId: string,\n payload: HCS6Message,\n ): Promise<TransactionReceipt> {\n this.ensureConnected();\n const { valid, errors } = this.validateMessage(payload);\n if (!valid) {\n throw new Error(`Invalid HCS-6 message: ${errors.join(', ')}`);\n }\n const receipt = await this.hwc.submitMessageToTopic(\n topicId,\n JSON.stringify(payload),\n );\n return receipt;\n }\n\n /**\n * Create a complete dynamic hashinal with inscription and registry\n * Note: In browser environment, this would typically be called through a wallet or proxy service\n * @param options Options for creating the dynamic hashinal\n * @returns Promise resolving to the creation response\n */\n async createHashinal(\n options: HCS6CreateHashinalOptions,\n ): Promise<HCS6CreateHashinalResponse> {\n try {\n if (!this.signer) {\n return {\n success: false,\n error: 'No signer configured for browser createHashinal',\n };\n }\n\n const inscriptionOptions: InscriptionOptions = {\n ...(options.inscriptionOptions as InscriptionOptions | undefined),\n mode: 'hashinal',\n metadata: options.metadata,\n waitForConfirmation: true,\n network: this.network,\n };\n\n const input: InscriptionInput = {\n type: 'buffer',\n buffer: Buffer.from(JSON.stringify(options.metadata)),\n fileName: 'metadata.json',\n mimeType: 'application/json',\n };\n\n const res: InscriptionResponse = await inscribeWithSigner(\n input,\n this.signer,\n inscriptionOptions,\n );\n const inscriptionTopicId =\n res.inscription?.jsonTopicId || getInscriptionTopicId(res.inscription);\n if (!inscriptionTopicId) {\n return { success: false, error: 'Failed to inscribe metadata' };\n }\n\n let registryTopicId = options.registryTopicId;\n if (!registryTopicId) {\n const reg = await this.createRegistry({ ttl: options.ttl });\n if (!reg.success || !reg.topicId)\n return { success: false, error: reg.error };\n registryTopicId = reg.topicId;\n }\n\n const regRes = await this.registerEntry(registryTopicId, {\n targetTopicId: inscriptionTopicId,\n memo: options.memo || 'Initial dynamic hashinal registration',\n });\n if (!regRes.success) return { success: false, error: regRes.error };\n\n return {\n success: true,\n registryTopicId,\n inscriptionTopicId,\n };\n } catch (error) {\n this.logger.error(`Failed to create dynamic hashinal: ${error}`);\n return { success: false, error: String(error) };\n }\n }\n\n /**\n * Register a dynamic hashinal with combined inscription and registry creation\n * Note: In browser environment, this would typically be called through a wallet or proxy service\n * @param options Options for registering the dynamic hashinal\n * @returns Promise resolving to the creation response\n */\n async register(\n options: HCS6RegisterOptions,\n ): Promise<HCS6CreateHashinalResponse> {\n try {\n if (!this.signer) {\n return {\n success: false,\n error: 'No signer configured for browser register',\n };\n }\n\n let input: InscriptionInput;\n if (options.data?.base64) {\n input = {\n type: 'buffer',\n buffer: Buffer.from(options.data.base64, 'base64'),\n fileName: 'data.' + (options.data.mimeType?.split('/')[1] || 'bin'),\n mimeType: options.data.mimeType || 'application/octet-stream',\n };\n } else if (options.data?.url) {\n input = { type: 'url', url: options.data.url };\n } else {\n input = {\n type: 'buffer',\n buffer: Buffer.from(JSON.stringify(options.metadata)),\n fileName: 'metadata.json',\n mimeType: 'application/json',\n };\n }\n\n const inscriptionOptions: InscriptionOptions = {\n ...(options.inscriptionOptions as InscriptionOptions | undefined),\n mode: 'hashinal',\n metadata: options.metadata,\n waitForConfirmation: true,\n network: this.network,\n };\n\n const res: InscriptionResponse = await inscribeWithSigner(\n input,\n this.signer,\n inscriptionOptions,\n );\n const inscriptionTopicId =\n res.inscription?.jsonTopicId || getInscriptionTopicId(res.inscription);\n if (!inscriptionTopicId)\n return { success: false, error: 'Failed to inscribe data' };\n\n let registryTopicId = options.registryTopicId;\n if (!registryTopicId) {\n const reg = await this.createRegistry({ ttl: options.ttl });\n if (!reg.success || !reg.topicId)\n return { success: false, error: reg.error };\n registryTopicId = reg.topicId;\n }\n\n const regRes = await this.registerEntry(registryTopicId, {\n targetTopicId: inscriptionTopicId,\n memo: options.memo || 'Dynamic hashinal registration',\n });\n if (!regRes.success) return { success: false, error: regRes.error };\n\n return {\n success: true,\n registryTopicId,\n inscriptionTopicId,\n };\n } catch (error) {\n this.logger.error(`Failed to register dynamic hashinal: ${error}`);\n return { success: false, error: String(error) };\n }\n }\n\n /**\n * Validate that a topic is a valid HCS-6 registry\n * @param topicId The topic ID to validate\n * @returns Promise resolving to true if valid, false otherwise\n */\n async validateHCS6Topic(topicId: string): Promise<boolean> {\n try {\n const topicInfo = await this.mirrorNode.getTopicInfo(topicId);\n const memoInfo = this.parseRegistryTypeFromMemo(topicInfo.memo);\n\n if (!memoInfo) {\n this.logger.warn(\n `Topic ${topicId} is not a valid HCS-6 registry (invalid memo format)`,\n );\n return false;\n }\n\n if (memoInfo.registryType !== HCS6RegistryType.NON_INDEXED) {\n this.logger.warn(\n `Topic ${topicId} is not a valid HCS-6 registry (must be non-indexed)`,\n );\n return false;\n }\n\n return true;\n } catch (error) {\n this.logger.error(`Error validating HCS-6 topic ${topicId}: ${error}`);\n return false;\n }\n }\n}\n"],"names":["getInscriptionTopicId"],"mappings":"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"}
@@ -1,111 +1,201 @@
1
- class HashLinkScanner {
2
- constructor(logger) {
1
+ class HashLinkResolver {
2
+ constructor(logger, blockLoader, hrlResolver, network) {
3
3
  this.logger = logger;
4
+ this.blockLoader = blockLoader;
5
+ this.hrlResolver = hrlResolver;
6
+ this.network = network;
7
+ this.cache = /* @__PURE__ */ new Map();
8
+ this.renderStack = /* @__PURE__ */ new Set();
4
9
  }
5
10
  /**
6
- * Scan template for data-hashlink elements
11
+ * Resolve a HashLink reference to a block
7
12
  */
8
- async scanTemplate(html) {
9
- const references = [];
10
- const hashLinkRegex = /<([^>]+)\s+data-hashlink=["']([^"']+)["']([^>]*)>/gs;
11
- let match;
12
- while ((match = hashLinkRegex.exec(html)) !== null) {
13
- const fullMatch = match[0];
14
- const tagName = match[1].split(/\s+/)[0];
15
- const uri = match[2];
16
- const otherAttributes = match[3];
17
- try {
18
- const parsed = this.parseHashLinkURI(uri);
19
- const attributesMatch = otherAttributes.match(
20
- /data-attributes=(['"])((?:(?!\1).)*)\1/s
21
- );
22
- let attributes;
23
- if (attributesMatch) {
24
- try {
25
- const attrString = attributesMatch[2];
26
- attributes = JSON.parse(attrString);
27
- } catch (e) {
28
- this.logger.warn("Failed to parse data-attributes", {
29
- uri,
30
- attributes: attributesMatch[2],
31
- error: e.message
32
- });
33
- }
34
- }
35
- const actionsMatch = otherAttributes.match(
36
- /data-actions=(['"])((?:(?!\1).)*)\1/s
37
- );
38
- let actions;
39
- if (actionsMatch) {
40
- try {
41
- const actionsString = actionsMatch[2];
42
- actions = JSON.parse(actionsString);
43
- } catch (e) {
44
- this.logger.warn("Failed to parse data-actions", {
45
- uri,
46
- actions: actionsMatch[2],
47
- error: e.message
48
- });
49
- }
50
- }
51
- const loadingMatch = otherAttributes.match(
52
- /data-loading=['"]([^'"]+)['"]/
53
- );
54
- const loading = loadingMatch?.[1] || "eager";
55
- references.push({
56
- element: tagName,
57
- uri,
58
- ...parsed,
59
- attributes,
60
- actions,
61
- loading,
62
- placeholder: fullMatch
63
- });
64
- this.logger.debug("Found HashLink reference", { uri, parsed });
65
- } catch (error) {
66
- this.logger.error("Failed to parse HashLink URI", {
67
- uri,
68
- error: error.message
69
- });
13
+ async resolveReference(ref, context) {
14
+ this.logger.debug("Resolving HashLink reference", {
15
+ uri: ref.uri,
16
+ protocol: ref.protocol
17
+ });
18
+ try {
19
+ switch (ref.protocol) {
20
+ case "12":
21
+ return await this.resolveHCS12Block(ref, context);
22
+ case "1":
23
+ return await this.resolveHCS1Block(ref, context);
24
+ case "2":
25
+ return await this.resolveHCS2Block(ref, context);
26
+ default:
27
+ throw new Error(`Unsupported HashLink protocol: ${ref.protocol}`);
70
28
  }
29
+ } catch (error) {
30
+ this.logger.error("Failed to resolve HashLink", {
31
+ uri: ref.uri,
32
+ error: error.message
33
+ });
34
+ return {
35
+ blockId: ref.reference,
36
+ definition: null,
37
+ template: null,
38
+ attributes: {},
39
+ actions: {},
40
+ error: error.message
41
+ };
71
42
  }
72
- return references;
73
43
  }
74
44
  /**
75
- * Parse HashLink URI into components
45
+ * Resolve HCS-12 block by topic ID
76
46
  */
77
- parseHashLinkURI(uri) {
78
- const uriMatch = uri.match(/^hcs:\/\/(\d+)\/(.+)$/);
79
- if (!uriMatch) {
80
- throw new Error(`Invalid HashLink URI format: ${uri}`);
47
+ async resolveHCS12Block(ref, context) {
48
+ const blockId = ref.reference;
49
+ if (this.renderStack.has(blockId)) {
50
+ return {
51
+ blockId,
52
+ definition: null,
53
+ template: null,
54
+ attributes: {},
55
+ actions: {},
56
+ error: "Circular reference detected"
57
+ };
58
+ }
59
+ const cacheKey = this.getCacheKey(blockId, ref.attributes, ref.actions);
60
+ if (this.cache.has(cacheKey)) {
61
+ return this.cache.get(cacheKey);
62
+ }
63
+ try {
64
+ const blockData = await this.blockLoader.loadBlock(blockId);
65
+ if (!blockData || !blockData.definition) {
66
+ throw new Error(`Block not found: ${blockId}`);
67
+ }
68
+ const mergedAttributes = {
69
+ ...this.extractDefaults(blockData.definition),
70
+ ...context.attributes,
71
+ ...ref.attributes
72
+ };
73
+ const mergedActions = {
74
+ ...context.actions,
75
+ ...ref.actions
76
+ };
77
+ const resolved = {
78
+ blockId,
79
+ definition: blockData.definition,
80
+ template: blockData.template,
81
+ attributes: mergedAttributes,
82
+ actions: mergedActions
83
+ };
84
+ this.cache.set(cacheKey, resolved);
85
+ return resolved;
86
+ } catch (error) {
87
+ this.renderStack.delete(blockId);
88
+ throw new Error(
89
+ `Failed to load HCS-12 block ${blockId}: ${error.message}`
90
+ );
81
91
  }
82
- const protocol = uriMatch[1];
83
- const referencePath = uriMatch[2];
84
- if (protocol === "2") {
85
- const parts = referencePath.split("/");
86
- if (parts.length !== 2) {
87
- throw new Error(`Invalid HCS-2 reference format: ${referencePath}`);
92
+ }
93
+ /**
94
+ * Resolve HCS-1 topic as potential block
95
+ */
96
+ async resolveHCS1Block(ref, context) {
97
+ const topicId = ref.reference;
98
+ try {
99
+ const blockData = await this.blockLoader.loadBlock(topicId);
100
+ if (blockData && blockData.definition) {
101
+ return {
102
+ blockId: topicId,
103
+ definition: blockData.definition,
104
+ template: blockData.template,
105
+ attributes: {
106
+ ...this.extractDefaults(blockData.definition),
107
+ ...ref.attributes
108
+ },
109
+ actions: ref.actions || {}
110
+ };
88
111
  }
112
+ const content = await this.hrlResolver.resolve(topicId, {
113
+ network: this.network
114
+ });
115
+ return {
116
+ blockId: topicId,
117
+ definition: null,
118
+ template: content.content,
119
+ attributes: ref.attributes || {},
120
+ actions: ref.actions || {}
121
+ };
122
+ } catch (error) {
123
+ throw new Error(
124
+ `Failed to load HCS-1 content ${topicId}: ${error.message}`
125
+ );
126
+ }
127
+ }
128
+ /**
129
+ * Resolve HCS-2 registry entry
130
+ */
131
+ async resolveHCS2Block(ref, context) {
132
+ if (!ref.registryId || !ref.entryName) {
133
+ throw new Error(
134
+ "Invalid HCS-2 reference: missing registry ID or entry name"
135
+ );
136
+ }
137
+ try {
138
+ const registryUri = `hcs://2/${ref.registryId}`;
139
+ const registryContent = await this.hrlResolver.resolve(registryUri, {
140
+ network: this.network
141
+ });
142
+ this.logger.warn("HCS-2 registry lookup not fully implemented", {
143
+ registryId: ref.registryId,
144
+ entryName: ref.entryName
145
+ });
89
146
  return {
90
- protocol,
91
- reference: referencePath,
92
- registryId: parts[0],
93
- entryName: parts[1]
147
+ blockId: `${ref.registryId}/${ref.entryName}`,
148
+ definition: null,
149
+ template: `<!-- HCS-2 lookup not implemented: ${ref.uri} -->`,
150
+ attributes: ref.attributes || {},
151
+ actions: ref.actions || {}
94
152
  };
153
+ } catch (error) {
154
+ throw new Error(`Failed to resolve HCS-2 entry: ${error.message}`);
155
+ }
156
+ }
157
+ /**
158
+ * Extract default attribute values from block definition
159
+ */
160
+ extractDefaults(definition) {
161
+ const defaults = {};
162
+ if (definition.attributes) {
163
+ Object.entries(definition.attributes).forEach(([key, attr]) => {
164
+ if (attr && typeof attr === "object" && "default" in attr) {
165
+ defaults[key] = attr.default;
166
+ }
167
+ });
95
168
  }
96
- return {
97
- protocol,
98
- reference: referencePath
99
- };
169
+ return defaults;
170
+ }
171
+ /**
172
+ * Get cache key for resolved block
173
+ */
174
+ getCacheKey(blockId, attributes, actions) {
175
+ const attrHash = attributes ? JSON.stringify(attributes) : "";
176
+ const actionHash = actions ? JSON.stringify(actions) : "";
177
+ return `${blockId}:${attrHash}:${actionHash}`;
178
+ }
179
+ /**
180
+ * Add block to render stack (for circular reference detection)
181
+ */
182
+ pushRenderStack(blockId) {
183
+ this.renderStack.add(blockId);
184
+ }
185
+ /**
186
+ * Remove block from render stack
187
+ */
188
+ popRenderStack(blockId) {
189
+ this.renderStack.delete(blockId);
100
190
  }
101
191
  /**
102
- * Create a unique placeholder for replacement
192
+ * Clear cache
103
193
  */
104
- createPlaceholder(ref, index) {
105
- return `<!-- HASHLINK_PLACEHOLDER_${index}_${ref.uri.replace(/[^a-zA-Z0-9]/g, "_")} -->`;
194
+ clearCache() {
195
+ this.cache.clear();
106
196
  }
107
197
  }
108
198
  export {
109
- HashLinkScanner
199
+ HashLinkResolver
110
200
  };
111
201
  //# sourceMappingURL=standards-sdk.es50.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es50.js","sources":["../../src/hcs-12/rendering/hashlink-scanner.ts"],"sourcesContent":["/**\n * HashLink Scanner for Template-Based Block Composition\n *\n * Scans HTML templates for data-hashlink attributes and extracts references\n */\n\nimport { Logger } from '../../utils/logger';\n\nexport interface ScannedHashLink {\n element: string;\n uri: string;\n protocol: string;\n reference: string;\n registryId?: string;\n entryName?: string;\n attributes?: Record<string, any>;\n actions?: Record<string, string>;\n loading?: 'eager' | 'lazy';\n placeholder: string;\n}\n\nexport class HashLinkScanner {\n private logger: Logger;\n\n constructor(logger: Logger) {\n this.logger = logger;\n }\n\n /**\n * Scan template for data-hashlink elements\n */\n async scanTemplate(html: string): Promise<ScannedHashLink[]> {\n const references: ScannedHashLink[] = [];\n\n const hashLinkRegex = /<([^>]+)\\s+data-hashlink=[\"']([^\"']+)[\"']([^>]*)>/gs;\n\n let match;\n while ((match = hashLinkRegex.exec(html)) !== null) {\n const fullMatch = match[0];\n const tagName = match[1].split(/\\s+/)[0];\n const uri = match[2];\n const otherAttributes = match[3];\n\n try {\n const parsed = this.parseHashLinkURI(uri);\n\n const attributesMatch = otherAttributes.match(\n /data-attributes=(['\"])((?:(?!\\1).)*)\\1/s,\n );\n let attributes: Record<string, any> | undefined;\n if (attributesMatch) {\n try {\n const attrString = attributesMatch[2];\n attributes = JSON.parse(attrString);\n } catch (e) {\n this.logger.warn('Failed to parse data-attributes', {\n uri,\n attributes: attributesMatch[2],\n error: e.message,\n });\n }\n }\n\n const actionsMatch = otherAttributes.match(\n /data-actions=(['\"])((?:(?!\\1).)*)\\1/s,\n );\n let actions: Record<string, string> | undefined;\n if (actionsMatch) {\n try {\n const actionsString = actionsMatch[2];\n actions = JSON.parse(actionsString);\n } catch (e) {\n this.logger.warn('Failed to parse data-actions', {\n uri,\n actions: actionsMatch[2],\n error: e.message,\n });\n }\n }\n\n const loadingMatch = otherAttributes.match(\n /data-loading=['\"]([^'\"]+)['\"]/,\n );\n const loading = (loadingMatch?.[1] as 'lazy' | 'eager') || 'eager';\n\n references.push({\n element: tagName,\n uri,\n ...parsed,\n attributes,\n actions,\n loading,\n placeholder: fullMatch,\n });\n\n this.logger.debug('Found HashLink reference', { uri, parsed });\n } catch (error) {\n this.logger.error('Failed to parse HashLink URI', {\n uri,\n error: error.message,\n });\n }\n }\n\n return references;\n }\n\n /**\n * Parse HashLink URI into components\n */\n parseHashLinkURI(uri: string): {\n protocol: string;\n reference: string;\n registryId?: string;\n entryName?: string;\n } {\n const uriMatch = uri.match(/^hcs:\\/\\/(\\d+)\\/(.+)$/);\n if (!uriMatch) {\n throw new Error(`Invalid HashLink URI format: ${uri}`);\n }\n\n const protocol = uriMatch[1];\n const referencePath = uriMatch[2];\n\n if (protocol === '2') {\n const parts = referencePath.split('/');\n if (parts.length !== 2) {\n throw new Error(`Invalid HCS-2 reference format: ${referencePath}`);\n }\n return {\n protocol,\n reference: referencePath,\n registryId: parts[0],\n entryName: parts[1],\n };\n }\n\n return {\n protocol,\n reference: referencePath,\n };\n }\n\n /**\n * Create a unique placeholder for replacement\n */\n createPlaceholder(ref: ScannedHashLink, index: number): string {\n return `<!-- HASHLINK_PLACEHOLDER_${index}_${ref.uri.replace(/[^a-zA-Z0-9]/g, '_')} -->`;\n }\n}\n"],"names":[],"mappings":"AAqBO,MAAM,gBAAgB;AAAA,EAG3B,YAAY,QAAgB;AAC1B,SAAK,SAAS;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,aAAa,MAA0C;AAC3D,UAAM,aAAgC,CAAA;AAEtC,UAAM,gBAAgB;AAEtB,QAAI;AACJ,YAAQ,QAAQ,cAAc,KAAK,IAAI,OAAO,MAAM;AAClD,YAAM,YAAY,MAAM,CAAC;AACzB,YAAM,UAAU,MAAM,CAAC,EAAE,MAAM,KAAK,EAAE,CAAC;AACvC,YAAM,MAAM,MAAM,CAAC;AACnB,YAAM,kBAAkB,MAAM,CAAC;AAE/B,UAAI;AACF,cAAM,SAAS,KAAK,iBAAiB,GAAG;AAExC,cAAM,kBAAkB,gBAAgB;AAAA,UACtC;AAAA,QAAA;AAEF,YAAI;AACJ,YAAI,iBAAiB;AACnB,cAAI;AACF,kBAAM,aAAa,gBAAgB,CAAC;AACpC,yBAAa,KAAK,MAAM,UAAU;AAAA,UACpC,SAAS,GAAG;AACV,iBAAK,OAAO,KAAK,mCAAmC;AAAA,cAClD;AAAA,cACA,YAAY,gBAAgB,CAAC;AAAA,cAC7B,OAAO,EAAE;AAAA,YAAA,CACV;AAAA,UACH;AAAA,QACF;AAEA,cAAM,eAAe,gBAAgB;AAAA,UACnC;AAAA,QAAA;AAEF,YAAI;AACJ,YAAI,cAAc;AAChB,cAAI;AACF,kBAAM,gBAAgB,aAAa,CAAC;AACpC,sBAAU,KAAK,MAAM,aAAa;AAAA,UACpC,SAAS,GAAG;AACV,iBAAK,OAAO,KAAK,gCAAgC;AAAA,cAC/C;AAAA,cACA,SAAS,aAAa,CAAC;AAAA,cACvB,OAAO,EAAE;AAAA,YAAA,CACV;AAAA,UACH;AAAA,QACF;AAEA,cAAM,eAAe,gBAAgB;AAAA,UACnC;AAAA,QAAA;AAEF,cAAM,UAAW,eAAe,CAAC,KAA0B;AAE3D,mBAAW,KAAK;AAAA,UACd,SAAS;AAAA,UACT;AAAA,UACA,GAAG;AAAA,UACH;AAAA,UACA;AAAA,UACA;AAAA,UACA,aAAa;AAAA,QAAA,CACd;AAED,aAAK,OAAO,MAAM,4BAA4B,EAAE,KAAK,QAAQ;AAAA,MAC/D,SAAS,OAAO;AACd,aAAK,OAAO,MAAM,gCAAgC;AAAA,UAChD;AAAA,UACA,OAAO,MAAM;AAAA,QAAA,CACd;AAAA,MACH;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAiB,KAKf;AACA,UAAM,WAAW,IAAI,MAAM,uBAAuB;AAClD,QAAI,CAAC,UAAU;AACb,YAAM,IAAI,MAAM,gCAAgC,GAAG,EAAE;AAAA,IACvD;AAEA,UAAM,WAAW,SAAS,CAAC;AAC3B,UAAM,gBAAgB,SAAS,CAAC;AAEhC,QAAI,aAAa,KAAK;AACpB,YAAM,QAAQ,cAAc,MAAM,GAAG;AACrC,UAAI,MAAM,WAAW,GAAG;AACtB,cAAM,IAAI,MAAM,mCAAmC,aAAa,EAAE;AAAA,MACpE;AACA,aAAO;AAAA,QACL;AAAA,QACA,WAAW;AAAA,QACX,YAAY,MAAM,CAAC;AAAA,QACnB,WAAW,MAAM,CAAC;AAAA,MAAA;AAAA,IAEtB;AAEA,WAAO;AAAA,MACL;AAAA,MACA,WAAW;AAAA,IAAA;AAAA,EAEf;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAkB,KAAsB,OAAuB;AAC7D,WAAO,6BAA6B,KAAK,IAAI,IAAI,IAAI,QAAQ,iBAAiB,GAAG,CAAC;AAAA,EACpF;AACF;"}
1
+ {"version":3,"file":"standards-sdk.es50.js","sources":["../../src/hcs-12/rendering/hashlink-resolver.ts"],"sourcesContent":["/**\n * HashLink Resolver for Template-Based Block Composition\n *\n * Resolves HashLink references to actual blocks and handles loading\n */\n\nimport { Logger } from '../../utils/logger';\nimport { ScannedHashLink } from './hashlink-scanner';\nimport { BlockDefinition } from '../types';\nimport { BlockLoader } from '../registries/block-loader';\nimport { HRLResolver } from '../../utils/hrl-resolver';\nimport { NetworkType } from '../../utils/types';\n\nexport interface RenderContext {\n blockId: string;\n depth: number;\n parentContext?: RenderContext;\n attributes: Record<string, any>;\n actions: Record<string, string>;\n assembly?: any;\n maxDepth?: number;\n}\n\nexport interface ResolvedHashLinkBlock {\n blockId: string;\n definition: BlockDefinition | null;\n template: string | null;\n attributes: Record<string, any>;\n actions: Record<string, string>;\n error?: string;\n}\n\nexport class HashLinkResolver {\n private logger: Logger;\n private blockLoader: BlockLoader;\n private hrlResolver: HRLResolver;\n private network: NetworkType;\n private cache: Map<string, ResolvedHashLinkBlock>;\n private renderStack: Set<string>;\n\n constructor(\n logger: Logger,\n blockLoader: BlockLoader,\n hrlResolver: HRLResolver,\n network: NetworkType,\n ) {\n this.logger = logger;\n this.blockLoader = blockLoader;\n this.hrlResolver = hrlResolver;\n this.network = network;\n this.cache = new Map();\n this.renderStack = new Set();\n }\n\n /**\n * Resolve a HashLink reference to a block\n */\n async resolveReference(\n ref: ScannedHashLink,\n context: RenderContext,\n ): Promise<ResolvedHashLinkBlock> {\n this.logger.debug('Resolving HashLink reference', {\n uri: ref.uri,\n protocol: ref.protocol,\n });\n\n try {\n switch (ref.protocol) {\n case '12':\n return await this.resolveHCS12Block(ref, context);\n\n case '1':\n return await this.resolveHCS1Block(ref, context);\n\n case '2':\n return await this.resolveHCS2Block(ref, context);\n\n default:\n throw new Error(`Unsupported HashLink protocol: ${ref.protocol}`);\n }\n } catch (error) {\n this.logger.error('Failed to resolve HashLink', {\n uri: ref.uri,\n error: error.message,\n });\n\n return {\n blockId: ref.reference,\n definition: null,\n template: null,\n attributes: {},\n actions: {},\n error: error.message,\n };\n }\n }\n\n /**\n * Resolve HCS-12 block by topic ID\n */\n private async resolveHCS12Block(\n ref: ScannedHashLink,\n context: RenderContext,\n ): Promise<ResolvedHashLinkBlock> {\n const blockId = ref.reference;\n\n if (this.renderStack.has(blockId)) {\n return {\n blockId,\n definition: null,\n template: null,\n attributes: {},\n actions: {},\n error: 'Circular reference detected',\n };\n }\n\n const cacheKey = this.getCacheKey(blockId, ref.attributes, ref.actions);\n if (this.cache.has(cacheKey)) {\n return this.cache.get(cacheKey)!;\n }\n\n try {\n const blockData = await this.blockLoader.loadBlock(blockId);\n\n if (!blockData || !blockData.definition) {\n throw new Error(`Block not found: ${blockId}`);\n }\n\n const mergedAttributes = {\n ...this.extractDefaults(blockData.definition),\n ...context.attributes,\n ...ref.attributes,\n };\n\n const mergedActions = {\n ...context.actions,\n ...ref.actions,\n };\n\n const resolved: ResolvedHashLinkBlock = {\n blockId,\n definition: blockData.definition,\n template: blockData.template,\n attributes: mergedAttributes,\n actions: mergedActions,\n };\n\n this.cache.set(cacheKey, resolved);\n\n return resolved;\n } catch (error) {\n this.renderStack.delete(blockId);\n throw new Error(\n `Failed to load HCS-12 block ${blockId}: ${error.message}`,\n );\n }\n }\n\n /**\n * Resolve HCS-1 topic as potential block\n */\n private async resolveHCS1Block(\n ref: ScannedHashLink,\n context: RenderContext,\n ): Promise<ResolvedHashLinkBlock> {\n const topicId = ref.reference;\n\n try {\n const blockData = await this.blockLoader.loadBlock(topicId);\n\n if (blockData && blockData.definition) {\n return {\n blockId: topicId,\n definition: blockData.definition,\n template: blockData.template,\n attributes: {\n ...this.extractDefaults(blockData.definition),\n ...ref.attributes,\n },\n actions: ref.actions || {},\n };\n }\n\n const content = await this.hrlResolver.resolve(topicId, {\n network: this.network,\n });\n\n return {\n blockId: topicId,\n definition: null,\n template: content.content as string,\n attributes: ref.attributes || {},\n actions: ref.actions || {},\n };\n } catch (error) {\n throw new Error(\n `Failed to load HCS-1 content ${topicId}: ${error.message}`,\n );\n }\n }\n\n /**\n * Resolve HCS-2 registry entry\n */\n private async resolveHCS2Block(\n ref: ScannedHashLink,\n context: RenderContext,\n ): Promise<ResolvedHashLinkBlock> {\n if (!ref.registryId || !ref.entryName) {\n throw new Error(\n 'Invalid HCS-2 reference: missing registry ID or entry name',\n );\n }\n\n try {\n const registryUri = `hcs://2/${ref.registryId}`;\n const registryContent = await this.hrlResolver.resolve(registryUri, {\n network: this.network,\n });\n\n this.logger.warn('HCS-2 registry lookup not fully implemented', {\n registryId: ref.registryId,\n entryName: ref.entryName,\n });\n\n return {\n blockId: `${ref.registryId}/${ref.entryName}`,\n definition: null,\n template: `<!-- HCS-2 lookup not implemented: ${ref.uri} -->`,\n attributes: ref.attributes || {},\n actions: ref.actions || {},\n };\n } catch (error) {\n throw new Error(`Failed to resolve HCS-2 entry: ${error.message}`);\n }\n }\n\n /**\n * Extract default attribute values from block definition\n */\n private extractDefaults(definition: BlockDefinition): Record<string, any> {\n const defaults: Record<string, any> = {};\n\n if (definition.attributes) {\n Object.entries(definition.attributes).forEach(([key, attr]) => {\n if (attr && typeof attr === 'object' && 'default' in attr) {\n defaults[key] = attr.default;\n }\n });\n }\n\n return defaults;\n }\n\n /**\n * Get cache key for resolved block\n */\n private getCacheKey(\n blockId: string,\n attributes?: Record<string, any>,\n actions?: Record<string, string>,\n ): string {\n const attrHash = attributes ? JSON.stringify(attributes) : '';\n const actionHash = actions ? JSON.stringify(actions) : '';\n return `${blockId}:${attrHash}:${actionHash}`;\n }\n\n /**\n * Add block to render stack (for circular reference detection)\n */\n pushRenderStack(blockId: string): void {\n this.renderStack.add(blockId);\n }\n\n /**\n * Remove block from render stack\n */\n popRenderStack(blockId: string): void {\n this.renderStack.delete(blockId);\n }\n\n /**\n * Clear cache\n */\n clearCache(): void {\n this.cache.clear();\n }\n}\n"],"names":[],"mappings":"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"}