@hashgraphonline/standards-sdk 0.1.184 → 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 (452) 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 +24 -0
  28. package/dist/browser/hcs-25/identifiers.d.ts.map +1 -0
  29. package/dist/browser/hcs-25/index.d.ts +6 -0
  30. package/dist/browser/hcs-25/index.d.ts.map +1 -0
  31. package/dist/browser/hcs-25/scoring.d.ts +32 -0
  32. package/dist/browser/hcs-25/scoring.d.ts.map +1 -0
  33. package/dist/browser/hcs-25/signals/index.d.ts +20 -0
  34. package/dist/browser/hcs-25/signals/index.d.ts.map +1 -0
  35. package/dist/browser/hcs-25/signals/marketplace.d.ts +296 -0
  36. package/dist/browser/hcs-25/signals/marketplace.d.ts.map +1 -0
  37. package/dist/browser/hcs-25/signals/metadata.d.ts +40 -0
  38. package/dist/browser/hcs-25/signals/metadata.d.ts.map +1 -0
  39. package/dist/browser/hcs-25/signals/model-evals.d.ts +127 -0
  40. package/dist/browser/hcs-25/signals/model-evals.d.ts.map +1 -0
  41. package/dist/browser/hcs-25/signals/operational.d.ts +757 -0
  42. package/dist/browser/hcs-25/signals/operational.d.ts.map +1 -0
  43. package/dist/browser/hcs-25/signals/simple-evals.d.ts +156 -0
  44. package/dist/browser/hcs-25/signals/simple-evals.d.ts.map +1 -0
  45. package/dist/browser/hcs-25/types.d.ts +363 -0
  46. package/dist/browser/hcs-25/types.d.ts.map +1 -0
  47. package/dist/browser/index.d.ts +1 -0
  48. package/dist/browser/index.d.ts.map +1 -1
  49. package/dist/browser-root/hcs-25/adapters/acp.d.ts +20 -0
  50. package/dist/browser-root/hcs-25/adapters/acp.d.ts.map +1 -0
  51. package/dist/browser-root/hcs-25/adapters/agentverse.d.ts +34 -0
  52. package/dist/browser-root/hcs-25/adapters/agentverse.d.ts.map +1 -0
  53. package/dist/browser-root/hcs-25/adapters/availability.d.ts +22 -0
  54. package/dist/browser-root/hcs-25/adapters/availability.d.ts.map +1 -0
  55. package/dist/browser-root/hcs-25/adapters/connectivity.d.ts +25 -0
  56. package/dist/browser-root/hcs-25/adapters/connectivity.d.ts.map +1 -0
  57. package/dist/browser-root/hcs-25/adapters/erc8004-feedback.d.ts +19 -0
  58. package/dist/browser-root/hcs-25/adapters/erc8004-feedback.d.ts.map +1 -0
  59. package/dist/browser-root/hcs-25/adapters/ethos.d.ts +21 -0
  60. package/dist/browser-root/hcs-25/adapters/ethos.d.ts.map +1 -0
  61. package/dist/browser-root/hcs-25/adapters/index.d.ts +21 -0
  62. package/dist/browser-root/hcs-25/adapters/index.d.ts.map +1 -0
  63. package/dist/browser-root/hcs-25/adapters/model-evals.d.ts +61 -0
  64. package/dist/browser-root/hcs-25/adapters/model-evals.d.ts.map +1 -0
  65. package/dist/browser-root/hcs-25/adapters/normalization.d.ts +20 -0
  66. package/dist/browser-root/hcs-25/adapters/normalization.d.ts.map +1 -0
  67. package/dist/browser-root/hcs-25/adapters/oss-popularity.d.ts +22 -0
  68. package/dist/browser-root/hcs-25/adapters/oss-popularity.d.ts.map +1 -0
  69. package/dist/browser-root/hcs-25/adapters/output-verification.d.ts +27 -0
  70. package/dist/browser-root/hcs-25/adapters/output-verification.d.ts.map +1 -0
  71. package/dist/browser-root/hcs-25/adapters/simple-evals.d.ts +14 -0
  72. package/dist/browser-root/hcs-25/adapters/simple-evals.d.ts.map +1 -0
  73. package/dist/browser-root/hcs-25/adapters/x402.d.ts +18 -0
  74. package/dist/browser-root/hcs-25/adapters/x402.d.ts.map +1 -0
  75. package/dist/browser-root/hcs-25/identifiers.d.ts +24 -0
  76. package/dist/browser-root/hcs-25/identifiers.d.ts.map +1 -0
  77. package/dist/browser-root/hcs-25/index.d.ts +6 -0
  78. package/dist/browser-root/hcs-25/index.d.ts.map +1 -0
  79. package/dist/browser-root/hcs-25/scoring.d.ts +32 -0
  80. package/dist/browser-root/hcs-25/scoring.d.ts.map +1 -0
  81. package/dist/browser-root/hcs-25/signals/index.d.ts +20 -0
  82. package/dist/browser-root/hcs-25/signals/index.d.ts.map +1 -0
  83. package/dist/browser-root/hcs-25/signals/marketplace.d.ts +296 -0
  84. package/dist/browser-root/hcs-25/signals/marketplace.d.ts.map +1 -0
  85. package/dist/browser-root/hcs-25/signals/metadata.d.ts +40 -0
  86. package/dist/browser-root/hcs-25/signals/metadata.d.ts.map +1 -0
  87. package/dist/browser-root/hcs-25/signals/model-evals.d.ts +127 -0
  88. package/dist/browser-root/hcs-25/signals/model-evals.d.ts.map +1 -0
  89. package/dist/browser-root/hcs-25/signals/operational.d.ts +757 -0
  90. package/dist/browser-root/hcs-25/signals/operational.d.ts.map +1 -0
  91. package/dist/browser-root/hcs-25/signals/simple-evals.d.ts +156 -0
  92. package/dist/browser-root/hcs-25/signals/simple-evals.d.ts.map +1 -0
  93. package/dist/browser-root/hcs-25/types.d.ts +363 -0
  94. package/dist/browser-root/hcs-25/types.d.ts.map +1 -0
  95. package/dist/browser-root/index.d.ts +1 -0
  96. package/dist/browser-root/index.d.ts.map +1 -1
  97. package/dist/cjs/hcs-25/adapters/acp.d.ts +20 -0
  98. package/dist/cjs/hcs-25/adapters/acp.d.ts.map +1 -0
  99. package/dist/cjs/hcs-25/adapters/agentverse.d.ts +34 -0
  100. package/dist/cjs/hcs-25/adapters/agentverse.d.ts.map +1 -0
  101. package/dist/cjs/hcs-25/adapters/availability.d.ts +22 -0
  102. package/dist/cjs/hcs-25/adapters/availability.d.ts.map +1 -0
  103. package/dist/cjs/hcs-25/adapters/connectivity.d.ts +25 -0
  104. package/dist/cjs/hcs-25/adapters/connectivity.d.ts.map +1 -0
  105. package/dist/cjs/hcs-25/adapters/erc8004-feedback.d.ts +19 -0
  106. package/dist/cjs/hcs-25/adapters/erc8004-feedback.d.ts.map +1 -0
  107. package/dist/cjs/hcs-25/adapters/ethos.d.ts +21 -0
  108. package/dist/cjs/hcs-25/adapters/ethos.d.ts.map +1 -0
  109. package/dist/cjs/hcs-25/adapters/index.d.ts +21 -0
  110. package/dist/cjs/hcs-25/adapters/index.d.ts.map +1 -0
  111. package/dist/cjs/hcs-25/adapters/model-evals.d.ts +61 -0
  112. package/dist/cjs/hcs-25/adapters/model-evals.d.ts.map +1 -0
  113. package/dist/cjs/hcs-25/adapters/normalization.d.ts +20 -0
  114. package/dist/cjs/hcs-25/adapters/normalization.d.ts.map +1 -0
  115. package/dist/cjs/hcs-25/adapters/oss-popularity.d.ts +22 -0
  116. package/dist/cjs/hcs-25/adapters/oss-popularity.d.ts.map +1 -0
  117. package/dist/cjs/hcs-25/adapters/output-verification.d.ts +27 -0
  118. package/dist/cjs/hcs-25/adapters/output-verification.d.ts.map +1 -0
  119. package/dist/cjs/hcs-25/adapters/simple-evals.d.ts +14 -0
  120. package/dist/cjs/hcs-25/adapters/simple-evals.d.ts.map +1 -0
  121. package/dist/cjs/hcs-25/adapters/x402.d.ts +18 -0
  122. package/dist/cjs/hcs-25/adapters/x402.d.ts.map +1 -0
  123. package/dist/cjs/hcs-25/identifiers.d.ts +24 -0
  124. package/dist/cjs/hcs-25/identifiers.d.ts.map +1 -0
  125. package/dist/cjs/hcs-25/index.d.ts +6 -0
  126. package/dist/cjs/hcs-25/index.d.ts.map +1 -0
  127. package/dist/cjs/hcs-25/scoring.d.ts +32 -0
  128. package/dist/cjs/hcs-25/scoring.d.ts.map +1 -0
  129. package/dist/cjs/hcs-25/signals/index.d.ts +20 -0
  130. package/dist/cjs/hcs-25/signals/index.d.ts.map +1 -0
  131. package/dist/cjs/hcs-25/signals/marketplace.d.ts +296 -0
  132. package/dist/cjs/hcs-25/signals/marketplace.d.ts.map +1 -0
  133. package/dist/cjs/hcs-25/signals/metadata.d.ts +40 -0
  134. package/dist/cjs/hcs-25/signals/metadata.d.ts.map +1 -0
  135. package/dist/cjs/hcs-25/signals/model-evals.d.ts +127 -0
  136. package/dist/cjs/hcs-25/signals/model-evals.d.ts.map +1 -0
  137. package/dist/cjs/hcs-25/signals/operational.d.ts +757 -0
  138. package/dist/cjs/hcs-25/signals/operational.d.ts.map +1 -0
  139. package/dist/cjs/hcs-25/signals/simple-evals.d.ts +156 -0
  140. package/dist/cjs/hcs-25/signals/simple-evals.d.ts.map +1 -0
  141. package/dist/cjs/hcs-25/types.d.ts +363 -0
  142. package/dist/cjs/hcs-25/types.d.ts.map +1 -0
  143. package/dist/cjs/index.d.ts +1 -0
  144. package/dist/cjs/index.d.ts.map +1 -1
  145. package/dist/cjs/standards-sdk.cjs +2 -2
  146. package/dist/cjs/standards-sdk.cjs.map +1 -1
  147. package/dist/es/hcs-25/adapters/acp.d.ts +20 -0
  148. package/dist/es/hcs-25/adapters/acp.d.ts.map +1 -0
  149. package/dist/es/hcs-25/adapters/agentverse.d.ts +34 -0
  150. package/dist/es/hcs-25/adapters/agentverse.d.ts.map +1 -0
  151. package/dist/es/hcs-25/adapters/availability.d.ts +22 -0
  152. package/dist/es/hcs-25/adapters/availability.d.ts.map +1 -0
  153. package/dist/es/hcs-25/adapters/connectivity.d.ts +25 -0
  154. package/dist/es/hcs-25/adapters/connectivity.d.ts.map +1 -0
  155. package/dist/es/hcs-25/adapters/erc8004-feedback.d.ts +19 -0
  156. package/dist/es/hcs-25/adapters/erc8004-feedback.d.ts.map +1 -0
  157. package/dist/es/hcs-25/adapters/ethos.d.ts +21 -0
  158. package/dist/es/hcs-25/adapters/ethos.d.ts.map +1 -0
  159. package/dist/es/hcs-25/adapters/index.d.ts +21 -0
  160. package/dist/es/hcs-25/adapters/index.d.ts.map +1 -0
  161. package/dist/es/hcs-25/adapters/model-evals.d.ts +61 -0
  162. package/dist/es/hcs-25/adapters/model-evals.d.ts.map +1 -0
  163. package/dist/es/hcs-25/adapters/normalization.d.ts +20 -0
  164. package/dist/es/hcs-25/adapters/normalization.d.ts.map +1 -0
  165. package/dist/es/hcs-25/adapters/oss-popularity.d.ts +22 -0
  166. package/dist/es/hcs-25/adapters/oss-popularity.d.ts.map +1 -0
  167. package/dist/es/hcs-25/adapters/output-verification.d.ts +27 -0
  168. package/dist/es/hcs-25/adapters/output-verification.d.ts.map +1 -0
  169. package/dist/es/hcs-25/adapters/simple-evals.d.ts +14 -0
  170. package/dist/es/hcs-25/adapters/simple-evals.d.ts.map +1 -0
  171. package/dist/es/hcs-25/adapters/x402.d.ts +18 -0
  172. package/dist/es/hcs-25/adapters/x402.d.ts.map +1 -0
  173. package/dist/es/hcs-25/identifiers.d.ts +24 -0
  174. package/dist/es/hcs-25/identifiers.d.ts.map +1 -0
  175. package/dist/es/hcs-25/index.d.ts +6 -0
  176. package/dist/es/hcs-25/index.d.ts.map +1 -0
  177. package/dist/es/hcs-25/scoring.d.ts +32 -0
  178. package/dist/es/hcs-25/scoring.d.ts.map +1 -0
  179. package/dist/es/hcs-25/signals/index.d.ts +20 -0
  180. package/dist/es/hcs-25/signals/index.d.ts.map +1 -0
  181. package/dist/es/hcs-25/signals/marketplace.d.ts +296 -0
  182. package/dist/es/hcs-25/signals/marketplace.d.ts.map +1 -0
  183. package/dist/es/hcs-25/signals/metadata.d.ts +40 -0
  184. package/dist/es/hcs-25/signals/metadata.d.ts.map +1 -0
  185. package/dist/es/hcs-25/signals/model-evals.d.ts +127 -0
  186. package/dist/es/hcs-25/signals/model-evals.d.ts.map +1 -0
  187. package/dist/es/hcs-25/signals/operational.d.ts +757 -0
  188. package/dist/es/hcs-25/signals/operational.d.ts.map +1 -0
  189. package/dist/es/hcs-25/signals/simple-evals.d.ts +156 -0
  190. package/dist/es/hcs-25/signals/simple-evals.d.ts.map +1 -0
  191. package/dist/es/hcs-25/types.d.ts +363 -0
  192. package/dist/es/hcs-25/types.d.ts.map +1 -0
  193. package/dist/es/index.d.ts +1 -0
  194. package/dist/es/index.d.ts.map +1 -1
  195. package/dist/es/standards-sdk.es.js +131 -40
  196. package/dist/es/standards-sdk.es.js.map +1 -1
  197. package/dist/es/standards-sdk.es101.js +2 -2
  198. package/dist/es/standards-sdk.es103.js +2 -2
  199. package/dist/es/standards-sdk.es104.js +1 -1
  200. package/dist/es/standards-sdk.es106.js +1 -1
  201. package/dist/es/standards-sdk.es108.js +2 -2
  202. package/dist/es/standards-sdk.es11.js +1 -1
  203. package/dist/es/standards-sdk.es110.js +1 -1
  204. package/dist/es/standards-sdk.es111.js +2 -2
  205. package/dist/es/standards-sdk.es115.js +3 -3
  206. package/dist/es/standards-sdk.es116.js +4 -4
  207. package/dist/es/standards-sdk.es117.js +19 -251
  208. package/dist/es/standards-sdk.es117.js.map +1 -1
  209. package/dist/es/standards-sdk.es118.js +60 -475
  210. package/dist/es/standards-sdk.es118.js.map +1 -1
  211. package/dist/es/standards-sdk.es119.js +218 -86
  212. package/dist/es/standards-sdk.es119.js.map +1 -1
  213. package/dist/es/standards-sdk.es12.js +1 -1
  214. package/dist/es/standards-sdk.es120.js +225 -159
  215. package/dist/es/standards-sdk.es120.js.map +1 -1
  216. package/dist/es/standards-sdk.es121.js +50 -33
  217. package/dist/es/standards-sdk.es121.js.map +1 -1
  218. package/dist/es/standards-sdk.es122.js +250 -10
  219. package/dist/es/standards-sdk.es122.js.map +1 -1
  220. package/dist/es/standards-sdk.es123.js +448 -152
  221. package/dist/es/standards-sdk.es123.js.map +1 -1
  222. package/dist/es/standards-sdk.es124.js +101 -25
  223. package/dist/es/standards-sdk.es124.js.map +1 -1
  224. package/dist/es/standards-sdk.es125.js +155 -17
  225. package/dist/es/standards-sdk.es125.js.map +1 -1
  226. package/dist/es/standards-sdk.es126.js +29 -155
  227. package/dist/es/standards-sdk.es126.js.map +1 -1
  228. package/dist/es/standards-sdk.es127.js +9 -198
  229. package/dist/es/standards-sdk.es127.js.map +1 -1
  230. package/dist/es/standards-sdk.es128.js +146 -754
  231. package/dist/es/standards-sdk.es128.js.map +1 -1
  232. package/dist/es/standards-sdk.es129.js +27 -11
  233. package/dist/es/standards-sdk.es129.js.map +1 -1
  234. package/dist/es/standards-sdk.es13.js +1 -1
  235. package/dist/es/standards-sdk.es130.js +19 -564
  236. package/dist/es/standards-sdk.es130.js.map +1 -1
  237. package/dist/es/standards-sdk.es131.js +140 -606
  238. package/dist/es/standards-sdk.es131.js.map +1 -1
  239. package/dist/es/standards-sdk.es132.js +200 -12
  240. package/dist/es/standards-sdk.es132.js.map +1 -1
  241. package/dist/es/standards-sdk.es133.js +790 -2
  242. package/dist/es/standards-sdk.es133.js.map +1 -1
  243. package/dist/es/standards-sdk.es134.js +10 -84
  244. package/dist/es/standards-sdk.es134.js.map +1 -1
  245. package/dist/es/standards-sdk.es135.js +567 -40
  246. package/dist/es/standards-sdk.es135.js.map +1 -1
  247. package/dist/es/standards-sdk.es136.js +626 -2
  248. package/dist/es/standards-sdk.es136.js.map +1 -1
  249. package/dist/es/standards-sdk.es137.js +12 -234
  250. package/dist/es/standards-sdk.es137.js.map +1 -1
  251. package/dist/es/standards-sdk.es138.js +2 -1140
  252. package/dist/es/standards-sdk.es138.js.map +1 -1
  253. package/dist/es/standards-sdk.es139.js +73 -292
  254. package/dist/es/standards-sdk.es139.js.map +1 -1
  255. package/dist/es/standards-sdk.es14.js +1 -1
  256. package/dist/es/standards-sdk.es140.js +36 -418
  257. package/dist/es/standards-sdk.es140.js.map +1 -1
  258. package/dist/es/standards-sdk.es141.js +2 -355
  259. package/dist/es/standards-sdk.es141.js.map +1 -1
  260. package/dist/es/standards-sdk.es142.js +198 -1085
  261. package/dist/es/standards-sdk.es142.js.map +1 -1
  262. package/dist/es/standards-sdk.es143.js +1107 -175
  263. package/dist/es/standards-sdk.es143.js.map +1 -1
  264. package/dist/es/standards-sdk.es144.js +218 -1479
  265. package/dist/es/standards-sdk.es144.js.map +1 -1
  266. package/dist/es/standards-sdk.es145.js +419 -1154
  267. package/dist/es/standards-sdk.es145.js.map +1 -1
  268. package/dist/es/standards-sdk.es146.js +351 -13
  269. package/dist/es/standards-sdk.es146.js.map +1 -1
  270. package/dist/es/standards-sdk.es147.js +1077 -214
  271. package/dist/es/standards-sdk.es147.js.map +1 -1
  272. package/dist/es/standards-sdk.es148.js +208 -4
  273. package/dist/es/standards-sdk.es148.js.map +1 -1
  274. package/dist/es/standards-sdk.es149.js +1564 -78
  275. package/dist/es/standards-sdk.es149.js.map +1 -1
  276. package/dist/es/standards-sdk.es15.js +1 -1
  277. package/dist/es/standards-sdk.es150.js +1153 -83
  278. package/dist/es/standards-sdk.es150.js.map +1 -1
  279. package/dist/es/standards-sdk.es151.js +15 -58
  280. package/dist/es/standards-sdk.es151.js.map +1 -1
  281. package/dist/es/standards-sdk.es152.js +259 -2547
  282. package/dist/es/standards-sdk.es152.js.map +1 -1
  283. package/dist/es/standards-sdk.es153.js +4 -159
  284. package/dist/es/standards-sdk.es153.js.map +1 -1
  285. package/dist/es/standards-sdk.es154.js +81 -7
  286. package/dist/es/standards-sdk.es154.js.map +1 -1
  287. package/dist/es/standards-sdk.es155.js +79 -78
  288. package/dist/es/standards-sdk.es155.js.map +1 -1
  289. package/dist/es/standards-sdk.es156.js +56 -61
  290. package/dist/es/standards-sdk.es156.js.map +1 -1
  291. package/dist/es/standards-sdk.es157.js +2547 -30
  292. package/dist/es/standards-sdk.es157.js.map +1 -1
  293. package/dist/es/standards-sdk.es158.js +159 -34
  294. package/dist/es/standards-sdk.es158.js.map +1 -1
  295. package/dist/es/standards-sdk.es159.js +7 -48
  296. package/dist/es/standards-sdk.es159.js.map +1 -1
  297. package/dist/es/standards-sdk.es16.js +5 -5
  298. package/dist/es/standards-sdk.es160.js +70 -122
  299. package/dist/es/standards-sdk.es160.js.map +1 -1
  300. package/dist/es/standards-sdk.es161.js +58 -35
  301. package/dist/es/standards-sdk.es161.js.map +1 -1
  302. package/dist/es/standards-sdk.es162.js +190 -12478
  303. package/dist/es/standards-sdk.es162.js.map +1 -1
  304. package/dist/es/standards-sdk.es163.js +22 -52
  305. package/dist/es/standards-sdk.es163.js.map +1 -1
  306. package/dist/es/standards-sdk.es164.js +54 -107
  307. package/dist/es/standards-sdk.es164.js.map +1 -1
  308. package/dist/es/standards-sdk.es165.js +90 -76
  309. package/dist/es/standards-sdk.es165.js.map +1 -1
  310. package/dist/es/standards-sdk.es166.js +46 -197
  311. package/dist/es/standards-sdk.es166.js.map +1 -1
  312. package/dist/es/standards-sdk.es167.js +203 -16
  313. package/dist/es/standards-sdk.es167.js.map +1 -1
  314. package/dist/es/standards-sdk.es168.js +54 -670
  315. package/dist/es/standards-sdk.es168.js.map +1 -1
  316. package/dist/es/standards-sdk.es169.js +44 -167
  317. package/dist/es/standards-sdk.es169.js.map +1 -1
  318. package/dist/es/standards-sdk.es170.js +55 -321
  319. package/dist/es/standards-sdk.es170.js.map +1 -1
  320. package/dist/es/standards-sdk.es171.js +45 -342
  321. package/dist/es/standards-sdk.es171.js.map +1 -1
  322. package/dist/es/standards-sdk.es172.js +115 -446
  323. package/dist/es/standards-sdk.es172.js.map +1 -1
  324. package/dist/es/standards-sdk.es173.js +51 -328
  325. package/dist/es/standards-sdk.es173.js.map +1 -1
  326. package/dist/es/standards-sdk.es174.js +42 -74
  327. package/dist/es/standards-sdk.es174.js.map +1 -1
  328. package/dist/es/standards-sdk.es175.js +72 -73
  329. package/dist/es/standards-sdk.es175.js.map +1 -1
  330. package/dist/es/standards-sdk.es176.js +68 -139
  331. package/dist/es/standards-sdk.es176.js.map +1 -1
  332. package/dist/es/standards-sdk.es177.js +44 -517
  333. package/dist/es/standards-sdk.es177.js.map +1 -1
  334. package/dist/es/standards-sdk.es178.js +33 -256
  335. package/dist/es/standards-sdk.es178.js.map +1 -1
  336. package/dist/es/standards-sdk.es179.js +30 -196
  337. package/dist/es/standards-sdk.es179.js.map +1 -1
  338. package/dist/es/standards-sdk.es18.js +12 -12
  339. package/dist/es/standards-sdk.es180.js +34 -119
  340. package/dist/es/standards-sdk.es180.js.map +1 -1
  341. package/dist/es/standards-sdk.es181.js +48 -152
  342. package/dist/es/standards-sdk.es181.js.map +1 -1
  343. package/dist/es/standards-sdk.es182.js +126 -172
  344. package/dist/es/standards-sdk.es182.js.map +1 -1
  345. package/dist/es/standards-sdk.es183.js +34 -676
  346. package/dist/es/standards-sdk.es183.js.map +1 -1
  347. package/dist/es/standards-sdk.es184.js +12453 -156
  348. package/dist/es/standards-sdk.es184.js.map +1 -1
  349. package/dist/es/standards-sdk.es185.js +14 -232
  350. package/dist/es/standards-sdk.es185.js.map +1 -1
  351. package/dist/es/standards-sdk.es186.js +642 -209
  352. package/dist/es/standards-sdk.es186.js.map +1 -1
  353. package/dist/es/standards-sdk.es187.js +114 -0
  354. package/dist/es/standards-sdk.es187.js.map +1 -0
  355. package/dist/es/standards-sdk.es188.js +76 -0
  356. package/dist/es/standards-sdk.es188.js.map +1 -0
  357. package/dist/es/standards-sdk.es189.js +59 -0
  358. package/dist/es/standards-sdk.es189.js.map +1 -0
  359. package/dist/es/standards-sdk.es19.js +9 -9
  360. package/dist/es/standards-sdk.es190.js +84 -0
  361. package/dist/es/standards-sdk.es190.js.map +1 -0
  362. package/dist/es/standards-sdk.es191.js +203 -0
  363. package/dist/es/standards-sdk.es191.js.map +1 -0
  364. package/dist/es/standards-sdk.es192.js +175 -0
  365. package/dist/es/standards-sdk.es192.js.map +1 -0
  366. package/dist/es/standards-sdk.es193.js +325 -0
  367. package/dist/es/standards-sdk.es193.js.map +1 -0
  368. package/dist/es/standards-sdk.es194.js +349 -0
  369. package/dist/es/standards-sdk.es194.js.map +1 -0
  370. package/dist/es/standards-sdk.es195.js +456 -0
  371. package/dist/es/standards-sdk.es195.js.map +1 -0
  372. package/dist/es/standards-sdk.es196.js +334 -0
  373. package/dist/es/standards-sdk.es196.js.map +1 -0
  374. package/dist/es/standards-sdk.es197.js +79 -0
  375. package/dist/es/standards-sdk.es197.js.map +1 -0
  376. package/dist/es/standards-sdk.es198.js +142 -0
  377. package/dist/es/standards-sdk.es198.js.map +1 -0
  378. package/dist/es/standards-sdk.es199.js +520 -0
  379. package/dist/es/standards-sdk.es199.js.map +1 -0
  380. package/dist/es/standards-sdk.es2.js +2 -2
  381. package/dist/es/standards-sdk.es20.js +1 -1
  382. package/dist/es/standards-sdk.es200.js +262 -0
  383. package/dist/es/standards-sdk.es200.js.map +1 -0
  384. package/dist/es/standards-sdk.es201.js +199 -0
  385. package/dist/es/standards-sdk.es201.js.map +1 -0
  386. package/dist/es/standards-sdk.es202.js +122 -0
  387. package/dist/es/standards-sdk.es202.js.map +1 -0
  388. package/dist/es/standards-sdk.es203.js +155 -0
  389. package/dist/es/standards-sdk.es203.js.map +1 -0
  390. package/dist/es/standards-sdk.es204.js +187 -0
  391. package/dist/es/standards-sdk.es204.js.map +1 -0
  392. package/dist/es/standards-sdk.es205.js +687 -0
  393. package/dist/es/standards-sdk.es205.js.map +1 -0
  394. package/dist/es/standards-sdk.es206.js +188 -0
  395. package/dist/es/standards-sdk.es206.js.map +1 -0
  396. package/dist/es/standards-sdk.es207.js +238 -0
  397. package/dist/es/standards-sdk.es207.js.map +1 -0
  398. package/dist/es/standards-sdk.es208.js +242 -0
  399. package/dist/es/standards-sdk.es208.js.map +1 -0
  400. package/dist/es/standards-sdk.es21.js +1 -1
  401. package/dist/es/standards-sdk.es22.js +1 -1
  402. package/dist/es/standards-sdk.es23.js +1 -1
  403. package/dist/es/standards-sdk.es24.js +1 -1
  404. package/dist/es/standards-sdk.es25.js +1 -1
  405. package/dist/es/standards-sdk.es26.js +1 -1
  406. package/dist/es/standards-sdk.es27.js +12 -12
  407. package/dist/es/standards-sdk.es30.js +2 -2
  408. package/dist/es/standards-sdk.es31.js +4 -4
  409. package/dist/es/standards-sdk.es32.js +1 -1
  410. package/dist/es/standards-sdk.es35.js +6 -6
  411. package/dist/es/standards-sdk.es36.js +4 -4
  412. package/dist/es/standards-sdk.es37.js +2 -2
  413. package/dist/es/standards-sdk.es38.js +2 -2
  414. package/dist/es/standards-sdk.es39.js +1 -1
  415. package/dist/es/standards-sdk.es4.js +2 -2
  416. package/dist/es/standards-sdk.es40.js +1 -1
  417. package/dist/es/standards-sdk.es41.js +2 -2
  418. package/dist/es/standards-sdk.es46.js +1 -1
  419. package/dist/es/standards-sdk.es5.js +2 -2
  420. package/dist/es/standards-sdk.es51.js +1 -1
  421. package/dist/es/standards-sdk.es53.js +1 -1
  422. package/dist/es/standards-sdk.es56.js +2 -2
  423. package/dist/es/standards-sdk.es59.js +1 -1
  424. package/dist/es/standards-sdk.es6.js +2 -2
  425. package/dist/es/standards-sdk.es60.js +1 -1
  426. package/dist/es/standards-sdk.es62.js +1 -1
  427. package/dist/es/standards-sdk.es63.js +2 -2
  428. package/dist/es/standards-sdk.es64.js +1 -1
  429. package/dist/es/standards-sdk.es65.js +1 -1
  430. package/dist/es/standards-sdk.es66.js +1 -1
  431. package/dist/es/standards-sdk.es67.js +7 -7
  432. package/dist/es/standards-sdk.es69.js +1 -1
  433. package/dist/es/standards-sdk.es7.js +1 -1
  434. package/dist/es/standards-sdk.es71.js +2 -2
  435. package/dist/es/standards-sdk.es72.js +3 -3
  436. package/dist/es/standards-sdk.es75.js +5 -5
  437. package/dist/es/standards-sdk.es76.js +3 -3
  438. package/dist/es/standards-sdk.es77.js +2 -2
  439. package/dist/es/standards-sdk.es78.js +1 -1
  440. package/dist/es/standards-sdk.es81.js +2 -2
  441. package/dist/es/standards-sdk.es83.js +2 -2
  442. package/dist/es/standards-sdk.es84.js +4 -4
  443. package/dist/es/standards-sdk.es85.js +1 -1
  444. package/dist/es/standards-sdk.es88.js +1 -1
  445. package/dist/es/standards-sdk.es89.js +2 -2
  446. package/dist/es/standards-sdk.es9.js +2 -2
  447. package/dist/es/standards-sdk.es90.js +4 -4
  448. package/dist/es/standards-sdk.es94.js +3 -3
  449. package/dist/es/standards-sdk.es96.js +2 -2
  450. package/dist/es/standards-sdk.es98.js +1 -1
  451. package/dist/es/standards-sdk.es99.js +3 -3
  452. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es118.js","sources":["../../src/hcs-26/resolver.ts"],"sourcesContent":["import { Logger, type ILogger } from '../utils/logger';\nimport { HederaMirrorNode } from '../services/mirror-node';\nimport { HRLResolver } from '../utils/hrl-resolver';\nimport type { MirrorNodeConfig } from '../services/mirror-node';\nimport { hash } from '../utils/crypto-abstraction';\nimport {\n hcs26DiscoveryRegisterSchema,\n hcs26DiscoveryRegisterLegacySchema,\n hcs26DiscoveryMetadataSchema,\n hcs26DiscoveryMetadataPatchSchema,\n hcs26DiscoveryUpdateSchema,\n hcs26DiscoveryUpdateLegacySchema,\n hcs26DiscoveryDeleteSchema,\n hcs26SkillManifestSchema,\n hcs26VersionRegisterSchema,\n hcs26VersionRegisterLegacySchema,\n hcs26VersionUpdateSchema,\n hcs26VersionDeleteSchema,\n type HCS26Network,\n type Hcs26DiscoveryRegister,\n type Hcs26DiscoveryRegisterLegacy,\n type Hcs26SkillManifest,\n type Hcs26VersionRegister,\n type Hcs26VersionRegisterLegacy,\n type Hcs26VersionUpdate,\n} from './types';\n\ntype Hcs26ResolverDeps = {\n network: HCS26Network;\n logger?: ILogger;\n mirrorNode?: MirrorNodeConfig;\n};\n\ntype ParsedSemver = {\n major: number;\n minor: number;\n patch: number;\n prerelease: (string | number)[];\n};\n\nfunction parseSemver(versionRaw: string): ParsedSemver | null {\n const trimmed = versionRaw.trim().replace(/^v/i, '');\n const match = trimmed.match(\n /^(\\d+)\\.(\\d+)\\.(\\d+)(?:-([0-9A-Za-z.-]+))?(?:\\+[0-9A-Za-z.-]+)?$/,\n );\n if (!match) {\n return null;\n }\n\n const major = Number(match[1]);\n const minor = Number(match[2]);\n const patch = Number(match[3]);\n if (![major, minor, patch].every(Number.isFinite)) {\n return null;\n }\n\n const prereleaseRaw = match[4];\n const prerelease = prereleaseRaw\n ? prereleaseRaw.split('.').map(part => {\n if (/^(0|[1-9]\\d*)$/.test(part)) {\n return Number(part);\n }\n return part;\n })\n : [];\n\n return { major, minor, patch, prerelease };\n}\n\nfunction compareSemver(a: ParsedSemver, b: ParsedSemver): number {\n if (a.major !== b.major) return a.major - b.major;\n if (a.minor !== b.minor) return a.minor - b.minor;\n if (a.patch !== b.patch) return a.patch - b.patch;\n\n const aHasPre = a.prerelease.length > 0;\n const bHasPre = b.prerelease.length > 0;\n if (!aHasPre && bHasPre) return 1;\n if (aHasPre && !bHasPre) return -1;\n if (!aHasPre && !bHasPre) return 0;\n\n const len = Math.max(a.prerelease.length, b.prerelease.length);\n for (let index = 0; index < len; index += 1) {\n const aId = a.prerelease[index];\n const bId = b.prerelease[index];\n if (aId === undefined && bId !== undefined) return -1;\n if (aId !== undefined && bId === undefined) return 1;\n if (aId === bId) continue;\n\n if (typeof aId === 'number' && typeof bId === 'number') {\n return aId - bId;\n }\n if (typeof aId === 'number' && typeof bId === 'string') {\n return -1;\n }\n if (typeof aId === 'string' && typeof bId === 'number') {\n return 1;\n }\n if (typeof aId === 'string' && typeof bId === 'string') {\n return aId < bId ? -1 : 1;\n }\n }\n\n return 0;\n}\n\nfunction isActiveStatus(\n status: (Hcs26VersionRegister | Hcs26VersionRegisterLegacy)['status'],\n): boolean {\n return !status || status === 'active';\n}\n\nfunction normalizeUidString(value: unknown): string | null {\n if (typeof value !== 'string') {\n return null;\n }\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : null;\n}\n\nfunction resolveSequenceNumber(\n primary: unknown,\n fallback: unknown,\n): number | null {\n if (typeof primary === 'number') {\n return primary;\n }\n if (typeof fallback === 'number') {\n return fallback;\n }\n return null;\n}\n\nfunction parseSequenceFromUid(uid: string): number | null {\n if (!/^\\d+$/.test(uid)) {\n return null;\n }\n const parsed = Number(uid);\n return Number.isSafeInteger(parsed) ? parsed : null;\n}\n\nfunction ensureNonEmptyString(value: unknown, field: string): string {\n if (typeof value !== 'string') {\n throw new Error(`Expected ${field} to be a string`);\n }\n const trimmed = value.trim();\n if (!trimmed) {\n throw new Error(`Expected ${field} to be a non-empty string`);\n }\n return trimmed;\n}\n\ntype NormalizedDiscoveryRegister = {\n p: 'hcs-26';\n op: 'register';\n t_id: string;\n account_id: string;\n metadata: Record<string, unknown>;\n m?: string;\n sequence_number?: number;\n};\n\ntype NormalizedDiscoveryRegisterRaw = Omit<\n NormalizedDiscoveryRegister,\n 'metadata'\n> & {\n metadata: Record<string, unknown> | string;\n};\n\nfunction mergeDiscoveryMetadata(\n base: Record<string, unknown>,\n update?: Record<string, unknown>,\n): Record<string, unknown> {\n if (!update) {\n return base;\n }\n return { ...base, ...update };\n}\n\nfunction normalizeDiscoveryRegister(\n input: Hcs26DiscoveryRegister | Hcs26DiscoveryRegisterLegacy,\n messageSequenceNumber?: number,\n): NormalizedDiscoveryRegisterRaw {\n const seq =\n typeof input.sequence_number === 'number'\n ? input.sequence_number\n : typeof messageSequenceNumber === 'number'\n ? messageSequenceNumber\n : undefined;\n\n if ('t_id' in input) {\n return {\n p: 'hcs-26',\n op: 'register',\n t_id: ensureNonEmptyString(input.t_id, 't_id'),\n account_id: ensureNonEmptyString(input.account_id, 'account_id'),\n metadata: input.metadata,\n ...(input.m ? { m: input.m } : {}),\n ...(typeof seq === 'number' ? { sequence_number: seq } : {}),\n };\n }\n\n return {\n p: 'hcs-26',\n op: 'register',\n t_id: ensureNonEmptyString(input.version_registry, 'version_registry'),\n account_id: ensureNonEmptyString(input.publisher, 'publisher'),\n metadata: input.metadata,\n ...(input.m ? { m: input.m } : {}),\n ...(typeof seq === 'number' ? { sequence_number: seq } : {}),\n };\n}\n\nexport class Hcs26SkillRegistryResolver {\n private readonly logger: ILogger;\n private readonly mirrorNode: HederaMirrorNode;\n private readonly hrlResolver: HRLResolver;\n private readonly network: HCS26Network;\n\n constructor(deps: Hcs26ResolverDeps) {\n this.network = deps.network;\n this.logger =\n deps.logger ??\n Logger.getInstance({\n module: 'HCS26Resolver',\n level: 'info',\n });\n this.mirrorNode = new HederaMirrorNode(\n deps.network,\n this.logger,\n deps.mirrorNode,\n );\n this.hrlResolver = new HRLResolver('warn');\n }\n\n private async resolveDiscoveryMetadataHrl(\n metadataHrl: string,\n mode: 'full' | 'patch',\n ): Promise<Record<string, unknown>> {\n const resolved = await this.hrlResolver.resolve(metadataHrl, {\n network: this.network,\n returnRaw: true,\n });\n\n const bytes =\n resolved.content instanceof ArrayBuffer\n ? Buffer.from(resolved.content)\n : Buffer.from(String(resolved.content), 'utf8');\n\n let raw: unknown;\n try {\n raw = JSON.parse(bytes.toString('utf8'));\n } catch {\n throw new Error('Discovery metadata HRL content is not valid JSON');\n }\n\n const schema =\n mode === 'full'\n ? hcs26DiscoveryMetadataSchema\n : hcs26DiscoveryMetadataPatchSchema;\n const parsed = schema.safeParse(raw);\n if (!parsed.success) {\n throw new Error(`Invalid discovery metadata: ${parsed.error.message}`);\n }\n return this.normalizeDiscoveryMetadataObject(\n parsed.data as unknown as Record<string, unknown>,\n );\n }\n\n private normalizeDiscoveryMetadataObject(\n metadata: Record<string, unknown>,\n ): Record<string, unknown> {\n if (\n typeof metadata.icon !== 'string' ||\n metadata.icon.trim().length === 0\n ) {\n const iconLegacy = metadata.icon_hcs1;\n if (typeof iconLegacy === 'string' && iconLegacy.trim().length > 0) {\n return { ...metadata, icon: iconLegacy };\n }\n }\n return metadata;\n }\n\n private async resolveDiscoveryMetadataUri(\n metadataUri: string,\n mode: 'full' | 'patch',\n ): Promise<Record<string, unknown>> {\n const trimmed = metadataUri.trim();\n if (trimmed.startsWith('hcs://1/')) {\n return this.resolveDiscoveryMetadataHrl(trimmed, mode);\n }\n throw new Error(`Unsupported discovery metadata URI: ${trimmed}`);\n }\n\n private resolveDiscoveryMetadataObject(params: {\n metadata: unknown;\n mode: 'full' | 'patch';\n }): Promise<Record<string, unknown>> {\n if (typeof params.metadata === 'string') {\n return this.resolveDiscoveryMetadataUri(params.metadata, params.mode);\n }\n\n const schema =\n params.mode === 'full'\n ? hcs26DiscoveryMetadataSchema\n : hcs26DiscoveryMetadataPatchSchema;\n const parsed = schema.safeParse(params.metadata);\n if (!parsed.success) {\n throw new Error(`Invalid discovery metadata: ${parsed.error.message}`);\n }\n return Promise.resolve(\n this.normalizeDiscoveryMetadataObject(\n parsed.data as unknown as Record<string, unknown>,\n ),\n );\n }\n\n async getDiscoveryRegister(params: {\n directoryTopicId: string;\n skillUid: number;\n }): Promise<NormalizedDiscoveryRegister | null> {\n const messages = await this.mirrorNode.getTopicMessages(\n params.directoryTopicId,\n {\n sequenceNumber: `eq:${params.skillUid}`,\n limit: 5,\n order: 'asc',\n },\n );\n\n for (const message of messages) {\n const parsedNew = hcs26DiscoveryRegisterSchema.safeParse(message);\n const parsedLegacy = parsedNew.success\n ? null\n : hcs26DiscoveryRegisterLegacySchema.safeParse(message);\n const parsed = parsedNew.success\n ? parsedNew\n : parsedLegacy && parsedLegacy.success\n ? parsedLegacy\n : null;\n if (!parsed) {\n continue;\n }\n\n const normalized = normalizeDiscoveryRegister(\n parsed.data as Hcs26DiscoveryRegister | Hcs26DiscoveryRegisterLegacy,\n message.sequence_number,\n );\n const seq = normalized.sequence_number;\n if (typeof seq === 'number' && seq === params.skillUid) {\n const metadata = await this.resolveDiscoveryMetadataObject({\n metadata: normalized.metadata,\n mode: 'full',\n });\n return { ...normalized, metadata };\n }\n }\n\n return null;\n }\n\n async resolveDiscoveryRecord(params: {\n directoryTopicId: string;\n skillUid: number;\n scanLimit?: number;\n }): Promise<NormalizedDiscoveryRegister | null> {\n const register = await this.getDiscoveryRegister({\n directoryTopicId: params.directoryTopicId,\n skillUid: params.skillUid,\n });\n if (!register) {\n return null;\n }\n\n const scanLimit =\n typeof params.scanLimit === 'number' && params.scanLimit > 0\n ? Math.min(5000, Math.floor(params.scanLimit))\n : 1000;\n\n const messages = await this.mirrorNode.getTopicMessages(\n params.directoryTopicId,\n {\n limit: scanLimit,\n order: 'asc',\n },\n );\n\n const uid = String(params.skillUid);\n const registerSequence = resolveSequenceNumber(\n register.sequence_number,\n params.skillUid,\n );\n\n let current: NormalizedDiscoveryRegister = register;\n for (const message of messages) {\n const messageSequence = resolveSequenceNumber(\n undefined,\n message.sequence_number,\n );\n const deleteParsed = hcs26DiscoveryDeleteSchema.safeParse(message);\n if (deleteParsed.success && deleteParsed.data.uid === uid) {\n const deleteSequence = resolveSequenceNumber(\n deleteParsed.data.sequence_number,\n messageSequence,\n );\n if (\n registerSequence !== null &&\n deleteSequence !== null &&\n deleteSequence <= registerSequence\n ) {\n continue;\n }\n return null;\n }\n\n const updateParsedNew = hcs26DiscoveryUpdateSchema.safeParse(message);\n const updateParsedLegacy = updateParsedNew.success\n ? null\n : hcs26DiscoveryUpdateLegacySchema.safeParse(message);\n const updateParsed = updateParsedNew.success\n ? updateParsedNew\n : updateParsedLegacy && updateParsedLegacy.success\n ? updateParsedLegacy\n : null;\n if (!updateParsed || updateParsed.data.uid !== uid) {\n continue;\n }\n const updateSequence = resolveSequenceNumber(\n updateParsed.data.sequence_number,\n messageSequence,\n );\n if (\n registerSequence !== null &&\n updateSequence !== null &&\n updateSequence <= registerSequence\n ) {\n continue;\n }\n\n const nextAccountId =\n 'account_id' in updateParsed.data\n ? normalizeUidString(updateParsed.data.account_id)\n : normalizeUidString(updateParsed.data.publisher);\n const nextMetadataRaw = updateParsed.data.metadata;\n const nextMetadata =\n nextMetadataRaw !== undefined\n ? await this.resolveDiscoveryMetadataObject({\n metadata: nextMetadataRaw,\n mode: 'patch',\n })\n : undefined;\n current = {\n ...current,\n ...(nextAccountId ? { account_id: nextAccountId } : {}),\n metadata: mergeDiscoveryMetadata(current.metadata, nextMetadata),\n };\n }\n\n return current;\n }\n\n async listVersionRegisters(params: {\n versionRegistryTopicId: string;\n skillUid: number;\n limit?: number;\n }): Promise<Array<Hcs26VersionRegister | Hcs26VersionRegisterLegacy>> {\n const limit =\n typeof params.limit === 'number' && params.limit > 0\n ? Math.min(1000, params.limit)\n : 500;\n const messages = await this.mirrorNode.getTopicMessages(\n params.versionRegistryTopicId,\n {\n limit,\n order: 'desc',\n },\n );\n\n const registersByUid = new Map<\n string,\n {\n register: Hcs26VersionRegister | Hcs26VersionRegisterLegacy;\n sequenceNumber: number | null;\n }\n >();\n const updatesByUid = new Map<\n string,\n Array<{ update: Hcs26VersionUpdate; sequenceNumber: number | null }>\n >();\n const deletedByUid = new Map<string, number[]>();\n\n for (const message of messages) {\n const parsedNew = hcs26VersionRegisterSchema.safeParse(message);\n const parsedLegacy = parsedNew.success\n ? null\n : hcs26VersionRegisterLegacySchema.safeParse(message);\n const registerParsed = parsedNew.success\n ? parsedNew\n : parsedLegacy && parsedLegacy.success\n ? parsedLegacy\n : null;\n\n if (registerParsed) {\n if (registerParsed.data.skill_uid !== params.skillUid) {\n continue;\n }\n const uid =\n typeof registerParsed.data.sequence_number === 'number'\n ? String(registerParsed.data.sequence_number)\n : typeof message.sequence_number === 'number'\n ? String(message.sequence_number)\n : null;\n if (uid) {\n const registerSequence = resolveSequenceNumber(\n registerParsed.data.sequence_number,\n message.sequence_number,\n );\n registersByUid.set(uid, {\n register: registerParsed.data as\n | Hcs26VersionRegister\n | Hcs26VersionRegisterLegacy,\n sequenceNumber: registerSequence,\n });\n }\n continue;\n }\n\n const updateParsed = hcs26VersionUpdateSchema.safeParse(message);\n if (updateParsed.success) {\n const uid = updateParsed.data.uid.trim();\n const list = updatesByUid.get(uid) ?? [];\n list.push({\n update: updateParsed.data,\n sequenceNumber: resolveSequenceNumber(\n updateParsed.data.sequence_number,\n message.sequence_number,\n ),\n });\n updatesByUid.set(uid, list);\n continue;\n }\n\n const deleteParsed = hcs26VersionDeleteSchema.safeParse(message);\n if (deleteParsed.success) {\n const uid = deleteParsed.data.uid.trim();\n const list = deletedByUid.get(uid) ?? [];\n const sequenceNumber = resolveSequenceNumber(\n deleteParsed.data.sequence_number,\n message.sequence_number,\n );\n if (sequenceNumber !== null) {\n list.push(sequenceNumber);\n deletedByUid.set(uid, list);\n }\n }\n }\n\n const entries: Array<Hcs26VersionRegister | Hcs26VersionRegisterLegacy> =\n [];\n for (const [uid, registerState] of registersByUid.entries()) {\n const registerSequence =\n registerState.sequenceNumber ?? parseSequenceFromUid(uid);\n const deleteSequences = deletedByUid.get(uid) ?? [];\n const hasDeleteAfterRegister = deleteSequences.some(sequence =>\n registerSequence === null ? true : sequence > registerSequence,\n );\n if (hasDeleteAfterRegister) {\n continue;\n }\n\n const updates = updatesByUid.get(uid);\n if (!updates || updates.length === 0) {\n entries.push(registerState.register);\n continue;\n }\n\n const sorted = [...updates]\n .filter(update =>\n registerSequence === null\n ? true\n : update.sequenceNumber !== null &&\n update.sequenceNumber > registerSequence,\n )\n .sort((a, b) => {\n const aSeq = a.sequenceNumber ?? 0;\n const bSeq = b.sequenceNumber ?? 0;\n return aSeq - bSeq;\n });\n if (sorted.length === 0) {\n entries.push(registerState.register);\n continue;\n }\n\n const final = sorted.reduce<\n Hcs26VersionRegister | Hcs26VersionRegisterLegacy\n >((acc, updateState) => {\n if (updateState.update.status) {\n return { ...acc, status: updateState.update.status };\n }\n return acc;\n }, registerState.register);\n entries.push(final);\n }\n\n return entries;\n }\n\n async getLatestVersionRegister(params: {\n versionRegistryTopicId: string;\n skillUid: number;\n }): Promise<(Hcs26VersionRegister | Hcs26VersionRegisterLegacy) | null> {\n const entries = await this.listVersionRegisters({\n versionRegistryTopicId: params.versionRegistryTopicId,\n skillUid: params.skillUid,\n limit: 100,\n });\n const active = entries.filter(entry => isActiveStatus(entry.status));\n if (active.length === 0) {\n return null;\n }\n\n let best = active[0];\n let bestParsed = parseSemver(best.version);\n\n for (let index = 1; index < active.length; index += 1) {\n const candidate = active[index];\n const candidateParsed = parseSemver(candidate.version);\n\n if (!bestParsed && candidateParsed) {\n best = candidate;\n bestParsed = candidateParsed;\n continue;\n }\n\n if (bestParsed && candidateParsed) {\n const cmp = compareSemver(candidateParsed, bestParsed);\n if (cmp > 0) {\n best = candidate;\n bestParsed = candidateParsed;\n continue;\n }\n\n if (cmp === 0) {\n const bestSeq =\n typeof best.sequence_number === 'number' ? best.sequence_number : 0;\n const candSeq =\n typeof candidate.sequence_number === 'number'\n ? candidate.sequence_number\n : 0;\n if (candSeq > bestSeq) {\n best = candidate;\n bestParsed = candidateParsed;\n }\n }\n }\n }\n\n return best;\n }\n\n async resolveManifest(params: {\n manifestHrl?: string;\n manifestTopicId?: string;\n }): Promise<{\n manifest: Hcs26SkillManifest;\n raw: unknown;\n sha256Hex: string;\n }> {\n const manifestHrl =\n typeof params.manifestHrl === 'string' &&\n params.manifestHrl.trim().length > 0\n ? params.manifestHrl.trim()\n : typeof params.manifestTopicId === 'string' &&\n params.manifestTopicId.trim().length > 0\n ? `hcs://1/${params.manifestTopicId.trim()}`\n : null;\n if (!manifestHrl) {\n throw new Error('Manifest HRL or topic id is required');\n }\n\n const resolved = await this.hrlResolver.resolve(manifestHrl, {\n network: this.network,\n returnRaw: true,\n });\n\n const contentType = resolved.contentType ?? '';\n if (!contentType.toLowerCase().startsWith('application/json')) {\n throw new Error(\n `Expected application/json for manifest, got ${resolved.contentType ?? 'unknown'}`,\n );\n }\n\n const bytes =\n resolved.content instanceof ArrayBuffer\n ? Buffer.from(resolved.content)\n : Buffer.from(String(resolved.content), 'utf8');\n\n const sha256Hex = await hash(bytes, 'sha256');\n\n let raw: unknown;\n try {\n raw = JSON.parse(bytes.toString('utf8'));\n } catch {\n throw new Error('Manifest content is not valid JSON');\n }\n\n const parsed = hcs26SkillManifestSchema.safeParse(raw);\n if (!parsed.success) {\n throw new Error(`Invalid HCS-26 manifest: ${parsed.error.message}`);\n }\n\n const hasSkillMd = parsed.data.files.some(file => file.path === 'SKILL.md');\n if (!hasSkillMd) {\n throw new Error(\n 'HCS-26 manifest must include SKILL.md at path \"SKILL.md\"',\n );\n }\n\n return { manifest: parsed.data, raw, sha256Hex };\n }\n\n async verifyVersionRegisterMatchesManifest(params: {\n versionRegister: Hcs26VersionRegister | Hcs26VersionRegisterLegacy;\n manifestSha256Hex: string;\n }): Promise<void> {\n const checksumRaw = params.versionRegister.checksum;\n if (!checksumRaw) {\n this.logger.warn(\n 'HCS-26 version register is missing checksum; skipping manifest verification.',\n );\n return;\n }\n\n const checksum = checksumRaw.trim();\n if (!checksum.startsWith('sha256:')) {\n throw new Error(`Unsupported checksum: ${checksum}`);\n }\n const expectedHex = checksum.slice('sha256:'.length);\n if (params.manifestSha256Hex !== expectedHex) {\n throw new Error(\n `Manifest checksum mismatch (expected ${expectedHex}, got ${params.manifestSha256Hex})`,\n );\n }\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"standards-sdk.es118.js","sources":["../../src/hcs-25/types.ts"],"sourcesContent":["import { z } from 'zod';\n\nimport { isValidSignalId } from './identifiers';\n\n/**\n * JSON-compatible value carried by a trust signal.\n */\nexport type Hcs25JsonValue =\n | string\n | number\n | boolean\n | null\n | Hcs25JsonValue[]\n | { [key: string]: Hcs25JsonValue };\n\nexport const hcs25JsonValueSchema: z.ZodType<Hcs25JsonValue> = z.lazy(() =>\n z.union([\n z.string(),\n z.number(),\n z.boolean(),\n z.null(),\n z.array(hcs25JsonValueSchema),\n z.record(z.string(), hcs25JsonValueSchema),\n ]),\n);\n\n/**\n * Signal status codes defined by HCS-25.\n */\nexport const hcs25SignalStatusSchema = z.enum([\n 'ok',\n 'missing',\n 'timeout',\n 'error',\n 'stale',\n]);\n\nexport type Hcs25SignalStatus = z.infer<typeof hcs25SignalStatusSchema>;\n\n/**\n * Optional provenance describing where a signal came from.\n */\nexport const hcs25SignalProvenanceSchema = z\n .object({\n source: z.string().min(1).optional(),\n sourceUrl: z.string().min(1).optional(),\n subjectId: z.string().min(1).optional(),\n fetchedAt: z.string().min(1).optional(),\n params: z.record(z.string(), hcs25JsonValueSchema).optional(),\n })\n .passthrough();\n\nexport type Hcs25SignalProvenance = z.infer<typeof hcs25SignalProvenanceSchema>;\n\n/**\n * A single trust signal: a stable identifier-keyed measurement with a status\n * and optional provenance.\n */\nexport const hcs25SignalSchema = z\n .object({\n status: hcs25SignalStatusSchema,\n value: hcs25JsonValueSchema.optional(),\n fetchedAt: z.string().min(1).optional(),\n provenance: hcs25SignalProvenanceSchema.optional(),\n })\n .passthrough();\n\nexport type Hcs25Signal = z.infer<typeof hcs25SignalSchema>;\n\n/**\n * The set of trust signals currently known for a subject, keyed by namespaced\n * signal identifier.\n */\nexport const hcs25SignalSnapshotSchema = z\n .record(z.string(), hcs25SignalSchema)\n .superRefine((snapshot, ctx) => {\n for (const key of Object.keys(snapshot)) {\n if (!isValidSignalId(key)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `invalid signal identifier \"${key}\": signal identifiers must be namespaced, e.g. \"provider.metric\"`,\n });\n }\n }\n });\n\nexport type Hcs25SignalSnapshot = Record<string, Hcs25Signal>;\n\n/**\n * The AI system being scored.\n */\nexport const hcs25SubjectSchema = z\n .object({\n id: z.string().min(1),\n registry: z.string().min(1).optional(),\n protocol: z.string().min(1).optional(),\n class: z.string().min(1).optional(),\n metadata: z.record(z.string(), hcs25JsonValueSchema).optional(),\n })\n .passthrough();\n\nexport type Hcs25Subject = z.infer<typeof hcs25SubjectSchema>;\n\n/**\n * Adapter participation policy in the composite denominator.\n */\nexport type Hcs25ContributionMode = 'universal' | 'scoped' | 'conditional';\n\n/**\n * Output of an adapter component normalization function.\n */\nexport interface Hcs25NormalizedValue {\n value: number;\n status: Hcs25SignalStatus;\n}\n\n/**\n * Inputs available to adapter normalization functions.\n */\nexport interface Hcs25NormalizationContext {\n subject: Hcs25Subject;\n snapshot: Hcs25SignalSnapshot;\n config: Hcs25ScoringConfig;\n}\n\n/**\n * Applicability constraints shared by adapters.\n */\nexport interface Hcs25ApplicabilityRule {\n includeRegistries?: readonly string[];\n excludeRegistries?: readonly string[];\n appliesTo?: (subject: Hcs25Subject) => boolean;\n}\n\n/**\n * A deterministic scoring function that maps one signal into one normalized\n * component.\n */\nexport interface Hcs25ComponentDefinition {\n name: string;\n weight?: number;\n nonScorableWhenUnavailable?: boolean;\n normalize: (context: Hcs25NormalizationContext) => Hcs25NormalizedValue;\n}\n\n/**\n * A trust score adapter: deterministic, CPU-bound, and explainable.\n */\nexport interface Hcs25AdapterDefinition extends Hcs25ApplicabilityRule {\n id: string;\n weight?: number;\n contributionMode?: Hcs25ContributionMode;\n defaultComponentKey?: string;\n components: readonly Hcs25ComponentDefinition[];\n}\n\n/**\n * Scoring configuration as provided by the caller; defaults are resolved by\n * {@link compileScoringConfig}.\n */\nexport interface Hcs25ScoringConfigInput {\n version: number;\n adapters: readonly Hcs25AdapterDefinition[];\n staleMultiplier?: number;\n roundingDecimals?: number;\n computeConfidence?: boolean;\n}\n\n/**\n * Validated scoring configuration with defaults resolved.\n */\nexport interface Hcs25ScoringConfig {\n version: number;\n adapters: readonly Hcs25AdapterDefinition[];\n staleMultiplier: number;\n roundingDecimals: number;\n computeConfidence: boolean;\n}\n\nexport const HCS25_DEFAULT_WEIGHT = 1;\nexport const HCS25_DEFAULT_CONTRIBUTION_MODE: Hcs25ContributionMode =\n 'conditional';\nexport const HCS25_DEFAULT_STALE_MULTIPLIER = 1;\nexport const HCS25_DEFAULT_ROUNDING_DECIMALS = 2;\n\n/**\n * One normalized component emitted by an adapter.\n */\nexport interface Hcs25ComponentResult {\n key: string;\n value: number;\n status: Hcs25SignalStatus;\n weight: number;\n}\n\n/**\n * Per-adapter scoring breakdown.\n */\nexport interface Hcs25AdapterScore {\n adapterId: string;\n contributionMode: Hcs25ContributionMode;\n applicable: boolean;\n inDenominator: boolean;\n weight: number;\n components: Hcs25ComponentResult[];\n unavailable: string[];\n total: number;\n}\n\n/**\n * The HCS-25 score record emitted for a subject.\n */\nexport interface Hcs25TrustScoreRecord {\n trustScore: number;\n trustScores: Record<string, number>;\n trustScoreConfigVersion: number;\n trustScoreUpdatedAt: string;\n trustConfidence?: number;\n breakdown: {\n adapters: Hcs25AdapterScore[];\n };\n}\n"],"names":[],"mappings":";;AAeO,MAAM,uBAAkD,EAAE;AAAA,EAAK,MACpE,EAAE,MAAM;AAAA,IACN,EAAE,OAAA;AAAA,IACF,EAAE,OAAA;AAAA,IACF,EAAE,QAAA;AAAA,IACF,EAAE,KAAA;AAAA,IACF,EAAE,MAAM,oBAAoB;AAAA,IAC5B,EAAE,OAAO,EAAE,OAAA,GAAU,oBAAoB;AAAA,EAAA,CAC1C;AACH;AAKO,MAAM,0BAA0B,EAAE,KAAK;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAOM,MAAM,8BAA8B,EACxC,OAAO;AAAA,EACN,QAAQ,EAAE,OAAA,EAAS,IAAI,CAAC,EAAE,SAAA;AAAA,EAC1B,WAAW,EAAE,OAAA,EAAS,IAAI,CAAC,EAAE,SAAA;AAAA,EAC7B,WAAW,EAAE,OAAA,EAAS,IAAI,CAAC,EAAE,SAAA;AAAA,EAC7B,WAAW,EAAE,OAAA,EAAS,IAAI,CAAC,EAAE,SAAA;AAAA,EAC7B,QAAQ,EAAE,OAAO,EAAE,UAAU,oBAAoB,EAAE,SAAA;AACrD,CAAC,EACA,YAAA;AAQI,MAAM,oBAAoB,EAC9B,OAAO;AAAA,EACN,QAAQ;AAAA,EACR,OAAO,qBAAqB,SAAA;AAAA,EAC5B,WAAW,EAAE,OAAA,EAAS,IAAI,CAAC,EAAE,SAAA;AAAA,EAC7B,YAAY,4BAA4B,SAAA;AAC1C,CAAC,EACA,YAAA;AAQI,MAAM,4BAA4B,EACtC,OAAO,EAAE,OAAA,GAAU,iBAAiB,EACpC,YAAY,CAAC,UAAU,QAAQ;AAC9B,aAAW,OAAO,OAAO,KAAK,QAAQ,GAAG;AACvC,QAAI,CAAC,gBAAgB,GAAG,GAAG;AACzB,UAAI,SAAS;AAAA,QACX,MAAM,EAAE,aAAa;AAAA,QACrB,SAAS,8BAA8B,GAAG;AAAA,MAAA,CAC3C;AAAA,IACH;AAAA,EACF;AACF,CAAC;AAOI,MAAM,qBAAqB,EAC/B,OAAO;AAAA,EACN,IAAI,EAAE,SAAS,IAAI,CAAC;AAAA,EACpB,UAAU,EAAE,OAAA,EAAS,IAAI,CAAC,EAAE,SAAA;AAAA,EAC5B,UAAU,EAAE,OAAA,EAAS,IAAI,CAAC,EAAE,SAAA;AAAA,EAC5B,OAAO,EAAE,OAAA,EAAS,IAAI,CAAC,EAAE,SAAA;AAAA,EACzB,UAAU,EAAE,OAAO,EAAE,UAAU,oBAAoB,EAAE,SAAA;AACvD,CAAC,EACA,YAAA;AAgFI,MAAM,uBAAuB;AAC7B,MAAM,kCACX;AACK,MAAM,iCAAiC;AACvC,MAAM,kCAAkC;"}
@@ -1,108 +1,240 @@
1
- import { z } from "zod";
2
- import { hcs26TopicTypeEnumSchema, HCS26_PROTOCOL, hcs26OperationEnumSchema } from "./standards-sdk.es117.js";
3
- const HCS26_DEFAULT_TTL_SECONDS = 86400;
4
- function toPositiveInt(value) {
5
- if (!Number.isFinite(value)) {
6
- throw new Error("Expected a finite number");
7
- }
8
- const intValue = Math.floor(value);
9
- if (intValue <= 0) {
10
- throw new Error("Expected a positive integer");
11
- }
12
- return intValue;
1
+ import { isValidAdapterId, isValidComponentKey, isValidComponentName } from "./standards-sdk.es117.js";
2
+ import { HCS25_DEFAULT_STALE_MULTIPLIER, HCS25_DEFAULT_ROUNDING_DECIMALS, hcs25SubjectSchema, hcs25SignalSnapshotSchema, HCS25_DEFAULT_WEIGHT, HCS25_DEFAULT_CONTRIBUTION_MODE } from "./standards-sdk.es118.js";
3
+ function clampScore(value) {
4
+ return Math.min(100, Math.max(0, value));
13
5
  }
14
- function buildHcs26TopicMemo(input) {
15
- const indexed = input.indexed ?? true;
16
- const ttlSeconds = toPositiveInt(
17
- input.ttlSeconds ?? HCS26_DEFAULT_TTL_SECONDS
18
- );
19
- const topicType = hcs26TopicTypeEnumSchema.parse(input.topicType);
20
- const indexedSegment = indexed ? "0" : "1";
21
- return `${HCS26_PROTOCOL}:${indexedSegment}:${ttlSeconds}:${topicType}`;
6
+ function roundScore(value, decimals = 2) {
7
+ const factor = 10 ** decimals;
8
+ return Math.round(value * factor) / factor;
22
9
  }
23
- function parseHcs26TopicMemo(memoRaw) {
24
- const memo = memoRaw.trim();
25
- if (!memo) {
26
- return null;
10
+ function compileScoringConfig(input) {
11
+ if (!Number.isInteger(input.version) || input.version < 0) {
12
+ throw new TypeError(
13
+ "trustScoreConfigVersion must be a non-negative integer"
14
+ );
27
15
  }
28
- const match = memo.match(/^hcs-26:(\d+):(\d+):(\d+)$/);
29
- if (!match) {
30
- return null;
16
+ if (!Array.isArray(input.adapters) || input.adapters.length === 0) {
17
+ throw new TypeError("at least one trust adapter is required");
31
18
  }
32
- const indexedSegment = Number(match[1]);
33
- const ttlSeconds = Number(match[2]);
34
- const topicType = Number(match[3]);
35
- if (![indexedSegment, ttlSeconds, topicType].every(Number.isFinite)) {
36
- return null;
19
+ const seenAdapterIds = /* @__PURE__ */ new Set();
20
+ for (const adapter of input.adapters) {
21
+ validateAdapter(adapter, seenAdapterIds);
22
+ seenAdapterIds.add(adapter.id);
37
23
  }
38
- const parsedTopicType = hcs26TopicTypeEnumSchema.safeParse(topicType);
39
- if (!parsedTopicType.success) {
40
- return null;
24
+ const staleMultiplier = input.staleMultiplier ?? HCS25_DEFAULT_STALE_MULTIPLIER;
25
+ if (!Number.isFinite(staleMultiplier) || staleMultiplier < 0 || staleMultiplier > 1) {
26
+ throw new TypeError("staleMultiplier must be a number in [0, 1]");
41
27
  }
42
- if (indexedSegment !== 0 && indexedSegment !== 1) {
43
- return null;
28
+ const roundingDecimals = input.roundingDecimals ?? HCS25_DEFAULT_ROUNDING_DECIMALS;
29
+ if (!Number.isInteger(roundingDecimals) || roundingDecimals < 0 || roundingDecimals > 6) {
30
+ throw new TypeError("roundingDecimals must be an integer in [0, 6]");
44
31
  }
45
32
  return {
46
- protocol: HCS26_PROTOCOL,
47
- indexed: indexedSegment === 0,
48
- ttlSeconds,
49
- topicType: parsedTopicType.data
33
+ version: input.version,
34
+ adapters: input.adapters,
35
+ staleMultiplier,
36
+ roundingDecimals,
37
+ computeConfidence: input.computeConfidence ?? false
50
38
  };
51
39
  }
52
- function buildHcs26TransactionMemo(input) {
53
- const operation = hcs26OperationEnumSchema.parse(input.operation);
54
- const topicType = hcs26TopicTypeEnumSchema.parse(input.topicType);
55
- return `${HCS26_PROTOCOL}:op:${operation}:${topicType}`;
40
+ function validateAdapter(adapter, seenAdapterIds) {
41
+ if (typeof adapter.id !== "string" || !isValidAdapterId(adapter.id)) {
42
+ throw new TypeError(
43
+ `invalid adapterId "${String(adapter.id)}": adapter identifiers must match ^[a-z][a-z0-9]*(-[a-z][a-z0-9]*)*$`
44
+ );
45
+ }
46
+ if (seenAdapterIds.has(adapter.id)) {
47
+ throw new TypeError(
48
+ `duplicate adapterId "${adapter.id}": adapter identifiers must be unique within a configuration`
49
+ );
50
+ }
51
+ if (adapter.weight !== void 0 && (!Number.isFinite(adapter.weight) || adapter.weight < 0)) {
52
+ throw new TypeError(
53
+ `adapter "${adapter.id}" weight must be a finite non-negative number`
54
+ );
55
+ }
56
+ if (!Array.isArray(adapter.components) || adapter.components.length === 0) {
57
+ throw new TypeError(
58
+ `adapter "${adapter.id}" must declare at least one component`
59
+ );
60
+ }
61
+ if (adapter.defaultComponentKey !== void 0 && !isValidComponentKey(adapter.defaultComponentKey)) {
62
+ throw new TypeError(
63
+ `adapter "${adapter.id}" defaultComponentKey must be a valid component key`
64
+ );
65
+ }
66
+ for (const component of adapter.components) {
67
+ if (typeof component.name !== "string" || !isValidComponentName(component.name)) {
68
+ throw new TypeError(
69
+ `adapter "${adapter.id}" component name "${String(component.name)}" is not a valid component key segment`
70
+ );
71
+ }
72
+ if (component.weight !== void 0 && (!Number.isFinite(component.weight) || component.weight < 0)) {
73
+ throw new TypeError(
74
+ `adapter "${adapter.id}" component "${component.name}" weight must be a finite non-negative number`
75
+ );
76
+ }
77
+ if (typeof component.normalize !== "function") {
78
+ throw new TypeError(
79
+ `adapter "${adapter.id}" component "${component.name}" must declare a normalize function`
80
+ );
81
+ }
82
+ }
56
83
  }
57
- function parseHcs26TransactionMemo(memoRaw) {
58
- const memo = memoRaw.trim();
59
- if (!memo) {
60
- return null;
84
+ function isAdapterApplicable(adapter, subject) {
85
+ if (adapter.includeRegistries) {
86
+ if (subject.registry === void 0 || !adapter.includeRegistries.includes(subject.registry)) {
87
+ return false;
88
+ }
89
+ }
90
+ if (adapter.excludeRegistries && subject.registry !== void 0 && adapter.excludeRegistries.includes(subject.registry)) {
91
+ return false;
61
92
  }
62
- const match = memo.match(/^hcs-26:op:(\d+):(\d+)$/);
63
- if (!match) {
64
- return null;
93
+ if (adapter.appliesTo && !adapter.appliesTo(subject)) {
94
+ return false;
65
95
  }
66
- const operation = Number(match[1]);
67
- const topicType = Number(match[2]);
68
- if (![operation, topicType].every(Number.isFinite)) {
69
- return null;
96
+ return true;
97
+ }
98
+ function computeTrustScore(input) {
99
+ const config = compileScoringConfig(input.config);
100
+ const subject = hcs25SubjectSchema.parse(input.subject);
101
+ const snapshot = hcs25SignalSnapshotSchema.parse(input.snapshot);
102
+ const context = { subject, snapshot, config };
103
+ const adapterScores = [];
104
+ const trustScores = {};
105
+ for (const adapter of config.adapters) {
106
+ const adapterScore = scoreAdapter(adapter, subject, context, config);
107
+ adapterScores.push(adapterScore);
108
+ if (adapterScore.applicable) {
109
+ for (const component of adapterScore.components) {
110
+ trustScores[component.key] = component.value;
111
+ }
112
+ }
70
113
  }
71
- const parsedOperation = hcs26OperationEnumSchema.safeParse(operation);
72
- if (!parsedOperation.success) {
73
- return null;
114
+ const denominator = adapterScores.filter((score) => score.inDenominator);
115
+ const totalWeight = denominator.reduce((sum, score) => sum + score.weight, 0);
116
+ const weightedSum = denominator.reduce(
117
+ (sum, score) => sum + score.total * score.weight,
118
+ 0
119
+ );
120
+ const total = totalWeight > 0 ? roundScore(weightedSum / totalWeight, config.roundingDecimals) : 0;
121
+ trustScores.total = total;
122
+ const record = {
123
+ trustScore: total,
124
+ trustScores,
125
+ trustScoreConfigVersion: config.version,
126
+ trustScoreUpdatedAt: (input.now ?? /* @__PURE__ */ new Date()).toISOString(),
127
+ breakdown: { adapters: adapterScores }
128
+ };
129
+ if (config.computeConfidence) {
130
+ record.trustConfidence = computeConfidence(denominator, totalWeight);
74
131
  }
75
- const parsedTopicType = hcs26TopicTypeEnumSchema.safeParse(topicType);
76
- if (!parsedTopicType.success) {
77
- return null;
132
+ return record;
133
+ }
134
+ function scoreAdapter(adapter, subject, context, config) {
135
+ const weight = adapter.weight ?? HCS25_DEFAULT_WEIGHT;
136
+ const contributionMode = adapter.contributionMode ?? HCS25_DEFAULT_CONTRIBUTION_MODE;
137
+ const applicable = isAdapterApplicable(adapter, subject);
138
+ const components = [];
139
+ const unavailable = [];
140
+ if (applicable) {
141
+ for (const component of adapter.components) {
142
+ const key = `${adapter.id}.${component.name}`;
143
+ const normalized = component.normalize(context);
144
+ const unavailableStatus = unavailableSignalStatus(normalized);
145
+ if (unavailableStatus !== null) {
146
+ if (component.nonScorableWhenUnavailable) {
147
+ unavailable.push(key);
148
+ } else {
149
+ components.push({
150
+ key,
151
+ value: 0,
152
+ status: unavailableStatus,
153
+ weight: resolveWeight(component.weight)
154
+ });
155
+ }
156
+ continue;
157
+ }
158
+ const clamped = normalized.status === "stale" ? clampScore(normalized.value * config.staleMultiplier) : clampScore(normalized.value);
159
+ components.push({
160
+ key,
161
+ value: roundScore(clamped, config.roundingDecimals),
162
+ status: normalized.status,
163
+ weight: resolveWeight(component.weight)
164
+ });
165
+ }
166
+ if (components.length === 0 && contributionMode !== HCS25_DEFAULT_CONTRIBUTION_MODE) {
167
+ const defaultKey = adapter.defaultComponentKey ?? `${adapter.id}.score`;
168
+ components.push({
169
+ key: defaultKey,
170
+ value: 0,
171
+ status: "missing",
172
+ weight: HCS25_DEFAULT_WEIGHT
173
+ });
174
+ }
175
+ }
176
+ let inDenominator = false;
177
+ if (applicable) {
178
+ inDenominator = contributionMode === "conditional" ? components.length > 0 : true;
179
+ if (weight === 0) {
180
+ inDenominator = false;
181
+ }
78
182
  }
79
183
  return {
80
- protocol: HCS26_PROTOCOL,
81
- operation: parsedOperation.data,
82
- topicType: parsedTopicType.data
184
+ adapterId: adapter.id,
185
+ contributionMode,
186
+ applicable,
187
+ inDenominator,
188
+ weight,
189
+ components,
190
+ unavailable,
191
+ total: adapterTotal(components, config.roundingDecimals)
83
192
  };
84
193
  }
85
- const hcs26TopicMemoSchema = z.string().transform((value) => {
86
- const parsed = parseHcs26TopicMemo(value);
87
- if (!parsed) {
88
- throw new Error("Invalid HCS-26 topic memo");
89
- }
90
- return parsed;
91
- });
92
- const hcs26TransactionMemoSchema = z.string().transform((value) => {
93
- const parsed = parseHcs26TransactionMemo(value);
94
- if (!parsed) {
95
- throw new Error("Invalid HCS-26 transaction memo");
96
- }
97
- return parsed;
98
- });
194
+ function unavailableSignalStatus(normalized) {
195
+ if (!Number.isFinite(normalized.value)) {
196
+ return "missing";
197
+ }
198
+ if (normalized.status === "missing" || normalized.status === "timeout" || normalized.status === "error") {
199
+ return normalized.status;
200
+ }
201
+ return null;
202
+ }
203
+ function resolveWeight(weight) {
204
+ return weight ?? HCS25_DEFAULT_WEIGHT;
205
+ }
206
+ function adapterTotal(components, roundingDecimals) {
207
+ if (components.length === 0) {
208
+ return 0;
209
+ }
210
+ let weightedSum = 0;
211
+ let totalWeight = 0;
212
+ for (const component of components) {
213
+ weightedSum += component.value * component.weight;
214
+ totalWeight += component.weight;
215
+ }
216
+ const mean = totalWeight > 0 ? weightedSum / totalWeight : 0;
217
+ return roundScore(clampScore(mean), roundingDecimals);
218
+ }
219
+ function computeConfidence(denominator, totalWeight) {
220
+ if (totalWeight <= 0) {
221
+ return 0;
222
+ }
223
+ let weightedSum = 0;
224
+ for (const adapter of denominator) {
225
+ const okCount = adapter.components.filter(
226
+ (component) => component.status === "ok"
227
+ ).length;
228
+ const adapterConfidence = adapter.components.length > 0 ? okCount / adapter.components.length : 0;
229
+ weightedSum += adapter.weight * adapterConfidence;
230
+ }
231
+ return roundScore(weightedSum / totalWeight, 4);
232
+ }
99
233
  export {
100
- HCS26_DEFAULT_TTL_SECONDS,
101
- buildHcs26TopicMemo,
102
- buildHcs26TransactionMemo,
103
- hcs26TopicMemoSchema,
104
- hcs26TransactionMemoSchema,
105
- parseHcs26TopicMemo,
106
- parseHcs26TransactionMemo
234
+ clampScore,
235
+ compileScoringConfig,
236
+ computeTrustScore,
237
+ isAdapterApplicable,
238
+ roundScore
107
239
  };
108
240
  //# sourceMappingURL=standards-sdk.es119.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es119.js","sources":["../../src/hcs-26/memos.ts"],"sourcesContent":["import { z } from 'zod';\nimport {\n HCS26_PROTOCOL,\n hcs26OperationEnumSchema,\n hcs26TopicTypeEnumSchema,\n type Hcs26OperationEnum,\n type Hcs26TopicTypeEnum,\n} from './types';\n\nexport type Hcs26TopicMemo = {\n protocol: typeof HCS26_PROTOCOL;\n indexed: boolean;\n ttlSeconds: number;\n topicType: Hcs26TopicTypeEnum;\n};\n\nexport const HCS26_DEFAULT_TTL_SECONDS = 86400;\n\nfunction toPositiveInt(value: number): number {\n if (!Number.isFinite(value)) {\n throw new Error('Expected a finite number');\n }\n const intValue = Math.floor(value);\n if (intValue <= 0) {\n throw new Error('Expected a positive integer');\n }\n return intValue;\n}\n\nexport function buildHcs26TopicMemo(input: {\n indexed?: boolean;\n ttlSeconds?: number;\n topicType: Hcs26TopicTypeEnum;\n}): string {\n const indexed = input.indexed ?? true;\n const ttlSeconds = toPositiveInt(\n input.ttlSeconds ?? HCS26_DEFAULT_TTL_SECONDS,\n );\n const topicType = hcs26TopicTypeEnumSchema.parse(input.topicType);\n\n // HCS-2 memo convention: indexed topics use \"0\" in the second segment.\n const indexedSegment = indexed ? '0' : '1';\n return `${HCS26_PROTOCOL}:${indexedSegment}:${ttlSeconds}:${topicType}`;\n}\n\nexport function parseHcs26TopicMemo(memoRaw: string): Hcs26TopicMemo | null {\n const memo = memoRaw.trim();\n if (!memo) {\n return null;\n }\n\n const match = memo.match(/^hcs-26:(\\d+):(\\d+):(\\d+)$/);\n if (!match) {\n return null;\n }\n\n const indexedSegment = Number(match[1]);\n const ttlSeconds = Number(match[2]);\n const topicType = Number(match[3]);\n\n if (![indexedSegment, ttlSeconds, topicType].every(Number.isFinite)) {\n return null;\n }\n\n const parsedTopicType = hcs26TopicTypeEnumSchema.safeParse(topicType);\n if (!parsedTopicType.success) {\n return null;\n }\n\n if (indexedSegment !== 0 && indexedSegment !== 1) {\n return null;\n }\n\n return {\n protocol: HCS26_PROTOCOL,\n indexed: indexedSegment === 0,\n ttlSeconds,\n topicType: parsedTopicType.data,\n };\n}\n\nexport function buildHcs26TransactionMemo(input: {\n operation: Hcs26OperationEnum;\n topicType: Hcs26TopicTypeEnum;\n}): string {\n const operation = hcs26OperationEnumSchema.parse(input.operation);\n const topicType = hcs26TopicTypeEnumSchema.parse(input.topicType);\n return `${HCS26_PROTOCOL}:op:${operation}:${topicType}`;\n}\n\nexport type Hcs26TransactionMemo = {\n protocol: typeof HCS26_PROTOCOL;\n operation: Hcs26OperationEnum;\n topicType: Hcs26TopicTypeEnum;\n};\n\nexport function parseHcs26TransactionMemo(\n memoRaw: string,\n): Hcs26TransactionMemo | null {\n const memo = memoRaw.trim();\n if (!memo) {\n return null;\n }\n\n const match = memo.match(/^hcs-26:op:(\\d+):(\\d+)$/);\n if (!match) {\n return null;\n }\n\n const operation = Number(match[1]);\n const topicType = Number(match[2]);\n if (![operation, topicType].every(Number.isFinite)) {\n return null;\n }\n\n const parsedOperation = hcs26OperationEnumSchema.safeParse(operation);\n if (!parsedOperation.success) {\n return null;\n }\n const parsedTopicType = hcs26TopicTypeEnumSchema.safeParse(topicType);\n if (!parsedTopicType.success) {\n return null;\n }\n\n return {\n protocol: HCS26_PROTOCOL,\n operation: parsedOperation.data,\n topicType: parsedTopicType.data,\n };\n}\n\nexport const hcs26TopicMemoSchema = z.string().transform(value => {\n const parsed = parseHcs26TopicMemo(value);\n if (!parsed) {\n throw new Error('Invalid HCS-26 topic memo');\n }\n return parsed;\n});\n\nexport const hcs26TransactionMemoSchema = z.string().transform(value => {\n const parsed = parseHcs26TransactionMemo(value);\n if (!parsed) {\n throw new Error('Invalid HCS-26 transaction memo');\n }\n return parsed;\n});\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"standards-sdk.es119.js","sources":["../../src/hcs-25/scoring.ts"],"sourcesContent":["import {\n isValidAdapterId,\n isValidComponentKey,\n isValidComponentName,\n} from './identifiers';\nimport {\n HCS25_DEFAULT_CONTRIBUTION_MODE,\n HCS25_DEFAULT_ROUNDING_DECIMALS,\n HCS25_DEFAULT_STALE_MULTIPLIER,\n HCS25_DEFAULT_WEIGHT,\n hcs25SignalSnapshotSchema,\n hcs25SubjectSchema,\n} from './types';\nimport type {\n Hcs25AdapterDefinition,\n Hcs25AdapterScore,\n Hcs25ComponentResult,\n Hcs25ContributionMode,\n Hcs25NormalizedValue,\n Hcs25ScoringConfig,\n Hcs25ScoringConfigInput,\n Hcs25SignalSnapshot,\n Hcs25SignalStatus,\n Hcs25Subject,\n Hcs25TrustScoreRecord,\n} from './types';\n\n/**\n * Clamps a finite component value into the HCS-25 range [0, 100].\n */\nexport function clampScore(value: number): number {\n return Math.min(100, Math.max(0, value));\n}\n\n/**\n * Rounds a value to a stable decimal precision (default 2, per HCS-25).\n */\nexport function roundScore(value: number, decimals = 2): number {\n const factor = 10 ** decimals;\n return Math.round(value * factor) / factor;\n}\n\n/**\n * Validates an adapter set and resolves configuration defaults. The returned\n * configuration is safe to pass to {@link computeTrustScore}.\n */\nexport function compileScoringConfig(\n input: Hcs25ScoringConfigInput,\n): Hcs25ScoringConfig {\n if (!Number.isInteger(input.version) || input.version < 0) {\n throw new TypeError(\n 'trustScoreConfigVersion must be a non-negative integer',\n );\n }\n\n if (!Array.isArray(input.adapters) || input.adapters.length === 0) {\n throw new TypeError('at least one trust adapter is required');\n }\n\n const seenAdapterIds = new Set<string>();\n for (const adapter of input.adapters) {\n validateAdapter(adapter, seenAdapterIds);\n seenAdapterIds.add(adapter.id);\n }\n\n const staleMultiplier =\n input.staleMultiplier ?? HCS25_DEFAULT_STALE_MULTIPLIER;\n if (\n !Number.isFinite(staleMultiplier) ||\n staleMultiplier < 0 ||\n staleMultiplier > 1\n ) {\n throw new TypeError('staleMultiplier must be a number in [0, 1]');\n }\n\n const roundingDecimals =\n input.roundingDecimals ?? HCS25_DEFAULT_ROUNDING_DECIMALS;\n if (\n !Number.isInteger(roundingDecimals) ||\n roundingDecimals < 0 ||\n roundingDecimals > 6\n ) {\n throw new TypeError('roundingDecimals must be an integer in [0, 6]');\n }\n\n return {\n version: input.version,\n adapters: input.adapters,\n staleMultiplier,\n roundingDecimals,\n computeConfidence: input.computeConfidence ?? false,\n };\n}\n\nfunction validateAdapter(\n adapter: Hcs25AdapterDefinition,\n seenAdapterIds: Set<string>,\n): void {\n if (typeof adapter.id !== 'string' || !isValidAdapterId(adapter.id)) {\n throw new TypeError(\n `invalid adapterId \"${String(adapter.id)}\": adapter identifiers must match ^[a-z][a-z0-9]*(-[a-z][a-z0-9]*)*$`,\n );\n }\n\n if (seenAdapterIds.has(adapter.id)) {\n throw new TypeError(\n `duplicate adapterId \"${adapter.id}\": adapter identifiers must be unique within a configuration`,\n );\n }\n\n if (\n adapter.weight !== undefined &&\n (!Number.isFinite(adapter.weight) || adapter.weight < 0)\n ) {\n throw new TypeError(\n `adapter \"${adapter.id}\" weight must be a finite non-negative number`,\n );\n }\n\n if (!Array.isArray(adapter.components) || adapter.components.length === 0) {\n throw new TypeError(\n `adapter \"${adapter.id}\" must declare at least one component`,\n );\n }\n\n if (\n adapter.defaultComponentKey !== undefined &&\n !isValidComponentKey(adapter.defaultComponentKey)\n ) {\n throw new TypeError(\n `adapter \"${adapter.id}\" defaultComponentKey must be a valid component key`,\n );\n }\n\n for (const component of adapter.components) {\n if (\n typeof component.name !== 'string' ||\n !isValidComponentName(component.name)\n ) {\n throw new TypeError(\n `adapter \"${adapter.id}\" component name \"${String(component.name)}\" is not a valid component key segment`,\n );\n }\n\n if (\n component.weight !== undefined &&\n (!Number.isFinite(component.weight) || component.weight < 0)\n ) {\n throw new TypeError(\n `adapter \"${adapter.id}\" component \"${component.name}\" weight must be a finite non-negative number`,\n );\n }\n\n if (typeof component.normalize !== 'function') {\n throw new TypeError(\n `adapter \"${adapter.id}\" component \"${component.name}\" must declare a normalize function`,\n );\n }\n }\n}\n\n/**\n * Evaluates adapter applicability against a subject using registry\n * include/exclude lists and the optional appliesTo predicate.\n */\nexport function isAdapterApplicable(\n adapter: Hcs25AdapterDefinition,\n subject: Hcs25Subject,\n): boolean {\n if (adapter.includeRegistries) {\n if (\n subject.registry === undefined ||\n !adapter.includeRegistries.includes(subject.registry)\n ) {\n return false;\n }\n }\n\n if (\n adapter.excludeRegistries &&\n subject.registry !== undefined &&\n adapter.excludeRegistries.includes(subject.registry)\n ) {\n return false;\n }\n\n if (adapter.appliesTo && !adapter.appliesTo(subject)) {\n return false;\n }\n\n return true;\n}\n\nexport interface Hcs25ComputeTrustScoreInput {\n subject: Hcs25Subject;\n snapshot: Hcs25SignalSnapshot;\n config: Hcs25ScoringConfigInput;\n now?: Date;\n}\n\n/**\n * Computes the composite AI Trust Score for a subject from a signal snapshot\n * and scoring configuration, following HCS-25 normalization, missing/stale\n * handling, applicability, and weighted-aggregation rules.\n */\nexport function computeTrustScore(\n input: Hcs25ComputeTrustScoreInput,\n): Hcs25TrustScoreRecord {\n const config = compileScoringConfig(input.config);\n const subject = hcs25SubjectSchema.parse(input.subject);\n const snapshot = hcs25SignalSnapshotSchema.parse(input.snapshot);\n const context = { subject, snapshot, config };\n\n const adapterScores: Hcs25AdapterScore[] = [];\n const trustScores: Record<string, number> = {};\n\n for (const adapter of config.adapters) {\n const adapterScore = scoreAdapter(adapter, subject, context, config);\n adapterScores.push(adapterScore);\n\n if (adapterScore.applicable) {\n for (const component of adapterScore.components) {\n trustScores[component.key] = component.value;\n }\n }\n }\n\n const denominator = adapterScores.filter(score => score.inDenominator);\n const totalWeight = denominator.reduce((sum, score) => sum + score.weight, 0);\n const weightedSum = denominator.reduce(\n (sum, score) => sum + score.total * score.weight,\n 0,\n );\n const total =\n totalWeight > 0\n ? roundScore(weightedSum / totalWeight, config.roundingDecimals)\n : 0;\n\n trustScores.total = total;\n\n const record: Hcs25TrustScoreRecord = {\n trustScore: total,\n trustScores,\n trustScoreConfigVersion: config.version,\n trustScoreUpdatedAt: (input.now ?? new Date()).toISOString(),\n breakdown: { adapters: adapterScores },\n };\n\n if (config.computeConfidence) {\n record.trustConfidence = computeConfidence(denominator, totalWeight);\n }\n\n return record;\n}\n\nfunction scoreAdapter(\n adapter: Hcs25AdapterDefinition,\n subject: Hcs25Subject,\n context: {\n subject: Hcs25Subject;\n snapshot: Hcs25SignalSnapshot;\n config: Hcs25ScoringConfig;\n },\n config: Hcs25ScoringConfig,\n): Hcs25AdapterScore {\n const weight = adapter.weight ?? HCS25_DEFAULT_WEIGHT;\n const contributionMode: Hcs25ContributionMode =\n adapter.contributionMode ?? HCS25_DEFAULT_CONTRIBUTION_MODE;\n const applicable = isAdapterApplicable(adapter, subject);\n\n const components: Hcs25ComponentResult[] = [];\n const unavailable: string[] = [];\n\n if (applicable) {\n for (const component of adapter.components) {\n const key = `${adapter.id}.${component.name}`;\n const normalized = component.normalize(context);\n const unavailableStatus = unavailableSignalStatus(normalized);\n\n if (unavailableStatus !== null) {\n if (component.nonScorableWhenUnavailable) {\n unavailable.push(key);\n } else {\n components.push({\n key,\n value: 0,\n status: unavailableStatus,\n weight: resolveWeight(component.weight),\n });\n }\n continue;\n }\n\n const clamped =\n normalized.status === 'stale'\n ? clampScore(normalized.value * config.staleMultiplier)\n : clampScore(normalized.value);\n\n components.push({\n key,\n value: roundScore(clamped, config.roundingDecimals),\n status: normalized.status,\n weight: resolveWeight(component.weight),\n });\n }\n\n if (\n components.length === 0 &&\n contributionMode !== HCS25_DEFAULT_CONTRIBUTION_MODE\n ) {\n const defaultKey = adapter.defaultComponentKey ?? `${adapter.id}.score`;\n components.push({\n key: defaultKey,\n value: 0,\n status: 'missing',\n weight: HCS25_DEFAULT_WEIGHT,\n });\n }\n }\n\n let inDenominator = false;\n if (applicable) {\n inDenominator =\n contributionMode === 'conditional' ? components.length > 0 : true;\n if (weight === 0) {\n inDenominator = false;\n }\n }\n\n return {\n adapterId: adapter.id,\n contributionMode,\n applicable,\n inDenominator,\n weight,\n components,\n unavailable,\n total: adapterTotal(components, config.roundingDecimals),\n };\n}\n\nfunction unavailableSignalStatus(\n normalized: Hcs25NormalizedValue,\n): Hcs25SignalStatus | null {\n if (!Number.isFinite(normalized.value)) {\n return 'missing';\n }\n\n if (\n normalized.status === 'missing' ||\n normalized.status === 'timeout' ||\n normalized.status === 'error'\n ) {\n return normalized.status;\n }\n\n return null;\n}\n\nfunction resolveWeight(weight: number | undefined): number {\n return weight ?? HCS25_DEFAULT_WEIGHT;\n}\n\nfunction adapterTotal(\n components: Hcs25ComponentResult[],\n roundingDecimals: number,\n): number {\n if (components.length === 0) {\n return 0;\n }\n\n let weightedSum = 0;\n let totalWeight = 0;\n for (const component of components) {\n weightedSum += component.value * component.weight;\n totalWeight += component.weight;\n }\n\n const mean = totalWeight > 0 ? weightedSum / totalWeight : 0;\n return roundScore(clampScore(mean), roundingDecimals);\n}\n\nfunction computeConfidence(\n denominator: Hcs25AdapterScore[],\n totalWeight: number,\n): number {\n if (totalWeight <= 0) {\n return 0;\n }\n\n let weightedSum = 0;\n for (const adapter of denominator) {\n const okCount = adapter.components.filter(\n component => component.status === 'ok',\n ).length;\n const adapterConfidence =\n adapter.components.length > 0 ? okCount / adapter.components.length : 0;\n weightedSum += adapter.weight * adapterConfidence;\n }\n\n return roundScore(weightedSum / totalWeight, 4);\n}\n"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { buildTopicCreateTx, buildMessageTx } from "./standards-sdk.es161.js";
1
+ import { buildTopicCreateTx, buildMessageTx } from "./standards-sdk.es183.js";
2
2
  import { HCS7ConfigType, HCS7Operation } from "./standards-sdk.es8.js";
3
3
  function buildHcs7CreateRegistryTx(params) {
4
4
  const memo = `hcs-7:indexed:${params.ttl}`;