@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.es31.js","sources":["../../src/hcs-12/registries/base-registry.ts"],"sourcesContent":["/**\n * Base Registry Abstract Class for HCS-12\n *\n * Provides common functionality for all HCS-12 registry types including\n * action, block, assembly, and hashlinks registries.\n */\n\nimport { ILogger, Logger } from '../../utils/logger';\nimport { NetworkType } from '../../utils/types';\nimport {\n RegistryType,\n AssemblyRegistryEntry,\n RegistryConfig,\n ActionRegistration,\n AssemblyRegistration,\n HashLinksRegistration,\n} from '../types';\nimport { inscribe, inscribeWithSigner } from '../../inscribe';\nimport type { HCS12Client } from '../sdk';\nimport type { HCS12BrowserClient } from '../browser';\n\n/**\n * Abstract base class for all HCS-12 registries\n */\nexport abstract class BaseRegistry {\n protected logger: ILogger;\n protected networkType: NetworkType;\n protected topicId?: string;\n protected registryType: RegistryType;\n protected entries: Map<string, AssemblyRegistryEntry> = new Map();\n protected client?: HCS12Client | HCS12BrowserClient;\n protected lastSyncTimestamp?: string;\n\n constructor(\n networkType: NetworkType,\n logger: ILogger,\n registryType: RegistryType,\n topicId?: string,\n client?: HCS12Client | HCS12BrowserClient,\n ) {\n this.networkType = networkType;\n this.logger = logger;\n this.registryType = registryType;\n this.topicId = topicId;\n this.client = client;\n }\n\n /**\n * Submit a registration to the topic\n */\n abstract register(\n data: ActionRegistration | AssemblyRegistration | HashLinksRegistration,\n ): Promise<string>;\n\n /**\n * Retrieve an entry by ID\n */\n async getEntry(id: string): Promise<AssemblyRegistryEntry | null> {\n const cached = this.entries.get(id);\n if (cached) return cached;\n\n if (this.topicId && this.client) {\n await this.sync();\n return this.entries.get(id) || null;\n }\n\n return null;\n }\n\n /**\n * Get the latest entry from a specific topic ID (for non-indexed topics)\n */\n async getLatestEntry(topicId: string): Promise<AssemblyRegistryEntry | null> {\n if (!this.client) {\n return null;\n }\n\n try {\n const messages = await this.client.mirrorNode.getTopicMessagesByFilter(\n topicId,\n {\n order: 'desc',\n limit: 1,\n },\n );\n\n if (!messages || messages.length === 0) {\n return null;\n }\n\n const latestMessage = messages[0];\n let data: any;\n\n if ((latestMessage as any).raw_content) {\n data = JSON.parse((latestMessage as any).raw_content);\n } else {\n const msgAny = latestMessage as any;\n if (msgAny.p === 'hcs-12' && msgAny.op) {\n data = {\n p: msgAny.p,\n op: msgAny.op,\n name: msgAny.name,\n version: msgAny.version,\n description: msgAny.description,\n permissions: msgAny.permissions,\n metadata: msgAny.metadata,\n data: msgAny.data,\n category: msgAny.category,\n source: msgAny.source,\n inputs: msgAny.inputs,\n outputs: msgAny.outputs,\n tags: msgAny.tags,\n fields: msgAny.fields,\n styles: msgAny.styles,\n actions: msgAny.actions,\n blocks: msgAny.blocks,\n refs: msgAny.refs,\n };\n\n Object.keys(data).forEach(key => {\n if (data[key] === undefined) {\n delete data[key];\n }\n });\n } else {\n return null;\n }\n }\n\n return {\n id: latestMessage.sequence_number.toString(),\n sequenceNumber: latestMessage.sequence_number,\n timestamp:\n latestMessage.consensus_timestamp || new Date().toISOString(),\n submitter: latestMessage.payer || 'unknown',\n data,\n };\n } catch (error) {\n this.logger.error('Failed to get latest entry', { topicId, error });\n return null;\n }\n }\n\n /**\n * List all entries with optional filtering\n */\n async listEntries(filter?: {\n submitter?: string;\n afterTimestamp?: string;\n beforeTimestamp?: string;\n }): Promise<AssemblyRegistryEntry[]> {\n if (this.topicId && this.client) {\n await this.sync();\n }\n\n const entries = Array.from(this.entries.values());\n\n if (!filter) return entries;\n\n return entries.filter(entry => {\n if (filter.submitter && entry.submitter !== filter.submitter) {\n return false;\n }\n if (filter.afterTimestamp && entry.timestamp < filter.afterTimestamp) {\n return false;\n }\n if (filter.beforeTimestamp && entry.timestamp > filter.beforeTimestamp) {\n return false;\n }\n return true;\n });\n }\n\n /**\n * Sync entries from the network\n */\n async sync(): Promise<void> {\n if (!this.topicId || !this.client) {\n this.logger.warn('Cannot sync without topic ID and client');\n return;\n }\n\n this.logger.info('Syncing registry entries', {\n topicId: this.topicId,\n registryType: RegistryType[this.registryType],\n lastSync: this.lastSyncTimestamp,\n });\n\n try {\n const messages = await this.client.mirrorNode.getTopicMessagesByFilter(\n this.topicId,\n {\n startTime: this.lastSyncTimestamp,\n order: 'asc',\n limit: 100,\n },\n );\n\n for (const msg of messages) {\n try {\n let data: any;\n\n if ((msg as any).raw_content) {\n data = JSON.parse((msg as any).raw_content);\n } else {\n const msgAny = msg as any;\n if (msgAny.p === 'hcs-12' && msgAny.op) {\n data = {\n p: msgAny.p,\n op: msgAny.op,\n name: msgAny.name,\n version: msgAny.version,\n description: msgAny.description,\n permissions: msgAny.permissions,\n metadata: msgAny.metadata,\n data: msgAny.data,\n category: msgAny.category,\n source: msgAny.source,\n inputs: msgAny.inputs,\n outputs: msgAny.outputs,\n tags: msgAny.tags,\n fields: msgAny.fields,\n styles: msgAny.styles,\n actions: msgAny.actions,\n blocks: msgAny.blocks,\n refs: msgAny.refs,\n t_id: msgAny.t_id,\n hash: msgAny.hash,\n wasm_hash: msgAny.wasm_hash,\n info_t_id: msgAny.info_t_id,\n validation_rules: msgAny.validation_rules,\n js_t_id: msgAny.js_t_id,\n js_hash: msgAny.js_hash,\n interface_version: msgAny.interface_version,\n title: msgAny.title,\n template: msgAny.template,\n author: msgAny.author,\n m: msgAny.m,\n };\n\n Object.keys(data).forEach(key => {\n if (data[key] === undefined) {\n delete data[key];\n }\n });\n } else {\n continue;\n }\n }\n\n if (data.p !== 'hcs-12') {\n continue;\n }\n\n const entry: AssemblyRegistryEntry = {\n id: msg.sequence_number.toString(),\n sequenceNumber: msg.sequence_number,\n timestamp: msg.consensus_timestamp || new Date().toISOString(),\n submitter: msg.payer || 'unknown',\n data,\n };\n this.entries.set(entry.id, entry);\n } catch (error) {\n this.logger.warn('Failed to parse registry message', {\n sequenceNumber: msg.sequence_number,\n error,\n });\n }\n }\n\n if (messages.length > 0) {\n this.lastSyncTimestamp =\n messages[messages.length - 1].consensus_timestamp ||\n new Date().toISOString();\n } else {\n this.lastSyncTimestamp = new Date().toISOString();\n }\n\n this.logger.info('Registry sync completed', {\n topicId: this.topicId,\n messageCount: messages.length,\n lastSync: this.lastSyncTimestamp,\n });\n } catch (error) {\n this.logger.error('Failed to sync registry', { error });\n throw error;\n }\n }\n\n /**\n * Get the registry topic memo format\n */\n getTopicMemo(): string {\n const indexed = 1;\n const ttl = 60;\n const type = this.registryType;\n return `hcs-12:${indexed}:${ttl}:${type}`;\n }\n\n /**\n * Create a new registry topic\n */\n async createRegistryTopic(): Promise<string> {\n if (!this.client) {\n throw new Error('Client required to create topic');\n }\n\n const topicId = await this.client.createRegistryTopic(this.registryType);\n this.topicId = topicId;\n\n return topicId;\n }\n\n /**\n * Get registry configuration\n */\n getConfig(): RegistryConfig {\n return {\n type: this.registryType,\n indexed: false,\n ttl: 60,\n topicId: this.topicId,\n memo: this.getTopicMemo(),\n };\n }\n\n /**\n * Store large content via HCS-1 inscription\n */\n protected async inscribeContent(\n content: Buffer | string,\n mimeType: string,\n metadata?: Record<string, any>,\n ): Promise<string> {\n if (!this.client) {\n throw new Error('Client required for inscription');\n }\n\n const buffer = typeof content === 'string' ? Buffer.from(content) : content;\n\n this.logger.info('Inscribing content via HCS-1', {\n size: buffer.length,\n mimeType,\n registryType: RegistryType[this.registryType],\n });\n\n let response;\n\n if ('getOperatorAccountId' in this.client) {\n response = await inscribe(\n {\n type: 'buffer',\n buffer,\n fileName:\n mimeType === 'application/octet-stream' &&\n metadata?.fileType === 'wasm'\n ? `${metadata?.name || 'content'}.wasm`\n : metadata?.name || 'content',\n mimeType,\n },\n {\n accountId: this.client.getOperatorAccountId(),\n privateKey: this.client.getOperatorPrivateKey(),\n network: this.networkType as 'mainnet' | 'testnet',\n },\n {\n mode: 'file',\n metadata,\n waitForConfirmation: true,\n },\n );\n } else {\n const { accountId, signer } = await (\n this.client as HCS12BrowserClient\n ).getAccountAndSigner();\n response = await inscribeWithSigner(\n {\n type: 'buffer',\n buffer,\n fileName:\n mimeType === 'application/octet-stream' &&\n metadata?.fileType === 'wasm'\n ? `${metadata?.name || 'content'}.wasm`\n : metadata?.name || 'content',\n mimeType,\n },\n signer,\n {\n mode: 'file',\n metadata,\n waitForConfirmation: true,\n },\n );\n }\n\n if (!response.confirmed) {\n throw new Error('Failed to inscribe content');\n }\n\n const topicId = response.inscription.topic_id;\n if (!topicId) {\n throw new Error('No topic ID in inscription response');\n }\n\n this.logger.info('Content inscribed successfully', {\n topicId,\n });\n return topicId;\n }\n\n /**\n * Validate common registration fields\n */\n protected validateBaseRegistration(\n data: ActionRegistration | AssemblyRegistration | HashLinksRegistration,\n ): void {\n if (!data.p || data.p !== 'hcs-12') {\n throw new Error('Invalid protocol identifier');\n }\n\n if (!data.op || data.op !== 'register') {\n throw new Error('Invalid operation');\n }\n }\n\n /**\n * Clear local cache\n */\n clearCache(): void {\n this.entries.clear();\n this.lastSyncTimestamp = undefined;\n this.logger.info('Registry cache cleared', {\n registryType: RegistryType[this.registryType],\n });\n }\n\n /**\n * Get registry statistics\n */\n getStats(): {\n entryCount: number;\n lastSync?: string;\n topicId?: string;\n registryType: string;\n } {\n return {\n entryCount: this.entries.size,\n lastSync: this.lastSyncTimestamp,\n topicId: this.topicId,\n registryType: RegistryType[this.registryType],\n };\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"standards-sdk.es31.js","sources":["../../src/hcs-12/registries/action-registry.ts"],"sourcesContent":["/**\n * Action Registry Implementation for HCS-12\n *\n * Manages registration and retrieval of HashLink WASM actions.\n */\n\nimport { ILogger } from '../../utils/logger';\nimport { NetworkType } from '../../utils/types';\nimport {\n RegistryType,\n AssemblyRegistryEntry,\n ActionRegistration,\n ModuleInfo,\n SourceVerification,\n} from '../types';\nimport { BaseRegistry } from './base-registry';\nimport { retrieveInscription } from '../../inscribe';\nimport { getCryptoAdapter } from '../../utils/crypto-abstraction';\nimport { isSSREnvironment } from '../../utils/crypto-env';\nimport type { HCS12Client } from '../sdk';\nimport type { HCS12BrowserClient } from '../browser';\nimport {\n validateActionRegistration,\n safeValidate,\n actionRegistrationSchema,\n} from '../validation/schemas';\nimport { ZodError } from 'zod';\n\n/**\n * Registry for HashLink WASM actions\n */\nexport class ActionRegistry extends BaseRegistry {\n private actionsByHash: Map<string, ActionRegistration> = new Map();\n private cryptoAdapter = getCryptoAdapter();\n\n constructor(\n networkType: NetworkType,\n logger: ILogger,\n topicId?: string,\n client?: HCS12Client | HCS12BrowserClient,\n ) {\n super(networkType, logger, RegistryType.ACTION, topicId, client);\n }\n\n /**\n * Register a WASM module with its binary via HCS-1\n */\n async registerWithWasm(\n wasmBinary: Buffer,\n moduleInfo: ModuleInfo,\n sourceVerification?: SourceVerification,\n ): Promise<ActionRegistration> {\n let wasmHash: string;\n let infoHash: string;\n\n if (isSSREnvironment()) {\n wasmHash = this.createSSRSafeHash(wasmBinary, 'wasm');\n const infoString = JSON.stringify(moduleInfo);\n infoHash = this.createSSRSafeHash(Buffer.from(infoString), 'info');\n } else {\n const wasmHasher = this.cryptoAdapter.createHash('sha256');\n const wasmResult = wasmHasher.update(wasmBinary).digest('hex');\n const wasmHashValue =\n wasmResult instanceof Promise ? await wasmResult : wasmResult;\n wasmHash =\n typeof wasmHashValue === 'string'\n ? wasmHashValue\n : wasmHashValue.toString('hex');\n\n const infoString = JSON.stringify(moduleInfo);\n const infoHasher = this.cryptoAdapter.createHash('sha256');\n const infoResult = infoHasher\n .update(Buffer.from(infoString))\n .digest('hex');\n const infoHashValue =\n infoResult instanceof Promise ? await infoResult : infoResult;\n infoHash =\n typeof infoHashValue === 'string'\n ? infoHashValue\n : infoHashValue.toString('hex');\n }\n\n const wasmTopicId = await this.inscribeContent(\n wasmBinary,\n 'application/octet-stream',\n {\n name: moduleInfo.name,\n version: moduleInfo.version,\n hash: wasmHash,\n fileType: 'wasm',\n },\n );\n\n let infoTopicId: string | undefined;\n const infoString = JSON.stringify(moduleInfo);\n if (Buffer.byteLength(infoString, 'utf8') > 1024) {\n infoTopicId = await this.inscribeContent(infoString, 'application/json', {\n name: `${moduleInfo.name}-info`,\n version: moduleInfo.version,\n });\n }\n\n const registration: ActionRegistration = {\n p: 'hcs-12',\n op: 'register',\n t_id: wasmTopicId,\n hash: infoHash,\n wasm_hash: wasmHash,\n info_t_id: infoTopicId,\n source_verification: sourceVerification,\n m: `${moduleInfo.name} v${moduleInfo.version}`,\n };\n\n const id = await this.register(registration);\n return registration;\n }\n\n /**\n * Register a new WASM action\n */\n async register(registration: ActionRegistration): Promise<string> {\n this.validateRegistration(registration);\n\n if (this.topicId && this.client) {\n this.logger.info('Submitting action registration to HCS', {\n topicId: this.topicId,\n hash: registration.hash,\n wasmHash: registration.wasm_hash,\n });\n\n const result = await this.client.submitMessage(\n this.topicId,\n JSON.stringify(registration),\n );\n\n const sequenceNumber = result.sequenceNumber;\n if (!sequenceNumber) {\n throw new Error('No sequence number returned from submission');\n }\n\n const entry: AssemblyRegistryEntry = {\n id: sequenceNumber.toString(),\n sequenceNumber,\n timestamp: new Date().toISOString(),\n submitter:\n 'getHashConnect' in this.client\n ? (await (this.client as HCS12BrowserClient).getAccountAndSigner())\n .accountId\n : this.client.getOperatorAccountId(),\n data: registration,\n };\n\n this.entries.set(entry.id, entry);\n this.actionsByHash.set(registration.hash, registration);\n\n this.logger.info('Action registered', {\n hash: registration.hash,\n sequenceNumber,\n hasSourceVerification: !!registration.source_verification,\n });\n\n return sequenceNumber.toString();\n } else {\n const sequenceNumber = this.entries.size + 1;\n const entry: AssemblyRegistryEntry = {\n id: sequenceNumber.toString(),\n sequenceNumber,\n timestamp: new Date().toISOString(),\n submitter: 'local',\n data: registration,\n };\n\n this.entries.set(entry.id, entry);\n this.actionsByHash.set(registration.hash, registration);\n\n return sequenceNumber.toString();\n }\n }\n\n /**\n * Retrieve action by hash\n */\n async getAction(hash: string): Promise<ActionRegistration | null> {\n const cached = this.actionsByHash.get(hash);\n if (cached) return cached;\n\n if (this.topicId && this.client) {\n await this.sync();\n return this.actionsByHash.get(hash) || null;\n }\n\n return null;\n }\n\n /**\n * Retrieve action by topic ID\n */\n async getActionByTopicId(\n topicId: string,\n ): Promise<ActionRegistration | null> {\n this.logger.debug('getActionByTopicId called', { topicId });\n console.log('DEBUG: getActionByTopicId called', {\n topicId,\n cacheSize: this.actionsByHash.size,\n cachedTopicIds: Array.from(this.actionsByHash.values()).map(a => a.t_id),\n });\n\n for (const action of this.actionsByHash.values()) {\n if (action.t_id === topicId) {\n this.logger.debug('Action found in cache', { topicId, action });\n console.log('DEBUG: Action found in cache', { topicId, action });\n return action;\n }\n }\n\n if (this.topicId && this.client) {\n this.logger.debug('Action not in cache, syncing...', { topicId });\n console.log('DEBUG: Action not in cache, syncing...');\n await this.sync();\n\n console.log('DEBUG: After sync', {\n cacheSize: this.actionsByHash.size,\n cachedTopicIds: Array.from(this.actionsByHash.values()).map(\n a => a.t_id,\n ),\n });\n\n for (const action of this.actionsByHash.values()) {\n if (action.t_id === topicId) {\n this.logger.debug('Action found after sync', { topicId, action });\n console.log('DEBUG: Action found after sync', { topicId, action });\n return action;\n }\n }\n }\n\n this.logger.warn('Action not found', { topicId });\n console.log('DEBUG: Action not found', { topicId });\n return null;\n }\n\n /**\n * Retrieve action info by hash\n */\n async getActionInfo(hash: string): Promise<ModuleInfo | null> {\n const action = await this.getAction(hash);\n if (!action) return null;\n\n try {\n let infoString: string;\n\n if (action.info_t_id) {\n if (!this.client) {\n this.logger.error('Client not initialized - cannot fetch INFO');\n return null;\n }\n\n let inscription;\n\n if ('getOperatorAccountId' in this.client) {\n inscription = await retrieveInscription(action.info_t_id, {\n accountId: this.client.getOperatorAccountId(),\n privateKey: this.client.getOperatorPrivateKey(),\n network: this.networkType as 'mainnet' | 'testnet',\n });\n } else {\n const { accountId } = await (\n this.client as HCS12BrowserClient\n ).getAccountAndSigner();\n inscription = await retrieveInscription(action.info_t_id, {\n accountId,\n network: this.networkType as 'mainnet' | 'testnet',\n });\n }\n\n if (!inscription.content) {\n this.logger.error('No content in inscription response');\n return null;\n }\n infoString =\n typeof inscription.content === 'string'\n ? inscription.content\n : Buffer.from(inscription.content).toString('utf8');\n } else {\n this.logger.warn('Inline INFO storage not yet implemented');\n return null;\n }\n\n const moduleInfo = JSON.parse(infoString) as ModuleInfo;\n\n let computedHash: string;\n if (isSSREnvironment()) {\n computedHash = this.createSSRSafeHash(Buffer.from(infoString), 'info');\n } else {\n const hasher = this.cryptoAdapter.createHash('sha256');\n const result = hasher.update(Buffer.from(infoString)).digest('hex');\n const hashValue = result instanceof Promise ? await result : result;\n computedHash =\n typeof hashValue === 'string' ? hashValue : hashValue.toString('hex');\n }\n\n if (computedHash !== action.hash) {\n this.logger.error('INFO hash mismatch', {\n expected: action.hash,\n computed: computedHash,\n });\n throw new Error('Module info verification failed');\n }\n\n return moduleInfo;\n } catch (error) {\n this.logger.error('Failed to fetch action INFO', {\n hash,\n error,\n });\n return null;\n }\n }\n\n /**\n * Retrieve action WASM binary\n */\n async getActionWasm(hash: string): Promise<Uint8Array | null> {\n const action = await this.getAction(hash);\n if (!action) return null;\n\n if (!this.client) {\n this.logger.error('Client not initialized - cannot fetch WASM');\n return null;\n }\n\n try {\n let inscription;\n\n if ('getOperatorAccountId' in this.client) {\n inscription = await retrieveInscription(action.t_id, {\n accountId: this.client.getOperatorAccountId(),\n privateKey: this.client.getOperatorPrivateKey(),\n network: this.networkType as 'mainnet' | 'testnet',\n });\n } else {\n const { accountId } = await (\n this.client as HCS12BrowserClient\n ).getAccountAndSigner();\n inscription = await retrieveInscription(action.t_id, {\n accountId,\n network: this.networkType as 'mainnet' | 'testnet',\n });\n }\n\n if (!inscription.content) {\n this.logger.error('No content in inscription response');\n return null;\n }\n\n const wasmBuffer =\n typeof inscription.content === 'string'\n ? Buffer.from(inscription.content, 'base64')\n : Buffer.from(inscription.content);\n\n let computedHash: string;\n if (isSSREnvironment()) {\n computedHash = this.createSSRSafeHash(wasmBuffer, 'wasm');\n } else {\n const hasher = this.cryptoAdapter.createHash('sha256');\n const result = hasher.update(wasmBuffer).digest('hex');\n const hashValue = result instanceof Promise ? await result : result;\n computedHash =\n typeof hashValue === 'string' ? hashValue : hashValue.toString('hex');\n }\n\n if (computedHash !== action.wasm_hash) {\n this.logger.error('WASM hash mismatch', {\n expected: action.wasm_hash,\n computed: computedHash,\n });\n throw new Error('WASM binary verification failed');\n }\n\n return new Uint8Array(wasmBuffer);\n } catch (error) {\n this.logger.error('Failed to fetch WASM from HCS-1', {\n topicId: action.t_id,\n error,\n });\n return null;\n }\n }\n\n /**\n * Search actions by criteria\n */\n async searchActions(criteria: {\n creator?: string;\n capability?: string;\n afterTimestamp?: string;\n beforeTimestamp?: string;\n hasSourceVerification?: boolean;\n }): Promise<ActionRegistration[]> {\n const entries = await this.listEntries({\n submitter: criteria.creator,\n afterTimestamp: criteria.afterTimestamp,\n beforeTimestamp: criteria.beforeTimestamp,\n });\n\n return entries\n .map(entry => entry.data as ActionRegistration)\n .filter(action => {\n if (criteria.hasSourceVerification !== undefined) {\n const hasVerification = !!action.source_verification;\n if (hasVerification !== criteria.hasSourceVerification) return false;\n }\n\n return true;\n });\n }\n\n /**\n * Get actions by version chain\n */\n async getVersionChain(latestHash: string): Promise<ActionRegistration[]> {\n const chain: ActionRegistration[] = [];\n let currentHash: string | undefined = latestHash;\n\n while (currentHash) {\n const action = await this.getAction(currentHash);\n if (!action) break;\n\n chain.push(action);\n\n currentHash = undefined;\n }\n\n return chain;\n }\n\n /**\n * Validate action registration using Zod schema\n */\n private validateRegistration(registration: ActionRegistration): void {\n try {\n validateActionRegistration(registration);\n } catch (error) {\n if (error instanceof ZodError) {\n const firstError = error.errors[0];\n throw new Error(\n `Validation failed: ${firstError.path.join('.')} - ${firstError.message}`,\n );\n }\n throw error;\n }\n }\n\n /**\n * Override sync to handle action-specific processing\n */\n async sync(): Promise<void> {\n await super.sync();\n\n this.actionsByHash.clear();\n for (const entry of this.entries.values()) {\n const action = entry.data as ActionRegistration;\n this.actionsByHash.set(action.hash, action);\n }\n }\n\n /**\n * Override clear cache to also clear action hash index\n */\n clearCache(): void {\n super.clearCache();\n this.actionsByHash.clear();\n }\n\n /**\n * Create SSR-safe hash\n */\n private createSSRSafeHash(data: Buffer, type: string): string {\n let hash = 0;\n\n for (let i = 0; i < Math.min(data.length, 256); i++) {\n hash = ((hash << 5) - hash + data[i]) & 0xffffffff;\n }\n\n return `ssr-${type}-${data.length}-${Math.abs(hash).toString(16).padStart(8, '0')}`;\n }\n}\n"],"names":["infoString"],"mappings":"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"}
@@ -1,362 +1,134 @@
1
- import { RegistryType } from "./standards-sdk.es30.js";
2
- import { BaseRegistry } from "./standards-sdk.es31.js";
3
- import { retrieveInscription } from "./standards-sdk.es125.js";
4
- import "./standards-sdk.es150.js";
5
- import { getCryptoAdapter } from "./standards-sdk.es120.js";
6
- import { isSSREnvironment } from "./standards-sdk.es118.js";
7
- import { validateActionRegistration } from "./standards-sdk.es43.js";
8
- import { ZodError } from "zod";
9
- class ActionRegistry extends BaseRegistry {
10
- constructor(networkType, logger, topicId, client) {
11
- super(networkType, logger, RegistryType.ACTION, topicId, client);
12
- this.actionsByHash = /* @__PURE__ */ new Map();
13
- this.cryptoAdapter = getCryptoAdapter();
1
+ import { HRLResolver } from "./standards-sdk.es109.js";
2
+ class BlockLoader {
3
+ constructor(networkType, logger, client) {
4
+ this.blockCache = /* @__PURE__ */ new Map();
5
+ this.templateCache = /* @__PURE__ */ new Map();
6
+ this.networkType = networkType;
7
+ this.logger = logger;
8
+ this.client = client;
14
9
  }
15
10
  /**
16
- * Register a WASM module with its binary via HCS-1
11
+ * Load a block definition from HCS-1
17
12
  */
18
- async registerWithWasm(wasmBinary, moduleInfo, sourceVerification) {
19
- let wasmHash;
20
- let infoHash;
21
- if (isSSREnvironment()) {
22
- wasmHash = this.createSSRSafeHash(wasmBinary, "wasm");
23
- const infoString2 = JSON.stringify(moduleInfo);
24
- infoHash = this.createSSRSafeHash(Buffer.from(infoString2), "info");
25
- } else {
26
- const wasmHasher = this.cryptoAdapter.createHash("sha256");
27
- const wasmResult = wasmHasher.update(wasmBinary).digest("hex");
28
- const wasmHashValue = wasmResult instanceof Promise ? await wasmResult : wasmResult;
29
- wasmHash = typeof wasmHashValue === "string" ? wasmHashValue : wasmHashValue.toString("hex");
30
- const infoString2 = JSON.stringify(moduleInfo);
31
- const infoHasher = this.cryptoAdapter.createHash("sha256");
32
- const infoResult = infoHasher.update(Buffer.from(infoString2)).digest("hex");
33
- const infoHashValue = infoResult instanceof Promise ? await infoResult : infoResult;
34
- infoHash = typeof infoHashValue === "string" ? infoHashValue : infoHashValue.toString("hex");
35
- }
36
- const wasmTopicId = await this.inscribeContent(
37
- wasmBinary,
38
- "application/octet-stream",
39
- {
40
- name: moduleInfo.name,
41
- version: moduleInfo.version,
42
- hash: wasmHash,
43
- fileType: "wasm"
44
- }
45
- );
46
- let infoTopicId;
47
- const infoString = JSON.stringify(moduleInfo);
48
- if (Buffer.byteLength(infoString, "utf8") > 1024) {
49
- infoTopicId = await this.inscribeContent(infoString, "application/json", {
50
- name: `${moduleInfo.name}-info`,
51
- version: moduleInfo.version
52
- });
53
- }
54
- const registration = {
55
- p: "hcs-12",
56
- op: "register",
57
- t_id: wasmTopicId,
58
- hash: infoHash,
59
- wasm_hash: wasmHash,
60
- info_t_id: infoTopicId,
61
- source_verification: sourceVerification,
62
- m: `${moduleInfo.name} v${moduleInfo.version}`
63
- };
64
- await this.register(registration);
65
- return registration;
66
- }
67
- /**
68
- * Register a new WASM action
69
- */
70
- async register(registration) {
71
- this.validateRegistration(registration);
72
- if (this.topicId && this.client) {
73
- this.logger.info("Submitting action registration to HCS", {
74
- topicId: this.topicId,
75
- hash: registration.hash,
76
- wasmHash: registration.wasm_hash
77
- });
78
- const result = await this.client.submitMessage(
79
- this.topicId,
80
- JSON.stringify(registration)
81
- );
82
- const sequenceNumber = result.sequenceNumber;
83
- if (!sequenceNumber) {
84
- throw new Error("No sequence number returned from submission");
85
- }
86
- const entry = {
87
- id: sequenceNumber.toString(),
88
- sequenceNumber,
89
- timestamp: (/* @__PURE__ */ new Date()).toISOString(),
90
- submitter: "getHashConnect" in this.client ? (await this.client.getAccountAndSigner()).accountId : this.client.getOperatorAccountId(),
91
- data: registration
92
- };
93
- this.entries.set(entry.id, entry);
94
- this.actionsByHash.set(registration.hash, registration);
95
- this.logger.info("Action registered", {
96
- hash: registration.hash,
97
- sequenceNumber,
98
- hasSourceVerification: !!registration.source_verification
99
- });
100
- return sequenceNumber.toString();
101
- } else {
102
- const sequenceNumber = this.entries.size + 1;
103
- const entry = {
104
- id: sequenceNumber.toString(),
105
- sequenceNumber,
106
- timestamp: (/* @__PURE__ */ new Date()).toISOString(),
107
- submitter: "local",
108
- data: registration
109
- };
110
- this.entries.set(entry.id, entry);
111
- this.actionsByHash.set(registration.hash, registration);
112
- return sequenceNumber.toString();
113
- }
114
- }
115
- /**
116
- * Retrieve action by hash
117
- */
118
- async getAction(hash) {
119
- const cached = this.actionsByHash.get(hash);
13
+ async loadBlockDefinition(blockTopicId) {
14
+ const cached = this.blockCache.get(blockTopicId);
120
15
  if (cached) return cached;
121
- if (this.topicId && this.client) {
122
- await this.sync();
123
- return this.actionsByHash.get(hash) || null;
124
- }
125
- return null;
126
- }
127
- /**
128
- * Retrieve action by topic ID
129
- */
130
- async getActionByTopicId(topicId) {
131
- this.logger.debug("getActionByTopicId called", { topicId });
132
- console.log("DEBUG: getActionByTopicId called", {
133
- topicId,
134
- cacheSize: this.actionsByHash.size,
135
- cachedTopicIds: Array.from(this.actionsByHash.values()).map((a) => a.t_id)
136
- });
137
- for (const action of this.actionsByHash.values()) {
138
- if (action.t_id === topicId) {
139
- this.logger.debug("Action found in cache", { topicId, action });
140
- console.log("DEBUG: Action found in cache", { topicId, action });
141
- return action;
142
- }
143
- }
144
- if (this.topicId && this.client) {
145
- this.logger.debug("Action not in cache, syncing...", { topicId });
146
- console.log("DEBUG: Action not in cache, syncing...");
147
- await this.sync();
148
- console.log("DEBUG: After sync", {
149
- cacheSize: this.actionsByHash.size,
150
- cachedTopicIds: Array.from(this.actionsByHash.values()).map(
151
- (a) => a.t_id
152
- )
153
- });
154
- for (const action of this.actionsByHash.values()) {
155
- if (action.t_id === topicId) {
156
- this.logger.debug("Action found after sync", { topicId, action });
157
- console.log("DEBUG: Action found after sync", { topicId, action });
158
- return action;
159
- }
160
- }
161
- }
162
- this.logger.warn("Action not found", { topicId });
163
- console.log("DEBUG: Action not found", { topicId });
164
- return null;
165
- }
166
- /**
167
- * Retrieve action info by hash
168
- */
169
- async getActionInfo(hash) {
170
- const action = await this.getAction(hash);
171
- if (!action) return null;
172
16
  try {
173
- let infoString;
174
- if (action.info_t_id) {
175
- if (!this.client) {
176
- this.logger.error("Client not initialized - cannot fetch INFO");
177
- return null;
178
- }
179
- let inscription;
180
- if ("getOperatorAccountId" in this.client) {
181
- inscription = await retrieveInscription(action.info_t_id, {
182
- accountId: this.client.getOperatorAccountId(),
183
- privateKey: this.client.getOperatorPrivateKey(),
184
- network: this.networkType
185
- });
186
- } else {
187
- const { accountId } = await this.client.getAccountAndSigner();
188
- inscription = await retrieveInscription(action.info_t_id, {
189
- accountId,
190
- network: this.networkType
191
- });
192
- }
193
- if (!inscription.content) {
194
- this.logger.error("No content in inscription response");
195
- return null;
196
- }
197
- infoString = typeof inscription.content === "string" ? inscription.content : Buffer.from(inscription.content).toString("utf8");
198
- } else {
199
- this.logger.warn("Inline INFO storage not yet implemented");
200
- return null;
17
+ const hrlResolver = new HRLResolver();
18
+ const result = await hrlResolver.resolve(blockTopicId, {
19
+ network: this.networkType
20
+ });
21
+ if (!result.content) {
22
+ throw new Error(`Block definition not found: ${blockTopicId}`);
201
23
  }
202
- const moduleInfo = JSON.parse(infoString);
203
- let computedHash;
204
- if (isSSREnvironment()) {
205
- computedHash = this.createSSRSafeHash(Buffer.from(infoString), "info");
24
+ let blockDefinition;
25
+ if (typeof result.content === "object" && result.content !== null && !(result.content instanceof ArrayBuffer)) {
26
+ blockDefinition = result.content;
206
27
  } else {
207
- const hasher = this.cryptoAdapter.createHash("sha256");
208
- const result = hasher.update(Buffer.from(infoString)).digest("hex");
209
- const hashValue = result instanceof Promise ? await result : result;
210
- computedHash = typeof hashValue === "string" ? hashValue : hashValue.toString("hex");
211
- }
212
- if (computedHash !== action.hash) {
213
- this.logger.error("INFO hash mismatch", {
214
- expected: action.hash,
215
- computed: computedHash
216
- });
217
- throw new Error("Module info verification failed");
28
+ blockDefinition = JSON.parse(
29
+ typeof result.content === "string" ? result.content : result.content.toString()
30
+ );
218
31
  }
219
- return moduleInfo;
32
+ this.blockCache.set(blockTopicId, blockDefinition);
33
+ return blockDefinition;
220
34
  } catch (error) {
221
- this.logger.error("Failed to fetch action INFO", {
222
- hash,
223
- error
35
+ this.logger.error("Failed to load block definition", {
36
+ blockTopicId,
37
+ error: error.message
224
38
  });
225
- return null;
39
+ throw new Error(`Failed to load block definition: ${error.message}`);
226
40
  }
227
41
  }
228
42
  /**
229
- * Retrieve action WASM binary
43
+ * Load a block template from HCS-1
230
44
  */
231
- async getActionWasm(hash) {
232
- const action = await this.getAction(hash);
233
- if (!action) return null;
234
- if (!this.client) {
235
- this.logger.error("Client not initialized - cannot fetch WASM");
236
- return null;
237
- }
45
+ async loadBlockTemplate(templateTopicId) {
46
+ const cached = this.templateCache.get(templateTopicId);
47
+ if (cached) return cached;
238
48
  try {
239
- let inscription;
240
- if ("getOperatorAccountId" in this.client) {
241
- inscription = await retrieveInscription(action.t_id, {
242
- accountId: this.client.getOperatorAccountId(),
243
- privateKey: this.client.getOperatorPrivateKey(),
244
- network: this.networkType
245
- });
246
- } else {
247
- const { accountId } = await this.client.getAccountAndSigner();
248
- inscription = await retrieveInscription(action.t_id, {
249
- accountId,
250
- network: this.networkType
251
- });
252
- }
253
- if (!inscription.content) {
254
- this.logger.error("No content in inscription response");
255
- return null;
49
+ const hrlResolver = new HRLResolver();
50
+ const result = await hrlResolver.resolve(templateTopicId, {
51
+ network: this.networkType
52
+ });
53
+ if (!result.content) {
54
+ throw new Error(`Block template not found: ${templateTopicId}`);
256
55
  }
257
- const wasmBuffer = typeof inscription.content === "string" ? Buffer.from(inscription.content, "base64") : Buffer.from(inscription.content);
258
- let computedHash;
259
- if (isSSREnvironment()) {
260
- computedHash = this.createSSRSafeHash(wasmBuffer, "wasm");
56
+ let template;
57
+ if (typeof result.content === "string") {
58
+ template = result.content;
59
+ } else if (typeof result.content === "object" && result.content !== null) {
60
+ template = result.content.text || JSON.stringify(result.content);
261
61
  } else {
262
- const hasher = this.cryptoAdapter.createHash("sha256");
263
- const result = hasher.update(wasmBuffer).digest("hex");
264
- const hashValue = result instanceof Promise ? await result : result;
265
- computedHash = typeof hashValue === "string" ? hashValue : hashValue.toString("hex");
62
+ template = result.content.toString();
266
63
  }
267
- if (computedHash !== action.wasm_hash) {
268
- this.logger.error("WASM hash mismatch", {
269
- expected: action.wasm_hash,
270
- computed: computedHash
271
- });
272
- throw new Error("WASM binary verification failed");
273
- }
274
- return new Uint8Array(wasmBuffer);
64
+ this.templateCache.set(templateTopicId, template);
65
+ return template;
275
66
  } catch (error) {
276
- this.logger.error("Failed to fetch WASM from HCS-1", {
277
- topicId: action.t_id,
278
- error
67
+ this.logger.error("Failed to load block template", {
68
+ templateTopicId,
69
+ error: error.message
279
70
  });
280
- return null;
71
+ throw new Error(`Failed to load block template: ${error.message}`);
281
72
  }
282
73
  }
283
74
  /**
284
- * Search actions by criteria
75
+ * Load a complete block (definition + template)
285
76
  */
286
- async searchActions(criteria) {
287
- const entries = await this.listEntries({
288
- submitter: criteria.creator,
289
- afterTimestamp: criteria.afterTimestamp,
290
- beforeTimestamp: criteria.beforeTimestamp
291
- });
292
- return entries.map((entry) => entry.data).filter((action) => {
293
- if (criteria.hasSourceVerification !== void 0) {
294
- const hasVerification = !!action.source_verification;
295
- if (hasVerification !== criteria.hasSourceVerification) return false;
296
- }
297
- return true;
298
- });
77
+ async loadBlock(blockTopicId) {
78
+ const definition = await this.loadBlockDefinition(blockTopicId);
79
+ const template = await this.loadBlockTemplate(definition.template_t_id);
80
+ return { definition, template };
299
81
  }
300
82
  /**
301
- * Get actions by version chain
83
+ * Store a block definition and template via HCS-1
302
84
  */
303
- async getVersionChain(latestHash) {
304
- const chain = [];
305
- let currentHash = latestHash;
306
- while (currentHash) {
307
- const action = await this.getAction(currentHash);
308
- if (!action) break;
309
- chain.push(action);
310
- currentHash = void 0;
85
+ async storeBlock(template, definition) {
86
+ if (!this.client || !("inscribeFile" in this.client)) {
87
+ throw new Error("Client does not support inscription");
311
88
  }
312
- return chain;
313
- }
314
- /**
315
- * Validate action registration using Zod schema
316
- */
317
- validateRegistration(registration) {
318
89
  try {
319
- validateActionRegistration(registration);
320
- } catch (error) {
321
- if (error instanceof ZodError) {
322
- const firstError = error.errors[0];
323
- throw new Error(
324
- `Validation failed: ${firstError.path.join(".")} - ${firstError.message}`
325
- );
90
+ const templateBuffer = Buffer.from(template);
91
+ const templateResult = await this.client.inscribeFile(
92
+ templateBuffer,
93
+ `block-${definition.name}-template.html`
94
+ );
95
+ if (!templateResult?.topic_id) {
96
+ throw new Error("Failed to inscribe block template");
326
97
  }
327
- throw error;
328
- }
329
- }
330
- /**
331
- * Override sync to handle action-specific processing
332
- */
333
- async sync() {
334
- await super.sync();
335
- this.actionsByHash.clear();
336
- for (const entry of this.entries.values()) {
337
- const action = entry.data;
338
- this.actionsByHash.set(action.hash, action);
98
+ const fullDefinition = {
99
+ ...definition,
100
+ template_t_id: templateResult.topic_id
101
+ };
102
+ const definitionBuffer = Buffer.from(JSON.stringify(fullDefinition));
103
+ const definitionResult = await this.client.inscribeFile(
104
+ definitionBuffer,
105
+ `block-${definition.name}-definition.json`
106
+ );
107
+ if (!definitionResult?.topic_id) {
108
+ throw new Error("Failed to inscribe block definition");
109
+ }
110
+ this.blockCache.set(definitionResult.topic_id, fullDefinition);
111
+ this.templateCache.set(templateResult.topic_id, template);
112
+ return {
113
+ definitionTopicId: definitionResult.topic_id,
114
+ templateTopicId: templateResult.topic_id
115
+ };
116
+ } catch (error) {
117
+ this.logger.error("Failed to store block", {
118
+ error: error.message
119
+ });
120
+ throw new Error(`Failed to store block: ${error.message}`);
339
121
  }
340
122
  }
341
123
  /**
342
- * Override clear cache to also clear action hash index
124
+ * Clear all caches
343
125
  */
344
126
  clearCache() {
345
- super.clearCache();
346
- this.actionsByHash.clear();
347
- }
348
- /**
349
- * Create SSR-safe hash
350
- */
351
- createSSRSafeHash(data, type) {
352
- let hash = 0;
353
- for (let i = 0; i < Math.min(data.length, 256); i++) {
354
- hash = (hash << 5) - hash + data[i] & 4294967295;
355
- }
356
- return `ssr-${type}-${data.length}-${Math.abs(hash).toString(16).padStart(8, "0")}`;
127
+ this.blockCache.clear();
128
+ this.templateCache.clear();
357
129
  }
358
130
  }
359
131
  export {
360
- ActionRegistry
132
+ BlockLoader
361
133
  };
362
134
  //# sourceMappingURL=standards-sdk.es32.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es32.js","sources":["../../src/hcs-12/registries/action-registry.ts"],"sourcesContent":["/**\n * Action Registry Implementation for HCS-12\n *\n * Manages registration and retrieval of HashLink WASM actions.\n */\n\nimport { ILogger } from '../../utils/logger';\nimport { NetworkType } from '../../utils/types';\nimport {\n RegistryType,\n AssemblyRegistryEntry,\n ActionRegistration,\n ModuleInfo,\n SourceVerification,\n} from '../types';\nimport { BaseRegistry } from './base-registry';\nimport { retrieveInscription } from '../../inscribe';\nimport { getCryptoAdapter } from '../../utils/crypto-abstraction';\nimport { isSSREnvironment } from '../../utils/crypto-env';\nimport type { HCS12Client } from '../sdk';\nimport type { HCS12BrowserClient } from '../browser';\nimport {\n validateActionRegistration,\n safeValidate,\n actionRegistrationSchema,\n} from '../validation/schemas';\nimport { ZodError } from 'zod';\n\n/**\n * Registry for HashLink WASM actions\n */\nexport class ActionRegistry extends BaseRegistry {\n private actionsByHash: Map<string, ActionRegistration> = new Map();\n private cryptoAdapter = getCryptoAdapter();\n\n constructor(\n networkType: NetworkType,\n logger: ILogger,\n topicId?: string,\n client?: HCS12Client | HCS12BrowserClient,\n ) {\n super(networkType, logger, RegistryType.ACTION, topicId, client);\n }\n\n /**\n * Register a WASM module with its binary via HCS-1\n */\n async registerWithWasm(\n wasmBinary: Buffer,\n moduleInfo: ModuleInfo,\n sourceVerification?: SourceVerification,\n ): Promise<ActionRegistration> {\n let wasmHash: string;\n let infoHash: string;\n\n if (isSSREnvironment()) {\n wasmHash = this.createSSRSafeHash(wasmBinary, 'wasm');\n const infoString = JSON.stringify(moduleInfo);\n infoHash = this.createSSRSafeHash(Buffer.from(infoString), 'info');\n } else {\n const wasmHasher = this.cryptoAdapter.createHash('sha256');\n const wasmResult = wasmHasher.update(wasmBinary).digest('hex');\n const wasmHashValue =\n wasmResult instanceof Promise ? await wasmResult : wasmResult;\n wasmHash =\n typeof wasmHashValue === 'string'\n ? wasmHashValue\n : wasmHashValue.toString('hex');\n\n const infoString = JSON.stringify(moduleInfo);\n const infoHasher = this.cryptoAdapter.createHash('sha256');\n const infoResult = infoHasher\n .update(Buffer.from(infoString))\n .digest('hex');\n const infoHashValue =\n infoResult instanceof Promise ? await infoResult : infoResult;\n infoHash =\n typeof infoHashValue === 'string'\n ? infoHashValue\n : infoHashValue.toString('hex');\n }\n\n const wasmTopicId = await this.inscribeContent(\n wasmBinary,\n 'application/octet-stream',\n {\n name: moduleInfo.name,\n version: moduleInfo.version,\n hash: wasmHash,\n fileType: 'wasm',\n },\n );\n\n let infoTopicId: string | undefined;\n const infoString = JSON.stringify(moduleInfo);\n if (Buffer.byteLength(infoString, 'utf8') > 1024) {\n infoTopicId = await this.inscribeContent(infoString, 'application/json', {\n name: `${moduleInfo.name}-info`,\n version: moduleInfo.version,\n });\n }\n\n const registration: ActionRegistration = {\n p: 'hcs-12',\n op: 'register',\n t_id: wasmTopicId,\n hash: infoHash,\n wasm_hash: wasmHash,\n info_t_id: infoTopicId,\n source_verification: sourceVerification,\n m: `${moduleInfo.name} v${moduleInfo.version}`,\n };\n\n const id = await this.register(registration);\n return registration;\n }\n\n /**\n * Register a new WASM action\n */\n async register(registration: ActionRegistration): Promise<string> {\n this.validateRegistration(registration);\n\n if (this.topicId && this.client) {\n this.logger.info('Submitting action registration to HCS', {\n topicId: this.topicId,\n hash: registration.hash,\n wasmHash: registration.wasm_hash,\n });\n\n const result = await this.client.submitMessage(\n this.topicId,\n JSON.stringify(registration),\n );\n\n const sequenceNumber = result.sequenceNumber;\n if (!sequenceNumber) {\n throw new Error('No sequence number returned from submission');\n }\n\n const entry: AssemblyRegistryEntry = {\n id: sequenceNumber.toString(),\n sequenceNumber,\n timestamp: new Date().toISOString(),\n submitter:\n 'getHashConnect' in this.client\n ? (await (this.client as HCS12BrowserClient).getAccountAndSigner())\n .accountId\n : this.client.getOperatorAccountId(),\n data: registration,\n };\n\n this.entries.set(entry.id, entry);\n this.actionsByHash.set(registration.hash, registration);\n\n this.logger.info('Action registered', {\n hash: registration.hash,\n sequenceNumber,\n hasSourceVerification: !!registration.source_verification,\n });\n\n return sequenceNumber.toString();\n } else {\n const sequenceNumber = this.entries.size + 1;\n const entry: AssemblyRegistryEntry = {\n id: sequenceNumber.toString(),\n sequenceNumber,\n timestamp: new Date().toISOString(),\n submitter: 'local',\n data: registration,\n };\n\n this.entries.set(entry.id, entry);\n this.actionsByHash.set(registration.hash, registration);\n\n return sequenceNumber.toString();\n }\n }\n\n /**\n * Retrieve action by hash\n */\n async getAction(hash: string): Promise<ActionRegistration | null> {\n const cached = this.actionsByHash.get(hash);\n if (cached) return cached;\n\n if (this.topicId && this.client) {\n await this.sync();\n return this.actionsByHash.get(hash) || null;\n }\n\n return null;\n }\n\n /**\n * Retrieve action by topic ID\n */\n async getActionByTopicId(\n topicId: string,\n ): Promise<ActionRegistration | null> {\n this.logger.debug('getActionByTopicId called', { topicId });\n console.log('DEBUG: getActionByTopicId called', {\n topicId,\n cacheSize: this.actionsByHash.size,\n cachedTopicIds: Array.from(this.actionsByHash.values()).map(a => a.t_id),\n });\n\n for (const action of this.actionsByHash.values()) {\n if (action.t_id === topicId) {\n this.logger.debug('Action found in cache', { topicId, action });\n console.log('DEBUG: Action found in cache', { topicId, action });\n return action;\n }\n }\n\n if (this.topicId && this.client) {\n this.logger.debug('Action not in cache, syncing...', { topicId });\n console.log('DEBUG: Action not in cache, syncing...');\n await this.sync();\n\n console.log('DEBUG: After sync', {\n cacheSize: this.actionsByHash.size,\n cachedTopicIds: Array.from(this.actionsByHash.values()).map(\n a => a.t_id,\n ),\n });\n\n for (const action of this.actionsByHash.values()) {\n if (action.t_id === topicId) {\n this.logger.debug('Action found after sync', { topicId, action });\n console.log('DEBUG: Action found after sync', { topicId, action });\n return action;\n }\n }\n }\n\n this.logger.warn('Action not found', { topicId });\n console.log('DEBUG: Action not found', { topicId });\n return null;\n }\n\n /**\n * Retrieve action info by hash\n */\n async getActionInfo(hash: string): Promise<ModuleInfo | null> {\n const action = await this.getAction(hash);\n if (!action) return null;\n\n try {\n let infoString: string;\n\n if (action.info_t_id) {\n if (!this.client) {\n this.logger.error('Client not initialized - cannot fetch INFO');\n return null;\n }\n\n let inscription;\n\n if ('getOperatorAccountId' in this.client) {\n inscription = await retrieveInscription(action.info_t_id, {\n accountId: this.client.getOperatorAccountId(),\n privateKey: this.client.getOperatorPrivateKey(),\n network: this.networkType as 'mainnet' | 'testnet',\n });\n } else {\n const { accountId } = await (\n this.client as HCS12BrowserClient\n ).getAccountAndSigner();\n inscription = await retrieveInscription(action.info_t_id, {\n accountId,\n network: this.networkType as 'mainnet' | 'testnet',\n });\n }\n\n if (!inscription.content) {\n this.logger.error('No content in inscription response');\n return null;\n }\n infoString =\n typeof inscription.content === 'string'\n ? inscription.content\n : Buffer.from(inscription.content).toString('utf8');\n } else {\n this.logger.warn('Inline INFO storage not yet implemented');\n return null;\n }\n\n const moduleInfo = JSON.parse(infoString) as ModuleInfo;\n\n let computedHash: string;\n if (isSSREnvironment()) {\n computedHash = this.createSSRSafeHash(Buffer.from(infoString), 'info');\n } else {\n const hasher = this.cryptoAdapter.createHash('sha256');\n const result = hasher.update(Buffer.from(infoString)).digest('hex');\n const hashValue = result instanceof Promise ? await result : result;\n computedHash =\n typeof hashValue === 'string' ? hashValue : hashValue.toString('hex');\n }\n\n if (computedHash !== action.hash) {\n this.logger.error('INFO hash mismatch', {\n expected: action.hash,\n computed: computedHash,\n });\n throw new Error('Module info verification failed');\n }\n\n return moduleInfo;\n } catch (error) {\n this.logger.error('Failed to fetch action INFO', {\n hash,\n error,\n });\n return null;\n }\n }\n\n /**\n * Retrieve action WASM binary\n */\n async getActionWasm(hash: string): Promise<Uint8Array | null> {\n const action = await this.getAction(hash);\n if (!action) return null;\n\n if (!this.client) {\n this.logger.error('Client not initialized - cannot fetch WASM');\n return null;\n }\n\n try {\n let inscription;\n\n if ('getOperatorAccountId' in this.client) {\n inscription = await retrieveInscription(action.t_id, {\n accountId: this.client.getOperatorAccountId(),\n privateKey: this.client.getOperatorPrivateKey(),\n network: this.networkType as 'mainnet' | 'testnet',\n });\n } else {\n const { accountId } = await (\n this.client as HCS12BrowserClient\n ).getAccountAndSigner();\n inscription = await retrieveInscription(action.t_id, {\n accountId,\n network: this.networkType as 'mainnet' | 'testnet',\n });\n }\n\n if (!inscription.content) {\n this.logger.error('No content in inscription response');\n return null;\n }\n\n const wasmBuffer =\n typeof inscription.content === 'string'\n ? Buffer.from(inscription.content, 'base64')\n : Buffer.from(inscription.content);\n\n let computedHash: string;\n if (isSSREnvironment()) {\n computedHash = this.createSSRSafeHash(wasmBuffer, 'wasm');\n } else {\n const hasher = this.cryptoAdapter.createHash('sha256');\n const result = hasher.update(wasmBuffer).digest('hex');\n const hashValue = result instanceof Promise ? await result : result;\n computedHash =\n typeof hashValue === 'string' ? hashValue : hashValue.toString('hex');\n }\n\n if (computedHash !== action.wasm_hash) {\n this.logger.error('WASM hash mismatch', {\n expected: action.wasm_hash,\n computed: computedHash,\n });\n throw new Error('WASM binary verification failed');\n }\n\n return new Uint8Array(wasmBuffer);\n } catch (error) {\n this.logger.error('Failed to fetch WASM from HCS-1', {\n topicId: action.t_id,\n error,\n });\n return null;\n }\n }\n\n /**\n * Search actions by criteria\n */\n async searchActions(criteria: {\n creator?: string;\n capability?: string;\n afterTimestamp?: string;\n beforeTimestamp?: string;\n hasSourceVerification?: boolean;\n }): Promise<ActionRegistration[]> {\n const entries = await this.listEntries({\n submitter: criteria.creator,\n afterTimestamp: criteria.afterTimestamp,\n beforeTimestamp: criteria.beforeTimestamp,\n });\n\n return entries\n .map(entry => entry.data as ActionRegistration)\n .filter(action => {\n if (criteria.hasSourceVerification !== undefined) {\n const hasVerification = !!action.source_verification;\n if (hasVerification !== criteria.hasSourceVerification) return false;\n }\n\n return true;\n });\n }\n\n /**\n * Get actions by version chain\n */\n async getVersionChain(latestHash: string): Promise<ActionRegistration[]> {\n const chain: ActionRegistration[] = [];\n let currentHash: string | undefined = latestHash;\n\n while (currentHash) {\n const action = await this.getAction(currentHash);\n if (!action) break;\n\n chain.push(action);\n\n currentHash = undefined;\n }\n\n return chain;\n }\n\n /**\n * Validate action registration using Zod schema\n */\n private validateRegistration(registration: ActionRegistration): void {\n try {\n validateActionRegistration(registration);\n } catch (error) {\n if (error instanceof ZodError) {\n const firstError = error.errors[0];\n throw new Error(\n `Validation failed: ${firstError.path.join('.')} - ${firstError.message}`,\n );\n }\n throw error;\n }\n }\n\n /**\n * Override sync to handle action-specific processing\n */\n async sync(): Promise<void> {\n await super.sync();\n\n this.actionsByHash.clear();\n for (const entry of this.entries.values()) {\n const action = entry.data as ActionRegistration;\n this.actionsByHash.set(action.hash, action);\n }\n }\n\n /**\n * Override clear cache to also clear action hash index\n */\n clearCache(): void {\n super.clearCache();\n this.actionsByHash.clear();\n }\n\n /**\n * Create SSR-safe hash\n */\n private createSSRSafeHash(data: Buffer, type: string): string {\n let hash = 0;\n\n for (let i = 0; i < Math.min(data.length, 256); i++) {\n hash = ((hash << 5) - hash + data[i]) & 0xffffffff;\n }\n\n return `ssr-${type}-${data.length}-${Math.abs(hash).toString(16).padStart(8, '0')}`;\n }\n}\n"],"names":["infoString"],"mappings":"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"}
1
+ {"version":3,"file":"standards-sdk.es32.js","sources":["../../src/hcs-12/registries/block-loader.ts"],"sourcesContent":["/**\n * Block Loader for HCS-12\n *\n * Loads block definitions and templates from HCS-1 storage.\n * Blocks are not stored in a registry but directly via HCS-1.\n */\n\nimport { ILogger, Logger } from '../../utils/logger';\nimport { NetworkType } from '../../utils/types';\nimport { BlockDefinition } from '../types';\nimport type { HCS12Client } from '../sdk';\nimport type { HCS12BrowserClient } from '../browser';\nimport { HRLResolver } from '../../utils/hrl-resolver';\n\n/**\n * Loader for HCS-1 stored block definitions\n */\nexport class BlockLoader {\n private logger: ILogger;\n private networkType: NetworkType;\n private client?: HCS12Client | HCS12BrowserClient;\n private blockCache: Map<string, BlockDefinition> = new Map();\n private templateCache: Map<string, string> = new Map();\n\n constructor(\n networkType: NetworkType,\n logger: ILogger,\n client?: HCS12Client | HCS12BrowserClient,\n ) {\n this.networkType = networkType;\n this.logger = logger;\n this.client = client;\n }\n\n /**\n * Load a block definition from HCS-1\n */\n async loadBlockDefinition(blockTopicId: string): Promise<BlockDefinition> {\n const cached = this.blockCache.get(blockTopicId);\n if (cached) return cached;\n\n try {\n const hrlResolver = new HRLResolver();\n const result = await hrlResolver.resolve(blockTopicId, {\n network: this.networkType,\n });\n\n if (!result.content) {\n throw new Error(`Block definition not found: ${blockTopicId}`);\n }\n\n let blockDefinition: BlockDefinition;\n\n if (\n typeof result.content === 'object' &&\n result.content !== null &&\n !(result.content instanceof ArrayBuffer)\n ) {\n blockDefinition = result.content as BlockDefinition;\n } else {\n blockDefinition = JSON.parse(\n typeof result.content === 'string'\n ? result.content\n : result.content.toString(),\n ) as BlockDefinition;\n }\n this.blockCache.set(blockTopicId, blockDefinition);\n\n return blockDefinition;\n } catch (error) {\n this.logger.error('Failed to load block definition', {\n blockTopicId,\n error: error.message,\n });\n throw new Error(`Failed to load block definition: ${error.message}`);\n }\n }\n\n /**\n * Load a block template from HCS-1\n */\n async loadBlockTemplate(templateTopicId: string): Promise<string> {\n const cached = this.templateCache.get(templateTopicId);\n if (cached) return cached;\n\n try {\n const hrlResolver = new HRLResolver();\n const result = await hrlResolver.resolve(templateTopicId, {\n network: this.networkType,\n });\n\n if (!result.content) {\n throw new Error(`Block template not found: ${templateTopicId}`);\n }\n\n let template: string;\n\n if (typeof result.content === 'string') {\n template = result.content;\n } else if (\n typeof result.content === 'object' &&\n result.content !== null\n ) {\n template =\n (result.content as any).text || JSON.stringify(result.content);\n } else {\n template = result.content.toString();\n }\n\n this.templateCache.set(templateTopicId, template);\n\n return template;\n } catch (error) {\n this.logger.error('Failed to load block template', {\n templateTopicId,\n error: error.message,\n });\n throw new Error(`Failed to load block template: ${error.message}`);\n }\n }\n\n /**\n * Load a complete block (definition + template)\n */\n async loadBlock(blockTopicId: string): Promise<{\n definition: BlockDefinition;\n template: string;\n }> {\n const definition = await this.loadBlockDefinition(blockTopicId);\n const template = await this.loadBlockTemplate(definition.template_t_id);\n\n return { definition, template };\n }\n\n /**\n * Store a block definition and template via HCS-1\n */\n async storeBlock(\n template: string,\n definition: Omit<BlockDefinition, 'template_t_id'>,\n ): Promise<{\n definitionTopicId: string;\n templateTopicId: string;\n }> {\n if (!this.client || !('inscribeFile' in this.client)) {\n throw new Error('Client does not support inscription');\n }\n\n try {\n const templateBuffer = Buffer.from(template);\n const templateResult = await this.client.inscribeFile(\n templateBuffer,\n `block-${definition.name}-template.html`,\n );\n\n if (!templateResult?.topic_id) {\n throw new Error('Failed to inscribe block template');\n }\n\n const fullDefinition: BlockDefinition = {\n ...definition,\n template_t_id: templateResult.topic_id,\n };\n\n const definitionBuffer = Buffer.from(JSON.stringify(fullDefinition));\n const definitionResult = await this.client.inscribeFile(\n definitionBuffer,\n `block-${definition.name}-definition.json`,\n );\n\n if (!definitionResult?.topic_id) {\n throw new Error('Failed to inscribe block definition');\n }\n\n this.blockCache.set(definitionResult.topic_id, fullDefinition);\n this.templateCache.set(templateResult.topic_id, template);\n\n return {\n definitionTopicId: definitionResult.topic_id,\n templateTopicId: templateResult.topic_id,\n };\n } catch (error) {\n this.logger.error('Failed to store block', {\n error: error.message,\n });\n throw new Error(`Failed to store block: ${error.message}`);\n }\n }\n\n /**\n * Clear all caches\n */\n clearCache(): void {\n this.blockCache.clear();\n this.templateCache.clear();\n }\n}\n"],"names":[],"mappings":"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"}