@hashgraphonline/standards-sdk 0.1.158 → 0.1.160

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 (336) hide show
  1. package/dist/cjs/hcs-12/validation/schemas.d.ts +4 -4
  2. package/dist/cjs/hcs-14/index.d.ts +5 -0
  3. package/dist/cjs/hcs-14/index.d.ts.map +1 -1
  4. package/dist/cjs/hcs-14/resolvers/aid-dns-web-profile.d.ts +37 -0
  5. package/dist/cjs/hcs-14/resolvers/aid-dns-web-profile.d.ts.map +1 -0
  6. package/dist/cjs/hcs-14/resolvers/dns.d.ts +3 -0
  7. package/dist/cjs/hcs-14/resolvers/dns.d.ts.map +1 -0
  8. package/dist/cjs/hcs-14/resolvers/hcs-11-profile.d.ts +8 -0
  9. package/dist/cjs/hcs-14/resolvers/hcs-11-profile.d.ts.map +1 -0
  10. package/dist/cjs/hcs-14/resolvers/profile-utils.d.ts +9 -0
  11. package/dist/cjs/hcs-14/resolvers/profile-utils.d.ts.map +1 -0
  12. package/dist/cjs/hcs-14/resolvers/registry.d.ts +21 -1
  13. package/dist/cjs/hcs-14/resolvers/registry.d.ts.map +1 -1
  14. package/dist/cjs/hcs-14/resolvers/types.d.ts +106 -5
  15. package/dist/cjs/hcs-14/resolvers/types.d.ts.map +1 -1
  16. package/dist/cjs/hcs-14/resolvers/uaid-did-resolution-profile.d.ts +10 -0
  17. package/dist/cjs/hcs-14/resolvers/uaid-did-resolution-profile.d.ts.map +1 -0
  18. package/dist/cjs/hcs-14/resolvers/uaid-dns-web-profile.d.ts +22 -0
  19. package/dist/cjs/hcs-14/resolvers/uaid-dns-web-profile.d.ts.map +1 -0
  20. package/dist/cjs/hcs-14/sdk.d.ts +16 -1
  21. package/dist/cjs/hcs-14/sdk.d.ts.map +1 -1
  22. package/dist/cjs/inscribe/inscriber.d.ts +1 -1
  23. package/dist/cjs/inscribe/inscriber.d.ts.map +1 -1
  24. package/dist/cjs/inscribe/inscription-cost.d.ts +12 -0
  25. package/dist/cjs/inscribe/inscription-cost.d.ts.map +1 -0
  26. package/dist/cjs/inscribe/types.d.ts +5 -1
  27. package/dist/cjs/inscribe/types.d.ts.map +1 -1
  28. package/dist/cjs/services/registry-broker/schemas.d.ts +1548 -0
  29. package/dist/cjs/services/registry-broker/schemas.d.ts.map +1 -1
  30. package/dist/cjs/standards-sdk.cjs +2 -2
  31. package/dist/cjs/standards-sdk.cjs.map +1 -1
  32. package/dist/es/hcs-12/validation/schemas.d.ts +4 -4
  33. package/dist/es/hcs-14/index.d.ts +5 -0
  34. package/dist/es/hcs-14/index.d.ts.map +1 -1
  35. package/dist/es/hcs-14/resolvers/aid-dns-web-profile.d.ts +37 -0
  36. package/dist/es/hcs-14/resolvers/aid-dns-web-profile.d.ts.map +1 -0
  37. package/dist/es/hcs-14/resolvers/dns.d.ts +3 -0
  38. package/dist/es/hcs-14/resolvers/dns.d.ts.map +1 -0
  39. package/dist/es/hcs-14/resolvers/hcs-11-profile.d.ts +8 -0
  40. package/dist/es/hcs-14/resolvers/hcs-11-profile.d.ts.map +1 -0
  41. package/dist/es/hcs-14/resolvers/profile-utils.d.ts +9 -0
  42. package/dist/es/hcs-14/resolvers/profile-utils.d.ts.map +1 -0
  43. package/dist/es/hcs-14/resolvers/registry.d.ts +21 -1
  44. package/dist/es/hcs-14/resolvers/registry.d.ts.map +1 -1
  45. package/dist/es/hcs-14/resolvers/types.d.ts +106 -5
  46. package/dist/es/hcs-14/resolvers/types.d.ts.map +1 -1
  47. package/dist/es/hcs-14/resolvers/uaid-did-resolution-profile.d.ts +10 -0
  48. package/dist/es/hcs-14/resolvers/uaid-did-resolution-profile.d.ts.map +1 -0
  49. package/dist/es/hcs-14/resolvers/uaid-dns-web-profile.d.ts +22 -0
  50. package/dist/es/hcs-14/resolvers/uaid-dns-web-profile.d.ts.map +1 -0
  51. package/dist/es/hcs-14/sdk.d.ts +16 -1
  52. package/dist/es/hcs-14/sdk.d.ts.map +1 -1
  53. package/dist/es/inscribe/inscriber.d.ts +1 -1
  54. package/dist/es/inscribe/inscriber.d.ts.map +1 -1
  55. package/dist/es/inscribe/inscription-cost.d.ts +12 -0
  56. package/dist/es/inscribe/inscription-cost.d.ts.map +1 -0
  57. package/dist/es/inscribe/types.d.ts +5 -1
  58. package/dist/es/inscribe/types.d.ts.map +1 -1
  59. package/dist/es/services/registry-broker/schemas.d.ts +1548 -0
  60. package/dist/es/services/registry-broker/schemas.d.ts.map +1 -1
  61. package/dist/es/standards-sdk.es.js +96 -83
  62. package/dist/es/standards-sdk.es.js.map +1 -1
  63. package/dist/es/standards-sdk.es100.js +41 -224
  64. package/dist/es/standards-sdk.es100.js.map +1 -1
  65. package/dist/es/standards-sdk.es101.js +249 -97
  66. package/dist/es/standards-sdk.es101.js.map +1 -1
  67. package/dist/es/standards-sdk.es102.js +95 -27
  68. package/dist/es/standards-sdk.es102.js.map +1 -1
  69. package/dist/es/standards-sdk.es103.js +97 -80
  70. package/dist/es/standards-sdk.es103.js.map +1 -1
  71. package/dist/es/standards-sdk.es104.js +29 -30
  72. package/dist/es/standards-sdk.es104.js.map +1 -1
  73. package/dist/es/standards-sdk.es105.js +229 -249
  74. package/dist/es/standards-sdk.es105.js.map +1 -1
  75. package/dist/es/standards-sdk.es106.js +103 -468
  76. package/dist/es/standards-sdk.es106.js.map +1 -1
  77. package/dist/es/standards-sdk.es107.js +32 -103
  78. package/dist/es/standards-sdk.es107.js.map +1 -1
  79. package/dist/es/standards-sdk.es108.js +79 -155
  80. package/dist/es/standards-sdk.es108.js.map +1 -1
  81. package/dist/es/standards-sdk.es109.js +28 -31
  82. package/dist/es/standards-sdk.es109.js.map +1 -1
  83. package/dist/es/standards-sdk.es11.js +1 -1
  84. package/dist/es/standards-sdk.es110.js +250 -10
  85. package/dist/es/standards-sdk.es110.js.map +1 -1
  86. package/dist/es/standards-sdk.es111.js +451 -115
  87. package/dist/es/standards-sdk.es111.js.map +1 -1
  88. package/dist/es/standards-sdk.es112.js +101 -25
  89. package/dist/es/standards-sdk.es112.js.map +1 -1
  90. package/dist/es/standards-sdk.es113.js +155 -17
  91. package/dist/es/standards-sdk.es113.js.map +1 -1
  92. package/dist/es/standards-sdk.es114.js +29 -155
  93. package/dist/es/standards-sdk.es114.js.map +1 -1
  94. package/dist/es/standards-sdk.es115.js +9 -200
  95. package/dist/es/standards-sdk.es115.js.map +1 -1
  96. package/dist/es/standards-sdk.es116.js +109 -757
  97. package/dist/es/standards-sdk.es116.js.map +1 -1
  98. package/dist/es/standards-sdk.es117.js +27 -11
  99. package/dist/es/standards-sdk.es117.js.map +1 -1
  100. package/dist/es/standards-sdk.es118.js +19 -564
  101. package/dist/es/standards-sdk.es118.js.map +1 -1
  102. package/dist/es/standards-sdk.es119.js +140 -582
  103. package/dist/es/standards-sdk.es119.js.map +1 -1
  104. package/dist/es/standards-sdk.es12.js +1 -1
  105. package/dist/es/standards-sdk.es120.js +202 -12
  106. package/dist/es/standards-sdk.es120.js.map +1 -1
  107. package/dist/es/standards-sdk.es121.js +790 -2
  108. package/dist/es/standards-sdk.es121.js.map +1 -1
  109. package/dist/es/standards-sdk.es122.js +10 -84
  110. package/dist/es/standards-sdk.es122.js.map +1 -1
  111. package/dist/es/standards-sdk.es123.js +567 -40
  112. package/dist/es/standards-sdk.es123.js.map +1 -1
  113. package/dist/es/standards-sdk.es124.js +602 -2
  114. package/dist/es/standards-sdk.es124.js.map +1 -1
  115. package/dist/es/standards-sdk.es125.js +12 -234
  116. package/dist/es/standards-sdk.es125.js.map +1 -1
  117. package/dist/es/standards-sdk.es126.js +2 -1140
  118. package/dist/es/standards-sdk.es126.js.map +1 -1
  119. package/dist/es/standards-sdk.es127.js +73 -292
  120. package/dist/es/standards-sdk.es127.js.map +1 -1
  121. package/dist/es/standards-sdk.es128.js +36 -418
  122. package/dist/es/standards-sdk.es128.js.map +1 -1
  123. package/dist/es/standards-sdk.es129.js +2 -355
  124. package/dist/es/standards-sdk.es129.js.map +1 -1
  125. package/dist/es/standards-sdk.es13.js +1 -1
  126. package/dist/es/standards-sdk.es130.js +197 -1090
  127. package/dist/es/standards-sdk.es130.js.map +1 -1
  128. package/dist/es/standards-sdk.es131.js +1107 -175
  129. package/dist/es/standards-sdk.es131.js.map +1 -1
  130. package/dist/es/standards-sdk.es132.js +218 -1479
  131. package/dist/es/standards-sdk.es132.js.map +1 -1
  132. package/dist/es/standards-sdk.es133.js +422 -1236
  133. package/dist/es/standards-sdk.es133.js.map +1 -1
  134. package/dist/es/standards-sdk.es134.js +351 -13
  135. package/dist/es/standards-sdk.es134.js.map +1 -1
  136. package/dist/es/standards-sdk.es135.js +1102 -73
  137. package/dist/es/standards-sdk.es135.js.map +1 -1
  138. package/dist/es/standards-sdk.es136.js +203 -76
  139. package/dist/es/standards-sdk.es136.js.map +1 -1
  140. package/dist/es/standards-sdk.es137.js +1459 -785
  141. package/dist/es/standards-sdk.es137.js.map +1 -1
  142. package/dist/es/standards-sdk.es138.js +1254 -59
  143. package/dist/es/standards-sdk.es138.js.map +1 -1
  144. package/dist/es/standards-sdk.es139.js +14 -156
  145. package/dist/es/standards-sdk.es139.js.map +1 -1
  146. package/dist/es/standards-sdk.es14.js +1 -1
  147. package/dist/es/standards-sdk.es140.js +87 -7
  148. package/dist/es/standards-sdk.es140.js.map +1 -1
  149. package/dist/es/standards-sdk.es141.js +74 -79
  150. package/dist/es/standards-sdk.es141.js.map +1 -1
  151. package/dist/es/standards-sdk.es142.js +889 -61
  152. package/dist/es/standards-sdk.es142.js.map +1 -1
  153. package/dist/es/standards-sdk.es143.js +60 -30
  154. package/dist/es/standards-sdk.es143.js.map +1 -1
  155. package/dist/es/standards-sdk.es144.js +159 -34
  156. package/dist/es/standards-sdk.es144.js.map +1 -1
  157. package/dist/es/standards-sdk.es145.js +7 -28
  158. package/dist/es/standards-sdk.es145.js.map +1 -1
  159. package/dist/es/standards-sdk.es146.js +70 -122
  160. package/dist/es/standards-sdk.es146.js.map +1 -1
  161. package/dist/es/standards-sdk.es147.js +58 -35
  162. package/dist/es/standards-sdk.es147.js.map +1 -1
  163. package/dist/es/standards-sdk.es148.js +30 -12320
  164. package/dist/es/standards-sdk.es148.js.map +1 -1
  165. package/dist/es/standards-sdk.es149.js +34 -56
  166. package/dist/es/standards-sdk.es149.js.map +1 -1
  167. package/dist/es/standards-sdk.es15.js +1 -1
  168. package/dist/es/standards-sdk.es150.js +41 -84
  169. package/dist/es/standards-sdk.es150.js.map +1 -1
  170. package/dist/es/standards-sdk.es151.js +134 -13
  171. package/dist/es/standards-sdk.es151.js.map +1 -1
  172. package/dist/es/standards-sdk.es152.js +36 -236
  173. package/dist/es/standards-sdk.es152.js.map +1 -1
  174. package/dist/es/standards-sdk.es153.js +12444 -134
  175. package/dist/es/standards-sdk.es153.js.map +1 -1
  176. package/dist/es/standards-sdk.es154.js +139 -289
  177. package/dist/es/standards-sdk.es154.js.map +1 -1
  178. package/dist/es/standards-sdk.es155.js +274 -298
  179. package/dist/es/standards-sdk.es155.js.map +1 -1
  180. package/dist/es/standards-sdk.es156.js +262 -369
  181. package/dist/es/standards-sdk.es156.js.map +1 -1
  182. package/dist/es/standards-sdk.es157.js +316 -194
  183. package/dist/es/standards-sdk.es157.js.map +1 -1
  184. package/dist/es/standards-sdk.es158.js +319 -64
  185. package/dist/es/standards-sdk.es158.js.map +1 -1
  186. package/dist/es/standards-sdk.es159.js +61 -157
  187. package/dist/es/standards-sdk.es159.js.map +1 -1
  188. package/dist/es/standards-sdk.es16.js +5 -5
  189. package/dist/es/standards-sdk.es160.js +14 -219
  190. package/dist/es/standards-sdk.es160.js.map +1 -1
  191. package/dist/es/standards-sdk.es161.js +226 -223
  192. package/dist/es/standards-sdk.es161.js.map +1 -1
  193. package/dist/es/standards-sdk.es162.js +49 -112
  194. package/dist/es/standards-sdk.es162.js.map +1 -1
  195. package/dist/es/standards-sdk.es163.js +72 -114
  196. package/dist/es/standards-sdk.es163.js.map +1 -1
  197. package/dist/es/standards-sdk.es164.js +67 -147
  198. package/dist/es/standards-sdk.es164.js.map +1 -1
  199. package/dist/es/standards-sdk.es165.js +61 -173
  200. package/dist/es/standards-sdk.es165.js.map +1 -1
  201. package/dist/es/standards-sdk.es166.js +153 -120
  202. package/dist/es/standards-sdk.es166.js.map +1 -1
  203. package/dist/es/standards-sdk.es167.js +178 -287
  204. package/dist/es/standards-sdk.es167.js.map +1 -1
  205. package/dist/es/standards-sdk.es168.js +218 -238
  206. package/dist/es/standards-sdk.es168.js.map +1 -1
  207. package/dist/es/standards-sdk.es169.js +75 -72
  208. package/dist/es/standards-sdk.es169.js.map +1 -1
  209. package/dist/es/standards-sdk.es170.js +129 -0
  210. package/dist/es/standards-sdk.es170.js.map +1 -0
  211. package/dist/es/standards-sdk.es171.js +164 -0
  212. package/dist/es/standards-sdk.es171.js.map +1 -0
  213. package/dist/es/standards-sdk.es172.js +188 -0
  214. package/dist/es/standards-sdk.es172.js.map +1 -0
  215. package/dist/es/standards-sdk.es173.js +142 -0
  216. package/dist/es/standards-sdk.es173.js.map +1 -0
  217. package/dist/es/standards-sdk.es174.js +334 -0
  218. package/dist/es/standards-sdk.es174.js.map +1 -0
  219. package/dist/es/standards-sdk.es175.js +262 -0
  220. package/dist/es/standards-sdk.es175.js.map +1 -0
  221. package/dist/es/standards-sdk.es176.js +119 -0
  222. package/dist/es/standards-sdk.es176.js.map +1 -0
  223. package/dist/es/standards-sdk.es18.js +12 -12
  224. package/dist/es/standards-sdk.es19.js +9 -9
  225. package/dist/es/standards-sdk.es2.js +2 -2
  226. package/dist/es/standards-sdk.es20.js +1 -1
  227. package/dist/es/standards-sdk.es21.js +1 -1
  228. package/dist/es/standards-sdk.es22.js +1 -1
  229. package/dist/es/standards-sdk.es23.js +1 -1
  230. package/dist/es/standards-sdk.es24.js +1 -1
  231. package/dist/es/standards-sdk.es25.js +1 -1
  232. package/dist/es/standards-sdk.es26.js +1 -1
  233. package/dist/es/standards-sdk.es27.js +12 -12
  234. package/dist/es/standards-sdk.es30.js +2 -2
  235. package/dist/es/standards-sdk.es31.js +4 -4
  236. package/dist/es/standards-sdk.es32.js +1 -1
  237. package/dist/es/standards-sdk.es35.js +6 -6
  238. package/dist/es/standards-sdk.es36.js +4 -4
  239. package/dist/es/standards-sdk.es37.js +2 -2
  240. package/dist/es/standards-sdk.es38.js +2 -2
  241. package/dist/es/standards-sdk.es39.js +1 -1
  242. package/dist/es/standards-sdk.es4.js +2 -2
  243. package/dist/es/standards-sdk.es40.js +1 -1
  244. package/dist/es/standards-sdk.es41.js +2 -2
  245. package/dist/es/standards-sdk.es46.js +1 -1
  246. package/dist/es/standards-sdk.es5.js +2 -2
  247. package/dist/es/standards-sdk.es51.js +1 -1
  248. package/dist/es/standards-sdk.es53.js +1 -1
  249. package/dist/es/standards-sdk.es56.js +2 -2
  250. package/dist/es/standards-sdk.es58.js +194 -13
  251. package/dist/es/standards-sdk.es58.js.map +1 -1
  252. package/dist/es/standards-sdk.es59.js +1 -1
  253. package/dist/es/standards-sdk.es6.js +2 -2
  254. package/dist/es/standards-sdk.es60.js +100 -192
  255. package/dist/es/standards-sdk.es60.js.map +1 -1
  256. package/dist/es/standards-sdk.es61.js +172 -24
  257. package/dist/es/standards-sdk.es61.js.map +1 -1
  258. package/dist/es/standards-sdk.es62.js +204 -77
  259. package/dist/es/standards-sdk.es62.js.map +1 -1
  260. package/dist/es/standards-sdk.es63.js +130 -3
  261. package/dist/es/standards-sdk.es63.js.map +1 -1
  262. package/dist/es/standards-sdk.es64.js +41 -95
  263. package/dist/es/standards-sdk.es64.js.map +1 -1
  264. package/dist/es/standards-sdk.es65.js +245 -88
  265. package/dist/es/standards-sdk.es65.js.map +1 -1
  266. package/dist/es/standards-sdk.es66.js +32 -17
  267. package/dist/es/standards-sdk.es66.js.map +1 -1
  268. package/dist/es/standards-sdk.es67.js +96 -77
  269. package/dist/es/standards-sdk.es67.js.map +1 -1
  270. package/dist/es/standards-sdk.es68.js +4 -458
  271. package/dist/es/standards-sdk.es68.js.map +1 -1
  272. package/dist/es/standards-sdk.es69.js +72 -295
  273. package/dist/es/standards-sdk.es69.js.map +1 -1
  274. package/dist/es/standards-sdk.es7.js +1 -1
  275. package/dist/es/standards-sdk.es70.js +86 -194
  276. package/dist/es/standards-sdk.es70.js.map +1 -1
  277. package/dist/es/standards-sdk.es71.js +16 -69
  278. package/dist/es/standards-sdk.es71.js.map +1 -1
  279. package/dist/es/standards-sdk.es72.js +69 -63
  280. package/dist/es/standards-sdk.es72.js.map +1 -1
  281. package/dist/es/standards-sdk.es73.js +458 -143
  282. package/dist/es/standards-sdk.es73.js.map +1 -1
  283. package/dist/es/standards-sdk.es74.js +298 -43
  284. package/dist/es/standards-sdk.es74.js.map +1 -1
  285. package/dist/es/standards-sdk.es75.js +174 -370
  286. package/dist/es/standards-sdk.es75.js.map +1 -1
  287. package/dist/es/standards-sdk.es76.js +71 -495
  288. package/dist/es/standards-sdk.es76.js.map +1 -1
  289. package/dist/es/standards-sdk.es77.js +71 -365
  290. package/dist/es/standards-sdk.es77.js.map +1 -1
  291. package/dist/es/standards-sdk.es78.js +137 -83
  292. package/dist/es/standards-sdk.es78.js.map +1 -1
  293. package/dist/es/standards-sdk.es79.js +69 -125
  294. package/dist/es/standards-sdk.es79.js.map +1 -1
  295. package/dist/es/standards-sdk.es80.js +402 -6
  296. package/dist/es/standards-sdk.es80.js.map +1 -1
  297. package/dist/es/standards-sdk.es81.js +492 -43
  298. package/dist/es/standards-sdk.es81.js.map +1 -1
  299. package/dist/es/standards-sdk.es82.js +350 -86
  300. package/dist/es/standards-sdk.es82.js.map +1 -1
  301. package/dist/es/standards-sdk.es83.js +88 -347
  302. package/dist/es/standards-sdk.es83.js.map +1 -1
  303. package/dist/es/standards-sdk.es84.js +125 -281
  304. package/dist/es/standards-sdk.es84.js.map +1 -1
  305. package/dist/es/standards-sdk.es85.js +6 -59
  306. package/dist/es/standards-sdk.es85.js.map +1 -1
  307. package/dist/es/standards-sdk.es86.js +43 -45
  308. package/dist/es/standards-sdk.es86.js.map +1 -1
  309. package/dist/es/standards-sdk.es87.js +86 -135
  310. package/dist/es/standards-sdk.es87.js.map +1 -1
  311. package/dist/es/standards-sdk.es88.js +333 -52
  312. package/dist/es/standards-sdk.es88.js.map +1 -1
  313. package/dist/es/standards-sdk.es89.js +277 -26
  314. package/dist/es/standards-sdk.es89.js.map +1 -1
  315. package/dist/es/standards-sdk.es9.js +2 -2
  316. package/dist/es/standards-sdk.es90.js +59 -23
  317. package/dist/es/standards-sdk.es90.js.map +1 -1
  318. package/dist/es/standards-sdk.es91.js +26 -217
  319. package/dist/es/standards-sdk.es91.js.map +1 -1
  320. package/dist/es/standards-sdk.es92.js +104 -236
  321. package/dist/es/standards-sdk.es92.js.map +1 -1
  322. package/dist/es/standards-sdk.es93.js +51 -141
  323. package/dist/es/standards-sdk.es93.js.map +1 -1
  324. package/dist/es/standards-sdk.es94.js +22 -137
  325. package/dist/es/standards-sdk.es94.js.map +1 -1
  326. package/dist/es/standards-sdk.es95.js +20 -44
  327. package/dist/es/standards-sdk.es95.js.map +1 -1
  328. package/dist/es/standards-sdk.es96.js +227 -252
  329. package/dist/es/standards-sdk.es96.js.map +1 -1
  330. package/dist/es/standards-sdk.es97.js +248 -68
  331. package/dist/es/standards-sdk.es97.js.map +1 -1
  332. package/dist/es/standards-sdk.es98.js +108 -52
  333. package/dist/es/standards-sdk.es98.js.map +1 -1
  334. package/dist/es/standards-sdk.es99.js +144 -29
  335. package/dist/es/standards-sdk.es99.js.map +1 -1
  336. package/package.json +14 -4
@@ -1,52 +1,50 @@
1
- import { AccountCreateTransaction, Hbar } from "@hashgraph/sdk";
2
- const HCS15_BASE_ACCOUNT_CREATE_TRANSACTION_MEMO = "hcs-15:op:base_create";
3
- const HCS15_PETAL_ACCOUNT_CREATE_TRANSACTION_MEMO = "hcs-15:op:petal_create";
4
- function normalizeTransactionMemo(value, fallback) {
5
- if (typeof value !== "string") return fallback;
6
- const trimmed = value.trim();
7
- if (!trimmed) return fallback;
8
- return trimmed;
9
- }
10
- function buildHcs15BaseAccountCreateTx(params) {
11
- const tx = new AccountCreateTransaction().setECDSAKeyWithAlias(params.publicKey).setInitialBalance(
12
- params.initialBalance instanceof Hbar ? params.initialBalance : new Hbar(params.initialBalance ?? 1)
13
- );
14
- if (typeof params.maxAutomaticTokenAssociations === "number") {
15
- tx.setMaxAutomaticTokenAssociations(params.maxAutomaticTokenAssociations);
16
- }
17
- if (params.accountMemo) {
18
- tx.setAccountMemo(params.accountMemo);
1
+ import { buildTopicCreateTx, buildMessageTx } from "./standards-sdk.es152.js";
2
+ import { HCS21TopicType, HCS21MetadataPointerPattern, HCS21_SAFE_MESSAGE_BYTES, HCS21_MAX_MESSAGE_BYTES } from "./standards-sdk.es84.js";
3
+ import { HCS21ValidationError } from "./standards-sdk.es85.js";
4
+ function buildHcs21RegistryMemo(params) {
5
+ const indexed = params.indexed ?? 0;
6
+ const topicType = params.type ?? HCS21TopicType.ADAPTER_REGISTRY;
7
+ if (params.metaTopicId && !HCS21MetadataPointerPattern.test(params.metaTopicId)) {
8
+ throw new HCS21ValidationError(
9
+ "Meta value must be a short pointer (topic ID, HRL, IPFS, Arweave, OCI, or HTTPS)",
10
+ "invalid_payload"
11
+ );
19
12
  }
20
- tx.setTransactionMemo(
21
- normalizeTransactionMemo(
22
- params.transactionMemo,
23
- HCS15_BASE_ACCOUNT_CREATE_TRANSACTION_MEMO
24
- )
25
- );
26
- return tx;
13
+ const metaSegment = params.metaTopicId ? `:${params.metaTopicId}` : "";
14
+ return `hcs-21:${indexed}:${params.ttl}:${topicType}${metaSegment}`;
27
15
  }
28
- function buildHcs15PetalAccountCreateTx(params) {
29
- const tx = new AccountCreateTransaction().setKeyWithoutAlias(params.publicKey).setInitialBalance(
30
- params.initialBalance instanceof Hbar ? params.initialBalance : new Hbar(params.initialBalance ?? 1)
31
- );
32
- if (typeof params.maxAutomaticTokenAssociations === "number") {
33
- tx.setMaxAutomaticTokenAssociations(params.maxAutomaticTokenAssociations);
34
- }
35
- if (params.accountMemo) {
36
- tx.setAccountMemo(params.accountMemo);
16
+ function buildHcs21CreateRegistryTx(params) {
17
+ const memo = buildHcs21RegistryMemo({
18
+ ttl: params.ttl,
19
+ indexed: params.indexed,
20
+ type: params.type,
21
+ metaTopicId: params.metaTopicId
22
+ });
23
+ return buildTopicCreateTx({
24
+ memo,
25
+ adminKey: params.adminKey,
26
+ submitKey: params.submitKey,
27
+ operatorPublicKey: params.operatorPublicKey
28
+ });
29
+ }
30
+ function buildHcs21MessageTx(params) {
31
+ const json = JSON.stringify(params.declaration);
32
+ const bytes = Buffer.byteLength(json, "utf8");
33
+ if (bytes > HCS21_SAFE_MESSAGE_BYTES) {
34
+ throw new HCS21ValidationError(
35
+ `HCS-21 payload exceeds safe limit of ${HCS21_SAFE_MESSAGE_BYTES} bytes (${bytes}); Hedera cap is ${HCS21_MAX_MESSAGE_BYTES}`,
36
+ "size_exceeded"
37
+ );
37
38
  }
38
- tx.setTransactionMemo(
39
- normalizeTransactionMemo(
40
- params.transactionMemo,
41
- HCS15_PETAL_ACCOUNT_CREATE_TRANSACTION_MEMO
42
- )
43
- );
44
- return tx;
39
+ return buildMessageTx({
40
+ topicId: params.topicId,
41
+ message: JSON.stringify(params.declaration),
42
+ transactionMemo: params.transactionMemo
43
+ });
45
44
  }
46
45
  export {
47
- HCS15_BASE_ACCOUNT_CREATE_TRANSACTION_MEMO,
48
- HCS15_PETAL_ACCOUNT_CREATE_TRANSACTION_MEMO,
49
- buildHcs15BaseAccountCreateTx,
50
- buildHcs15PetalAccountCreateTx
46
+ buildHcs21CreateRegistryTx,
47
+ buildHcs21MessageTx,
48
+ buildHcs21RegistryMemo
51
49
  };
52
50
  //# sourceMappingURL=standards-sdk.es86.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es86.js","sources":["../../src/hcs-15/tx.ts"],"sourcesContent":["import { AccountCreateTransaction, Hbar, PublicKey } from '@hashgraph/sdk';\n\nexport const HCS15_BASE_ACCOUNT_CREATE_TRANSACTION_MEMO =\n 'hcs-15:op:base_create';\nexport const HCS15_PETAL_ACCOUNT_CREATE_TRANSACTION_MEMO =\n 'hcs-15:op:petal_create';\n\nfunction normalizeTransactionMemo(\n value: string | undefined,\n fallback: string,\n): string {\n if (typeof value !== 'string') return fallback;\n const trimmed = value.trim();\n if (!trimmed) return fallback;\n return trimmed;\n}\n\n/**\n * Build AccountCreateTransaction for an HCS-15 base account.\n * Uses an ECDSA public key and sets the EVM alias from it.\n */\nexport function buildHcs15BaseAccountCreateTx(params: {\n publicKey: PublicKey;\n initialBalance?: Hbar | number;\n maxAutomaticTokenAssociations?: number;\n accountMemo?: string;\n transactionMemo?: string;\n}): AccountCreateTransaction {\n const tx = new AccountCreateTransaction()\n .setECDSAKeyWithAlias(params.publicKey)\n .setInitialBalance(\n params.initialBalance instanceof Hbar\n ? params.initialBalance\n : new Hbar(params.initialBalance ?? 1),\n );\n\n if (typeof params.maxAutomaticTokenAssociations === 'number') {\n tx.setMaxAutomaticTokenAssociations(params.maxAutomaticTokenAssociations);\n }\n if (params.accountMemo) {\n tx.setAccountMemo(params.accountMemo);\n }\n tx.setTransactionMemo(\n normalizeTransactionMemo(\n params.transactionMemo,\n HCS15_BASE_ACCOUNT_CREATE_TRANSACTION_MEMO,\n ),\n );\n return tx;\n}\n\n/**\n * Build AccountCreateTransaction for an HCS-15 Petal account.\n * Reuses the same public key as the base account, without alias.\n */\nexport function buildHcs15PetalAccountCreateTx(params: {\n publicKey: PublicKey;\n initialBalance?: Hbar | number;\n maxAutomaticTokenAssociations?: number;\n accountMemo?: string;\n transactionMemo?: string;\n}): AccountCreateTransaction {\n const tx = new AccountCreateTransaction()\n .setKeyWithoutAlias(params.publicKey)\n .setInitialBalance(\n params.initialBalance instanceof Hbar\n ? params.initialBalance\n : new Hbar(params.initialBalance ?? 1),\n );\n\n if (typeof params.maxAutomaticTokenAssociations === 'number') {\n tx.setMaxAutomaticTokenAssociations(params.maxAutomaticTokenAssociations);\n }\n if (params.accountMemo) {\n tx.setAccountMemo(params.accountMemo);\n }\n tx.setTransactionMemo(\n normalizeTransactionMemo(\n params.transactionMemo,\n HCS15_PETAL_ACCOUNT_CREATE_TRANSACTION_MEMO,\n ),\n );\n return tx;\n}\n"],"names":[],"mappings":";AAEO,MAAM,6CACX;AACK,MAAM,8CACX;AAEF,SAAS,yBACP,OACA,UACQ;AACR,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,QAAM,UAAU,MAAM,KAAA;AACtB,MAAI,CAAC,QAAS,QAAO;AACrB,SAAO;AACT;AAMO,SAAS,8BAA8B,QAMjB;AAC3B,QAAM,KAAK,IAAI,yBAAA,EACZ,qBAAqB,OAAO,SAAS,EACrC;AAAA,IACC,OAAO,0BAA0B,OAC7B,OAAO,iBACP,IAAI,KAAK,OAAO,kBAAkB,CAAC;AAAA,EAAA;AAG3C,MAAI,OAAO,OAAO,kCAAkC,UAAU;AAC5D,OAAG,iCAAiC,OAAO,6BAA6B;AAAA,EAC1E;AACA,MAAI,OAAO,aAAa;AACtB,OAAG,eAAe,OAAO,WAAW;AAAA,EACtC;AACA,KAAG;AAAA,IACD;AAAA,MACE,OAAO;AAAA,MACP;AAAA,IAAA;AAAA,EACF;AAEF,SAAO;AACT;AAMO,SAAS,+BAA+B,QAMlB;AAC3B,QAAM,KAAK,IAAI,yBAAA,EACZ,mBAAmB,OAAO,SAAS,EACnC;AAAA,IACC,OAAO,0BAA0B,OAC7B,OAAO,iBACP,IAAI,KAAK,OAAO,kBAAkB,CAAC;AAAA,EAAA;AAG3C,MAAI,OAAO,OAAO,kCAAkC,UAAU;AAC5D,OAAG,iCAAiC,OAAO,6BAA6B;AAAA,EAC1E;AACA,MAAI,OAAO,aAAa;AACtB,OAAG,eAAe,OAAO,WAAW;AAAA,EACtC;AACA,KAAG;AAAA,IACD;AAAA,MACE,OAAO;AAAA,MACP;AAAA,IAAA;AAAA,EACF;AAEF,SAAO;AACT;"}
1
+ {"version":3,"file":"standards-sdk.es86.js","sources":["../../src/hcs-21/tx.ts"],"sourcesContent":["import {\n PublicKey,\n TopicCreateTransaction,\n TopicMessageSubmitTransaction,\n} from '@hashgraph/sdk';\nimport {\n buildTopicCreateTx,\n buildMessageTx,\n MaybeKey,\n} from '../common/tx/tx-utils';\nimport {\n HCS21TopicType,\n AdapterDeclaration,\n HCS21MetadataPointerPattern,\n HCS21_SAFE_MESSAGE_BYTES,\n HCS21_MAX_MESSAGE_BYTES,\n} from './types';\nimport { HCS21ValidationError } from './errors';\n\nexport function buildHcs21RegistryMemo(params: {\n ttl: number;\n indexed?: 0 | 1;\n type?: HCS21TopicType;\n metaTopicId?: string;\n}): string {\n const indexed = params.indexed ?? 0;\n const topicType = params.type ?? HCS21TopicType.ADAPTER_REGISTRY;\n\n if (\n params.metaTopicId &&\n !HCS21MetadataPointerPattern.test(params.metaTopicId)\n ) {\n throw new HCS21ValidationError(\n 'Meta value must be a short pointer (topic ID, HRL, IPFS, Arweave, OCI, or HTTPS)',\n 'invalid_payload',\n );\n }\n\n const metaSegment = params.metaTopicId ? `:${params.metaTopicId}` : '';\n return `hcs-21:${indexed}:${params.ttl}:${topicType}${metaSegment}`;\n}\n\nexport function buildHcs21CreateRegistryTx(params: {\n ttl: number;\n indexed?: 0 | 1;\n type?: HCS21TopicType;\n metaTopicId?: string;\n adminKey?: MaybeKey;\n submitKey?: MaybeKey;\n operatorPublicKey?: PublicKey;\n}): TopicCreateTransaction {\n const memo = buildHcs21RegistryMemo({\n ttl: params.ttl,\n indexed: params.indexed,\n type: params.type,\n metaTopicId: params.metaTopicId,\n });\n return buildTopicCreateTx({\n memo,\n adminKey: params.adminKey,\n submitKey: params.submitKey,\n operatorPublicKey: params.operatorPublicKey,\n });\n}\n\nexport function buildHcs21MessageTx(params: {\n topicId: string;\n declaration: AdapterDeclaration;\n transactionMemo?: string;\n}): TopicMessageSubmitTransaction {\n const json = JSON.stringify(params.declaration);\n const bytes = Buffer.byteLength(json, 'utf8');\n if (bytes > HCS21_SAFE_MESSAGE_BYTES) {\n throw new HCS21ValidationError(\n `HCS-21 payload exceeds safe limit of ${HCS21_SAFE_MESSAGE_BYTES} bytes (${bytes}); Hedera cap is ${HCS21_MAX_MESSAGE_BYTES}`,\n 'size_exceeded',\n );\n }\n return buildMessageTx({\n topicId: params.topicId,\n message: JSON.stringify(params.declaration),\n transactionMemo: params.transactionMemo,\n });\n}\n"],"names":[],"mappings":";;;AAmBO,SAAS,uBAAuB,QAK5B;AACT,QAAM,UAAU,OAAO,WAAW;AAClC,QAAM,YAAY,OAAO,QAAQ,eAAe;AAEhD,MACE,OAAO,eACP,CAAC,4BAA4B,KAAK,OAAO,WAAW,GACpD;AACA,UAAM,IAAI;AAAA,MACR;AAAA,MACA;AAAA,IAAA;AAAA,EAEJ;AAEA,QAAM,cAAc,OAAO,cAAc,IAAI,OAAO,WAAW,KAAK;AACpE,SAAO,UAAU,OAAO,IAAI,OAAO,GAAG,IAAI,SAAS,GAAG,WAAW;AACnE;AAEO,SAAS,2BAA2B,QAQhB;AACzB,QAAM,OAAO,uBAAuB;AAAA,IAClC,KAAK,OAAO;AAAA,IACZ,SAAS,OAAO;AAAA,IAChB,MAAM,OAAO;AAAA,IACb,aAAa,OAAO;AAAA,EAAA,CACrB;AACD,SAAO,mBAAmB;AAAA,IACxB;AAAA,IACA,UAAU,OAAO;AAAA,IACjB,WAAW,OAAO;AAAA,IAClB,mBAAmB,OAAO;AAAA,EAAA,CAC3B;AACH;AAEO,SAAS,oBAAoB,QAIF;AAChC,QAAM,OAAO,KAAK,UAAU,OAAO,WAAW;AAC9C,QAAM,QAAQ,OAAO,WAAW,MAAM,MAAM;AAC5C,MAAI,QAAQ,0BAA0B;AACpC,UAAM,IAAI;AAAA,MACR,wCAAwC,wBAAwB,WAAW,KAAK,oBAAoB,uBAAuB;AAAA,MAC3H;AAAA,IAAA;AAAA,EAEJ;AACA,SAAO,eAAe;AAAA,IACpB,SAAS,OAAO;AAAA,IAChB,SAAS,KAAK,UAAU,OAAO,WAAW;AAAA,IAC1C,iBAAiB,OAAO;AAAA,EAAA,CACzB;AACH;"}
@@ -1,153 +1,104 @@
1
- import { AccountId, Client, PrivateKey, Hbar } from "@hashgraph/sdk";
2
- import { createNodeOperatorContext } from "./standards-sdk.es146.js";
3
- import { buildHcs15BaseAccountCreateTx, buildHcs15PetalAccountCreateTx } from "./standards-sdk.es86.js";
4
- import { HCS15BaseClient } from "./standards-sdk.es89.js";
5
- class HCS15Client extends HCS15BaseClient {
6
- constructor(config) {
7
- super(config);
8
- this.operatorId = AccountId.fromString(config.operatorId);
9
- this.operatorCtx = createNodeOperatorContext({
10
- network: this.network,
11
- operatorId: this.operatorId,
12
- operatorKey: config.operatorKey,
13
- keyType: config.keyType,
14
- mirrorNode: this.mirrorNode,
15
- logger: this.logger,
16
- client: this.network === "mainnet" ? Client.forMainnet() : Client.forTestnet()
1
+ import { HederaMirrorNode } from "./standards-sdk.es137.js";
2
+ import { Logger } from "./standards-sdk.es116.js";
3
+ import { HCS21ValidationError } from "./standards-sdk.es85.js";
4
+ import { HCS21_PROTOCOL, adapterDeclarationSchema, HCS21_SAFE_MESSAGE_BYTES, HCS21_MAX_MESSAGE_BYTES } from "./standards-sdk.es84.js";
5
+ class HCS21BaseClient {
6
+ constructor(params) {
7
+ this.network = params.network;
8
+ this.logger = params.logger || new Logger({ level: "info", module: "HCS-21" });
9
+ this.mirrorNode = new HederaMirrorNode(this.network, this.logger, {
10
+ customUrl: params.mirrorNodeUrl
17
11
  });
18
- this.client = this.operatorCtx.client;
19
12
  }
20
- getKeyType() {
21
- return this.operatorCtx.keyType;
22
- }
23
- async close() {
24
- try {
25
- this.client.close();
26
- } catch {
27
- }
28
- }
29
- async ensureOperatorReady() {
30
- await this.operatorCtx.ensureInitialized();
31
- }
32
- /**
33
- * Create a new base account with a newly generated ECDSA key and EVM alias.
34
- */
35
- async createBaseAccount(options) {
36
- await this.ensureOperatorReady();
37
- const priv = PrivateKey.generateECDSA();
38
- const pub = priv.publicKey;
39
- const tx = buildHcs15BaseAccountCreateTx({
40
- publicKey: pub,
41
- initialBalance: new Hbar(options?.initialBalance ?? 10),
42
- maxAutomaticTokenAssociations: options?.maxAutomaticTokenAssociations,
43
- accountMemo: options?.accountMemo,
44
- transactionMemo: options?.transactionMemo
45
- });
46
- const resp = await tx.execute(this.client);
47
- const receipt = await resp.getReceipt(this.client);
48
- if (!receipt.accountId) {
49
- throw new Error("HCS-15 BASE_ACCOUNT_CREATE_FAILED");
50
- }
51
- const accountId = receipt.accountId.toString();
52
- const evmAddress = `0x${pub.toEvmAddress()}`;
53
- this.logger.info("Created HCS-15 base account", { accountId, evmAddress });
54
- return {
55
- accountId,
56
- privateKey: priv,
57
- privateKeyHex: priv.toStringRaw(),
58
- publicKey: pub,
59
- evmAddress,
60
- receipt
13
+ buildDeclaration(params) {
14
+ const declaration = {
15
+ p: HCS21_PROTOCOL,
16
+ op: params.op,
17
+ adapter_id: params.adapterId,
18
+ entity: params.entity,
19
+ package: params.adapterPackage,
20
+ manifest: params.manifest,
21
+ ...params.manifestSequence ? { manifest_sequence: params.manifestSequence } : {},
22
+ config: params.config,
23
+ state_model: params.stateModel,
24
+ signature: params.signature
61
25
  };
26
+ return this.validateDeclaration(declaration);
62
27
  }
63
- /**
64
- * Create a Petal account that reuses the base account ECDSA key (no alias).
65
- */
66
- async createPetalAccount(params) {
67
- await this.ensureOperatorReady();
68
- const baseKey = typeof params.basePrivateKey === "string" ? PrivateKey.fromStringECDSA(params.basePrivateKey) : params.basePrivateKey;
69
- const pub = baseKey.publicKey;
70
- const tx = buildHcs15PetalAccountCreateTx({
71
- publicKey: pub,
72
- initialBalance: new Hbar(params.initialBalance ?? 1),
73
- maxAutomaticTokenAssociations: params.maxAutomaticTokenAssociations,
74
- accountMemo: params.accountMemo,
75
- transactionMemo: params.transactionMemo
76
- });
77
- const resp = await tx.execute(this.client);
78
- const receipt = await resp.getReceipt(this.client);
79
- if (!receipt.accountId) {
80
- throw new Error("HCS-15 PETAL_ACCOUNT_CREATE_FAILED");
81
- }
82
- const accountId = receipt.accountId.toString();
83
- this.logger.info("Created HCS-15 petal account", { accountId });
84
- let profile;
85
- if (params.profile) {
86
- profile = await this.createPetalProfile({
87
- accountId,
88
- basePrivateKey: baseKey,
89
- profile: params.profile
90
- });
28
+ validateDeclaration(input) {
29
+ try {
30
+ const payload = typeof input === "string" ? JSON.parse(input) : input;
31
+ const parsed = adapterDeclarationSchema.parse(
32
+ payload
33
+ );
34
+ this.assertSizeLimit(parsed);
35
+ return parsed;
36
+ } catch (error) {
37
+ const message = error instanceof Error ? error.message : "Invalid adapter declaration";
38
+ throw new HCS21ValidationError(message, "invalid_payload");
91
39
  }
92
- return { accountId, receipt, profile };
93
40
  }
94
- async createPetalProfile(params) {
95
- const { HCS10Client } = await import("./standards-sdk.es143.js");
96
- const { PersonBuilder } = await import("./standards-sdk.es144.js");
97
- const hcs10 = new HCS10Client({
98
- network: this.network,
99
- operatorId: params.accountId,
100
- operatorPrivateKey: params.basePrivateKey.toString(),
101
- logLevel: this.logger.getLevel()
41
+ async fetchDeclarations(topicId, options) {
42
+ const rawMessages = await this.mirrorNode.getTopicMessages(topicId, {
43
+ limit: options?.limit,
44
+ order: options?.order
102
45
  });
103
- try {
104
- const builder = new PersonBuilder().setName(params.profile.displayName).setBaseAccount(params.profile.baseAccountId);
105
- if (params.profile.alias) {
106
- builder.setAlias(params.profile.alias);
107
- }
108
- if (params.profile.bio) {
109
- builder.setBio(params.profile.bio);
46
+ const envelopes = [];
47
+ for (const message of rawMessages) {
48
+ if (message.p !== HCS21_PROTOCOL) {
49
+ continue;
110
50
  }
111
- if (params.profile.profileImage) {
112
- builder.setProfileImage(params.profile.profileImage);
51
+ try {
52
+ const declaration = this.validateDeclaration(message);
53
+ envelopes.push({
54
+ declaration,
55
+ consensusTimestamp: message.consensus_timestamp,
56
+ sequenceNumber: message.sequence_number,
57
+ payer: message.payer
58
+ });
59
+ } catch (error) {
60
+ const detail = error instanceof Error ? error.message : "unknown error";
61
+ this.logger.warn(`Skipping invalid HCS-21 message: ${detail}`);
113
62
  }
114
- if (params.profile.socials) {
115
- for (const social of params.profile.socials) {
116
- builder.addSocial(social.platform, social.handle);
117
- }
63
+ }
64
+ return envelopes;
65
+ }
66
+ async fetchCategoryEntries(topicId) {
67
+ const rawMessages = await this.mirrorNode.getTopicMessages(topicId);
68
+ const entries = [];
69
+ for (const message of rawMessages) {
70
+ if (message.p !== "hcs-2" || message.op !== "register") {
71
+ continue;
118
72
  }
119
- if (params.profile.properties) {
120
- for (const [key, value] of Object.entries(params.profile.properties)) {
121
- builder.addProperty(key, value);
122
- }
73
+ if (!message.t_id || typeof message.t_id !== "string") {
74
+ continue;
123
75
  }
124
- const result = await hcs10.create(builder, {
125
- ttl: params.profile.ttl ?? 300,
126
- updateAccountMemo: true
76
+ const memo = typeof message.m === "string" ? message.m : void 0;
77
+ const adapterId = memo?.startsWith("adapter:") ? memo.slice("adapter:".length) : memo;
78
+ entries.push({
79
+ adapterId: adapterId ?? message.t_id,
80
+ adapterTopicId: message.t_id,
81
+ metadata: message.metadata,
82
+ memo,
83
+ payer: message.payer,
84
+ sequenceNumber: Number(message.sequence_number ?? 0),
85
+ consensusTimestamp: message.consensus_timestamp
127
86
  });
128
- if ("success" in result && result.success === false) {
129
- throw new Error(result.error ?? "Failed to create petal profile");
130
- }
131
- const inboundTopicId = "inboundTopicId" in result ? result.inboundTopicId : "";
132
- const outboundTopicId = "outboundTopicId" in result ? result.outboundTopicId : "";
133
- const profileTopicId = "profileTopicId" in result ? result.profileTopicId : "";
134
- if (!profileTopicId) {
135
- throw new Error("Failed to resolve petal profile topic ID");
136
- }
137
- return {
138
- profileTopicId,
139
- inboundTopicId,
140
- outboundTopicId
141
- };
142
- } finally {
143
- try {
144
- hcs10.getClient().close();
145
- } catch {
146
- }
87
+ }
88
+ return entries;
89
+ }
90
+ assertSizeLimit(payload) {
91
+ const json = JSON.stringify(payload);
92
+ const bytes = Buffer.byteLength(json, "utf8");
93
+ if (bytes > HCS21_SAFE_MESSAGE_BYTES) {
94
+ throw new HCS21ValidationError(
95
+ `HCS-21 payload exceeds safe limit of ${HCS21_SAFE_MESSAGE_BYTES} bytes (${bytes}); Hedera cap is ${HCS21_MAX_MESSAGE_BYTES}`,
96
+ "size_exceeded"
97
+ );
147
98
  }
148
99
  }
149
100
  }
150
101
  export {
151
- HCS15Client
102
+ HCS21BaseClient
152
103
  };
153
104
  //# sourceMappingURL=standards-sdk.es87.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es87.js","sources":["../../src/hcs-15/sdk.ts"],"sourcesContent":["import {\n AccountId,\n Client,\n Hbar,\n PrivateKey,\n PublicKey,\n TransactionReceipt,\n} from '@hashgraph/sdk';\nimport { NetworkType } from '../utils/types';\nimport {\n createNodeOperatorContext,\n type NodeOperatorContext,\n} from '../common/node-operator-resolver';\nimport {\n buildHcs15BaseAccountCreateTx,\n buildHcs15PetalAccountCreateTx,\n} from './tx';\nimport type {\n PetalProfileOptions,\n PetalProfileResult,\n SDKHCS15ClientConfig,\n} from './types';\nimport { HCS15BaseClient } from './base-client';\n\nexport class HCS15Client extends HCS15BaseClient {\n private readonly operatorCtx: NodeOperatorContext;\n private readonly client: Client;\n private readonly operatorId: AccountId;\n\n constructor(config: SDKHCS15ClientConfig) {\n super(config);\n this.operatorId = AccountId.fromString(config.operatorId);\n this.operatorCtx = createNodeOperatorContext({\n network: this.network,\n operatorId: this.operatorId,\n operatorKey: config.operatorKey,\n keyType: config.keyType,\n mirrorNode: this.mirrorNode,\n logger: this.logger,\n client:\n this.network === 'mainnet' ? Client.forMainnet() : Client.forTestnet(),\n });\n this.client = this.operatorCtx.client;\n }\n\n public getKeyType(): 'ed25519' | 'ecdsa' {\n return this.operatorCtx.keyType;\n }\n\n public async close(): Promise<void> {\n try {\n this.client.close();\n } catch {}\n }\n\n private async ensureOperatorReady(): Promise<void> {\n await this.operatorCtx.ensureInitialized();\n }\n\n /**\n * Create a new base account with a newly generated ECDSA key and EVM alias.\n */\n async createBaseAccount(options?: {\n initialBalance?: number;\n maxAutomaticTokenAssociations?: number;\n accountMemo?: string;\n transactionMemo?: string;\n }): Promise<{\n accountId: string;\n privateKey: PrivateKey;\n privateKeyHex: string;\n publicKey: PublicKey;\n evmAddress: string;\n receipt: TransactionReceipt;\n }> {\n await this.ensureOperatorReady();\n const priv = PrivateKey.generateECDSA();\n const pub = priv.publicKey;\n const tx = buildHcs15BaseAccountCreateTx({\n publicKey: pub,\n initialBalance: new Hbar(options?.initialBalance ?? 10),\n maxAutomaticTokenAssociations: options?.maxAutomaticTokenAssociations,\n accountMemo: options?.accountMemo,\n transactionMemo: options?.transactionMemo,\n });\n const resp = await tx.execute(this.client);\n const receipt = await resp.getReceipt(this.client);\n if (!receipt.accountId) {\n throw new Error('HCS-15 BASE_ACCOUNT_CREATE_FAILED');\n }\n const accountId = receipt.accountId.toString();\n const evmAddress = `0x${pub.toEvmAddress()}`;\n this.logger.info('Created HCS-15 base account', { accountId, evmAddress });\n return {\n accountId,\n privateKey: priv,\n privateKeyHex: priv.toStringRaw(),\n publicKey: pub,\n evmAddress,\n receipt,\n };\n }\n\n /**\n * Create a Petal account that reuses the base account ECDSA key (no alias).\n */\n async createPetalAccount(params: {\n basePrivateKey: string | PrivateKey;\n initialBalance?: number;\n maxAutomaticTokenAssociations?: number;\n accountMemo?: string;\n transactionMemo?: string;\n profile?: PetalProfileOptions;\n }): Promise<{\n accountId: string;\n receipt: TransactionReceipt;\n profile?: PetalProfileResult;\n }> {\n await this.ensureOperatorReady();\n const baseKey =\n typeof params.basePrivateKey === 'string'\n ? PrivateKey.fromStringECDSA(params.basePrivateKey)\n : params.basePrivateKey;\n const pub = baseKey.publicKey;\n const tx = buildHcs15PetalAccountCreateTx({\n publicKey: pub,\n initialBalance: new Hbar(params.initialBalance ?? 1),\n maxAutomaticTokenAssociations: params.maxAutomaticTokenAssociations,\n accountMemo: params.accountMemo,\n transactionMemo: params.transactionMemo,\n });\n const resp = await tx.execute(this.client);\n const receipt = await resp.getReceipt(this.client);\n if (!receipt.accountId) {\n throw new Error('HCS-15 PETAL_ACCOUNT_CREATE_FAILED');\n }\n const accountId = receipt.accountId.toString();\n this.logger.info('Created HCS-15 petal account', { accountId });\n let profile: PetalProfileResult | undefined;\n if (params.profile) {\n profile = await this.createPetalProfile({\n accountId,\n basePrivateKey: baseKey,\n profile: params.profile,\n });\n }\n return { accountId, receipt, profile };\n }\n\n private async createPetalProfile(params: {\n accountId: string;\n basePrivateKey: PrivateKey;\n profile: PetalProfileOptions;\n }): Promise<PetalProfileResult> {\n const { HCS10Client } = await import('../hcs-10');\n const { PersonBuilder } = await import('../hcs-11');\n const hcs10 = new HCS10Client({\n network: this.network,\n operatorId: params.accountId,\n operatorPrivateKey: params.basePrivateKey.toString(),\n logLevel: this.logger.getLevel(),\n });\n\n try {\n const builder = new PersonBuilder()\n .setName(params.profile.displayName)\n .setBaseAccount(params.profile.baseAccountId);\n\n if (params.profile.alias) {\n builder.setAlias(params.profile.alias);\n }\n\n if (params.profile.bio) {\n builder.setBio(params.profile.bio);\n }\n\n if (params.profile.profileImage) {\n builder.setProfileImage(params.profile.profileImage);\n }\n\n if (params.profile.socials) {\n for (const social of params.profile.socials) {\n builder.addSocial(social.platform, social.handle);\n }\n }\n\n if (params.profile.properties) {\n for (const [key, value] of Object.entries(params.profile.properties)) {\n builder.addProperty(key, value);\n }\n }\n\n const result = await hcs10.create(builder, {\n ttl: params.profile.ttl ?? 300,\n updateAccountMemo: true,\n });\n\n if ('success' in result && result.success === false) {\n throw new Error(result.error ?? 'Failed to create petal profile');\n }\n\n const inboundTopicId =\n 'inboundTopicId' in result ? result.inboundTopicId : '';\n const outboundTopicId =\n 'outboundTopicId' in result ? result.outboundTopicId : '';\n const profileTopicId =\n 'profileTopicId' in result ? result.profileTopicId : '';\n\n if (!profileTopicId) {\n throw new Error('Failed to resolve petal profile topic ID');\n }\n\n return {\n profileTopicId,\n inboundTopicId,\n outboundTopicId,\n };\n } finally {\n try {\n hcs10.getClient().close();\n } catch {}\n }\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"standards-sdk.es87.js","sources":["../../src/hcs-21/base-client.ts"],"sourcesContent":["import { HederaMirrorNode } from '../services/mirror-node';\nimport { ILogger, Logger } from '../utils/logger';\nimport { NetworkType } from '../utils/types';\nimport { HCS21ValidationError } from './errors';\nimport {\n AdapterDeclaration,\n AdapterDeclarationEnvelope,\n AdapterPackage,\n HCS21_MAX_MESSAGE_BYTES,\n HCS21_SAFE_MESSAGE_BYTES,\n HCS21Operation,\n HCS21_PROTOCOL,\n AdapterConfigContext,\n adapterDeclarationSchema,\n AdapterCategoryEntry,\n HCS21TopicType,\n} from './types';\n\nexport interface BuildDeclarationParams {\n op: HCS21Operation;\n adapterId: string;\n entity: string;\n adapterPackage: AdapterPackage;\n manifest: string;\n manifestSequence?: number;\n config: AdapterConfigContext;\n stateModel?: string;\n signature?: string;\n}\n\nexport interface FetchDeclarationsOptions {\n limit?: number;\n order?: 'asc' | 'desc';\n}\n\nexport class HCS21BaseClient {\n protected readonly network: NetworkType;\n protected readonly logger: ILogger;\n protected readonly mirrorNode: HederaMirrorNode;\n\n constructor(params: {\n network: NetworkType;\n logger?: ILogger;\n mirrorNodeUrl?: string;\n }) {\n this.network = params.network;\n this.logger =\n params.logger || new Logger({ level: 'info', module: 'HCS-21' });\n this.mirrorNode = new HederaMirrorNode(this.network, this.logger, {\n customUrl: params.mirrorNodeUrl,\n });\n }\n\n buildDeclaration(params: BuildDeclarationParams): AdapterDeclaration {\n const declaration: AdapterDeclaration = {\n p: HCS21_PROTOCOL,\n op: params.op,\n adapter_id: params.adapterId,\n entity: params.entity,\n package: params.adapterPackage,\n manifest: params.manifest,\n ...(params.manifestSequence\n ? { manifest_sequence: params.manifestSequence }\n : {}),\n config: params.config,\n state_model: params.stateModel,\n signature: params.signature,\n };\n\n return this.validateDeclaration(declaration);\n }\n\n validateDeclaration(input: unknown): AdapterDeclaration {\n try {\n const payload = typeof input === 'string' ? JSON.parse(input) : input;\n const parsed = adapterDeclarationSchema.parse(\n payload,\n ) as AdapterDeclaration;\n this.assertSizeLimit(parsed);\n return parsed;\n } catch (error) {\n const message =\n error instanceof Error ? error.message : 'Invalid adapter declaration';\n throw new HCS21ValidationError(message, 'invalid_payload');\n }\n }\n\n async fetchDeclarations(\n topicId: string,\n options?: FetchDeclarationsOptions,\n ): Promise<AdapterDeclarationEnvelope[]> {\n const rawMessages = await this.mirrorNode.getTopicMessages(topicId, {\n limit: options?.limit,\n order: options?.order,\n });\n\n const envelopes: AdapterDeclarationEnvelope[] = [];\n\n for (const message of rawMessages) {\n if (message.p !== HCS21_PROTOCOL) {\n continue;\n }\n\n try {\n const declaration = this.validateDeclaration(message);\n envelopes.push({\n declaration,\n consensusTimestamp: message.consensus_timestamp,\n sequenceNumber: message.sequence_number,\n payer: message.payer,\n });\n } catch (error) {\n const detail = error instanceof Error ? error.message : 'unknown error';\n this.logger.warn(`Skipping invalid HCS-21 message: ${detail}`);\n }\n }\n\n return envelopes;\n }\n\n async fetchCategoryEntries(topicId: string): Promise<AdapterCategoryEntry[]> {\n const rawMessages = await this.mirrorNode.getTopicMessages(topicId);\n const entries: AdapterCategoryEntry[] = [];\n\n for (const message of rawMessages) {\n if (message.p !== 'hcs-2' || message.op !== 'register') {\n continue;\n }\n if (!message.t_id || typeof message.t_id !== 'string') {\n continue;\n }\n const memo = typeof message.m === 'string' ? message.m : undefined;\n const adapterId = memo?.startsWith('adapter:')\n ? memo.slice('adapter:'.length)\n : memo;\n entries.push({\n adapterId: adapterId ?? message.t_id,\n adapterTopicId: message.t_id,\n metadata: message.metadata,\n memo,\n payer: message.payer,\n sequenceNumber: Number(message.sequence_number ?? 0),\n consensusTimestamp: message.consensus_timestamp,\n });\n }\n\n return entries;\n }\n\n protected assertSizeLimit(payload: AdapterDeclaration): void {\n const json = JSON.stringify(payload);\n const bytes = Buffer.byteLength(json, 'utf8');\n if (bytes > HCS21_SAFE_MESSAGE_BYTES) {\n throw new HCS21ValidationError(\n `HCS-21 payload exceeds safe limit of ${HCS21_SAFE_MESSAGE_BYTES} bytes (${bytes}); Hedera cap is ${HCS21_MAX_MESSAGE_BYTES}`,\n 'size_exceeded',\n );\n }\n }\n}\n"],"names":[],"mappings":"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"}