@hashgraphonline/standards-sdk 0.1.185 → 0.1.186

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 (430) hide show
  1. package/dist/browser/hcs-25/adapters/acp.d.ts +20 -0
  2. package/dist/browser/hcs-25/adapters/acp.d.ts.map +1 -0
  3. package/dist/browser/hcs-25/adapters/agentverse.d.ts +34 -0
  4. package/dist/browser/hcs-25/adapters/agentverse.d.ts.map +1 -0
  5. package/dist/browser/hcs-25/adapters/availability.d.ts +22 -0
  6. package/dist/browser/hcs-25/adapters/availability.d.ts.map +1 -0
  7. package/dist/browser/hcs-25/adapters/connectivity.d.ts +25 -0
  8. package/dist/browser/hcs-25/adapters/connectivity.d.ts.map +1 -0
  9. package/dist/browser/hcs-25/adapters/erc8004-feedback.d.ts +19 -0
  10. package/dist/browser/hcs-25/adapters/erc8004-feedback.d.ts.map +1 -0
  11. package/dist/browser/hcs-25/adapters/ethos.d.ts +21 -0
  12. package/dist/browser/hcs-25/adapters/ethos.d.ts.map +1 -0
  13. package/dist/browser/hcs-25/adapters/index.d.ts +21 -0
  14. package/dist/browser/hcs-25/adapters/index.d.ts.map +1 -0
  15. package/dist/browser/hcs-25/adapters/model-evals.d.ts +61 -0
  16. package/dist/browser/hcs-25/adapters/model-evals.d.ts.map +1 -0
  17. package/dist/browser/hcs-25/adapters/normalization.d.ts +20 -0
  18. package/dist/browser/hcs-25/adapters/normalization.d.ts.map +1 -0
  19. package/dist/browser/hcs-25/adapters/oss-popularity.d.ts +22 -0
  20. package/dist/browser/hcs-25/adapters/oss-popularity.d.ts.map +1 -0
  21. package/dist/browser/hcs-25/adapters/output-verification.d.ts +27 -0
  22. package/dist/browser/hcs-25/adapters/output-verification.d.ts.map +1 -0
  23. package/dist/browser/hcs-25/adapters/simple-evals.d.ts +14 -0
  24. package/dist/browser/hcs-25/adapters/simple-evals.d.ts.map +1 -0
  25. package/dist/browser/hcs-25/adapters/x402.d.ts +18 -0
  26. package/dist/browser/hcs-25/adapters/x402.d.ts.map +1 -0
  27. package/dist/browser/hcs-25/identifiers.d.ts +2 -2
  28. package/dist/browser/hcs-25/identifiers.d.ts.map +1 -1
  29. package/dist/browser/hcs-25/index.d.ts +2 -0
  30. package/dist/browser/hcs-25/index.d.ts.map +1 -1
  31. package/dist/browser/hcs-25/scoring.d.ts.map +1 -1
  32. package/dist/browser/hcs-25/signals/index.d.ts +20 -0
  33. package/dist/browser/hcs-25/signals/index.d.ts.map +1 -0
  34. package/dist/browser/hcs-25/signals/marketplace.d.ts +296 -0
  35. package/dist/browser/hcs-25/signals/marketplace.d.ts.map +1 -0
  36. package/dist/browser/hcs-25/signals/metadata.d.ts +40 -0
  37. package/dist/browser/hcs-25/signals/metadata.d.ts.map +1 -0
  38. package/dist/browser/hcs-25/signals/model-evals.d.ts +127 -0
  39. package/dist/browser/hcs-25/signals/model-evals.d.ts.map +1 -0
  40. package/dist/browser/hcs-25/signals/operational.d.ts +757 -0
  41. package/dist/browser/hcs-25/signals/operational.d.ts.map +1 -0
  42. package/dist/browser/hcs-25/signals/simple-evals.d.ts +156 -0
  43. package/dist/browser/hcs-25/signals/simple-evals.d.ts.map +1 -0
  44. package/dist/browser-root/hcs-25/adapters/acp.d.ts +20 -0
  45. package/dist/browser-root/hcs-25/adapters/acp.d.ts.map +1 -0
  46. package/dist/browser-root/hcs-25/adapters/agentverse.d.ts +34 -0
  47. package/dist/browser-root/hcs-25/adapters/agentverse.d.ts.map +1 -0
  48. package/dist/browser-root/hcs-25/adapters/availability.d.ts +22 -0
  49. package/dist/browser-root/hcs-25/adapters/availability.d.ts.map +1 -0
  50. package/dist/browser-root/hcs-25/adapters/connectivity.d.ts +25 -0
  51. package/dist/browser-root/hcs-25/adapters/connectivity.d.ts.map +1 -0
  52. package/dist/browser-root/hcs-25/adapters/erc8004-feedback.d.ts +19 -0
  53. package/dist/browser-root/hcs-25/adapters/erc8004-feedback.d.ts.map +1 -0
  54. package/dist/browser-root/hcs-25/adapters/ethos.d.ts +21 -0
  55. package/dist/browser-root/hcs-25/adapters/ethos.d.ts.map +1 -0
  56. package/dist/browser-root/hcs-25/adapters/index.d.ts +21 -0
  57. package/dist/browser-root/hcs-25/adapters/index.d.ts.map +1 -0
  58. package/dist/browser-root/hcs-25/adapters/model-evals.d.ts +61 -0
  59. package/dist/browser-root/hcs-25/adapters/model-evals.d.ts.map +1 -0
  60. package/dist/browser-root/hcs-25/adapters/normalization.d.ts +20 -0
  61. package/dist/browser-root/hcs-25/adapters/normalization.d.ts.map +1 -0
  62. package/dist/browser-root/hcs-25/adapters/oss-popularity.d.ts +22 -0
  63. package/dist/browser-root/hcs-25/adapters/oss-popularity.d.ts.map +1 -0
  64. package/dist/browser-root/hcs-25/adapters/output-verification.d.ts +27 -0
  65. package/dist/browser-root/hcs-25/adapters/output-verification.d.ts.map +1 -0
  66. package/dist/browser-root/hcs-25/adapters/simple-evals.d.ts +14 -0
  67. package/dist/browser-root/hcs-25/adapters/simple-evals.d.ts.map +1 -0
  68. package/dist/browser-root/hcs-25/adapters/x402.d.ts +18 -0
  69. package/dist/browser-root/hcs-25/adapters/x402.d.ts.map +1 -0
  70. package/dist/browser-root/hcs-25/identifiers.d.ts +2 -2
  71. package/dist/browser-root/hcs-25/identifiers.d.ts.map +1 -1
  72. package/dist/browser-root/hcs-25/index.d.ts +2 -0
  73. package/dist/browser-root/hcs-25/index.d.ts.map +1 -1
  74. package/dist/browser-root/hcs-25/scoring.d.ts.map +1 -1
  75. package/dist/browser-root/hcs-25/signals/index.d.ts +20 -0
  76. package/dist/browser-root/hcs-25/signals/index.d.ts.map +1 -0
  77. package/dist/browser-root/hcs-25/signals/marketplace.d.ts +296 -0
  78. package/dist/browser-root/hcs-25/signals/marketplace.d.ts.map +1 -0
  79. package/dist/browser-root/hcs-25/signals/metadata.d.ts +40 -0
  80. package/dist/browser-root/hcs-25/signals/metadata.d.ts.map +1 -0
  81. package/dist/browser-root/hcs-25/signals/model-evals.d.ts +127 -0
  82. package/dist/browser-root/hcs-25/signals/model-evals.d.ts.map +1 -0
  83. package/dist/browser-root/hcs-25/signals/operational.d.ts +757 -0
  84. package/dist/browser-root/hcs-25/signals/operational.d.ts.map +1 -0
  85. package/dist/browser-root/hcs-25/signals/simple-evals.d.ts +156 -0
  86. package/dist/browser-root/hcs-25/signals/simple-evals.d.ts.map +1 -0
  87. package/dist/cjs/hcs-25/adapters/acp.d.ts +20 -0
  88. package/dist/cjs/hcs-25/adapters/acp.d.ts.map +1 -0
  89. package/dist/cjs/hcs-25/adapters/agentverse.d.ts +34 -0
  90. package/dist/cjs/hcs-25/adapters/agentverse.d.ts.map +1 -0
  91. package/dist/cjs/hcs-25/adapters/availability.d.ts +22 -0
  92. package/dist/cjs/hcs-25/adapters/availability.d.ts.map +1 -0
  93. package/dist/cjs/hcs-25/adapters/connectivity.d.ts +25 -0
  94. package/dist/cjs/hcs-25/adapters/connectivity.d.ts.map +1 -0
  95. package/dist/cjs/hcs-25/adapters/erc8004-feedback.d.ts +19 -0
  96. package/dist/cjs/hcs-25/adapters/erc8004-feedback.d.ts.map +1 -0
  97. package/dist/cjs/hcs-25/adapters/ethos.d.ts +21 -0
  98. package/dist/cjs/hcs-25/adapters/ethos.d.ts.map +1 -0
  99. package/dist/cjs/hcs-25/adapters/index.d.ts +21 -0
  100. package/dist/cjs/hcs-25/adapters/index.d.ts.map +1 -0
  101. package/dist/cjs/hcs-25/adapters/model-evals.d.ts +61 -0
  102. package/dist/cjs/hcs-25/adapters/model-evals.d.ts.map +1 -0
  103. package/dist/cjs/hcs-25/adapters/normalization.d.ts +20 -0
  104. package/dist/cjs/hcs-25/adapters/normalization.d.ts.map +1 -0
  105. package/dist/cjs/hcs-25/adapters/oss-popularity.d.ts +22 -0
  106. package/dist/cjs/hcs-25/adapters/oss-popularity.d.ts.map +1 -0
  107. package/dist/cjs/hcs-25/adapters/output-verification.d.ts +27 -0
  108. package/dist/cjs/hcs-25/adapters/output-verification.d.ts.map +1 -0
  109. package/dist/cjs/hcs-25/adapters/simple-evals.d.ts +14 -0
  110. package/dist/cjs/hcs-25/adapters/simple-evals.d.ts.map +1 -0
  111. package/dist/cjs/hcs-25/adapters/x402.d.ts +18 -0
  112. package/dist/cjs/hcs-25/adapters/x402.d.ts.map +1 -0
  113. package/dist/cjs/hcs-25/identifiers.d.ts +2 -2
  114. package/dist/cjs/hcs-25/identifiers.d.ts.map +1 -1
  115. package/dist/cjs/hcs-25/index.d.ts +2 -0
  116. package/dist/cjs/hcs-25/index.d.ts.map +1 -1
  117. package/dist/cjs/hcs-25/scoring.d.ts.map +1 -1
  118. package/dist/cjs/hcs-25/signals/index.d.ts +20 -0
  119. package/dist/cjs/hcs-25/signals/index.d.ts.map +1 -0
  120. package/dist/cjs/hcs-25/signals/marketplace.d.ts +296 -0
  121. package/dist/cjs/hcs-25/signals/marketplace.d.ts.map +1 -0
  122. package/dist/cjs/hcs-25/signals/metadata.d.ts +40 -0
  123. package/dist/cjs/hcs-25/signals/metadata.d.ts.map +1 -0
  124. package/dist/cjs/hcs-25/signals/model-evals.d.ts +127 -0
  125. package/dist/cjs/hcs-25/signals/model-evals.d.ts.map +1 -0
  126. package/dist/cjs/hcs-25/signals/operational.d.ts +757 -0
  127. package/dist/cjs/hcs-25/signals/operational.d.ts.map +1 -0
  128. package/dist/cjs/hcs-25/signals/simple-evals.d.ts +156 -0
  129. package/dist/cjs/hcs-25/signals/simple-evals.d.ts.map +1 -0
  130. package/dist/cjs/standards-sdk.cjs +2 -2
  131. package/dist/cjs/standards-sdk.cjs.map +1 -1
  132. package/dist/es/hcs-25/adapters/acp.d.ts +20 -0
  133. package/dist/es/hcs-25/adapters/acp.d.ts.map +1 -0
  134. package/dist/es/hcs-25/adapters/agentverse.d.ts +34 -0
  135. package/dist/es/hcs-25/adapters/agentverse.d.ts.map +1 -0
  136. package/dist/es/hcs-25/adapters/availability.d.ts +22 -0
  137. package/dist/es/hcs-25/adapters/availability.d.ts.map +1 -0
  138. package/dist/es/hcs-25/adapters/connectivity.d.ts +25 -0
  139. package/dist/es/hcs-25/adapters/connectivity.d.ts.map +1 -0
  140. package/dist/es/hcs-25/adapters/erc8004-feedback.d.ts +19 -0
  141. package/dist/es/hcs-25/adapters/erc8004-feedback.d.ts.map +1 -0
  142. package/dist/es/hcs-25/adapters/ethos.d.ts +21 -0
  143. package/dist/es/hcs-25/adapters/ethos.d.ts.map +1 -0
  144. package/dist/es/hcs-25/adapters/index.d.ts +21 -0
  145. package/dist/es/hcs-25/adapters/index.d.ts.map +1 -0
  146. package/dist/es/hcs-25/adapters/model-evals.d.ts +61 -0
  147. package/dist/es/hcs-25/adapters/model-evals.d.ts.map +1 -0
  148. package/dist/es/hcs-25/adapters/normalization.d.ts +20 -0
  149. package/dist/es/hcs-25/adapters/normalization.d.ts.map +1 -0
  150. package/dist/es/hcs-25/adapters/oss-popularity.d.ts +22 -0
  151. package/dist/es/hcs-25/adapters/oss-popularity.d.ts.map +1 -0
  152. package/dist/es/hcs-25/adapters/output-verification.d.ts +27 -0
  153. package/dist/es/hcs-25/adapters/output-verification.d.ts.map +1 -0
  154. package/dist/es/hcs-25/adapters/simple-evals.d.ts +14 -0
  155. package/dist/es/hcs-25/adapters/simple-evals.d.ts.map +1 -0
  156. package/dist/es/hcs-25/adapters/x402.d.ts +18 -0
  157. package/dist/es/hcs-25/adapters/x402.d.ts.map +1 -0
  158. package/dist/es/hcs-25/identifiers.d.ts +2 -2
  159. package/dist/es/hcs-25/identifiers.d.ts.map +1 -1
  160. package/dist/es/hcs-25/index.d.ts +2 -0
  161. package/dist/es/hcs-25/index.d.ts.map +1 -1
  162. package/dist/es/hcs-25/scoring.d.ts.map +1 -1
  163. package/dist/es/hcs-25/signals/index.d.ts +20 -0
  164. package/dist/es/hcs-25/signals/index.d.ts.map +1 -0
  165. package/dist/es/hcs-25/signals/marketplace.d.ts +296 -0
  166. package/dist/es/hcs-25/signals/marketplace.d.ts.map +1 -0
  167. package/dist/es/hcs-25/signals/metadata.d.ts +40 -0
  168. package/dist/es/hcs-25/signals/metadata.d.ts.map +1 -0
  169. package/dist/es/hcs-25/signals/model-evals.d.ts +127 -0
  170. package/dist/es/hcs-25/signals/model-evals.d.ts.map +1 -0
  171. package/dist/es/hcs-25/signals/operational.d.ts +757 -0
  172. package/dist/es/hcs-25/signals/operational.d.ts.map +1 -0
  173. package/dist/es/hcs-25/signals/simple-evals.d.ts +156 -0
  174. package/dist/es/hcs-25/signals/simple-evals.d.ts.map +1 -0
  175. package/dist/es/standards-sdk.es.js +109 -40
  176. package/dist/es/standards-sdk.es.js.map +1 -1
  177. package/dist/es/standards-sdk.es101.js +2 -2
  178. package/dist/es/standards-sdk.es103.js +2 -2
  179. package/dist/es/standards-sdk.es104.js +1 -1
  180. package/dist/es/standards-sdk.es106.js +1 -1
  181. package/dist/es/standards-sdk.es108.js +2 -2
  182. package/dist/es/standards-sdk.es11.js +1 -1
  183. package/dist/es/standards-sdk.es110.js +1 -1
  184. package/dist/es/standards-sdk.es111.js +2 -2
  185. package/dist/es/standards-sdk.es115.js +3 -3
  186. package/dist/es/standards-sdk.es116.js +4 -4
  187. package/dist/es/standards-sdk.es117.js +1 -1
  188. package/dist/es/standards-sdk.es117.js.map +1 -1
  189. package/dist/es/standards-sdk.es119.js +10 -9
  190. package/dist/es/standards-sdk.es119.js.map +1 -1
  191. package/dist/es/standards-sdk.es12.js +1 -1
  192. package/dist/es/standards-sdk.es120.js +225 -251
  193. package/dist/es/standards-sdk.es120.js.map +1 -1
  194. package/dist/es/standards-sdk.es121.js +50 -477
  195. package/dist/es/standards-sdk.es121.js.map +1 -1
  196. package/dist/es/standards-sdk.es122.js +244 -97
  197. package/dist/es/standards-sdk.es122.js.map +1 -1
  198. package/dist/es/standards-sdk.es123.js +451 -133
  199. package/dist/es/standards-sdk.es123.js.map +1 -1
  200. package/dist/es/standards-sdk.es124.js +98 -27
  201. package/dist/es/standards-sdk.es124.js.map +1 -1
  202. package/dist/es/standards-sdk.es125.js +156 -8
  203. package/dist/es/standards-sdk.es125.js.map +1 -1
  204. package/dist/es/standards-sdk.es126.js +29 -177
  205. package/dist/es/standards-sdk.es126.js.map +1 -1
  206. package/dist/es/standards-sdk.es127.js +10 -27
  207. package/dist/es/standards-sdk.es127.js.map +1 -1
  208. package/dist/es/standards-sdk.es128.js +179 -19
  209. package/dist/es/standards-sdk.es128.js.map +1 -1
  210. package/dist/es/standards-sdk.es129.js +27 -158
  211. package/dist/es/standards-sdk.es129.js.map +1 -1
  212. package/dist/es/standards-sdk.es13.js +1 -1
  213. package/dist/es/standards-sdk.es130.js +16 -195
  214. package/dist/es/standards-sdk.es130.js.map +1 -1
  215. package/dist/es/standards-sdk.es131.js +133 -763
  216. package/dist/es/standards-sdk.es131.js.map +1 -1
  217. package/dist/es/standards-sdk.es132.js +198 -10
  218. package/dist/es/standards-sdk.es132.js.map +1 -1
  219. package/dist/es/standards-sdk.es133.js +762 -539
  220. package/dist/es/standards-sdk.es133.js.map +1 -1
  221. package/dist/es/standards-sdk.es134.js +10 -623
  222. package/dist/es/standards-sdk.es134.js.map +1 -1
  223. package/dist/es/standards-sdk.es135.js +567 -13
  224. package/dist/es/standards-sdk.es135.js.map +1 -1
  225. package/dist/es/standards-sdk.es136.js +626 -2
  226. package/dist/es/standards-sdk.es136.js.map +1 -1
  227. package/dist/es/standards-sdk.es137.js +12 -86
  228. package/dist/es/standards-sdk.es137.js.map +1 -1
  229. package/dist/es/standards-sdk.es138.js +2 -40
  230. package/dist/es/standards-sdk.es138.js.map +1 -1
  231. package/dist/es/standards-sdk.es139.js +87 -2
  232. package/dist/es/standards-sdk.es139.js.map +1 -1
  233. package/dist/es/standards-sdk.es14.js +1 -1
  234. package/dist/es/standards-sdk.es140.js +37 -232
  235. package/dist/es/standards-sdk.es140.js.map +1 -1
  236. package/dist/es/standards-sdk.es141.js +2 -1140
  237. package/dist/es/standards-sdk.es141.js.map +1 -1
  238. package/dist/es/standards-sdk.es142.js +213 -284
  239. package/dist/es/standards-sdk.es142.js.map +1 -1
  240. package/dist/es/standards-sdk.es143.js +1138 -420
  241. package/dist/es/standards-sdk.es143.js.map +1 -1
  242. package/dist/es/standards-sdk.es144.js +301 -350
  243. package/dist/es/standards-sdk.es144.js.map +1 -1
  244. package/dist/es/standards-sdk.es145.js +417 -1117
  245. package/dist/es/standards-sdk.es145.js.map +1 -1
  246. package/dist/es/standards-sdk.es146.js +348 -201
  247. package/dist/es/standards-sdk.es146.js.map +1 -1
  248. package/dist/es/standards-sdk.es147.js +1035 -1480
  249. package/dist/es/standards-sdk.es147.js.map +1 -1
  250. package/dist/es/standards-sdk.es148.js +181 -1130
  251. package/dist/es/standards-sdk.es148.js.map +1 -1
  252. package/dist/es/standards-sdk.es149.js +1564 -14
  253. package/dist/es/standards-sdk.es149.js.map +1 -1
  254. package/dist/es/standards-sdk.es15.js +1 -1
  255. package/dist/es/standards-sdk.es150.js +1122 -224
  256. package/dist/es/standards-sdk.es150.js.map +1 -1
  257. package/dist/es/standards-sdk.es151.js +17 -4
  258. package/dist/es/standards-sdk.es151.js.map +1 -1
  259. package/dist/es/standards-sdk.es152.js +252 -74
  260. package/dist/es/standards-sdk.es152.js.map +1 -1
  261. package/dist/es/standards-sdk.es153.js +4 -87
  262. package/dist/es/standards-sdk.es153.js.map +1 -1
  263. package/dist/es/standards-sdk.es154.js +73 -52
  264. package/dist/es/standards-sdk.es154.js.map +1 -1
  265. package/dist/es/standards-sdk.es155.js +86 -2546
  266. package/dist/es/standards-sdk.es155.js.map +1 -1
  267. package/dist/es/standards-sdk.es156.js +53 -152
  268. package/dist/es/standards-sdk.es156.js.map +1 -1
  269. package/dist/es/standards-sdk.es157.js +2547 -7
  270. package/dist/es/standards-sdk.es157.js.map +1 -1
  271. package/dist/es/standards-sdk.es158.js +138 -65
  272. package/dist/es/standards-sdk.es158.js.map +1 -1
  273. package/dist/es/standards-sdk.es159.js +7 -65
  274. package/dist/es/standards-sdk.es159.js.map +1 -1
  275. package/dist/es/standards-sdk.es16.js +4 -4
  276. package/dist/es/standards-sdk.es160.js +86 -30
  277. package/dist/es/standards-sdk.es160.js.map +1 -1
  278. package/dist/es/standards-sdk.es161.js +65 -34
  279. package/dist/es/standards-sdk.es161.js.map +1 -1
  280. package/dist/es/standards-sdk.es162.js +194 -48
  281. package/dist/es/standards-sdk.es162.js.map +1 -1
  282. package/dist/es/standards-sdk.es163.js +17 -12473
  283. package/dist/es/standards-sdk.es163.js.map +1 -1
  284. package/dist/es/standards-sdk.es164.js +53 -133
  285. package/dist/es/standards-sdk.es164.js.map +1 -1
  286. package/dist/es/standards-sdk.es165.js +91 -38
  287. package/dist/es/standards-sdk.es165.js.map +1 -1
  288. package/dist/es/standards-sdk.es166.js +47 -15
  289. package/dist/es/standards-sdk.es166.js.map +1 -1
  290. package/dist/es/standards-sdk.es167.js +201 -53
  291. package/dist/es/standards-sdk.es167.js.map +1 -1
  292. package/dist/es/standards-sdk.es168.js +53 -108
  293. package/dist/es/standards-sdk.es168.js.map +1 -1
  294. package/dist/es/standards-sdk.es169.js +47 -79
  295. package/dist/es/standards-sdk.es169.js.map +1 -1
  296. package/dist/es/standards-sdk.es170.js +48 -192
  297. package/dist/es/standards-sdk.es170.js.map +1 -1
  298. package/dist/es/standards-sdk.es171.js +47 -670
  299. package/dist/es/standards-sdk.es171.js.map +1 -1
  300. package/dist/es/standards-sdk.es172.js +110 -61
  301. package/dist/es/standards-sdk.es172.js.map +1 -1
  302. package/dist/es/standards-sdk.es173.js +51 -169
  303. package/dist/es/standards-sdk.es173.js.map +1 -1
  304. package/dist/es/standards-sdk.es174.js +39 -317
  305. package/dist/es/standards-sdk.es174.js.map +1 -1
  306. package/dist/es/standards-sdk.es175.js +72 -346
  307. package/dist/es/standards-sdk.es175.js.map +1 -1
  308. package/dist/es/standards-sdk.es176.js +68 -453
  309. package/dist/es/standards-sdk.es176.js.map +1 -1
  310. package/dist/es/standards-sdk.es177.js +44 -331
  311. package/dist/es/standards-sdk.es177.js.map +1 -1
  312. package/dist/es/standards-sdk.es178.js +31 -71
  313. package/dist/es/standards-sdk.es178.js.map +1 -1
  314. package/dist/es/standards-sdk.es179.js +30 -139
  315. package/dist/es/standards-sdk.es179.js.map +1 -1
  316. package/dist/es/standards-sdk.es18.js +11 -11
  317. package/dist/es/standards-sdk.es180.js +34 -517
  318. package/dist/es/standards-sdk.es180.js.map +1 -1
  319. package/dist/es/standards-sdk.es181.js +48 -259
  320. package/dist/es/standards-sdk.es181.js.map +1 -1
  321. package/dist/es/standards-sdk.es182.js +127 -185
  322. package/dist/es/standards-sdk.es182.js.map +1 -1
  323. package/dist/es/standards-sdk.es183.js +36 -113
  324. package/dist/es/standards-sdk.es183.js.map +1 -1
  325. package/dist/es/standards-sdk.es184.js +12464 -134
  326. package/dist/es/standards-sdk.es184.js.map +1 -1
  327. package/dist/es/standards-sdk.es185.js +14 -181
  328. package/dist/es/standards-sdk.es185.js.map +1 -1
  329. package/dist/es/standards-sdk.es186.js +479 -491
  330. package/dist/es/standards-sdk.es186.js.map +1 -1
  331. package/dist/es/standards-sdk.es187.js +93 -167
  332. package/dist/es/standards-sdk.es187.js.map +1 -1
  333. package/dist/es/standards-sdk.es188.js +61 -223
  334. package/dist/es/standards-sdk.es188.js.map +1 -1
  335. package/dist/es/standards-sdk.es189.js +49 -232
  336. package/dist/es/standards-sdk.es189.js.map +1 -1
  337. package/dist/es/standards-sdk.es19.js +8 -8
  338. package/dist/es/standards-sdk.es190.js +84 -0
  339. package/dist/es/standards-sdk.es190.js.map +1 -0
  340. package/dist/es/standards-sdk.es191.js +203 -0
  341. package/dist/es/standards-sdk.es191.js.map +1 -0
  342. package/dist/es/standards-sdk.es192.js +175 -0
  343. package/dist/es/standards-sdk.es192.js.map +1 -0
  344. package/dist/es/standards-sdk.es193.js +325 -0
  345. package/dist/es/standards-sdk.es193.js.map +1 -0
  346. package/dist/es/standards-sdk.es194.js +349 -0
  347. package/dist/es/standards-sdk.es194.js.map +1 -0
  348. package/dist/es/standards-sdk.es195.js +456 -0
  349. package/dist/es/standards-sdk.es195.js.map +1 -0
  350. package/dist/es/standards-sdk.es196.js +334 -0
  351. package/dist/es/standards-sdk.es196.js.map +1 -0
  352. package/dist/es/standards-sdk.es197.js +79 -0
  353. package/dist/es/standards-sdk.es197.js.map +1 -0
  354. package/dist/es/standards-sdk.es198.js +142 -0
  355. package/dist/es/standards-sdk.es198.js.map +1 -0
  356. package/dist/es/standards-sdk.es199.js +520 -0
  357. package/dist/es/standards-sdk.es199.js.map +1 -0
  358. package/dist/es/standards-sdk.es2.js +2 -2
  359. package/dist/es/standards-sdk.es20.js +1 -1
  360. package/dist/es/standards-sdk.es200.js +262 -0
  361. package/dist/es/standards-sdk.es200.js.map +1 -0
  362. package/dist/es/standards-sdk.es201.js +199 -0
  363. package/dist/es/standards-sdk.es201.js.map +1 -0
  364. package/dist/es/standards-sdk.es202.js +122 -0
  365. package/dist/es/standards-sdk.es202.js.map +1 -0
  366. package/dist/es/standards-sdk.es203.js +155 -0
  367. package/dist/es/standards-sdk.es203.js.map +1 -0
  368. package/dist/es/standards-sdk.es204.js +187 -0
  369. package/dist/es/standards-sdk.es204.js.map +1 -0
  370. package/dist/es/standards-sdk.es205.js +687 -0
  371. package/dist/es/standards-sdk.es205.js.map +1 -0
  372. package/dist/es/standards-sdk.es206.js +188 -0
  373. package/dist/es/standards-sdk.es206.js.map +1 -0
  374. package/dist/es/standards-sdk.es207.js +238 -0
  375. package/dist/es/standards-sdk.es207.js.map +1 -0
  376. package/dist/es/standards-sdk.es208.js +242 -0
  377. package/dist/es/standards-sdk.es208.js.map +1 -0
  378. package/dist/es/standards-sdk.es21.js +1 -1
  379. package/dist/es/standards-sdk.es22.js +1 -1
  380. package/dist/es/standards-sdk.es23.js +1 -1
  381. package/dist/es/standards-sdk.es24.js +1 -1
  382. package/dist/es/standards-sdk.es25.js +1 -1
  383. package/dist/es/standards-sdk.es26.js +1 -1
  384. package/dist/es/standards-sdk.es27.js +11 -11
  385. package/dist/es/standards-sdk.es30.js +2 -2
  386. package/dist/es/standards-sdk.es31.js +4 -4
  387. package/dist/es/standards-sdk.es32.js +1 -1
  388. package/dist/es/standards-sdk.es35.js +5 -5
  389. package/dist/es/standards-sdk.es36.js +4 -4
  390. package/dist/es/standards-sdk.es37.js +2 -2
  391. package/dist/es/standards-sdk.es38.js +2 -2
  392. package/dist/es/standards-sdk.es39.js +1 -1
  393. package/dist/es/standards-sdk.es4.js +2 -2
  394. package/dist/es/standards-sdk.es40.js +1 -1
  395. package/dist/es/standards-sdk.es41.js +2 -2
  396. package/dist/es/standards-sdk.es46.js +1 -1
  397. package/dist/es/standards-sdk.es5.js +2 -2
  398. package/dist/es/standards-sdk.es51.js +1 -1
  399. package/dist/es/standards-sdk.es53.js +1 -1
  400. package/dist/es/standards-sdk.es56.js +2 -2
  401. package/dist/es/standards-sdk.es59.js +1 -1
  402. package/dist/es/standards-sdk.es6.js +2 -2
  403. package/dist/es/standards-sdk.es60.js +1 -1
  404. package/dist/es/standards-sdk.es62.js +1 -1
  405. package/dist/es/standards-sdk.es63.js +2 -2
  406. package/dist/es/standards-sdk.es64.js +1 -1
  407. package/dist/es/standards-sdk.es65.js +1 -1
  408. package/dist/es/standards-sdk.es66.js +1 -1
  409. package/dist/es/standards-sdk.es67.js +6 -6
  410. package/dist/es/standards-sdk.es69.js +1 -1
  411. package/dist/es/standards-sdk.es7.js +1 -1
  412. package/dist/es/standards-sdk.es71.js +2 -2
  413. package/dist/es/standards-sdk.es72.js +3 -3
  414. package/dist/es/standards-sdk.es75.js +5 -5
  415. package/dist/es/standards-sdk.es76.js +3 -3
  416. package/dist/es/standards-sdk.es77.js +2 -2
  417. package/dist/es/standards-sdk.es78.js +1 -1
  418. package/dist/es/standards-sdk.es81.js +2 -2
  419. package/dist/es/standards-sdk.es83.js +2 -2
  420. package/dist/es/standards-sdk.es84.js +3 -3
  421. package/dist/es/standards-sdk.es85.js +1 -1
  422. package/dist/es/standards-sdk.es88.js +1 -1
  423. package/dist/es/standards-sdk.es89.js +2 -2
  424. package/dist/es/standards-sdk.es9.js +2 -2
  425. package/dist/es/standards-sdk.es90.js +4 -4
  426. package/dist/es/standards-sdk.es94.js +3 -3
  427. package/dist/es/standards-sdk.es96.js +2 -2
  428. package/dist/es/standards-sdk.es98.js +1 -1
  429. package/dist/es/standards-sdk.es99.js +3 -3
  430. package/package.json +1 -1
@@ -0,0 +1,334 @@
1
+ import { proto } from "@hashgraph/proto";
2
+ import { Long, FileId, ContractId } from "@hashgraph/sdk";
3
+ import { hasTransactionType } from "./standards-sdk.es197.js";
4
+ class UtilParser {
5
+ /**
6
+ * Parse Utility/System Service transaction using unified dual-branch approach
7
+ * This handles both regular transactions and signed transaction variants
8
+ */
9
+ static parseUtilTransaction(transaction, originalBytes) {
10
+ try {
11
+ if (originalBytes || transaction.toBytes) {
12
+ try {
13
+ const bytesToParse = originalBytes || transaction.toBytes();
14
+ const decoded = proto.TransactionList.decode(bytesToParse);
15
+ if (decoded.transactionList && decoded.transactionList.length > 0) {
16
+ const tx = decoded.transactionList[0];
17
+ let txBody = null;
18
+ if (tx.bodyBytes && tx.bodyBytes.length > 0) {
19
+ txBody = proto.TransactionBody.decode(tx.bodyBytes);
20
+ } else if (tx.signedTransactionBytes && tx.signedTransactionBytes.length > 0) {
21
+ const signedTx = proto.SignedTransaction.decode(
22
+ tx.signedTransactionBytes
23
+ );
24
+ if (signedTx.bodyBytes) {
25
+ txBody = proto.TransactionBody.decode(signedTx.bodyBytes);
26
+ }
27
+ }
28
+ if (txBody) {
29
+ const protoResult = this.parseFromProtobufTxBody(txBody);
30
+ if (protoResult.type && protoResult.type !== "UNKNOWN") {
31
+ return protoResult;
32
+ }
33
+ }
34
+ }
35
+ } catch (protoError) {
36
+ }
37
+ }
38
+ return this.parseFromTransactionInternals(transaction);
39
+ } catch (error) {
40
+ return {
41
+ type: "UNKNOWN",
42
+ humanReadableType: "Unknown Utility Transaction"
43
+ };
44
+ }
45
+ }
46
+ /**
47
+ * Parse utility transaction from protobuf TransactionBody
48
+ * Handles all utility operations from decoded protobuf data
49
+ */
50
+ static parseFromProtobufTxBody(txBody) {
51
+ if (txBody.utilPrng) {
52
+ const utilPrng = this.parseUtilPrng(txBody.utilPrng);
53
+ if (utilPrng) {
54
+ return {
55
+ type: "PRNG",
56
+ humanReadableType: "Pseudo Random Number",
57
+ utilPrng
58
+ };
59
+ }
60
+ }
61
+ if (txBody.freeze) {
62
+ const networkFreeze = this.parseNetworkFreezeFromProto(txBody.freeze);
63
+ if (networkFreeze) {
64
+ return {
65
+ type: "FREEZE",
66
+ humanReadableType: "Network Freeze",
67
+ freeze: networkFreeze
68
+ };
69
+ }
70
+ }
71
+ if (txBody.systemDelete) {
72
+ const systemDelete = this.parseSystemDeleteFromProto(txBody.systemDelete);
73
+ if (systemDelete) {
74
+ return {
75
+ type: "SYSTEMDELETE",
76
+ humanReadableType: "System Delete",
77
+ systemDelete
78
+ };
79
+ }
80
+ }
81
+ if (txBody.systemUndelete) {
82
+ const systemUndelete = this.parseSystemUndeleteFromProto(
83
+ txBody.systemUndelete
84
+ );
85
+ if (systemUndelete) {
86
+ return {
87
+ type: "SYSTEMUNDELETE",
88
+ humanReadableType: "System Undelete",
89
+ systemUndelete
90
+ };
91
+ }
92
+ }
93
+ if (txBody.nodeCreate) {
94
+ const nodeCreate = this.parseNodeCreateFromProto(txBody.nodeCreate);
95
+ if (nodeCreate) {
96
+ return {
97
+ type: "NODECREATE",
98
+ humanReadableType: "Node Create",
99
+ nodeCreate
100
+ };
101
+ }
102
+ }
103
+ if (txBody.nodeUpdate) {
104
+ const nodeUpdate = this.parseNodeUpdateFromProto(txBody.nodeUpdate);
105
+ if (nodeUpdate) {
106
+ return {
107
+ type: "NODEUPDATE",
108
+ humanReadableType: "Node Update",
109
+ nodeUpdate
110
+ };
111
+ }
112
+ }
113
+ if (txBody.nodeDelete) {
114
+ const nodeDelete = this.parseNodeDeleteFromProto(txBody.nodeDelete);
115
+ if (nodeDelete) {
116
+ return {
117
+ type: "NODEDELETE",
118
+ humanReadableType: "Node Delete",
119
+ nodeDelete
120
+ };
121
+ }
122
+ }
123
+ return {};
124
+ }
125
+ /**
126
+ * Extract utility data from Transaction internal fields
127
+ * This handles cases where data is stored in Transaction object internals
128
+ */
129
+ static parseFromTransactionInternals(transaction) {
130
+ try {
131
+ const tx = transaction;
132
+ if (hasTransactionType(transaction, "utilPrng")) {
133
+ const utilPrng = {};
134
+ if (tx._range && tx._range !== 0) {
135
+ utilPrng.range = tx._range;
136
+ }
137
+ return {
138
+ type: "PRNG",
139
+ humanReadableType: "Pseudo Random Number",
140
+ utilPrng
141
+ };
142
+ }
143
+ if (hasTransactionType(transaction, "freeze")) {
144
+ const networkFreeze = {};
145
+ if (tx._startTime) {
146
+ networkFreeze.startTime = tx._startTime.toString();
147
+ }
148
+ if (tx._endTime) {
149
+ networkFreeze.endTime = tx._endTime.toString();
150
+ }
151
+ if (tx._updateFile) {
152
+ networkFreeze.updateFile = tx._updateFile.toString();
153
+ }
154
+ if (tx._fileHash) {
155
+ networkFreeze.fileHash = Buffer.from(tx._fileHash).toString("hex");
156
+ }
157
+ if (tx._freezeType) {
158
+ networkFreeze.freezeType = tx._freezeType;
159
+ }
160
+ return {
161
+ type: "FREEZE",
162
+ humanReadableType: "Network Freeze",
163
+ freeze: networkFreeze
164
+ };
165
+ }
166
+ if (hasTransactionType(transaction, "systemDelete")) {
167
+ const systemDelete = {};
168
+ if (tx._fileId) {
169
+ systemDelete.fileId = tx._fileId.toString();
170
+ } else if (tx._contractId) {
171
+ systemDelete.contractId = tx._contractId.toString();
172
+ }
173
+ if (tx._expirationTime) {
174
+ systemDelete.expirationTime = tx._expirationTime.toString();
175
+ }
176
+ return {
177
+ type: "SYSTEMDELETE",
178
+ humanReadableType: "System Delete",
179
+ systemDelete
180
+ };
181
+ }
182
+ if (hasTransactionType(transaction, "systemUndelete")) {
183
+ const systemUndelete = {};
184
+ if (tx._fileId) {
185
+ systemUndelete.fileId = tx._fileId.toString();
186
+ } else if (tx._contractId) {
187
+ systemUndelete.contractId = tx._contractId.toString();
188
+ }
189
+ return {
190
+ type: "SYSTEMUNDELETE",
191
+ humanReadableType: "System Undelete",
192
+ systemUndelete
193
+ };
194
+ }
195
+ return {};
196
+ } catch (error) {
197
+ return {};
198
+ }
199
+ }
200
+ /**
201
+ * Parse Network Freeze from protobuf data
202
+ */
203
+ static parseNetworkFreezeFromProto(body) {
204
+ if (!body) return void 0;
205
+ const data = {};
206
+ if (body.startTime?.seconds) {
207
+ data.startTime = `${Long.fromValue(
208
+ body.startTime.seconds
209
+ ).toString()}.${body.startTime.nanos ?? 0}`;
210
+ }
211
+ if (body.updateFile) {
212
+ data.updateFile = new FileId(
213
+ body.updateFile.shardNum ?? 0,
214
+ body.updateFile.realmNum ?? 0,
215
+ body.updateFile.fileNum ?? 0
216
+ ).toString();
217
+ }
218
+ if (body.fileHash && body.fileHash.length > 0) {
219
+ data.fileHash = Buffer.from(body.fileHash).toString("hex");
220
+ }
221
+ if (body.freezeType !== void 0) {
222
+ const freezeTypes = [
223
+ "FREEZE_ONLY",
224
+ "PREPARE_UPGRADE",
225
+ "FREEZE_UPGRADE",
226
+ "FREEZE_ABORT"
227
+ ];
228
+ data.freezeType = freezeTypes[body.freezeType] || "FREEZE_ONLY";
229
+ }
230
+ return data;
231
+ }
232
+ /**
233
+ * Parse System Delete from protobuf data
234
+ */
235
+ static parseSystemDeleteFromProto(body) {
236
+ if (!body) return void 0;
237
+ const data = {};
238
+ if (body.fileID) {
239
+ data.fileId = new FileId(
240
+ body.fileID.shardNum ?? 0,
241
+ body.fileID.realmNum ?? 0,
242
+ body.fileID.fileNum ?? 0
243
+ ).toString();
244
+ } else if (body.contractID) {
245
+ data.contractId = new ContractId(
246
+ body.contractID.shardNum ?? 0,
247
+ body.contractID.realmNum ?? 0,
248
+ body.contractID.contractNum ?? 0
249
+ ).toString();
250
+ }
251
+ if (body.expirationTime?.seconds) {
252
+ data.expirationTime = Long.fromValue(
253
+ body.expirationTime.seconds
254
+ ).toString();
255
+ }
256
+ return data;
257
+ }
258
+ /**
259
+ * Parse System Undelete from protobuf data
260
+ */
261
+ static parseSystemUndeleteFromProto(body) {
262
+ if (!body) return void 0;
263
+ const data = {};
264
+ if (body.fileID) {
265
+ data.fileId = new FileId(
266
+ body.fileID.shardNum ?? 0,
267
+ body.fileID.realmNum ?? 0,
268
+ body.fileID.fileNum ?? 0
269
+ ).toString();
270
+ } else if (body.contractID) {
271
+ data.contractId = new ContractId(
272
+ body.contractID.shardNum ?? 0,
273
+ body.contractID.realmNum ?? 0,
274
+ body.contractID.contractNum ?? 0
275
+ ).toString();
276
+ }
277
+ return data;
278
+ }
279
+ /**
280
+ * Parse Node Create from protobuf data
281
+ */
282
+ static parseNodeCreateFromProto(body) {
283
+ if (!body) return void 0;
284
+ const data = {};
285
+ if (body.nodeId !== void 0) {
286
+ data.nodeId = Long.fromValue(body.nodeId).toNumber();
287
+ }
288
+ return data;
289
+ }
290
+ /**
291
+ * Parse Node Update from protobuf data
292
+ */
293
+ static parseNodeUpdateFromProto(body) {
294
+ if (!body) return void 0;
295
+ const data = {};
296
+ if (body.nodeId !== void 0) {
297
+ data.nodeId = Long.fromValue(body.nodeId).toNumber();
298
+ }
299
+ return data;
300
+ }
301
+ /**
302
+ * Parse Node Delete from protobuf data
303
+ */
304
+ static parseNodeDeleteFromProto(body) {
305
+ if (!body) return void 0;
306
+ const data = {};
307
+ if (body.nodeId !== void 0) {
308
+ data.nodeId = Long.fromValue(body.nodeId).toNumber();
309
+ }
310
+ return data;
311
+ }
312
+ static parseUtilPrng(body) {
313
+ if (!body) return void 0;
314
+ const data = {};
315
+ if (body.range && body.range !== 0) {
316
+ data.range = body.range;
317
+ }
318
+ return data;
319
+ }
320
+ static parseFreeze(body) {
321
+ return this.parseNetworkFreezeFromProto(body);
322
+ }
323
+ /**
324
+ * Parse Utility/System Service transaction from Transaction object
325
+ * This is the unified entry point that delegates to the comprehensive parsing logic
326
+ */
327
+ static parseFromTransactionObject(transaction) {
328
+ return this.parseUtilTransaction(transaction);
329
+ }
330
+ }
331
+ export {
332
+ UtilParser
333
+ };
334
+ //# sourceMappingURL=standards-sdk.es196.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standards-sdk.es196.js","sources":["../../src/utils/parsers/util-parser.ts"],"sourcesContent":["import { proto } from '@hashgraph/proto';\nimport { Transaction, Long, FileId, ContractId } from '@hashgraph/sdk';\nimport {\n UtilPrngData,\n NetworkFreezeData,\n SystemDeleteData,\n SystemUndeleteData,\n NodeCreateData,\n NodeUpdateData,\n NodeDeleteData,\n} from '../transaction-parser-types';\nimport {\n parseKey,\n extractTransactionBody,\n hasTransactionType,\n} from './parser-utils';\n\n/**\n * Utility and System Operations Parser\n *\n * Handles parsing for utility and system transaction types including:\n * - Pseudo-random number generation (PRNG)\n * - Network freeze operations\n * - System delete/undelete operations\n * - Node management operations\n * - Proper dual-branch parsing (regular vs signed transactions)\n * - Comprehensive protobuf extraction\n */\nexport class UtilParser {\n /**\n * Parse Utility/System Service transaction using unified dual-branch approach\n * This handles both regular transactions and signed transaction variants\n */\n static parseUtilTransaction(\n transaction: Transaction,\n originalBytes?: Uint8Array,\n ): {\n type?: string;\n humanReadableType?: string;\n utilPrng?: UtilPrngData;\n networkFreeze?: NetworkFreezeData;\n systemDelete?: SystemDeleteData;\n systemUndelete?: SystemUndeleteData;\n nodeCreate?: NodeCreateData;\n nodeUpdate?: NodeUpdateData;\n nodeDelete?: NodeDeleteData;\n [key: string]: unknown;\n } {\n try {\n if (originalBytes || transaction.toBytes) {\n try {\n const bytesToParse = originalBytes || transaction.toBytes();\n const decoded = proto.TransactionList.decode(bytesToParse);\n\n if (decoded.transactionList && decoded.transactionList.length > 0) {\n const tx = decoded.transactionList[0];\n let txBody: proto.ITransactionBody | null = null;\n\n if (tx.bodyBytes && tx.bodyBytes.length > 0) {\n txBody = proto.TransactionBody.decode(tx.bodyBytes);\n } else if (\n tx.signedTransactionBytes &&\n tx.signedTransactionBytes.length > 0\n ) {\n const signedTx = proto.SignedTransaction.decode(\n tx.signedTransactionBytes,\n );\n if (signedTx.bodyBytes) {\n txBody = proto.TransactionBody.decode(signedTx.bodyBytes);\n }\n }\n\n if (txBody) {\n const protoResult = this.parseFromProtobufTxBody(txBody);\n if (protoResult.type && protoResult.type !== 'UNKNOWN') {\n return protoResult;\n }\n }\n }\n } catch (protoError) {}\n }\n\n return this.parseFromTransactionInternals(transaction);\n } catch (error) {\n return {\n type: 'UNKNOWN',\n humanReadableType: 'Unknown Utility Transaction',\n };\n }\n }\n\n /**\n * Parse utility transaction from protobuf TransactionBody\n * Handles all utility operations from decoded protobuf data\n */\n private static parseFromProtobufTxBody(txBody: proto.ITransactionBody): {\n type?: string;\n humanReadableType?: string;\n [key: string]: unknown;\n } {\n if (txBody.utilPrng) {\n const utilPrng = this.parseUtilPrng(txBody.utilPrng);\n if (utilPrng) {\n return {\n type: 'PRNG',\n humanReadableType: 'Pseudo Random Number',\n utilPrng,\n };\n }\n }\n\n if (txBody.freeze) {\n const networkFreeze = this.parseNetworkFreezeFromProto(txBody.freeze);\n if (networkFreeze) {\n return {\n type: 'FREEZE',\n humanReadableType: 'Network Freeze',\n freeze: networkFreeze,\n };\n }\n }\n\n if (txBody.systemDelete) {\n const systemDelete = this.parseSystemDeleteFromProto(txBody.systemDelete);\n if (systemDelete) {\n return {\n type: 'SYSTEMDELETE',\n humanReadableType: 'System Delete',\n systemDelete,\n };\n }\n }\n\n if (txBody.systemUndelete) {\n const systemUndelete = this.parseSystemUndeleteFromProto(\n txBody.systemUndelete,\n );\n if (systemUndelete) {\n return {\n type: 'SYSTEMUNDELETE',\n humanReadableType: 'System Undelete',\n systemUndelete,\n };\n }\n }\n\n if (txBody.nodeCreate) {\n const nodeCreate = this.parseNodeCreateFromProto(txBody.nodeCreate);\n if (nodeCreate) {\n return {\n type: 'NODECREATE',\n humanReadableType: 'Node Create',\n nodeCreate,\n };\n }\n }\n\n if (txBody.nodeUpdate) {\n const nodeUpdate = this.parseNodeUpdateFromProto(txBody.nodeUpdate);\n if (nodeUpdate) {\n return {\n type: 'NODEUPDATE',\n humanReadableType: 'Node Update',\n nodeUpdate,\n };\n }\n }\n\n if (txBody.nodeDelete) {\n const nodeDelete = this.parseNodeDeleteFromProto(txBody.nodeDelete);\n if (nodeDelete) {\n return {\n type: 'NODEDELETE',\n humanReadableType: 'Node Delete',\n nodeDelete,\n };\n }\n }\n\n return {};\n }\n\n /**\n * Extract utility data from Transaction internal fields\n * This handles cases where data is stored in Transaction object internals\n */\n private static parseFromTransactionInternals(transaction: Transaction): {\n type?: string;\n humanReadableType?: string;\n [key: string]: unknown;\n } {\n try {\n const tx = transaction as unknown as {\n _range?: number;\n _startTime?: { toString(): string };\n _endTime?: { toString(): string };\n _updateFile?: { toString(): string };\n _fileHash?: Uint8Array;\n _freezeType?: string;\n _fileId?: { toString(): string };\n _contractId?: { toString(): string };\n _expirationTime?: { toString(): string };\n _nodeId?: number;\n _accountId?: { toString(): string };\n _description?: string;\n _gossipEndpoint?: Array<unknown>;\n _serviceEndpoint?: Array<unknown>;\n _gossipCaCertificate?: Uint8Array;\n _grpcCertificateHash?: Uint8Array;\n _adminKey?: unknown;\n constructor?: { name?: string };\n };\n\n if (hasTransactionType(transaction, 'utilPrng')) {\n const utilPrng: UtilPrngData = {};\n if (tx._range && tx._range !== 0) {\n utilPrng.range = tx._range;\n }\n\n return {\n type: 'PRNG',\n humanReadableType: 'Pseudo Random Number',\n utilPrng,\n };\n }\n\n if (hasTransactionType(transaction, 'freeze')) {\n const networkFreeze: NetworkFreezeData = {};\n\n if (tx._startTime) {\n networkFreeze.startTime = tx._startTime.toString();\n }\n if (tx._endTime) {\n networkFreeze.endTime = tx._endTime.toString();\n }\n if (tx._updateFile) {\n networkFreeze.updateFile = tx._updateFile.toString();\n }\n if (tx._fileHash) {\n networkFreeze.fileHash = Buffer.from(tx._fileHash).toString('hex');\n }\n if (tx._freezeType) {\n networkFreeze.freezeType = tx._freezeType as any;\n }\n\n return {\n type: 'FREEZE',\n humanReadableType: 'Network Freeze',\n freeze: networkFreeze,\n };\n }\n\n if (hasTransactionType(transaction, 'systemDelete')) {\n const systemDelete: SystemDeleteData = {};\n\n if (tx._fileId) {\n systemDelete.fileId = tx._fileId.toString();\n } else if (tx._contractId) {\n systemDelete.contractId = tx._contractId.toString();\n }\n\n if (tx._expirationTime) {\n systemDelete.expirationTime = tx._expirationTime.toString();\n }\n\n return {\n type: 'SYSTEMDELETE',\n humanReadableType: 'System Delete',\n systemDelete,\n };\n }\n\n if (hasTransactionType(transaction, 'systemUndelete')) {\n const systemUndelete: SystemUndeleteData = {};\n\n if (tx._fileId) {\n systemUndelete.fileId = tx._fileId.toString();\n } else if (tx._contractId) {\n systemUndelete.contractId = tx._contractId.toString();\n }\n\n return {\n type: 'SYSTEMUNDELETE',\n humanReadableType: 'System Undelete',\n systemUndelete,\n };\n }\n\n return {};\n } catch (error) {\n return {};\n }\n }\n\n /**\n * Parse Network Freeze from protobuf data\n */\n private static parseNetworkFreezeFromProto(\n body: proto.IFreezeTransactionBody,\n ): NetworkFreezeData | undefined {\n if (!body) return undefined;\n\n const data: NetworkFreezeData = {};\n\n if (body.startTime?.seconds) {\n data.startTime = `${Long.fromValue(\n body.startTime.seconds,\n ).toString()}.${body.startTime.nanos ?? 0}`;\n }\n\n if (body.updateFile) {\n data.updateFile = new FileId(\n body.updateFile.shardNum ?? 0,\n body.updateFile.realmNum ?? 0,\n body.updateFile.fileNum ?? 0,\n ).toString();\n }\n\n if (body.fileHash && body.fileHash.length > 0) {\n data.fileHash = Buffer.from(body.fileHash).toString('hex');\n }\n\n if (body.freezeType !== undefined) {\n const freezeTypes = [\n 'FREEZE_ONLY',\n 'PREPARE_UPGRADE',\n 'FREEZE_UPGRADE',\n 'FREEZE_ABORT',\n ];\n data.freezeType = (freezeTypes[body.freezeType] as any) || 'FREEZE_ONLY';\n }\n\n return data;\n }\n\n /**\n * Parse System Delete from protobuf data\n */\n private static parseSystemDeleteFromProto(\n body: proto.ISystemDeleteTransactionBody,\n ): SystemDeleteData | undefined {\n if (!body) return undefined;\n\n const data: SystemDeleteData = {};\n\n if (body.fileID) {\n data.fileId = new FileId(\n body.fileID.shardNum ?? 0,\n body.fileID.realmNum ?? 0,\n body.fileID.fileNum ?? 0,\n ).toString();\n } else if (body.contractID) {\n data.contractId = new ContractId(\n body.contractID.shardNum ?? 0,\n body.contractID.realmNum ?? 0,\n body.contractID.contractNum ?? 0,\n ).toString();\n }\n\n if (body.expirationTime?.seconds) {\n data.expirationTime = Long.fromValue(\n body.expirationTime.seconds,\n ).toString();\n }\n\n return data;\n }\n\n /**\n * Parse System Undelete from protobuf data\n */\n private static parseSystemUndeleteFromProto(\n body: proto.ISystemUndeleteTransactionBody,\n ): SystemUndeleteData | undefined {\n if (!body) return undefined;\n\n const data: SystemUndeleteData = {};\n\n if (body.fileID) {\n data.fileId = new FileId(\n body.fileID.shardNum ?? 0,\n body.fileID.realmNum ?? 0,\n body.fileID.fileNum ?? 0,\n ).toString();\n } else if (body.contractID) {\n data.contractId = new ContractId(\n body.contractID.shardNum ?? 0,\n body.contractID.realmNum ?? 0,\n body.contractID.contractNum ?? 0,\n ).toString();\n }\n\n return data;\n }\n\n /**\n * Parse Node Create from protobuf data\n */\n private static parseNodeCreateFromProto(\n body: any,\n ): NodeCreateData | undefined {\n if (!body) return undefined;\n\n const data: NodeCreateData = {};\n\n if (body.nodeId !== undefined) {\n data.nodeId = Long.fromValue(body.nodeId).toNumber();\n }\n\n return data;\n }\n\n /**\n * Parse Node Update from protobuf data\n */\n private static parseNodeUpdateFromProto(\n body: any,\n ): NodeUpdateData | undefined {\n if (!body) return undefined;\n\n const data: NodeUpdateData = {};\n\n if (body.nodeId !== undefined) {\n data.nodeId = Long.fromValue(body.nodeId).toNumber();\n }\n\n return data;\n }\n\n /**\n * Parse Node Delete from protobuf data\n */\n private static parseNodeDeleteFromProto(\n body: any,\n ): NodeDeleteData | undefined {\n if (!body) return undefined;\n\n const data: NodeDeleteData = {};\n\n if (body.nodeId !== undefined) {\n data.nodeId = Long.fromValue(body.nodeId).toNumber();\n }\n\n return data;\n }\n\n static parseUtilPrng(\n body: proto.IUtilPrngTransactionBody,\n ): UtilPrngData | undefined {\n if (!body) return undefined;\n const data: UtilPrngData = {};\n if (body.range && body.range !== 0) {\n data.range = body.range;\n }\n return data;\n }\n\n static parseFreeze(\n body: proto.IFreezeTransactionBody,\n ): NetworkFreezeData | undefined {\n return this.parseNetworkFreezeFromProto(body);\n }\n\n /**\n * Parse Utility/System Service transaction from Transaction object\n * This is the unified entry point that delegates to the comprehensive parsing logic\n */\n static parseFromTransactionObject(transaction: Transaction): {\n type?: string;\n humanReadableType?: string;\n [key: string]: unknown;\n } {\n return this.parseUtilTransaction(transaction);\n }\n}\n"],"names":[],"mappings":";;;AA4BO,MAAM,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,EAKtB,OAAO,qBACL,aACA,eAYA;AACA,QAAI;AACF,UAAI,iBAAiB,YAAY,SAAS;AACxC,YAAI;AACF,gBAAM,eAAe,iBAAiB,YAAY,QAAA;AAClD,gBAAM,UAAU,MAAM,gBAAgB,OAAO,YAAY;AAEzD,cAAI,QAAQ,mBAAmB,QAAQ,gBAAgB,SAAS,GAAG;AACjE,kBAAM,KAAK,QAAQ,gBAAgB,CAAC;AACpC,gBAAI,SAAwC;AAE5C,gBAAI,GAAG,aAAa,GAAG,UAAU,SAAS,GAAG;AAC3C,uBAAS,MAAM,gBAAgB,OAAO,GAAG,SAAS;AAAA,YACpD,WACE,GAAG,0BACH,GAAG,uBAAuB,SAAS,GACnC;AACA,oBAAM,WAAW,MAAM,kBAAkB;AAAA,gBACvC,GAAG;AAAA,cAAA;AAEL,kBAAI,SAAS,WAAW;AACtB,yBAAS,MAAM,gBAAgB,OAAO,SAAS,SAAS;AAAA,cAC1D;AAAA,YACF;AAEA,gBAAI,QAAQ;AACV,oBAAM,cAAc,KAAK,wBAAwB,MAAM;AACvD,kBAAI,YAAY,QAAQ,YAAY,SAAS,WAAW;AACtD,uBAAO;AAAA,cACT;AAAA,YACF;AAAA,UACF;AAAA,QACF,SAAS,YAAY;AAAA,QAAC;AAAA,MACxB;AAEA,aAAO,KAAK,8BAA8B,WAAW;AAAA,IACvD,SAAS,OAAO;AACd,aAAO;AAAA,QACL,MAAM;AAAA,QACN,mBAAmB;AAAA,MAAA;AAAA,IAEvB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAe,wBAAwB,QAIrC;AACA,QAAI,OAAO,UAAU;AACnB,YAAM,WAAW,KAAK,cAAc,OAAO,QAAQ;AACnD,UAAI,UAAU;AACZ,eAAO;AAAA,UACL,MAAM;AAAA,UACN,mBAAmB;AAAA,UACnB;AAAA,QAAA;AAAA,MAEJ;AAAA,IACF;AAEA,QAAI,OAAO,QAAQ;AACjB,YAAM,gBAAgB,KAAK,4BAA4B,OAAO,MAAM;AACpE,UAAI,eAAe;AACjB,eAAO;AAAA,UACL,MAAM;AAAA,UACN,mBAAmB;AAAA,UACnB,QAAQ;AAAA,QAAA;AAAA,MAEZ;AAAA,IACF;AAEA,QAAI,OAAO,cAAc;AACvB,YAAM,eAAe,KAAK,2BAA2B,OAAO,YAAY;AACxE,UAAI,cAAc;AAChB,eAAO;AAAA,UACL,MAAM;AAAA,UACN,mBAAmB;AAAA,UACnB;AAAA,QAAA;AAAA,MAEJ;AAAA,IACF;AAEA,QAAI,OAAO,gBAAgB;AACzB,YAAM,iBAAiB,KAAK;AAAA,QAC1B,OAAO;AAAA,MAAA;AAET,UAAI,gBAAgB;AAClB,eAAO;AAAA,UACL,MAAM;AAAA,UACN,mBAAmB;AAAA,UACnB;AAAA,QAAA;AAAA,MAEJ;AAAA,IACF;AAEA,QAAI,OAAO,YAAY;AACrB,YAAM,aAAa,KAAK,yBAAyB,OAAO,UAAU;AAClE,UAAI,YAAY;AACd,eAAO;AAAA,UACL,MAAM;AAAA,UACN,mBAAmB;AAAA,UACnB;AAAA,QAAA;AAAA,MAEJ;AAAA,IACF;AAEA,QAAI,OAAO,YAAY;AACrB,YAAM,aAAa,KAAK,yBAAyB,OAAO,UAAU;AAClE,UAAI,YAAY;AACd,eAAO;AAAA,UACL,MAAM;AAAA,UACN,mBAAmB;AAAA,UACnB;AAAA,QAAA;AAAA,MAEJ;AAAA,IACF;AAEA,QAAI,OAAO,YAAY;AACrB,YAAM,aAAa,KAAK,yBAAyB,OAAO,UAAU;AAClE,UAAI,YAAY;AACd,eAAO;AAAA,UACL,MAAM;AAAA,UACN,mBAAmB;AAAA,UACnB;AAAA,QAAA;AAAA,MAEJ;AAAA,IACF;AAEA,WAAO,CAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAe,8BAA8B,aAI3C;AACA,QAAI;AACF,YAAM,KAAK;AAqBX,UAAI,mBAAmB,aAAa,UAAU,GAAG;AAC/C,cAAM,WAAyB,CAAA;AAC/B,YAAI,GAAG,UAAU,GAAG,WAAW,GAAG;AAChC,mBAAS,QAAQ,GAAG;AAAA,QACtB;AAEA,eAAO;AAAA,UACL,MAAM;AAAA,UACN,mBAAmB;AAAA,UACnB;AAAA,QAAA;AAAA,MAEJ;AAEA,UAAI,mBAAmB,aAAa,QAAQ,GAAG;AAC7C,cAAM,gBAAmC,CAAA;AAEzC,YAAI,GAAG,YAAY;AACjB,wBAAc,YAAY,GAAG,WAAW,SAAA;AAAA,QAC1C;AACA,YAAI,GAAG,UAAU;AACf,wBAAc,UAAU,GAAG,SAAS,SAAA;AAAA,QACtC;AACA,YAAI,GAAG,aAAa;AAClB,wBAAc,aAAa,GAAG,YAAY,SAAA;AAAA,QAC5C;AACA,YAAI,GAAG,WAAW;AAChB,wBAAc,WAAW,OAAO,KAAK,GAAG,SAAS,EAAE,SAAS,KAAK;AAAA,QACnE;AACA,YAAI,GAAG,aAAa;AAClB,wBAAc,aAAa,GAAG;AAAA,QAChC;AAEA,eAAO;AAAA,UACL,MAAM;AAAA,UACN,mBAAmB;AAAA,UACnB,QAAQ;AAAA,QAAA;AAAA,MAEZ;AAEA,UAAI,mBAAmB,aAAa,cAAc,GAAG;AACnD,cAAM,eAAiC,CAAA;AAEvC,YAAI,GAAG,SAAS;AACd,uBAAa,SAAS,GAAG,QAAQ,SAAA;AAAA,QACnC,WAAW,GAAG,aAAa;AACzB,uBAAa,aAAa,GAAG,YAAY,SAAA;AAAA,QAC3C;AAEA,YAAI,GAAG,iBAAiB;AACtB,uBAAa,iBAAiB,GAAG,gBAAgB,SAAA;AAAA,QACnD;AAEA,eAAO;AAAA,UACL,MAAM;AAAA,UACN,mBAAmB;AAAA,UACnB;AAAA,QAAA;AAAA,MAEJ;AAEA,UAAI,mBAAmB,aAAa,gBAAgB,GAAG;AACrD,cAAM,iBAAqC,CAAA;AAE3C,YAAI,GAAG,SAAS;AACd,yBAAe,SAAS,GAAG,QAAQ,SAAA;AAAA,QACrC,WAAW,GAAG,aAAa;AACzB,yBAAe,aAAa,GAAG,YAAY,SAAA;AAAA,QAC7C;AAEA,eAAO;AAAA,UACL,MAAM;AAAA,UACN,mBAAmB;AAAA,UACnB;AAAA,QAAA;AAAA,MAEJ;AAEA,aAAO,CAAA;AAAA,IACT,SAAS,OAAO;AACd,aAAO,CAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,4BACb,MAC+B;AAC/B,QAAI,CAAC,KAAM,QAAO;AAElB,UAAM,OAA0B,CAAA;AAEhC,QAAI,KAAK,WAAW,SAAS;AAC3B,WAAK,YAAY,GAAG,KAAK;AAAA,QACvB,KAAK,UAAU;AAAA,MAAA,EACf,SAAA,CAAU,IAAI,KAAK,UAAU,SAAS,CAAC;AAAA,IAC3C;AAEA,QAAI,KAAK,YAAY;AACnB,WAAK,aAAa,IAAI;AAAA,QACpB,KAAK,WAAW,YAAY;AAAA,QAC5B,KAAK,WAAW,YAAY;AAAA,QAC5B,KAAK,WAAW,WAAW;AAAA,MAAA,EAC3B,SAAA;AAAA,IACJ;AAEA,QAAI,KAAK,YAAY,KAAK,SAAS,SAAS,GAAG;AAC7C,WAAK,WAAW,OAAO,KAAK,KAAK,QAAQ,EAAE,SAAS,KAAK;AAAA,IAC3D;AAEA,QAAI,KAAK,eAAe,QAAW;AACjC,YAAM,cAAc;AAAA,QAClB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAEF,WAAK,aAAc,YAAY,KAAK,UAAU,KAAa;AAAA,IAC7D;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,2BACb,MAC8B;AAC9B,QAAI,CAAC,KAAM,QAAO;AAElB,UAAM,OAAyB,CAAA;AAE/B,QAAI,KAAK,QAAQ;AACf,WAAK,SAAS,IAAI;AAAA,QAChB,KAAK,OAAO,YAAY;AAAA,QACxB,KAAK,OAAO,YAAY;AAAA,QACxB,KAAK,OAAO,WAAW;AAAA,MAAA,EACvB,SAAA;AAAA,IACJ,WAAW,KAAK,YAAY;AAC1B,WAAK,aAAa,IAAI;AAAA,QACpB,KAAK,WAAW,YAAY;AAAA,QAC5B,KAAK,WAAW,YAAY;AAAA,QAC5B,KAAK,WAAW,eAAe;AAAA,MAAA,EAC/B,SAAA;AAAA,IACJ;AAEA,QAAI,KAAK,gBAAgB,SAAS;AAChC,WAAK,iBAAiB,KAAK;AAAA,QACzB,KAAK,eAAe;AAAA,MAAA,EACpB,SAAA;AAAA,IACJ;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,6BACb,MACgC;AAChC,QAAI,CAAC,KAAM,QAAO;AAElB,UAAM,OAA2B,CAAA;AAEjC,QAAI,KAAK,QAAQ;AACf,WAAK,SAAS,IAAI;AAAA,QAChB,KAAK,OAAO,YAAY;AAAA,QACxB,KAAK,OAAO,YAAY;AAAA,QACxB,KAAK,OAAO,WAAW;AAAA,MAAA,EACvB,SAAA;AAAA,IACJ,WAAW,KAAK,YAAY;AAC1B,WAAK,aAAa,IAAI;AAAA,QACpB,KAAK,WAAW,YAAY;AAAA,QAC5B,KAAK,WAAW,YAAY;AAAA,QAC5B,KAAK,WAAW,eAAe;AAAA,MAAA,EAC/B,SAAA;AAAA,IACJ;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,yBACb,MAC4B;AAC5B,QAAI,CAAC,KAAM,QAAO;AAElB,UAAM,OAAuB,CAAA;AAE7B,QAAI,KAAK,WAAW,QAAW;AAC7B,WAAK,SAAS,KAAK,UAAU,KAAK,MAAM,EAAE,SAAA;AAAA,IAC5C;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,yBACb,MAC4B;AAC5B,QAAI,CAAC,KAAM,QAAO;AAElB,UAAM,OAAuB,CAAA;AAE7B,QAAI,KAAK,WAAW,QAAW;AAC7B,WAAK,SAAS,KAAK,UAAU,KAAK,MAAM,EAAE,SAAA;AAAA,IAC5C;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,yBACb,MAC4B;AAC5B,QAAI,CAAC,KAAM,QAAO;AAElB,UAAM,OAAuB,CAAA;AAE7B,QAAI,KAAK,WAAW,QAAW;AAC7B,WAAK,SAAS,KAAK,UAAU,KAAK,MAAM,EAAE,SAAA;AAAA,IAC5C;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,cACL,MAC0B;AAC1B,QAAI,CAAC,KAAM,QAAO;AAClB,UAAM,OAAqB,CAAA;AAC3B,QAAI,KAAK,SAAS,KAAK,UAAU,GAAG;AAClC,WAAK,QAAQ,KAAK;AAAA,IACpB;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,YACL,MAC+B;AAC/B,WAAO,KAAK,4BAA4B,IAAI;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,2BAA2B,aAIhC;AACA,WAAO,KAAK,qBAAqB,WAAW;AAAA,EAC9C;AACF;"}
@@ -0,0 +1,79 @@
1
+ import { proto } from "@hashgraph/proto";
2
+ import { ContractId } from "@hashgraph/sdk";
3
+ import { Buffer } from "buffer";
4
+ function parseKey(key) {
5
+ if (!key) {
6
+ return void 0;
7
+ }
8
+ if (key.contractID) {
9
+ return `ContractID: ${new ContractId(
10
+ key.contractID.shardNum ?? 0,
11
+ key.contractID.realmNum ?? 0,
12
+ key.contractID.contractNum ?? 0
13
+ ).toString()}`;
14
+ }
15
+ if (key.ed25519) {
16
+ return `ED25519: ${Buffer.from(key.ed25519).toString("hex")}`;
17
+ }
18
+ if (key.ECDSASecp256k1) {
19
+ return `ECDSA_secp256k1: ${Buffer.from(key.ECDSASecp256k1).toString(
20
+ "hex"
21
+ )}`;
22
+ }
23
+ if (key?.keyList?.keys?.length > 0) {
24
+ const keys = key.keyList.keys.map((k) => parseKey(k)).filter(Boolean);
25
+ return `KeyList (${keys.length} keys): [${keys.join(", ")}]`;
26
+ }
27
+ if (key?.thresholdKey?.keys?.keys?.length > 0) {
28
+ const keys = key.thresholdKey.keys.keys.map((k) => parseKey(k)).filter(Boolean);
29
+ return `ThresholdKey (${key.thresholdKey.threshold} of ${keys.length}): [${keys.join(", ")}]`;
30
+ }
31
+ if (key.delegatableContractId) {
32
+ return `DelegatableContractID: ${new ContractId(
33
+ key.delegatableContractId.shardNum ?? 0,
34
+ key.delegatableContractId.realmNum ?? 0,
35
+ key.delegatableContractId.contractNum ?? 0
36
+ ).toString()}`;
37
+ }
38
+ if (Object.keys(key).length === 0) {
39
+ return "Empty Key Structure";
40
+ }
41
+ return "Unknown or Unset Key Type";
42
+ }
43
+ function extractTransactionBody(transaction) {
44
+ try {
45
+ const bytes = transaction.toBytes ? transaction.toBytes() : void 0;
46
+ if (!bytes) {
47
+ return null;
48
+ }
49
+ const decoded = proto.TransactionList.decode(bytes);
50
+ if (!decoded.transactionList || decoded.transactionList.length === 0) {
51
+ return null;
52
+ }
53
+ const tx = decoded.transactionList[0];
54
+ if (tx.bodyBytes && tx.bodyBytes.length > 0) {
55
+ return proto.TransactionBody.decode(tx.bodyBytes);
56
+ }
57
+ if (tx.signedTransactionBytes && tx.signedTransactionBytes.length > 0) {
58
+ const signedTx = proto.SignedTransaction.decode(
59
+ tx.signedTransactionBytes
60
+ );
61
+ if (signedTx.bodyBytes) {
62
+ return proto.TransactionBody.decode(signedTx.bodyBytes);
63
+ }
64
+ }
65
+ return null;
66
+ } catch (error) {
67
+ return null;
68
+ }
69
+ }
70
+ function hasTransactionType(transaction, transactionField) {
71
+ const txBody = extractTransactionBody(transaction);
72
+ return !!(txBody && txBody[transactionField]);
73
+ }
74
+ export {
75
+ extractTransactionBody,
76
+ hasTransactionType,
77
+ parseKey
78
+ };
79
+ //# sourceMappingURL=standards-sdk.es197.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standards-sdk.es197.js","sources":["../../src/utils/parsers/parser-utils.ts"],"sourcesContent":["import { proto } from '@hashgraph/proto';\nimport { ContractId, Transaction } from '@hashgraph/sdk';\nimport { Buffer } from 'buffer';\n\nexport function parseKey(\n key: proto.IKey | null | undefined,\n): string | undefined {\n if (!key) {\n return undefined;\n }\n\n if (key.contractID) {\n return `ContractID: ${new ContractId(\n key.contractID.shardNum ?? 0,\n key.contractID.realmNum ?? 0,\n key.contractID.contractNum ?? 0,\n ).toString()}`;\n }\n if (key.ed25519) {\n return `ED25519: ${Buffer.from(key.ed25519).toString('hex')}`;\n }\n if (key.ECDSASecp256k1) {\n return `ECDSA_secp256k1: ${Buffer.from(key.ECDSASecp256k1).toString(\n 'hex',\n )}`;\n }\n if (key?.keyList?.keys?.length > 0) {\n const keys = key.keyList.keys.map(k => parseKey(k)).filter(Boolean);\n return `KeyList (${keys.length} keys): [${keys.join(', ')}]`;\n }\n if (key?.thresholdKey?.keys?.keys?.length > 0) {\n const keys = key.thresholdKey.keys.keys\n .map(k => parseKey(k))\n .filter(Boolean);\n return `ThresholdKey (${key.thresholdKey.threshold} of ${\n keys.length\n }): [${keys.join(', ')}]`;\n }\n if (key.delegatableContractId) {\n return `DelegatableContractID: ${new ContractId(\n key.delegatableContractId.shardNum ?? 0,\n key.delegatableContractId.realmNum ?? 0,\n key.delegatableContractId.contractNum ?? 0,\n ).toString()}`;\n }\n if (Object.keys(key).length === 0) {\n return 'Empty Key Structure';\n }\n\n return 'Unknown or Unset Key Type';\n}\n\n/**\n * Extract TransactionBody from Transaction object using protobuf parsing\n * This replaces fragile constructor name checking with reliable protobuf data\n */\nexport function extractTransactionBody(\n transaction: Transaction,\n): proto.ITransactionBody | null {\n try {\n const bytes = transaction.toBytes ? transaction.toBytes() : undefined;\n if (!bytes) {\n return null;\n }\n\n const decoded = proto.TransactionList.decode(bytes);\n if (!decoded.transactionList || decoded.transactionList.length === 0) {\n return null;\n }\n\n const tx = decoded.transactionList[0];\n\n if (tx.bodyBytes && tx.bodyBytes.length > 0) {\n return proto.TransactionBody.decode(tx.bodyBytes);\n }\n\n if (tx.signedTransactionBytes && tx.signedTransactionBytes.length > 0) {\n const signedTx = proto.SignedTransaction.decode(\n tx.signedTransactionBytes,\n );\n if (signedTx.bodyBytes) {\n return proto.TransactionBody.decode(signedTx.bodyBytes);\n }\n }\n\n return null;\n } catch (error) {\n return null;\n }\n}\n\n/**\n * Check if transaction has specific transaction type using protobuf data\n * This replaces constructor name checking with reliable protobuf field detection\n */\nexport function hasTransactionType(\n transaction: Transaction,\n transactionField: keyof proto.ITransactionBody,\n): boolean {\n const txBody = extractTransactionBody(transaction);\n return !!(txBody && txBody[transactionField]);\n}\n"],"names":[],"mappings":";;;AAIO,SAAS,SACd,KACoB;AACpB,MAAI,CAAC,KAAK;AACR,WAAO;AAAA,EACT;AAEA,MAAI,IAAI,YAAY;AAClB,WAAO,eAAe,IAAI;AAAA,MACxB,IAAI,WAAW,YAAY;AAAA,MAC3B,IAAI,WAAW,YAAY;AAAA,MAC3B,IAAI,WAAW,eAAe;AAAA,IAAA,EAC9B,UAAU;AAAA,EACd;AACA,MAAI,IAAI,SAAS;AACf,WAAO,YAAY,OAAO,KAAK,IAAI,OAAO,EAAE,SAAS,KAAK,CAAC;AAAA,EAC7D;AACA,MAAI,IAAI,gBAAgB;AACtB,WAAO,oBAAoB,OAAO,KAAK,IAAI,cAAc,EAAE;AAAA,MACzD;AAAA,IAAA,CACD;AAAA,EACH;AACA,MAAI,KAAK,SAAS,MAAM,SAAS,GAAG;AAClC,UAAM,OAAO,IAAI,QAAQ,KAAK,IAAI,CAAA,MAAK,SAAS,CAAC,CAAC,EAAE,OAAO,OAAO;AAClE,WAAO,YAAY,KAAK,MAAM,YAAY,KAAK,KAAK,IAAI,CAAC;AAAA,EAC3D;AACA,MAAI,KAAK,cAAc,MAAM,MAAM,SAAS,GAAG;AAC7C,UAAM,OAAO,IAAI,aAAa,KAAK,KAChC,IAAI,CAAA,MAAK,SAAS,CAAC,CAAC,EACpB,OAAO,OAAO;AACjB,WAAO,iBAAiB,IAAI,aAAa,SAAS,OAChD,KAAK,MACP,OAAO,KAAK,KAAK,IAAI,CAAC;AAAA,EACxB;AACA,MAAI,IAAI,uBAAuB;AAC7B,WAAO,0BAA0B,IAAI;AAAA,MACnC,IAAI,sBAAsB,YAAY;AAAA,MACtC,IAAI,sBAAsB,YAAY;AAAA,MACtC,IAAI,sBAAsB,eAAe;AAAA,IAAA,EACzC,UAAU;AAAA,EACd;AACA,MAAI,OAAO,KAAK,GAAG,EAAE,WAAW,GAAG;AACjC,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAMO,SAAS,uBACd,aAC+B;AAC/B,MAAI;AACF,UAAM,QAAQ,YAAY,UAAU,YAAY,YAAY;AAC5D,QAAI,CAAC,OAAO;AACV,aAAO;AAAA,IACT;AAEA,UAAM,UAAU,MAAM,gBAAgB,OAAO,KAAK;AAClD,QAAI,CAAC,QAAQ,mBAAmB,QAAQ,gBAAgB,WAAW,GAAG;AACpE,aAAO;AAAA,IACT;AAEA,UAAM,KAAK,QAAQ,gBAAgB,CAAC;AAEpC,QAAI,GAAG,aAAa,GAAG,UAAU,SAAS,GAAG;AAC3C,aAAO,MAAM,gBAAgB,OAAO,GAAG,SAAS;AAAA,IAClD;AAEA,QAAI,GAAG,0BAA0B,GAAG,uBAAuB,SAAS,GAAG;AACrE,YAAM,WAAW,MAAM,kBAAkB;AAAA,QACvC,GAAG;AAAA,MAAA;AAEL,UAAI,SAAS,WAAW;AACtB,eAAO,MAAM,gBAAgB,OAAO,SAAS,SAAS;AAAA,MACxD;AAAA,IACF;AAEA,WAAO;AAAA,EACT,SAAS,OAAO;AACd,WAAO;AAAA,EACT;AACF;AAMO,SAAS,mBACd,aACA,kBACS;AACT,QAAM,SAAS,uBAAuB,WAAW;AACjD,SAAO,CAAC,EAAE,UAAU,OAAO,gBAAgB;AAC7C;"}
@@ -0,0 +1,142 @@
1
+ import { Buffer } from "buffer";
2
+ import { chatHistorySnapshotResponseSchema } from "./standards-sdk.es157.js";
3
+ function identitiesMatch(a, b) {
4
+ if (!a && !b) {
5
+ return true;
6
+ }
7
+ if (!a || !b) {
8
+ return false;
9
+ }
10
+ if (a.uaid && b.uaid && a.uaid.toLowerCase() === b.uaid.toLowerCase()) {
11
+ return true;
12
+ }
13
+ if (a.ledgerAccountId && b.ledgerAccountId && a.ledgerAccountId.toLowerCase() === b.ledgerAccountId.toLowerCase()) {
14
+ return true;
15
+ }
16
+ if (a.userId && b.userId && a.userId === b.userId) {
17
+ return true;
18
+ }
19
+ if (a.email && b.email && a.email.toLowerCase() === b.email.toLowerCase()) {
20
+ return true;
21
+ }
22
+ return false;
23
+ }
24
+ async function fetchHistorySnapshot(conversationContexts, client, sessionId, options) {
25
+ if (!sessionId || sessionId.trim().length === 0) {
26
+ throw new Error("sessionId is required to fetch chat history");
27
+ }
28
+ const raw = await client.requestJson(
29
+ `/chat/session/${encodeURIComponent(sessionId)}/history`,
30
+ {
31
+ method: "GET"
32
+ }
33
+ );
34
+ const snapshot = client.parseWithSchema(
35
+ raw,
36
+ chatHistorySnapshotResponseSchema,
37
+ "chat history snapshot response"
38
+ );
39
+ return attachDecryptedHistory(
40
+ conversationContexts,
41
+ client,
42
+ sessionId,
43
+ snapshot,
44
+ options
45
+ );
46
+ }
47
+ function attachDecryptedHistory(conversationContexts, client, sessionId, snapshot, options) {
48
+ const shouldDecrypt = options?.decrypt !== void 0 ? options.decrypt : client.encryptionOptions?.autoDecryptHistory === true;
49
+ if (!shouldDecrypt) {
50
+ return snapshot;
51
+ }
52
+ const requiresContext = snapshot.history.some(
53
+ (entry) => Boolean(entry.cipherEnvelope)
54
+ );
55
+ if (!requiresContext) {
56
+ return {
57
+ ...snapshot,
58
+ decryptedHistory: snapshot.history.map((entry) => ({
59
+ entry,
60
+ plaintext: entry.content
61
+ }))
62
+ };
63
+ }
64
+ const context = resolveDecryptionContext(
65
+ conversationContexts,
66
+ client,
67
+ sessionId,
68
+ options
69
+ );
70
+ if (!context) {
71
+ throw new Error(
72
+ "Unable to decrypt chat history: encryption context unavailable"
73
+ );
74
+ }
75
+ const decryptedHistory = snapshot.history.map((entry) => ({
76
+ entry,
77
+ plaintext: decryptHistoryEntryFromContext(client, entry, context)
78
+ }));
79
+ return { ...snapshot, decryptedHistory };
80
+ }
81
+ function registerConversationContextForEncryption(conversationContexts, context) {
82
+ const normalized = {
83
+ sessionId: context.sessionId,
84
+ sharedSecret: Buffer.from(context.sharedSecret),
85
+ identity: context.identity ? { ...context.identity } : void 0
86
+ };
87
+ const entries = conversationContexts.get(context.sessionId) ?? [];
88
+ const existingIndex = entries.findIndex(
89
+ (existing) => identitiesMatch(existing.identity, normalized.identity)
90
+ );
91
+ if (existingIndex >= 0) {
92
+ entries[existingIndex] = normalized;
93
+ } else {
94
+ entries.push(normalized);
95
+ }
96
+ conversationContexts.set(context.sessionId, entries);
97
+ }
98
+ function resolveDecryptionContext(conversationContexts, client, sessionId, options) {
99
+ if (options?.sharedSecret) {
100
+ return {
101
+ sessionId,
102
+ sharedSecret: client.normalizeSharedSecret(options.sharedSecret),
103
+ identity: options.identity
104
+ };
105
+ }
106
+ const contexts = conversationContexts.get(sessionId);
107
+ if (!contexts || contexts.length === 0) {
108
+ return null;
109
+ }
110
+ if (options?.identity) {
111
+ const match = contexts.find(
112
+ (context) => identitiesMatch(context.identity, options.identity)
113
+ );
114
+ if (match) {
115
+ return match;
116
+ }
117
+ }
118
+ return contexts[0];
119
+ }
120
+ function decryptHistoryEntryFromContext(client, entry, context) {
121
+ const envelope = entry.cipherEnvelope;
122
+ if (!envelope) {
123
+ return entry.content;
124
+ }
125
+ const secret = Buffer.from(context.sharedSecret);
126
+ try {
127
+ return client.encryption.decryptCipherEnvelope({
128
+ envelope,
129
+ sharedSecret: secret
130
+ });
131
+ } catch (_error) {
132
+ return null;
133
+ }
134
+ }
135
+ export {
136
+ attachDecryptedHistory,
137
+ decryptHistoryEntryFromContext,
138
+ fetchHistorySnapshot,
139
+ registerConversationContextForEncryption,
140
+ resolveDecryptionContext
141
+ };
142
+ //# sourceMappingURL=standards-sdk.es198.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standards-sdk.es198.js","sources":["../../src/services/registry-broker/client/chat-history.ts"],"sourcesContent":["import { Buffer } from 'buffer';\nimport type {\n ChatHistoryEntry,\n ChatHistoryFetchOptions,\n ChatHistorySnapshotResponse,\n ChatHistorySnapshotWithDecryptedEntries,\n JsonValue,\n RecipientIdentity,\n} from '../types';\nimport { chatHistorySnapshotResponseSchema } from '../schemas';\nimport type { RegistryBrokerClient } from './base-client';\n\nexport interface ConversationContextInput {\n sessionId: string;\n sharedSecret: Uint8Array | Buffer;\n identity?: RecipientIdentity;\n}\n\nexport interface ConversationContextState {\n sessionId: string;\n sharedSecret: Buffer;\n identity?: RecipientIdentity;\n}\n\nfunction identitiesMatch(\n a?: RecipientIdentity,\n b?: RecipientIdentity,\n): boolean {\n if (!a && !b) {\n return true;\n }\n if (!a || !b) {\n return false;\n }\n if (a.uaid && b.uaid && a.uaid.toLowerCase() === b.uaid.toLowerCase()) {\n return true;\n }\n if (\n a.ledgerAccountId &&\n b.ledgerAccountId &&\n a.ledgerAccountId.toLowerCase() === b.ledgerAccountId.toLowerCase()\n ) {\n return true;\n }\n if (a.userId && b.userId && a.userId === b.userId) {\n return true;\n }\n if (a.email && b.email && a.email.toLowerCase() === b.email.toLowerCase()) {\n return true;\n }\n return false;\n}\n\nexport async function fetchHistorySnapshot(\n conversationContexts: Map<string, ConversationContextState[]>,\n client: RegistryBrokerClient,\n sessionId: string,\n options?: ChatHistoryFetchOptions,\n): Promise<ChatHistorySnapshotWithDecryptedEntries> {\n if (!sessionId || sessionId.trim().length === 0) {\n throw new Error('sessionId is required to fetch chat history');\n }\n const raw = await client.requestJson<JsonValue>(\n `/chat/session/${encodeURIComponent(sessionId)}/history`,\n {\n method: 'GET',\n },\n );\n const snapshot = client.parseWithSchema(\n raw,\n chatHistorySnapshotResponseSchema,\n 'chat history snapshot response',\n );\n return attachDecryptedHistory(\n conversationContexts,\n client,\n sessionId,\n snapshot,\n options,\n );\n}\n\nexport function attachDecryptedHistory(\n conversationContexts: Map<string, ConversationContextState[]>,\n client: RegistryBrokerClient,\n sessionId: string,\n snapshot: ChatHistorySnapshotResponse,\n options?: ChatHistoryFetchOptions,\n): ChatHistorySnapshotWithDecryptedEntries {\n const shouldDecrypt =\n options?.decrypt !== undefined\n ? options.decrypt\n : client.encryptionOptions?.autoDecryptHistory === true;\n if (!shouldDecrypt) {\n return snapshot;\n }\n const requiresContext = snapshot.history.some(entry =>\n Boolean(entry.cipherEnvelope),\n );\n if (!requiresContext) {\n return {\n ...snapshot,\n decryptedHistory: snapshot.history.map(entry => ({\n entry,\n plaintext: entry.content,\n })),\n };\n }\n const context = resolveDecryptionContext(\n conversationContexts,\n client,\n sessionId,\n options,\n );\n if (!context) {\n throw new Error(\n 'Unable to decrypt chat history: encryption context unavailable',\n );\n }\n const decryptedHistory = snapshot.history.map(entry => ({\n entry,\n plaintext: decryptHistoryEntryFromContext(client, entry, context),\n }));\n return { ...snapshot, decryptedHistory };\n}\n\nexport function registerConversationContextForEncryption(\n conversationContexts: Map<string, ConversationContextState[]>,\n context: ConversationContextInput,\n): void {\n const normalized: ConversationContextState = {\n sessionId: context.sessionId,\n sharedSecret: Buffer.from(context.sharedSecret),\n identity: context.identity ? { ...context.identity } : undefined,\n };\n const entries = conversationContexts.get(context.sessionId) ?? [];\n const existingIndex = entries.findIndex(existing =>\n identitiesMatch(existing.identity, normalized.identity),\n );\n if (existingIndex >= 0) {\n entries[existingIndex] = normalized;\n } else {\n entries.push(normalized);\n }\n conversationContexts.set(context.sessionId, entries);\n}\n\nexport function resolveDecryptionContext(\n conversationContexts: Map<string, ConversationContextState[]>,\n client: RegistryBrokerClient,\n sessionId: string,\n options?: ChatHistoryFetchOptions,\n): ConversationContextState | null {\n if (options?.sharedSecret) {\n return {\n sessionId,\n sharedSecret: client.normalizeSharedSecret(options.sharedSecret),\n identity: options.identity,\n };\n }\n const contexts = conversationContexts.get(sessionId);\n if (!contexts || contexts.length === 0) {\n return null;\n }\n if (options?.identity) {\n const match = contexts.find(context =>\n identitiesMatch(context.identity, options.identity),\n );\n if (match) {\n return match;\n }\n }\n return contexts[0];\n}\n\nexport function decryptHistoryEntryFromContext(\n client: RegistryBrokerClient,\n entry: ChatHistoryEntry,\n context: ConversationContextState,\n): string | null {\n const envelope = entry.cipherEnvelope;\n if (!envelope) {\n return entry.content;\n }\n const secret = Buffer.from(context.sharedSecret);\n try {\n return client.encryption.decryptCipherEnvelope({\n envelope,\n sharedSecret: secret,\n });\n } catch (_error) {\n return null;\n }\n}\n"],"names":[],"mappings":"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"}