@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,60 +1,46 @@
1
- import { HieroDidResolver } from "./standards-sdk.es60.js";
2
- import { parseHcs14Did } from "./standards-sdk.es57.js";
3
- import { multibaseB58btcDecode } from "./standards-sdk.es158.js";
4
- class ResolverRegistry {
5
- constructor() {
6
- this.resolvers = [];
7
- }
8
- register(resolver) {
9
- this.resolvers.push(resolver);
1
+ import { optionalImport } from "./standards-sdk.es152.js";
2
+ const hieroResolverModuleId = ["@hiero-did-sdk", "resolver"].join("/");
3
+ let resolverPromise = null;
4
+ async function loadResolveDID() {
5
+ if (!resolverPromise) {
6
+ resolverPromise = optionalImport(
7
+ hieroResolverModuleId
8
+ ).then((mod) => mod?.resolveDID ?? null);
10
9
  }
11
- list() {
12
- return [...this.resolvers];
10
+ return resolverPromise;
11
+ }
12
+ class HieroDidResolver {
13
+ constructor() {
14
+ this.meta = {
15
+ id: "hedera/hiero-resolver",
16
+ didMethods: ["hedera"],
17
+ caip2Networks: [
18
+ "hedera:mainnet",
19
+ "hedera:testnet",
20
+ "hedera:previewnet",
21
+ "hedera:devnet"
22
+ ],
23
+ caip10Namespaces: ["hedera"],
24
+ displayName: "Hedera (Hiero Resolver)",
25
+ description: "Resolves did:hedera identifiers via Hiero DID resolver.",
26
+ homepage: "https://github.com/hiero-ledger/hiero-did-sdk-js"
27
+ };
13
28
  }
14
- filterByDidMethod(method) {
15
- return this.resolvers.filter((r) => r.meta?.didMethods?.includes(method));
29
+ supports(did) {
30
+ return did.startsWith("did:hedera:");
16
31
  }
17
- async resolveDid(did) {
18
- for (const r of this.resolvers) {
19
- if (r.supports(did)) return r.resolve(did);
20
- }
21
- return null;
22
- }
23
- async resolveUaid(uaid) {
24
- const parsed = parseHcs14Did(uaid);
25
- if (parsed.method !== "uaid") return null;
26
- const src = parsed.params["src"];
27
- if (src) {
28
- const raw = Buffer.from(multibaseB58btcDecode(src)).toString("utf8");
29
- return this.resolveDid(raw);
30
- }
31
- const id = parsed.id;
32
- if (id.startsWith("testnet:") || id.startsWith("mainnet:") || id.startsWith("previewnet:") || id.startsWith("devnet:")) {
33
- const did = `did:hedera:${id}`;
34
- return this.resolveDid(did);
35
- }
36
- const proto = parsed.params["proto"];
37
- const nativeId = parsed.params["nativeId"];
38
- if (proto === "hcs-10" && nativeId) {
39
- const match = nativeId.match(
40
- /^hedera:(mainnet|testnet|previewnet|devnet):/
32
+ async resolve(did) {
33
+ const resolveDID = await loadResolveDID();
34
+ if (!resolveDID) {
35
+ throw new Error(
36
+ "Hiero resolver unavailable. Ensure @hiero-did-sdk/resolver is installed."
41
37
  );
42
- if (match) {
43
- const network = match[1];
44
- const did = `did:hedera:${network}:${id}`;
45
- return this.resolveDid(did);
46
- }
47
38
  }
48
- return null;
39
+ const res = await resolveDID(did);
40
+ return res && typeof res.id === "string" ? { id: res.id } : null;
49
41
  }
50
42
  }
51
- const defaultResolverRegistry = new ResolverRegistry();
52
- function registerDefaultResolvers() {
53
- defaultResolverRegistry.register(new HieroDidResolver());
54
- }
55
43
  export {
56
- ResolverRegistry,
57
- defaultResolverRegistry,
58
- registerDefaultResolvers
44
+ HieroDidResolver
59
45
  };
60
46
  //# sourceMappingURL=standards-sdk.es59.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es59.js","sources":["../../src/hcs-14/resolvers/registry.ts"],"sourcesContent":["/**\n * Resolver registry for HCS-14.\n */\n\nimport { DidDocumentMinimal, DidResolver } from './types';\nimport { HieroDidResolver } from './hiero';\nimport { parseHcs14Did } from '../did';\nimport { multibaseB58btcDecode } from '../base58';\n\nexport class ResolverRegistry {\n private resolvers: DidResolver[] = [];\n\n register(resolver: DidResolver): void {\n this.resolvers.push(resolver);\n }\n\n list(): DidResolver[] {\n return [...this.resolvers];\n }\n\n filterByDidMethod(method: string): DidResolver[] {\n return this.resolvers.filter(r => r.meta?.didMethods?.includes(method));\n }\n\n async resolveDid(did: string): Promise<DidDocumentMinimal | null> {\n for (const r of this.resolvers) {\n if (r.supports(did)) return r.resolve(did);\n }\n return null;\n }\n\n async resolveUaid(uaid: string): Promise<DidDocumentMinimal | null> {\n const parsed = parseHcs14Did(uaid);\n if (parsed.method !== 'uaid') return null;\n\n const src = parsed.params['src'];\n if (src) {\n const raw = Buffer.from(multibaseB58btcDecode(src)).toString('utf8');\n return this.resolveDid(raw);\n }\n\n const id = parsed.id;\n if (\n id.startsWith('testnet:') ||\n id.startsWith('mainnet:') ||\n id.startsWith('previewnet:') ||\n id.startsWith('devnet:')\n ) {\n const did = `did:hedera:${id}`;\n return this.resolveDid(did);\n }\n\n const proto = parsed.params['proto'];\n const nativeId = parsed.params['nativeId'];\n if (proto === 'hcs-10' && nativeId) {\n const match = nativeId.match(\n /^hedera:(mainnet|testnet|previewnet|devnet):/,\n );\n if (match) {\n const network = match[1];\n const did = `did:hedera:${network}:${id}`;\n return this.resolveDid(did);\n }\n }\n\n return null;\n }\n}\n\nexport const defaultResolverRegistry = new ResolverRegistry();\n\nexport function registerDefaultResolvers(): void {\n defaultResolverRegistry.register(new HieroDidResolver());\n}\n"],"names":[],"mappings":";;;AASO,MAAM,iBAAiB;AAAA,EAAvB,cAAA;AACL,SAAQ,YAA2B,CAAA;AAAA,EAAC;AAAA,EAEpC,SAAS,UAA6B;AACpC,SAAK,UAAU,KAAK,QAAQ;AAAA,EAC9B;AAAA,EAEA,OAAsB;AACpB,WAAO,CAAC,GAAG,KAAK,SAAS;AAAA,EAC3B;AAAA,EAEA,kBAAkB,QAA+B;AAC/C,WAAO,KAAK,UAAU,OAAO,CAAA,MAAK,EAAE,MAAM,YAAY,SAAS,MAAM,CAAC;AAAA,EACxE;AAAA,EAEA,MAAM,WAAW,KAAiD;AAChE,eAAW,KAAK,KAAK,WAAW;AAC9B,UAAI,EAAE,SAAS,GAAG,EAAG,QAAO,EAAE,QAAQ,GAAG;AAAA,IAC3C;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,YAAY,MAAkD;AAClE,UAAM,SAAS,cAAc,IAAI;AACjC,QAAI,OAAO,WAAW,OAAQ,QAAO;AAErC,UAAM,MAAM,OAAO,OAAO,KAAK;AAC/B,QAAI,KAAK;AACP,YAAM,MAAM,OAAO,KAAK,sBAAsB,GAAG,CAAC,EAAE,SAAS,MAAM;AACnE,aAAO,KAAK,WAAW,GAAG;AAAA,IAC5B;AAEA,UAAM,KAAK,OAAO;AAClB,QACE,GAAG,WAAW,UAAU,KACxB,GAAG,WAAW,UAAU,KACxB,GAAG,WAAW,aAAa,KAC3B,GAAG,WAAW,SAAS,GACvB;AACA,YAAM,MAAM,cAAc,EAAE;AAC5B,aAAO,KAAK,WAAW,GAAG;AAAA,IAC5B;AAEA,UAAM,QAAQ,OAAO,OAAO,OAAO;AACnC,UAAM,WAAW,OAAO,OAAO,UAAU;AACzC,QAAI,UAAU,YAAY,UAAU;AAClC,YAAM,QAAQ,SAAS;AAAA,QACrB;AAAA,MAAA;AAEF,UAAI,OAAO;AACT,cAAM,UAAU,MAAM,CAAC;AACvB,cAAM,MAAM,cAAc,OAAO,IAAI,EAAE;AACvC,eAAO,KAAK,WAAW,GAAG;AAAA,MAC5B;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AACF;AAEO,MAAM,0BAA0B,IAAI,iBAAA;AAEpC,SAAS,2BAAiC;AAC/C,0BAAwB,SAAS,IAAI,kBAAkB;AACzD;"}
1
+ {"version":3,"file":"standards-sdk.es59.js","sources":["../../src/hcs-14/resolvers/hiero.ts"],"sourcesContent":["import { DidDocumentMinimal, DidResolver } from './types';\nimport type { AdapterMeta } from '../adapters/types';\nimport { optionalImport } from '../../utils/dynamic-import';\n\ntype ResolveDID = typeof import('@hiero-did-sdk/resolver').resolveDID;\ntype HieroResolverModule = typeof import('@hiero-did-sdk/resolver');\n\nconst hieroResolverModuleId = ['@hiero-did-sdk', 'resolver'].join('/');\n\nlet resolverPromise: Promise<ResolveDID | null> | null = null;\n\nasync function loadResolveDID(): Promise<ResolveDID | null> {\n if (!resolverPromise) {\n resolverPromise = optionalImport<HieroResolverModule>(\n hieroResolverModuleId,\n ).then(mod => mod?.resolveDID ?? null);\n }\n return resolverPromise;\n}\n\nexport class HieroDidResolver implements DidResolver {\n readonly meta: AdapterMeta = {\n id: 'hedera/hiero-resolver',\n didMethods: ['hedera'],\n caip2Networks: [\n 'hedera:mainnet',\n 'hedera:testnet',\n 'hedera:previewnet',\n 'hedera:devnet',\n ],\n caip10Namespaces: ['hedera'],\n displayName: 'Hedera (Hiero Resolver)',\n description: 'Resolves did:hedera identifiers via Hiero DID resolver.',\n homepage: 'https://github.com/hiero-ledger/hiero-did-sdk-js',\n };\n supports(did: string): boolean {\n return did.startsWith('did:hedera:');\n }\n\n async resolve(did: string): Promise<DidDocumentMinimal | null> {\n const resolveDID = await loadResolveDID();\n if (!resolveDID) {\n throw new Error(\n 'Hiero resolver unavailable. Ensure @hiero-did-sdk/resolver is installed.',\n );\n }\n const res = await resolveDID(did as Parameters<ResolveDID>[0]);\n return res && typeof res.id === 'string' ? { id: res.id } : null;\n }\n}\n"],"names":[],"mappings":";AAOA,MAAM,wBAAwB,CAAC,kBAAkB,UAAU,EAAE,KAAK,GAAG;AAErE,IAAI,kBAAqD;AAEzD,eAAe,iBAA6C;AAC1D,MAAI,CAAC,iBAAiB;AACpB,sBAAkB;AAAA,MAChB;AAAA,IAAA,EACA,KAAK,CAAA,QAAO,KAAK,cAAc,IAAI;AAAA,EACvC;AACA,SAAO;AACT;AAEO,MAAM,iBAAwC;AAAA,EAA9C,cAAA;AACL,SAAS,OAAoB;AAAA,MAC3B,IAAI;AAAA,MACJ,YAAY,CAAC,QAAQ;AAAA,MACrB,eAAe;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,MAEF,kBAAkB,CAAC,QAAQ;AAAA,MAC3B,aAAa;AAAA,MACb,aAAa;AAAA,MACb,UAAU;AAAA,IAAA;AAAA,EACZ;AAAA,EACA,SAAS,KAAsB;AAC7B,WAAO,IAAI,WAAW,aAAa;AAAA,EACrC;AAAA,EAEA,MAAM,QAAQ,KAAiD;AAC7D,UAAM,aAAa,MAAM,eAAA;AACzB,QAAI,CAAC,YAAY;AACf,YAAM,IAAI;AAAA,QACR;AAAA,MAAA;AAAA,IAEJ;AACA,UAAM,MAAM,MAAM,WAAW,GAAgC;AAC7D,WAAO,OAAO,OAAO,IAAI,OAAO,WAAW,EAAE,IAAI,IAAI,GAAA,IAAO;AAAA,EAC9D;AACF;"}
@@ -1,278 +1,157 @@
1
- import { HCS6BaseClient } from "./standards-sdk.es7.js";
2
- import { HCS6RegistryType } from "./standards-sdk.es4.js";
3
- import { inscribeWithSigner } from "./standards-sdk.es125.js";
4
- import { getTopicId } from "./standards-sdk.es115.js";
5
- class HCS6BrowserClient extends HCS6BaseClient {
1
+ import { Logger } from "./standards-sdk.es105.js";
2
+ import { HederaMirrorNode } from "./standards-sdk.es126.js";
3
+ import { HCS6RegistryType, validateHCS6TTL, generateHCS6RegistryMemo, hcs6MessageSchema, HCS6Operation } from "./standards-sdk.es3.js";
4
+ import { ZodError } from "zod";
5
+ class HCS6BaseClient {
6
6
  /**
7
- * Create a new HCS-6 browser client
7
+ * Create a new HCS-6 base client
8
8
  * @param config Client configuration
9
9
  */
10
10
  constructor(config) {
11
- super(config);
12
- this.hwc = config.hwc;
13
- this.signer = config.signer;
14
- }
15
- ensureConnected() {
16
- const info = this.hwc.getAccountInfo();
17
- const accountId = info?.accountId;
18
- if (!accountId) {
19
- throw new Error(
20
- "No active wallet connection: wallet integration required to perform write operations"
21
- );
22
- }
23
- return accountId;
24
- }
25
- getSigner() {
26
- const explicit = this.signer;
27
- if (explicit) {
28
- return explicit;
29
- }
30
- this.ensureConnected();
31
- const dc = this.hwc.dAppConnector;
32
- const signer = dc?.signers?.[0];
33
- if (!signer) {
34
- throw new Error("No active wallet signer");
35
- }
36
- return signer;
11
+ this.network = config.network;
12
+ this.logger = config.logger || Logger.getInstance({
13
+ level: config.logLevel || "info",
14
+ module: "HCS6Client",
15
+ silent: config.silent
16
+ });
17
+ this.mirrorNode = new HederaMirrorNode(
18
+ this.network,
19
+ this.logger,
20
+ config.mirrorNodeUrl ? { customUrl: config.mirrorNodeUrl } : void 0
21
+ );
37
22
  }
38
23
  /**
39
- * Create a new HCS-6 registry topic (for dynamic hashinals)
40
- * Note: In browser environment, this would typically be called through a wallet or proxy service
41
- * @param options Registry creation options
42
- * @returns Promise resolving to the transaction result
24
+ * Determine the registry type from a topic memo (HCS-6 specific)
25
+ * @param memo The topic memo
26
+ * @returns The registry type or undefined if not found
43
27
  */
44
- async createRegistry(options) {
28
+ parseRegistryTypeFromMemo(memo) {
45
29
  try {
46
- this.ensureConnected();
47
- const ttl = options?.ttl ?? 86400;
48
- const memo = this.generateRegistryMemo(ttl);
49
- const topicId = await this.hwc.createTopic(memo);
50
- this.logger.info(
51
- `Created HCS-6 registry topic via wallet: ${topicId} (TTL ${ttl})`
52
- );
53
- return { success: true, topicId };
30
+ const regex = /hcs-6:(\d):(\d+)/;
31
+ const match = memo.match(regex);
32
+ if (match && match.length === 3) {
33
+ const registryType = parseInt(match[1]);
34
+ const ttl = parseInt(match[2]);
35
+ if (registryType === HCS6RegistryType.NON_INDEXED && validateHCS6TTL(ttl)) {
36
+ return { registryType, ttl };
37
+ }
38
+ }
39
+ return void 0;
54
40
  } catch (error) {
55
- this.logger.error(`Failed to create HCS-6 registry: ${error}`);
56
- return { success: false, error: String(error) };
41
+ this.logger.error(
42
+ `Error parsing HCS-6 registry type from memo: ${error}`
43
+ );
44
+ return void 0;
57
45
  }
58
46
  }
59
47
  /**
60
- * Register a new dynamic hashinal update in the registry
61
- * Note: In browser environment, this would typically be called through a wallet or proxy service
62
- * @param registryTopicId The topic ID of the HCS-6 registry
63
- * @param options Registration options
64
- * @returns Promise resolving to the operation result
48
+ * Generate a memo string for a HCS-6 registry topic
49
+ * @param ttl The time-to-live in seconds
50
+ * @returns The memo string
65
51
  */
66
- async registerEntry(registryTopicId, options) {
67
- try {
68
- const valid = await this.validateHCS6Topic(registryTopicId);
69
- if (!valid) {
70
- throw new Error(
71
- `Topic ${registryTopicId} is not a valid HCS-6 registry`
72
- );
73
- }
74
- const message = this.createRegisterMessage(
75
- options.targetTopicId,
76
- options.memo
77
- );
78
- const receipt = await this.submitMessage(registryTopicId, message);
79
- const seqField = receipt.topicSequenceNumber;
80
- const sequenceNumber = typeof seqField === "number" ? seqField : seqField?.low;
81
- return { success: true, receipt, sequenceNumber };
82
- } catch (error) {
83
- this.logger.error(`Failed to register HCS-6 entry: ${error}`);
84
- return { success: false, error: String(error) };
85
- }
52
+ generateRegistryMemo(ttl) {
53
+ return generateHCS6RegistryMemo(ttl);
86
54
  }
87
55
  /**
88
- * Get the latest entry from a HCS-6 registry (non-indexed, so only latest matters)
89
- * @param topicId The topic ID of the registry
90
- * @param options Query options
91
- * @returns Promise resolving to the registry information
56
+ * Validate a HCS-6 message
57
+ * @param message The message to validate
58
+ * @returns Validation result
92
59
  */
93
- async getRegistry(topicId, options = {}) {
60
+ validateMessage(message) {
94
61
  try {
95
- const topicInfo = await this.mirrorNode.getTopicInfo(topicId);
96
- this.logger.debug(
97
- `Retrieved topic info for HCS-6 ${topicId}: ${JSON.stringify(topicInfo)}`
98
- );
99
- const memoInfo = this.parseRegistryTypeFromMemo(topicInfo.memo);
100
- if (!memoInfo) {
101
- throw new Error(
102
- `Topic ${topicId} is not an HCS-6 registry (invalid memo format)`
103
- );
62
+ hcs6MessageSchema.parse(message);
63
+ return { valid: true, errors: [] };
64
+ } catch (error) {
65
+ const errors = [];
66
+ if (error instanceof ZodError) {
67
+ error.errors.forEach((err) => {
68
+ const path = err.path.join(".");
69
+ errors.push(`${path ? path + ": " : ""}${err.message}`);
70
+ });
71
+ } else {
72
+ errors.push(`Unexpected error: ${error}`);
104
73
  }
105
74
  this.logger.debug(
106
- `Retrieving messages for HCS-6 topic ${topicId} with limit ${options.limit ?? 100}`
107
- );
108
- const rawMessagesResult = await this.mirrorNode.getTopicMessages(
109
- topicId,
110
- {
111
- sequenceNumber: options.skip && options.skip > 0 ? `gt:${options.skip}` : void 0,
112
- limit: options.limit ?? 100,
113
- order: options.order ?? "asc"
114
- }
75
+ `HCS-6 message validation failed: ${errors.join(", ")}`
115
76
  );
116
- const rawMessages = options.limit ? rawMessagesResult.slice(0, options.limit) : rawMessagesResult;
117
- this.logger.debug(
118
- `Retrieved ${rawMessagesResult.length} messages, using ${rawMessages.length} after applying limit.`
119
- );
120
- return this.parseRegistryEntries(
121
- topicId,
122
- rawMessages,
123
- memoInfo.registryType,
124
- memoInfo.ttl
125
- );
126
- } catch (error) {
127
- this.logger.error(`Failed to get HCS-6 registry: ${error}`);
128
- throw error;
77
+ return { valid: false, errors };
129
78
  }
130
79
  }
131
80
  /**
132
- * Submit a message to a HCS-6 topic
133
- * Note: In browser environment, this would typically be called through a wallet or proxy service
134
- * @param topicId The topic ID to submit to
135
- * @param payload The message payload
136
- * @returns Promise resolving to the transaction receipt
81
+ * Create a HCS-6 register message
82
+ * @param targetTopicId The target HCS-1 topic ID
83
+ * @param memo Optional memo
84
+ * @returns The register message
137
85
  */
138
- async submitMessage(topicId, payload) {
139
- this.ensureConnected();
140
- const { valid, errors } = this.validateMessage(payload);
141
- if (!valid) {
142
- throw new Error(`Invalid HCS-6 message: ${errors.join(", ")}`);
143
- }
144
- const receipt = await this.hwc.submitMessageToTopic(
145
- topicId,
146
- JSON.stringify(payload)
147
- );
148
- return receipt;
86
+ createRegisterMessage(targetTopicId, memo) {
87
+ return {
88
+ p: "hcs-6",
89
+ op: HCS6Operation.REGISTER,
90
+ t_id: targetTopicId,
91
+ m: memo
92
+ };
149
93
  }
150
94
  /**
151
- * Create a complete dynamic hashinal with inscription and registry
152
- * Note: In browser environment, this would typically be called through a wallet or proxy service
153
- * @param options Options for creating the dynamic hashinal
154
- * @returns Promise resolving to the creation response
95
+ * Parse HCS-6 registry entries from topic messages
96
+ * @param topicId The topic ID
97
+ * @param messages The messages to parse
98
+ * @param registryType The registry type
99
+ * @param ttl The time-to-live in seconds
100
+ * @returns The parsed registry
155
101
  */
156
- async createHashinal(options) {
157
- try {
158
- if (!this.signer) {
159
- return {
160
- success: false,
161
- error: "No signer configured for browser createHashinal"
162
- };
163
- }
164
- const inscriptionOptions = {
165
- ...options.inscriptionOptions,
166
- mode: "hashinal",
167
- metadata: options.metadata,
168
- waitForConfirmation: true,
169
- network: this.network
170
- };
171
- const input = {
172
- type: "buffer",
173
- buffer: Buffer.from(JSON.stringify(options.metadata)),
174
- fileName: "metadata.json",
175
- mimeType: "application/json"
176
- };
177
- const res = await inscribeWithSigner(
178
- input,
179
- this.signer,
180
- inscriptionOptions
181
- );
182
- const inscriptionTopicId = res.inscription?.jsonTopicId || getTopicId(res.inscription);
183
- if (!inscriptionTopicId) {
184
- return { success: false, error: "Failed to inscribe metadata" };
185
- }
186
- let registryTopicId = options.registryTopicId;
187
- if (!registryTopicId) {
188
- const reg = await this.createRegistry({ ttl: options.ttl });
189
- if (!reg.success || !reg.topicId)
190
- return { success: false, error: reg.error };
191
- registryTopicId = reg.topicId;
192
- }
193
- const regRes = await this.registerEntry(registryTopicId, {
194
- targetTopicId: inscriptionTopicId,
195
- memo: options.memo || "Initial dynamic hashinal registration"
196
- });
197
- if (!regRes.success) return { success: false, error: regRes.error };
198
- return {
199
- success: true,
200
- registryTopicId,
201
- inscriptionTopicId
202
- };
203
- } catch (error) {
204
- this.logger.error(`Failed to create dynamic hashinal: ${error}`);
205
- return { success: false, error: String(error) };
206
- }
207
- }
208
- /**
209
- * Register a dynamic hashinal with combined inscription and registry creation
210
- * Note: In browser environment, this would typically be called through a wallet or proxy service
211
- * @param options Options for registering the dynamic hashinal
212
- * @returns Promise resolving to the creation response
213
- */
214
- async register(options) {
215
- try {
216
- if (!this.signer) {
217
- return {
218
- success: false,
219
- error: "No signer configured for browser register"
220
- };
221
- }
222
- let input;
223
- if (options.data?.base64) {
224
- input = {
225
- type: "buffer",
226
- buffer: Buffer.from(options.data.base64, "base64"),
227
- fileName: "data." + (options.data.mimeType?.split("/")[1] || "bin"),
228
- mimeType: options.data.mimeType || "application/octet-stream"
229
- };
230
- } else if (options.data?.url) {
231
- input = { type: "url", url: options.data.url };
232
- } else {
233
- input = {
234
- type: "buffer",
235
- buffer: Buffer.from(JSON.stringify(options.metadata)),
236
- fileName: "metadata.json",
237
- mimeType: "application/json"
102
+ parseRegistryEntries(topicId, messages, registryType, ttl) {
103
+ const entries = [];
104
+ let latestEntry;
105
+ this.logger.debug(
106
+ `Parsing ${messages.length} messages for HCS-6 topic ${topicId}`
107
+ );
108
+ for (const msg of messages) {
109
+ try {
110
+ if (!msg.message) {
111
+ this.logger.debug(
112
+ `Message is missing 'message' property: ${JSON.stringify(msg)}`
113
+ );
114
+ continue;
115
+ }
116
+ const decodedMessage = Buffer.from(msg.message, "base64").toString(
117
+ "utf-8"
118
+ );
119
+ const message = JSON.parse(decodedMessage);
120
+ this.logger.debug(
121
+ `Successfully parsed HCS-6 message: ${JSON.stringify(message)}`
122
+ );
123
+ const { valid, errors } = this.validateMessage(message);
124
+ if (!valid) {
125
+ this.logger.warn(`Invalid HCS-6 message: ${errors.join(", ")}`);
126
+ continue;
127
+ }
128
+ const entry = {
129
+ topicId,
130
+ sequence: msg.sequence_number,
131
+ timestamp: msg.consensus_timestamp,
132
+ payer: msg.payer_account_id,
133
+ message,
134
+ consensus_timestamp: msg.consensus_timestamp,
135
+ registry_type: registryType
238
136
  };
137
+ entries.push(entry);
138
+ if (!latestEntry || entry.timestamp > latestEntry.timestamp) {
139
+ latestEntry = entry;
140
+ }
141
+ } catch (error) {
142
+ this.logger.warn(`Error parsing HCS-6 message: ${error}`);
239
143
  }
240
- const inscriptionOptions = {
241
- ...options.inscriptionOptions,
242
- mode: "hashinal",
243
- metadata: options.metadata,
244
- waitForConfirmation: true,
245
- network: this.network
246
- };
247
- const res = await inscribeWithSigner(
248
- input,
249
- this.signer,
250
- inscriptionOptions
251
- );
252
- const inscriptionTopicId = res.inscription?.jsonTopicId || getTopicId(res.inscription);
253
- if (!inscriptionTopicId)
254
- return { success: false, error: "Failed to inscribe data" };
255
- let registryTopicId = options.registryTopicId;
256
- if (!registryTopicId) {
257
- const reg = await this.createRegistry({ ttl: options.ttl });
258
- if (!reg.success || !reg.topicId)
259
- return { success: false, error: reg.error };
260
- registryTopicId = reg.topicId;
261
- }
262
- const regRes = await this.registerEntry(registryTopicId, {
263
- targetTopicId: inscriptionTopicId,
264
- memo: options.memo || "Dynamic hashinal registration"
265
- });
266
- if (!regRes.success) return { success: false, error: regRes.error };
267
- return {
268
- success: true,
269
- registryTopicId,
270
- inscriptionTopicId
271
- };
272
- } catch (error) {
273
- this.logger.error(`Failed to register dynamic hashinal: ${error}`);
274
- return { success: false, error: String(error) };
275
144
  }
145
+ this.logger.debug(
146
+ `Parsed ${entries.length} valid entries for HCS-6 topic ${topicId}`
147
+ );
148
+ return {
149
+ topicId,
150
+ registryType,
151
+ ttl,
152
+ entries: latestEntry ? [latestEntry] : [],
153
+ latestEntry
154
+ };
276
155
  }
277
156
  /**
278
157
  * Validate that a topic is a valid HCS-6 registry
@@ -303,6 +182,6 @@ class HCS6BrowserClient extends HCS6BaseClient {
303
182
  }
304
183
  }
305
184
  export {
306
- HCS6BrowserClient
185
+ HCS6BaseClient
307
186
  };
308
187
  //# sourceMappingURL=standards-sdk.es6.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es6.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
+ {"version":3,"file":"standards-sdk.es6.js","sources":["../../src/hcs-6/base-client.ts"],"sourcesContent":["import { Logger, ILogger } from '../utils/logger';\nimport { HederaMirrorNode } from '../services/mirror-node';\nimport {\n HCS6ClientConfig,\n HCS6Message,\n HCS6Operation,\n HCS6RegisterMessage,\n HCS6RegistryType,\n HCS6TopicRegistrationResponse,\n HCS6RegistryOperationResponse,\n HCS6TopicRegistry,\n HCS6CreateRegistryOptions,\n HCS6RegisterEntryOptions,\n HCS6QueryRegistryOptions,\n HCS6RegistryEntry,\n HCS6CreateHashinalOptions,\n HCS6CreateHashinalResponse,\n HCS6RegisterOptions,\n hcs6MessageSchema,\n validateHCS6TTL,\n generateHCS6RegistryMemo,\n} from './types';\nimport { TransactionReceipt } from '@hashgraph/sdk';\nimport { NetworkType } from '../utils/types';\nimport { ZodError } from 'zod';\n\n/**\n * Base client for HCS-6 operations\n * This abstract class provides shared functionality for both SDK and browser implementations\n */\nexport abstract class HCS6BaseClient {\n protected logger: ILogger;\n protected mirrorNode: HederaMirrorNode;\n protected network: NetworkType;\n\n /**\n * Create a new HCS-6 base client\n * @param config Client configuration\n */\n constructor(config: HCS6ClientConfig) {\n this.network = config.network;\n\n this.logger =\n config.logger ||\n Logger.getInstance({\n level: config.logLevel || 'info',\n module: 'HCS6Client',\n silent: config.silent,\n });\n\n this.mirrorNode = new HederaMirrorNode(\n this.network,\n this.logger,\n config.mirrorNodeUrl ? { customUrl: config.mirrorNodeUrl } : undefined,\n );\n }\n\n /**\n * Create a new HCS-6 registry topic (for dynamic hashinals)\n * @param options Registry creation options\n * @returns Promise resolving to the transaction result\n */\n abstract createRegistry(\n options: HCS6CreateRegistryOptions,\n ): Promise<HCS6TopicRegistrationResponse>;\n\n /**\n * Register a new dynamic hashinal update in the registry\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 abstract registerEntry(\n registryTopicId: string,\n options: HCS6RegisterEntryOptions,\n ): Promise<HCS6RegistryOperationResponse>;\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 abstract getRegistry(\n topicId: string,\n options?: HCS6QueryRegistryOptions,\n ): Promise<HCS6TopicRegistry>;\n\n /**\n * Submit a message to a HCS-6 topic\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 abstract submitMessage(\n topicId: string,\n payload: HCS6Message,\n ): Promise<TransactionReceipt>;\n\n /**\n * Create a complete dynamic hashinal with inscription and registry\n * @param options Options for creating the dynamic hashinal\n * @returns Promise resolving to the creation response\n */\n abstract createHashinal(\n options: HCS6CreateHashinalOptions,\n ): Promise<HCS6CreateHashinalResponse>;\n\n /**\n * Register a dynamic hashinal with combined inscription and registry creation\n * @param options Options for registering the dynamic hashinal\n * @returns Promise resolving to the creation response\n */\n abstract register(\n options: HCS6RegisterOptions,\n ): Promise<HCS6CreateHashinalResponse>;\n\n /**\n * Determine the registry type from a topic memo (HCS-6 specific)\n * @param memo The topic memo\n * @returns The registry type or undefined if not found\n */\n protected parseRegistryTypeFromMemo(\n memo: string,\n ): { registryType: HCS6RegistryType; ttl: number } | undefined {\n try {\n const regex = /hcs-6:(\\d):(\\d+)/;\n const match = memo.match(regex);\n\n if (match && match.length === 3) {\n const registryType = parseInt(match[1]) as HCS6RegistryType;\n const ttl = parseInt(match[2]);\n\n if (\n registryType === HCS6RegistryType.NON_INDEXED &&\n validateHCS6TTL(ttl)\n ) {\n return { registryType, ttl };\n }\n }\n\n return undefined;\n } catch (error) {\n this.logger.error(\n `Error parsing HCS-6 registry type from memo: ${error}`,\n );\n return undefined;\n }\n }\n\n /**\n * Generate a memo string for a HCS-6 registry topic\n * @param ttl The time-to-live in seconds\n * @returns The memo string\n */\n protected generateRegistryMemo(ttl: number): string {\n return generateHCS6RegistryMemo(ttl);\n }\n\n /**\n * Validate a HCS-6 message\n * @param message The message to validate\n * @returns Validation result\n */\n protected validateMessage(message: unknown): {\n valid: boolean;\n errors: string[];\n } {\n try {\n hcs6MessageSchema.parse(message);\n return { valid: true, errors: [] };\n } catch (error) {\n const errors: string[] = [];\n\n if (error instanceof ZodError) {\n error.errors.forEach(err => {\n const path = err.path.join('.');\n errors.push(`${path ? path + ': ' : ''}${err.message}`);\n });\n } else {\n errors.push(`Unexpected error: ${error}`);\n }\n\n this.logger.debug(\n `HCS-6 message validation failed: ${errors.join(', ')}`,\n );\n return { valid: false, errors };\n }\n }\n\n /**\n * Create a HCS-6 register message\n * @param targetTopicId The target HCS-1 topic ID\n * @param memo Optional memo\n * @returns The register message\n */\n protected createRegisterMessage(\n targetTopicId: string,\n memo?: string,\n ): HCS6RegisterMessage {\n return {\n p: 'hcs-6',\n op: HCS6Operation.REGISTER,\n t_id: targetTopicId,\n m: memo,\n };\n }\n\n /**\n * Parse HCS-6 registry entries from topic messages\n * @param topicId The topic ID\n * @param messages The messages to parse\n * @param registryType The registry type\n * @param ttl The time-to-live in seconds\n * @returns The parsed registry\n */\n protected parseRegistryEntries(\n topicId: string,\n messages: Array<{\n message?: string;\n sequence_number: number;\n consensus_timestamp: string;\n payer_account_id: string;\n }>,\n registryType: HCS6RegistryType,\n ttl: number,\n ): HCS6TopicRegistry {\n const entries: HCS6RegistryEntry[] = [];\n let latestEntry: HCS6RegistryEntry | undefined;\n\n this.logger.debug(\n `Parsing ${messages.length} messages for HCS-6 topic ${topicId}`,\n );\n\n for (const msg of messages) {\n try {\n if (!msg.message) {\n this.logger.debug(\n `Message is missing 'message' property: ${JSON.stringify(msg)}`,\n );\n continue;\n }\n\n const decodedMessage = Buffer.from(msg.message, 'base64').toString(\n 'utf-8',\n );\n const message = JSON.parse(decodedMessage) as HCS6Message;\n\n this.logger.debug(\n `Successfully parsed HCS-6 message: ${JSON.stringify(message)}`,\n );\n\n const { valid, errors } = this.validateMessage(message);\n if (!valid) {\n this.logger.warn(`Invalid HCS-6 message: ${errors.join(', ')}`);\n continue;\n }\n\n const entry: HCS6RegistryEntry = {\n topicId,\n sequence: msg.sequence_number,\n timestamp: msg.consensus_timestamp,\n payer: msg.payer_account_id,\n message,\n consensus_timestamp: msg.consensus_timestamp,\n registry_type: registryType,\n };\n\n entries.push(entry);\n\n if (!latestEntry || entry.timestamp > latestEntry.timestamp) {\n latestEntry = entry;\n }\n } catch (error) {\n this.logger.warn(`Error parsing HCS-6 message: ${error}`);\n }\n }\n\n this.logger.debug(\n `Parsed ${entries.length} valid entries for HCS-6 topic ${topicId}`,\n );\n\n return {\n topicId,\n registryType,\n ttl,\n entries: latestEntry ? [latestEntry] : [],\n latestEntry,\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 protected 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":[],"mappings":"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"}