@hashgraphonline/standards-sdk 0.1.189 → 0.1.190

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 (528) hide show
  1. package/dist/browser/hcs-25/adapters/agentverse.d.ts.map +1 -1
  2. package/dist/browser/hcs-25/adapters/availability.d.ts.map +1 -1
  3. package/dist/browser/hcs-25/adapters/connectivity.d.ts.map +1 -1
  4. package/dist/browser/hcs-25/adapters/ethos.d.ts.map +1 -1
  5. package/dist/browser/hcs-25/adapters/model-evals.d.ts.map +1 -1
  6. package/dist/browser/hcs-25/adapters/simple-evals.d.ts.map +1 -1
  7. package/dist/browser/hcs-25/adapters/x402.d.ts.map +1 -1
  8. package/dist/browser/hcs-25/collectors/acp.d.ts +42 -0
  9. package/dist/browser/hcs-25/collectors/acp.d.ts.map +1 -0
  10. package/dist/browser/hcs-25/collectors/agentverse.d.ts +37 -0
  11. package/dist/browser/hcs-25/collectors/agentverse.d.ts.map +1 -0
  12. package/dist/browser/hcs-25/collectors/availability.d.ts +29 -0
  13. package/dist/browser/hcs-25/collectors/availability.d.ts.map +1 -0
  14. package/dist/browser/hcs-25/collectors/catalog.d.ts +57 -0
  15. package/dist/browser/hcs-25/collectors/catalog.d.ts.map +1 -0
  16. package/dist/browser/hcs-25/collectors/connectivity.d.ts +49 -0
  17. package/dist/browser/hcs-25/collectors/connectivity.d.ts.map +1 -0
  18. package/dist/browser/hcs-25/collectors/endpoints.d.ts +9 -0
  19. package/dist/browser/hcs-25/collectors/endpoints.d.ts.map +1 -0
  20. package/dist/browser/hcs-25/collectors/erc8004.d.ts +104 -0
  21. package/dist/browser/hcs-25/collectors/erc8004.d.ts.map +1 -0
  22. package/dist/browser/hcs-25/collectors/ethos.d.ts +95 -0
  23. package/dist/browser/hcs-25/collectors/ethos.d.ts.map +1 -0
  24. package/dist/browser/hcs-25/collectors/freshness.d.ts +36 -0
  25. package/dist/browser/hcs-25/collectors/freshness.d.ts.map +1 -0
  26. package/dist/browser/hcs-25/collectors/http.d.ts +67 -0
  27. package/dist/browser/hcs-25/collectors/http.d.ts.map +1 -0
  28. package/dist/browser/hcs-25/collectors/index.d.ts +21 -0
  29. package/dist/browser/hcs-25/collectors/index.d.ts.map +1 -0
  30. package/dist/browser/hcs-25/collectors/merge.d.ts +11 -0
  31. package/dist/browser/hcs-25/collectors/merge.d.ts.map +1 -0
  32. package/dist/browser/hcs-25/collectors/model-evals.d.ts +315 -0
  33. package/dist/browser/hcs-25/collectors/model-evals.d.ts.map +1 -0
  34. package/dist/browser/hcs-25/collectors/oss-popularity.d.ts +51 -0
  35. package/dist/browser/hcs-25/collectors/oss-popularity.d.ts.map +1 -0
  36. package/dist/browser/hcs-25/collectors/output-verification.d.ts +37 -0
  37. package/dist/browser/hcs-25/collectors/output-verification.d.ts.map +1 -0
  38. package/dist/browser/hcs-25/collectors/pipeline.d.ts +19 -0
  39. package/dist/browser/hcs-25/collectors/pipeline.d.ts.map +1 -0
  40. package/dist/browser/hcs-25/collectors/runner.d.ts +20 -0
  41. package/dist/browser/hcs-25/collectors/runner.d.ts.map +1 -0
  42. package/dist/browser/hcs-25/collectors/simple-evals.d.ts +91 -0
  43. package/dist/browser/hcs-25/collectors/simple-evals.d.ts.map +1 -0
  44. package/dist/browser/hcs-25/collectors/types.d.ts +113 -0
  45. package/dist/browser/hcs-25/collectors/types.d.ts.map +1 -0
  46. package/dist/browser/hcs-25/collectors/x402-onchain.d.ts +105 -0
  47. package/dist/browser/hcs-25/collectors/x402-onchain.d.ts.map +1 -0
  48. package/dist/browser/hcs-25/collectors/x402.d.ts +48 -0
  49. package/dist/browser/hcs-25/collectors/x402.d.ts.map +1 -0
  50. package/dist/browser/hcs-25/index.d.ts +1 -0
  51. package/dist/browser/hcs-25/index.d.ts.map +1 -1
  52. package/dist/browser/hcs-25/signals/marketplace.d.ts +6 -6
  53. package/dist/browser/hcs-25/signals/marketplace.d.ts.map +1 -1
  54. package/dist/browser/hcs-25/signals/model-evals.d.ts +12 -12
  55. package/dist/browser/hcs-25/signals/model-evals.d.ts.map +1 -1
  56. package/dist/browser/hcs-25/signals/operational.d.ts +15 -12
  57. package/dist/browser/hcs-25/signals/operational.d.ts.map +1 -1
  58. package/dist/browser/hcs-25/signals/simple-evals.d.ts +1 -1
  59. package/dist/browser/hcs-25/signals/simple-evals.d.ts.map +1 -1
  60. package/dist/browser-root/hcs-25/adapters/agentverse.d.ts.map +1 -1
  61. package/dist/browser-root/hcs-25/adapters/availability.d.ts.map +1 -1
  62. package/dist/browser-root/hcs-25/adapters/connectivity.d.ts.map +1 -1
  63. package/dist/browser-root/hcs-25/adapters/ethos.d.ts.map +1 -1
  64. package/dist/browser-root/hcs-25/adapters/model-evals.d.ts.map +1 -1
  65. package/dist/browser-root/hcs-25/adapters/simple-evals.d.ts.map +1 -1
  66. package/dist/browser-root/hcs-25/adapters/x402.d.ts.map +1 -1
  67. package/dist/browser-root/hcs-25/collectors/acp.d.ts +42 -0
  68. package/dist/browser-root/hcs-25/collectors/acp.d.ts.map +1 -0
  69. package/dist/browser-root/hcs-25/collectors/agentverse.d.ts +37 -0
  70. package/dist/browser-root/hcs-25/collectors/agentverse.d.ts.map +1 -0
  71. package/dist/browser-root/hcs-25/collectors/availability.d.ts +29 -0
  72. package/dist/browser-root/hcs-25/collectors/availability.d.ts.map +1 -0
  73. package/dist/browser-root/hcs-25/collectors/catalog.d.ts +57 -0
  74. package/dist/browser-root/hcs-25/collectors/catalog.d.ts.map +1 -0
  75. package/dist/browser-root/hcs-25/collectors/connectivity.d.ts +49 -0
  76. package/dist/browser-root/hcs-25/collectors/connectivity.d.ts.map +1 -0
  77. package/dist/browser-root/hcs-25/collectors/endpoints.d.ts +9 -0
  78. package/dist/browser-root/hcs-25/collectors/endpoints.d.ts.map +1 -0
  79. package/dist/browser-root/hcs-25/collectors/erc8004.d.ts +104 -0
  80. package/dist/browser-root/hcs-25/collectors/erc8004.d.ts.map +1 -0
  81. package/dist/browser-root/hcs-25/collectors/ethos.d.ts +95 -0
  82. package/dist/browser-root/hcs-25/collectors/ethos.d.ts.map +1 -0
  83. package/dist/browser-root/hcs-25/collectors/freshness.d.ts +36 -0
  84. package/dist/browser-root/hcs-25/collectors/freshness.d.ts.map +1 -0
  85. package/dist/browser-root/hcs-25/collectors/http.d.ts +67 -0
  86. package/dist/browser-root/hcs-25/collectors/http.d.ts.map +1 -0
  87. package/dist/browser-root/hcs-25/collectors/index.d.ts +21 -0
  88. package/dist/browser-root/hcs-25/collectors/index.d.ts.map +1 -0
  89. package/dist/browser-root/hcs-25/collectors/merge.d.ts +11 -0
  90. package/dist/browser-root/hcs-25/collectors/merge.d.ts.map +1 -0
  91. package/dist/browser-root/hcs-25/collectors/model-evals.d.ts +315 -0
  92. package/dist/browser-root/hcs-25/collectors/model-evals.d.ts.map +1 -0
  93. package/dist/browser-root/hcs-25/collectors/oss-popularity.d.ts +51 -0
  94. package/dist/browser-root/hcs-25/collectors/oss-popularity.d.ts.map +1 -0
  95. package/dist/browser-root/hcs-25/collectors/output-verification.d.ts +37 -0
  96. package/dist/browser-root/hcs-25/collectors/output-verification.d.ts.map +1 -0
  97. package/dist/browser-root/hcs-25/collectors/pipeline.d.ts +19 -0
  98. package/dist/browser-root/hcs-25/collectors/pipeline.d.ts.map +1 -0
  99. package/dist/browser-root/hcs-25/collectors/runner.d.ts +20 -0
  100. package/dist/browser-root/hcs-25/collectors/runner.d.ts.map +1 -0
  101. package/dist/browser-root/hcs-25/collectors/simple-evals.d.ts +91 -0
  102. package/dist/browser-root/hcs-25/collectors/simple-evals.d.ts.map +1 -0
  103. package/dist/browser-root/hcs-25/collectors/types.d.ts +113 -0
  104. package/dist/browser-root/hcs-25/collectors/types.d.ts.map +1 -0
  105. package/dist/browser-root/hcs-25/collectors/x402-onchain.d.ts +105 -0
  106. package/dist/browser-root/hcs-25/collectors/x402-onchain.d.ts.map +1 -0
  107. package/dist/browser-root/hcs-25/collectors/x402.d.ts +48 -0
  108. package/dist/browser-root/hcs-25/collectors/x402.d.ts.map +1 -0
  109. package/dist/browser-root/hcs-25/index.d.ts +1 -0
  110. package/dist/browser-root/hcs-25/index.d.ts.map +1 -1
  111. package/dist/browser-root/hcs-25/signals/marketplace.d.ts +6 -6
  112. package/dist/browser-root/hcs-25/signals/marketplace.d.ts.map +1 -1
  113. package/dist/browser-root/hcs-25/signals/model-evals.d.ts +12 -12
  114. package/dist/browser-root/hcs-25/signals/model-evals.d.ts.map +1 -1
  115. package/dist/browser-root/hcs-25/signals/operational.d.ts +15 -12
  116. package/dist/browser-root/hcs-25/signals/operational.d.ts.map +1 -1
  117. package/dist/browser-root/hcs-25/signals/simple-evals.d.ts +1 -1
  118. package/dist/browser-root/hcs-25/signals/simple-evals.d.ts.map +1 -1
  119. package/dist/cjs/hcs-25/adapters/agentverse.d.ts.map +1 -1
  120. package/dist/cjs/hcs-25/adapters/availability.d.ts.map +1 -1
  121. package/dist/cjs/hcs-25/adapters/connectivity.d.ts.map +1 -1
  122. package/dist/cjs/hcs-25/adapters/ethos.d.ts.map +1 -1
  123. package/dist/cjs/hcs-25/adapters/model-evals.d.ts.map +1 -1
  124. package/dist/cjs/hcs-25/adapters/simple-evals.d.ts.map +1 -1
  125. package/dist/cjs/hcs-25/adapters/x402.d.ts.map +1 -1
  126. package/dist/cjs/hcs-25/collectors/acp.d.ts +42 -0
  127. package/dist/cjs/hcs-25/collectors/acp.d.ts.map +1 -0
  128. package/dist/cjs/hcs-25/collectors/agentverse.d.ts +37 -0
  129. package/dist/cjs/hcs-25/collectors/agentverse.d.ts.map +1 -0
  130. package/dist/cjs/hcs-25/collectors/availability.d.ts +29 -0
  131. package/dist/cjs/hcs-25/collectors/availability.d.ts.map +1 -0
  132. package/dist/cjs/hcs-25/collectors/catalog.d.ts +57 -0
  133. package/dist/cjs/hcs-25/collectors/catalog.d.ts.map +1 -0
  134. package/dist/cjs/hcs-25/collectors/connectivity.d.ts +49 -0
  135. package/dist/cjs/hcs-25/collectors/connectivity.d.ts.map +1 -0
  136. package/dist/cjs/hcs-25/collectors/endpoints.d.ts +9 -0
  137. package/dist/cjs/hcs-25/collectors/endpoints.d.ts.map +1 -0
  138. package/dist/cjs/hcs-25/collectors/erc8004.d.ts +104 -0
  139. package/dist/cjs/hcs-25/collectors/erc8004.d.ts.map +1 -0
  140. package/dist/cjs/hcs-25/collectors/ethos.d.ts +95 -0
  141. package/dist/cjs/hcs-25/collectors/ethos.d.ts.map +1 -0
  142. package/dist/cjs/hcs-25/collectors/freshness.d.ts +36 -0
  143. package/dist/cjs/hcs-25/collectors/freshness.d.ts.map +1 -0
  144. package/dist/cjs/hcs-25/collectors/http.d.ts +67 -0
  145. package/dist/cjs/hcs-25/collectors/http.d.ts.map +1 -0
  146. package/dist/cjs/hcs-25/collectors/index.d.ts +21 -0
  147. package/dist/cjs/hcs-25/collectors/index.d.ts.map +1 -0
  148. package/dist/cjs/hcs-25/collectors/merge.d.ts +11 -0
  149. package/dist/cjs/hcs-25/collectors/merge.d.ts.map +1 -0
  150. package/dist/cjs/hcs-25/collectors/model-evals.d.ts +315 -0
  151. package/dist/cjs/hcs-25/collectors/model-evals.d.ts.map +1 -0
  152. package/dist/cjs/hcs-25/collectors/oss-popularity.d.ts +51 -0
  153. package/dist/cjs/hcs-25/collectors/oss-popularity.d.ts.map +1 -0
  154. package/dist/cjs/hcs-25/collectors/output-verification.d.ts +37 -0
  155. package/dist/cjs/hcs-25/collectors/output-verification.d.ts.map +1 -0
  156. package/dist/cjs/hcs-25/collectors/pipeline.d.ts +19 -0
  157. package/dist/cjs/hcs-25/collectors/pipeline.d.ts.map +1 -0
  158. package/dist/cjs/hcs-25/collectors/runner.d.ts +20 -0
  159. package/dist/cjs/hcs-25/collectors/runner.d.ts.map +1 -0
  160. package/dist/cjs/hcs-25/collectors/simple-evals.d.ts +91 -0
  161. package/dist/cjs/hcs-25/collectors/simple-evals.d.ts.map +1 -0
  162. package/dist/cjs/hcs-25/collectors/types.d.ts +113 -0
  163. package/dist/cjs/hcs-25/collectors/types.d.ts.map +1 -0
  164. package/dist/cjs/hcs-25/collectors/x402-onchain.d.ts +105 -0
  165. package/dist/cjs/hcs-25/collectors/x402-onchain.d.ts.map +1 -0
  166. package/dist/cjs/hcs-25/collectors/x402.d.ts +48 -0
  167. package/dist/cjs/hcs-25/collectors/x402.d.ts.map +1 -0
  168. package/dist/cjs/hcs-25/index.d.ts +1 -0
  169. package/dist/cjs/hcs-25/index.d.ts.map +1 -1
  170. package/dist/cjs/hcs-25/signals/marketplace.d.ts +6 -6
  171. package/dist/cjs/hcs-25/signals/marketplace.d.ts.map +1 -1
  172. package/dist/cjs/hcs-25/signals/model-evals.d.ts +12 -12
  173. package/dist/cjs/hcs-25/signals/model-evals.d.ts.map +1 -1
  174. package/dist/cjs/hcs-25/signals/operational.d.ts +15 -12
  175. package/dist/cjs/hcs-25/signals/operational.d.ts.map +1 -1
  176. package/dist/cjs/hcs-25/signals/simple-evals.d.ts +1 -1
  177. package/dist/cjs/hcs-25/signals/simple-evals.d.ts.map +1 -1
  178. package/dist/cjs/standards-sdk.cjs +2 -2
  179. package/dist/cjs/standards-sdk.cjs.map +1 -1
  180. package/dist/es/hcs-25/adapters/agentverse.d.ts.map +1 -1
  181. package/dist/es/hcs-25/adapters/availability.d.ts.map +1 -1
  182. package/dist/es/hcs-25/adapters/connectivity.d.ts.map +1 -1
  183. package/dist/es/hcs-25/adapters/ethos.d.ts.map +1 -1
  184. package/dist/es/hcs-25/adapters/model-evals.d.ts.map +1 -1
  185. package/dist/es/hcs-25/adapters/simple-evals.d.ts.map +1 -1
  186. package/dist/es/hcs-25/adapters/x402.d.ts.map +1 -1
  187. package/dist/es/hcs-25/collectors/acp.d.ts +42 -0
  188. package/dist/es/hcs-25/collectors/acp.d.ts.map +1 -0
  189. package/dist/es/hcs-25/collectors/agentverse.d.ts +37 -0
  190. package/dist/es/hcs-25/collectors/agentverse.d.ts.map +1 -0
  191. package/dist/es/hcs-25/collectors/availability.d.ts +29 -0
  192. package/dist/es/hcs-25/collectors/availability.d.ts.map +1 -0
  193. package/dist/es/hcs-25/collectors/catalog.d.ts +57 -0
  194. package/dist/es/hcs-25/collectors/catalog.d.ts.map +1 -0
  195. package/dist/es/hcs-25/collectors/connectivity.d.ts +49 -0
  196. package/dist/es/hcs-25/collectors/connectivity.d.ts.map +1 -0
  197. package/dist/es/hcs-25/collectors/endpoints.d.ts +9 -0
  198. package/dist/es/hcs-25/collectors/endpoints.d.ts.map +1 -0
  199. package/dist/es/hcs-25/collectors/erc8004.d.ts +104 -0
  200. package/dist/es/hcs-25/collectors/erc8004.d.ts.map +1 -0
  201. package/dist/es/hcs-25/collectors/ethos.d.ts +95 -0
  202. package/dist/es/hcs-25/collectors/ethos.d.ts.map +1 -0
  203. package/dist/es/hcs-25/collectors/freshness.d.ts +36 -0
  204. package/dist/es/hcs-25/collectors/freshness.d.ts.map +1 -0
  205. package/dist/es/hcs-25/collectors/http.d.ts +67 -0
  206. package/dist/es/hcs-25/collectors/http.d.ts.map +1 -0
  207. package/dist/es/hcs-25/collectors/index.d.ts +21 -0
  208. package/dist/es/hcs-25/collectors/index.d.ts.map +1 -0
  209. package/dist/es/hcs-25/collectors/merge.d.ts +11 -0
  210. package/dist/es/hcs-25/collectors/merge.d.ts.map +1 -0
  211. package/dist/es/hcs-25/collectors/model-evals.d.ts +315 -0
  212. package/dist/es/hcs-25/collectors/model-evals.d.ts.map +1 -0
  213. package/dist/es/hcs-25/collectors/oss-popularity.d.ts +51 -0
  214. package/dist/es/hcs-25/collectors/oss-popularity.d.ts.map +1 -0
  215. package/dist/es/hcs-25/collectors/output-verification.d.ts +37 -0
  216. package/dist/es/hcs-25/collectors/output-verification.d.ts.map +1 -0
  217. package/dist/es/hcs-25/collectors/pipeline.d.ts +19 -0
  218. package/dist/es/hcs-25/collectors/pipeline.d.ts.map +1 -0
  219. package/dist/es/hcs-25/collectors/runner.d.ts +20 -0
  220. package/dist/es/hcs-25/collectors/runner.d.ts.map +1 -0
  221. package/dist/es/hcs-25/collectors/simple-evals.d.ts +91 -0
  222. package/dist/es/hcs-25/collectors/simple-evals.d.ts.map +1 -0
  223. package/dist/es/hcs-25/collectors/types.d.ts +113 -0
  224. package/dist/es/hcs-25/collectors/types.d.ts.map +1 -0
  225. package/dist/es/hcs-25/collectors/x402-onchain.d.ts +105 -0
  226. package/dist/es/hcs-25/collectors/x402-onchain.d.ts.map +1 -0
  227. package/dist/es/hcs-25/collectors/x402.d.ts +48 -0
  228. package/dist/es/hcs-25/collectors/x402.d.ts.map +1 -0
  229. package/dist/es/hcs-25/index.d.ts +1 -0
  230. package/dist/es/hcs-25/index.d.ts.map +1 -1
  231. package/dist/es/hcs-25/signals/marketplace.d.ts +6 -6
  232. package/dist/es/hcs-25/signals/marketplace.d.ts.map +1 -1
  233. package/dist/es/hcs-25/signals/model-evals.d.ts +12 -12
  234. package/dist/es/hcs-25/signals/model-evals.d.ts.map +1 -1
  235. package/dist/es/hcs-25/signals/operational.d.ts +15 -12
  236. package/dist/es/hcs-25/signals/operational.d.ts.map +1 -1
  237. package/dist/es/hcs-25/signals/simple-evals.d.ts +1 -1
  238. package/dist/es/hcs-25/signals/simple-evals.d.ts.map +1 -1
  239. package/dist/es/standards-sdk.es.js +137 -58
  240. package/dist/es/standards-sdk.es.js.map +1 -1
  241. package/dist/es/standards-sdk.es101.js +2 -2
  242. package/dist/es/standards-sdk.es103.js +2 -2
  243. package/dist/es/standards-sdk.es104.js +1 -1
  244. package/dist/es/standards-sdk.es106.js +1 -1
  245. package/dist/es/standards-sdk.es108.js +2 -2
  246. package/dist/es/standards-sdk.es11.js +1 -1
  247. package/dist/es/standards-sdk.es110.js +1 -1
  248. package/dist/es/standards-sdk.es111.js +2 -2
  249. package/dist/es/standards-sdk.es115.js +3 -3
  250. package/dist/es/standards-sdk.es116.js +4 -4
  251. package/dist/es/standards-sdk.es12.js +1 -1
  252. package/dist/es/standards-sdk.es120.js +4 -4
  253. package/dist/es/standards-sdk.es121.js +11 -11
  254. package/dist/es/standards-sdk.es122.js +176 -240
  255. package/dist/es/standards-sdk.es122.js.map +1 -1
  256. package/dist/es/standards-sdk.es123.js +41 -468
  257. package/dist/es/standards-sdk.es123.js.map +1 -1
  258. package/dist/es/standards-sdk.es124.js +28 -103
  259. package/dist/es/standards-sdk.es124.js.map +1 -1
  260. package/dist/es/standards-sdk.es125.js +185 -145
  261. package/dist/es/standards-sdk.es125.js.map +1 -1
  262. package/dist/es/standards-sdk.es126.js +13 -33
  263. package/dist/es/standards-sdk.es126.js.map +1 -1
  264. package/dist/es/standards-sdk.es127.js +44 -10
  265. package/dist/es/standards-sdk.es127.js.map +1 -1
  266. package/dist/es/standards-sdk.es128.js +150 -172
  267. package/dist/es/standards-sdk.es128.js.map +1 -1
  268. package/dist/es/standards-sdk.es129.js +166 -26
  269. package/dist/es/standards-sdk.es129.js.map +1 -1
  270. package/dist/es/standards-sdk.es13.js +1 -1
  271. package/dist/es/standards-sdk.es130.js +375 -18
  272. package/dist/es/standards-sdk.es130.js.map +1 -1
  273. package/dist/es/standards-sdk.es131.js +371 -139
  274. package/dist/es/standards-sdk.es131.js.map +1 -1
  275. package/dist/es/standards-sdk.es132.js +211 -180
  276. package/dist/es/standards-sdk.es132.js.map +1 -1
  277. package/dist/es/standards-sdk.es133.js +210 -770
  278. package/dist/es/standards-sdk.es133.js.map +1 -1
  279. package/dist/es/standards-sdk.es134.js +376 -10
  280. package/dist/es/standards-sdk.es134.js.map +1 -1
  281. package/dist/es/standards-sdk.es135.js +118 -564
  282. package/dist/es/standards-sdk.es135.js.map +1 -1
  283. package/dist/es/standards-sdk.es136.js +233 -608
  284. package/dist/es/standards-sdk.es136.js.map +1 -1
  285. package/dist/es/standards-sdk.es137.js +1328 -12
  286. package/dist/es/standards-sdk.es137.js.map +1 -1
  287. package/dist/es/standards-sdk.es138.js +133 -2
  288. package/dist/es/standards-sdk.es138.js.map +1 -1
  289. package/dist/es/standards-sdk.es139.js +258 -74
  290. package/dist/es/standards-sdk.es139.js.map +1 -1
  291. package/dist/es/standards-sdk.es14.js +1 -1
  292. package/dist/es/standards-sdk.es140.js +104 -38
  293. package/dist/es/standards-sdk.es140.js.map +1 -1
  294. package/dist/es/standards-sdk.es141.js +252 -2
  295. package/dist/es/standards-sdk.es141.js.map +1 -1
  296. package/dist/es/standards-sdk.es142.js +446 -203
  297. package/dist/es/standards-sdk.es142.js.map +1 -1
  298. package/dist/es/standards-sdk.es143.js +104 -1139
  299. package/dist/es/standards-sdk.es143.js.map +1 -1
  300. package/dist/es/standards-sdk.es144.js +144 -290
  301. package/dist/es/standards-sdk.es144.js.map +1 -1
  302. package/dist/es/standards-sdk.es145.js +31 -419
  303. package/dist/es/standards-sdk.es145.js.map +1 -1
  304. package/dist/es/standards-sdk.es146.js +10 -353
  305. package/dist/es/standards-sdk.es146.js.map +1 -1
  306. package/dist/es/standards-sdk.es147.js +144 -1084
  307. package/dist/es/standards-sdk.es147.js.map +1 -1
  308. package/dist/es/standards-sdk.es148.js +25 -204
  309. package/dist/es/standards-sdk.es148.js.map +1 -1
  310. package/dist/es/standards-sdk.es149.js +17 -1562
  311. package/dist/es/standards-sdk.es149.js.map +1 -1
  312. package/dist/es/standards-sdk.es15.js +1 -1
  313. package/dist/es/standards-sdk.es150.js +128 -1134
  314. package/dist/es/standards-sdk.es150.js.map +1 -1
  315. package/dist/es/standards-sdk.es151.js +199 -14
  316. package/dist/es/standards-sdk.es151.js.map +1 -1
  317. package/dist/es/standards-sdk.es152.js +773 -434
  318. package/dist/es/standards-sdk.es152.js.map +1 -1
  319. package/dist/es/standards-sdk.es153.js +10 -256
  320. package/dist/es/standards-sdk.es153.js.map +1 -1
  321. package/dist/es/standards-sdk.es154.js +567 -4
  322. package/dist/es/standards-sdk.es154.js.map +1 -1
  323. package/dist/es/standards-sdk.es155.js +619 -74
  324. package/dist/es/standards-sdk.es155.js.map +1 -1
  325. package/dist/es/standards-sdk.es156.js +12 -86
  326. package/dist/es/standards-sdk.es156.js.map +1 -1
  327. package/dist/es/standards-sdk.es157.js +2 -60
  328. package/dist/es/standards-sdk.es157.js.map +1 -1
  329. package/dist/es/standards-sdk.es158.js +87 -2547
  330. package/dist/es/standards-sdk.es158.js.map +1 -1
  331. package/dist/es/standards-sdk.es159.js +36 -155
  332. package/dist/es/standards-sdk.es159.js.map +1 -1
  333. package/dist/es/standards-sdk.es16.js +6 -6
  334. package/dist/es/standards-sdk.es160.js +2 -7
  335. package/dist/es/standards-sdk.es160.js.map +1 -1
  336. package/dist/es/standards-sdk.es161.js +223 -74
  337. package/dist/es/standards-sdk.es161.js.map +1 -1
  338. package/dist/es/standards-sdk.es162.js +1122 -47
  339. package/dist/es/standards-sdk.es162.js.map +1 -1
  340. package/dist/es/standards-sdk.es163.js +299 -187
  341. package/dist/es/standards-sdk.es163.js.map +1 -1
  342. package/dist/es/standards-sdk.es164.js +419 -23
  343. package/dist/es/standards-sdk.es164.js.map +1 -1
  344. package/dist/es/standards-sdk.es165.js +352 -55
  345. package/dist/es/standards-sdk.es165.js.map +1 -1
  346. package/dist/es/standards-sdk.es166.js +1113 -86
  347. package/dist/es/standards-sdk.es166.js.map +1 -1
  348. package/dist/es/standards-sdk.es167.js +200 -41
  349. package/dist/es/standards-sdk.es167.js.map +1 -1
  350. package/dist/es/standards-sdk.es168.js +1551 -188
  351. package/dist/es/standards-sdk.es168.js.map +1 -1
  352. package/dist/es/standards-sdk.es169.js +1161 -51
  353. package/dist/es/standards-sdk.es169.js.map +1 -1
  354. package/dist/es/standards-sdk.es170.js +15 -47
  355. package/dist/es/standards-sdk.es170.js.map +1 -1
  356. package/dist/es/standards-sdk.es171.js +445 -50
  357. package/dist/es/standards-sdk.es171.js.map +1 -1
  358. package/dist/es/standards-sdk.es172.js +255 -45
  359. package/dist/es/standards-sdk.es172.js.map +1 -1
  360. package/dist/es/standards-sdk.es173.js +4 -122
  361. package/dist/es/standards-sdk.es173.js.map +1 -1
  362. package/dist/es/standards-sdk.es174.js +77 -50
  363. package/dist/es/standards-sdk.es174.js.map +1 -1
  364. package/dist/es/standards-sdk.es175.js +85 -42
  365. package/dist/es/standards-sdk.es175.js.map +1 -1
  366. package/dist/es/standards-sdk.es176.js +60 -72
  367. package/dist/es/standards-sdk.es176.js.map +1 -1
  368. package/dist/es/standards-sdk.es177.js +2544 -65
  369. package/dist/es/standards-sdk.es177.js.map +1 -1
  370. package/dist/es/standards-sdk.es178.js +159 -44
  371. package/dist/es/standards-sdk.es178.js.map +1 -1
  372. package/dist/es/standards-sdk.es179.js +7 -36
  373. package/dist/es/standards-sdk.es179.js.map +1 -1
  374. package/dist/es/standards-sdk.es18.js +13 -13
  375. package/dist/es/standards-sdk.es180.js +86 -30
  376. package/dist/es/standards-sdk.es180.js.map +1 -1
  377. package/dist/es/standards-sdk.es181.js +65 -34
  378. package/dist/es/standards-sdk.es181.js.map +1 -1
  379. package/dist/es/standards-sdk.es182.js +196 -48
  380. package/dist/es/standards-sdk.es182.js.map +1 -1
  381. package/dist/es/standards-sdk.es183.js +23 -135
  382. package/dist/es/standards-sdk.es183.js.map +1 -1
  383. package/dist/es/standards-sdk.es184.js +54 -38
  384. package/dist/es/standards-sdk.es184.js.map +1 -1
  385. package/dist/es/standards-sdk.es185.js +102 -12470
  386. package/dist/es/standards-sdk.es185.js.map +1 -1
  387. package/dist/es/standards-sdk.es186.js +53 -52
  388. package/dist/es/standards-sdk.es186.js.map +1 -1
  389. package/dist/es/standards-sdk.es187.js +223 -103
  390. package/dist/es/standards-sdk.es187.js.map +1 -1
  391. package/dist/es/standards-sdk.es188.js +66 -75
  392. package/dist/es/standards-sdk.es188.js.map +1 -1
  393. package/dist/es/standards-sdk.es189.js +46 -197
  394. package/dist/es/standards-sdk.es189.js.map +1 -1
  395. package/dist/es/standards-sdk.es19.js +10 -10
  396. package/dist/es/standards-sdk.es190.js +58 -668
  397. package/dist/es/standards-sdk.es190.js.map +1 -1
  398. package/dist/es/standards-sdk.es191.js +45 -168
  399. package/dist/es/standards-sdk.es191.js.map +1 -1
  400. package/dist/es/standards-sdk.es192.js +115 -315
  401. package/dist/es/standards-sdk.es192.js.map +1 -1
  402. package/dist/es/standards-sdk.es193.js +51 -340
  403. package/dist/es/standards-sdk.es193.js.map +1 -1
  404. package/dist/es/standards-sdk.es194.js +54 -448
  405. package/dist/es/standards-sdk.es194.js.map +1 -1
  406. package/dist/es/standards-sdk.es195.js +72 -331
  407. package/dist/es/standards-sdk.es195.js.map +1 -1
  408. package/dist/es/standards-sdk.es196.js +75 -76
  409. package/dist/es/standards-sdk.es196.js.map +1 -1
  410. package/dist/es/standards-sdk.es197.js +44 -73
  411. package/dist/es/standards-sdk.es197.js.map +1 -1
  412. package/dist/es/standards-sdk.es198.js +34 -15
  413. package/dist/es/standards-sdk.es198.js.map +1 -1
  414. package/dist/es/standards-sdk.es199.js +30 -139
  415. package/dist/es/standards-sdk.es199.js.map +1 -1
  416. package/dist/es/standards-sdk.es2.js +2 -2
  417. package/dist/es/standards-sdk.es20.js +1 -1
  418. package/dist/es/standards-sdk.es200.js +34 -517
  419. package/dist/es/standards-sdk.es200.js.map +1 -1
  420. package/dist/es/standards-sdk.es201.js +48 -259
  421. package/dist/es/standards-sdk.es201.js.map +1 -1
  422. package/dist/es/standards-sdk.es202.js +127 -185
  423. package/dist/es/standards-sdk.es202.js.map +1 -1
  424. package/dist/es/standards-sdk.es203.js +36 -113
  425. package/dist/es/standards-sdk.es203.js.map +1 -1
  426. package/dist/es/standards-sdk.es204.js +12464 -134
  427. package/dist/es/standards-sdk.es204.js.map +1 -1
  428. package/dist/es/standards-sdk.es205.js +14 -181
  429. package/dist/es/standards-sdk.es205.js.map +1 -1
  430. package/dist/es/standards-sdk.es206.js +55 -683
  431. package/dist/es/standards-sdk.es206.js.map +1 -1
  432. package/dist/es/standards-sdk.es207.js +93 -167
  433. package/dist/es/standards-sdk.es207.js.map +1 -1
  434. package/dist/es/standards-sdk.es208.js +71 -225
  435. package/dist/es/standards-sdk.es208.js.map +1 -1
  436. package/dist/es/standards-sdk.es209.js +176 -215
  437. package/dist/es/standards-sdk.es209.js.map +1 -1
  438. package/dist/es/standards-sdk.es21.js +1 -1
  439. package/dist/es/standards-sdk.es210.js +675 -0
  440. package/dist/es/standards-sdk.es210.js.map +1 -0
  441. package/dist/es/standards-sdk.es211.js +76 -0
  442. package/dist/es/standards-sdk.es211.js.map +1 -0
  443. package/dist/es/standards-sdk.es212.js +175 -0
  444. package/dist/es/standards-sdk.es212.js.map +1 -0
  445. package/dist/es/standards-sdk.es213.js +325 -0
  446. package/dist/es/standards-sdk.es213.js.map +1 -0
  447. package/dist/es/standards-sdk.es214.js +349 -0
  448. package/dist/es/standards-sdk.es214.js.map +1 -0
  449. package/dist/es/standards-sdk.es215.js +456 -0
  450. package/dist/es/standards-sdk.es215.js.map +1 -0
  451. package/dist/es/standards-sdk.es216.js +334 -0
  452. package/dist/es/standards-sdk.es216.js.map +1 -0
  453. package/dist/es/standards-sdk.es217.js +79 -0
  454. package/dist/es/standards-sdk.es217.js.map +1 -0
  455. package/dist/es/standards-sdk.es218.js +142 -0
  456. package/dist/es/standards-sdk.es218.js.map +1 -0
  457. package/dist/es/standards-sdk.es219.js +520 -0
  458. package/dist/es/standards-sdk.es219.js.map +1 -0
  459. package/dist/es/standards-sdk.es22.js +1 -1
  460. package/dist/es/standards-sdk.es220.js +262 -0
  461. package/dist/es/standards-sdk.es220.js.map +1 -0
  462. package/dist/es/standards-sdk.es221.js +199 -0
  463. package/dist/es/standards-sdk.es221.js.map +1 -0
  464. package/dist/es/standards-sdk.es222.js +122 -0
  465. package/dist/es/standards-sdk.es222.js.map +1 -0
  466. package/dist/es/standards-sdk.es223.js +155 -0
  467. package/dist/es/standards-sdk.es223.js.map +1 -0
  468. package/dist/es/standards-sdk.es224.js +187 -0
  469. package/dist/es/standards-sdk.es224.js.map +1 -0
  470. package/dist/es/standards-sdk.es225.js +687 -0
  471. package/dist/es/standards-sdk.es225.js.map +1 -0
  472. package/dist/es/standards-sdk.es226.js +188 -0
  473. package/dist/es/standards-sdk.es226.js.map +1 -0
  474. package/dist/es/standards-sdk.es227.js +238 -0
  475. package/dist/es/standards-sdk.es227.js.map +1 -0
  476. package/dist/es/standards-sdk.es228.js +242 -0
  477. package/dist/es/standards-sdk.es228.js.map +1 -0
  478. package/dist/es/standards-sdk.es23.js +1 -1
  479. package/dist/es/standards-sdk.es24.js +1 -1
  480. package/dist/es/standards-sdk.es25.js +1 -1
  481. package/dist/es/standards-sdk.es26.js +1 -1
  482. package/dist/es/standards-sdk.es27.js +13 -13
  483. package/dist/es/standards-sdk.es30.js +2 -2
  484. package/dist/es/standards-sdk.es31.js +4 -4
  485. package/dist/es/standards-sdk.es32.js +1 -1
  486. package/dist/es/standards-sdk.es35.js +7 -7
  487. package/dist/es/standards-sdk.es36.js +4 -4
  488. package/dist/es/standards-sdk.es37.js +2 -2
  489. package/dist/es/standards-sdk.es38.js +2 -2
  490. package/dist/es/standards-sdk.es39.js +1 -1
  491. package/dist/es/standards-sdk.es4.js +2 -2
  492. package/dist/es/standards-sdk.es40.js +1 -1
  493. package/dist/es/standards-sdk.es41.js +2 -2
  494. package/dist/es/standards-sdk.es46.js +1 -1
  495. package/dist/es/standards-sdk.es5.js +2 -2
  496. package/dist/es/standards-sdk.es51.js +1 -1
  497. package/dist/es/standards-sdk.es53.js +1 -1
  498. package/dist/es/standards-sdk.es56.js +2 -2
  499. package/dist/es/standards-sdk.es59.js +1 -1
  500. package/dist/es/standards-sdk.es6.js +2 -2
  501. package/dist/es/standards-sdk.es60.js +1 -1
  502. package/dist/es/standards-sdk.es62.js +1 -1
  503. package/dist/es/standards-sdk.es63.js +2 -2
  504. package/dist/es/standards-sdk.es64.js +1 -1
  505. package/dist/es/standards-sdk.es65.js +1 -1
  506. package/dist/es/standards-sdk.es66.js +1 -1
  507. package/dist/es/standards-sdk.es67.js +8 -8
  508. package/dist/es/standards-sdk.es69.js +1 -1
  509. package/dist/es/standards-sdk.es7.js +1 -1
  510. package/dist/es/standards-sdk.es71.js +2 -2
  511. package/dist/es/standards-sdk.es72.js +3 -3
  512. package/dist/es/standards-sdk.es75.js +5 -5
  513. package/dist/es/standards-sdk.es76.js +3 -3
  514. package/dist/es/standards-sdk.es77.js +2 -2
  515. package/dist/es/standards-sdk.es78.js +1 -1
  516. package/dist/es/standards-sdk.es81.js +2 -2
  517. package/dist/es/standards-sdk.es83.js +2 -2
  518. package/dist/es/standards-sdk.es84.js +5 -5
  519. package/dist/es/standards-sdk.es85.js +1 -1
  520. package/dist/es/standards-sdk.es88.js +1 -1
  521. package/dist/es/standards-sdk.es89.js +2 -2
  522. package/dist/es/standards-sdk.es9.js +2 -2
  523. package/dist/es/standards-sdk.es90.js +4 -4
  524. package/dist/es/standards-sdk.es94.js +3 -3
  525. package/dist/es/standards-sdk.es96.js +2 -2
  526. package/dist/es/standards-sdk.es98.js +1 -1
  527. package/dist/es/standards-sdk.es99.js +3 -3
  528. package/package.json +1 -1
@@ -1,163 +1,395 @@
1
- import { Logger } from "./standards-sdk.es128.js";
2
- class ProgressReporter {
3
- constructor(options = {}) {
4
- this.module = options.module || "Progress";
5
- this.callback = options.callback;
6
- this.logger = options.logger || new Logger({
7
- level: "info",
8
- module: "ProgressReporter"
9
- });
10
- this.logProgress = options.logProgress ?? true;
11
- this.minPercent = options.minPercent ?? 0;
12
- this.maxPercent = options.maxPercent ?? 100;
13
- this.lastReportedPercent = -1;
14
- this.lastReportedTime = 0;
15
- this.throttleMs = 100;
1
+ import { readString, readSubjectAdditional, isJsonObject } from "./standards-sdk.es198.js";
2
+ import "./standards-sdk.es182.js";
3
+ import "./standards-sdk.es195.js";
4
+ import "./standards-sdk.es196.js";
5
+ import "./standards-sdk.es197.js";
6
+ import { resolveSubjectEndpoint } from "./standards-sdk.es127.js";
7
+ import { requestJson, requestText, Hcs25CollectorHttpError, isTimeoutError } from "./standards-sdk.es122.js";
8
+ const GITHUB_API_BASE = "https://api.github.com";
9
+ const NPM_API_BASE = "https://api.npmjs.org";
10
+ const NPM_REGISTRY_BASE = "https://registry.npmjs.org";
11
+ const PYPISTATS_API_BASE = "https://pypistats.org/api";
12
+ const PYPI_API_BASE = "https://pypi.org/pypi";
13
+ const RAW_GITHUB_BASE = "https://raw.githubusercontent.com";
14
+ const GITHUB_REPO_PATTERN = /github\.com[:/]+([A-Za-z0-9_.-]+)\/([A-Za-z0-9_.-]+)/;
15
+ function parseGithubRepo(value) {
16
+ if (!value) {
17
+ return null;
16
18
  }
17
- static getInstance(options = {}) {
18
- if (!ProgressReporter.instance) {
19
- ProgressReporter.instance = new ProgressReporter(options);
20
- } else {
21
- if (options.callback) {
22
- ProgressReporter.instance.setCallback(options.callback);
23
- }
24
- if (options.module) {
25
- ProgressReporter.instance.setModule(options.module);
26
- }
27
- if (options.logger) {
28
- ProgressReporter.instance.setLogger(options.logger);
29
- }
30
- if (options.minPercent !== void 0) {
31
- ProgressReporter.instance.setMinPercent(options.minPercent);
32
- }
33
- if (options.maxPercent !== void 0) {
34
- ProgressReporter.instance.setMaxPercent(options.maxPercent);
35
- }
19
+ const direct = value.match(/^([A-Za-z0-9_.-]+)\/([A-Za-z0-9_.-]+)$/);
20
+ if (direct) {
21
+ return `${direct[1]}/${direct[2]}`;
22
+ }
23
+ const match = value.match(GITHUB_REPO_PATTERN);
24
+ if (!match) {
25
+ return null;
26
+ }
27
+ return `${match[1]}/${match[2].replace(/\.git$/, "")}`;
28
+ }
29
+ function resolveGithubRepo(subject) {
30
+ const additional = readSubjectAdditional(subject);
31
+ const metadata = subject.metadata ?? {};
32
+ const mcp = isJsonObject(metadata.mcp) ? metadata.mcp : void 0;
33
+ for (const value of [
34
+ readString(additional, "githubRepo"),
35
+ readString(additional, "repository"),
36
+ readString(metadata, "repository"),
37
+ readString(mcp, "repository"),
38
+ readString(metadata, "repoUrl"),
39
+ readString(additional, "repoUrl"),
40
+ readString(metadata, "homepage"),
41
+ readString(additional, "homepage"),
42
+ resolveSubjectEndpoint(subject)
43
+ ]) {
44
+ const repo = parseGithubRepo(value);
45
+ if (repo) {
46
+ return repo;
36
47
  }
37
- return ProgressReporter.instance;
38
48
  }
39
- setCallback(callback) {
40
- this.callback = callback;
49
+ return null;
50
+ }
51
+ function resolvePackage(subject) {
52
+ const additional = readSubjectAdditional(subject);
53
+ const registry = readString(additional, "packageRegistry");
54
+ const name = readString(additional, "packageName");
55
+ if (name && (registry === "npm" || registry === "pypi")) {
56
+ return { registry, name };
41
57
  }
42
- setModule(module) {
43
- this.module = module;
58
+ if (name) {
59
+ return { registry: "npm", name };
44
60
  }
45
- setLogger(logger) {
46
- this.logger = logger;
61
+ return null;
62
+ }
63
+ function statusFromError(error) {
64
+ if (error instanceof Hcs25CollectorHttpError && error.status === 404) {
65
+ return "missing";
47
66
  }
48
- setMinPercent(minPercent) {
49
- this.minPercent = minPercent;
67
+ return isTimeoutError(error) ? "timeout" : "error";
68
+ }
69
+ const parseLikelyPackageName = (value) => {
70
+ if (!value) {
71
+ return null;
50
72
  }
51
- setMaxPercent(maxPercent) {
52
- this.maxPercent = maxPercent;
73
+ const trimmed = value.trim();
74
+ return /^[a-zA-Z0-9._~@/-]{1,214}$/.test(trimmed) ? trimmed : null;
75
+ };
76
+ const parseNpmPackageName = (body) => {
77
+ try {
78
+ const parsed = JSON.parse(body);
79
+ return typeof parsed.name === "string" ? parsed.name : null;
80
+ } catch {
81
+ return null;
53
82
  }
54
- createSubProgress(options) {
55
- const subReporter = new ProgressReporter({
56
- module: this.module,
57
- logger: this.logger,
58
- logProgress: this.logProgress,
59
- minPercent: options.minPercent,
60
- maxPercent: options.maxPercent
61
- });
62
- const logPrefix = options.logPrefix || "";
63
- subReporter.setCallback((data) => {
64
- const scaledPercent = this.scalePercent(
65
- data.progressPercent,
66
- options.minPercent,
67
- options.maxPercent
68
- );
69
- let formattedMessage = data.message;
70
- if (logPrefix && !formattedMessage.startsWith(logPrefix)) {
71
- formattedMessage = `${logPrefix}: ${formattedMessage}`;
83
+ };
84
+ const parsePyProjectName = (body) => {
85
+ const match = body.match(/^\s*name\s*=\s*["']([^"']+)["']/m);
86
+ return match?.[1] ?? null;
87
+ };
88
+ const parseSetupCfgName = (body) => {
89
+ const match = body.match(/^\s*name\s*=\s*(\S+)\s*$/m);
90
+ return match?.[1] ?? null;
91
+ };
92
+ async function inferPackageIdentity(repo, context) {
93
+ const base = `${RAW_GITHUB_BASE}/${repo.split("/").map(encodeURIComponent).join("/")}`;
94
+ let npmName = null;
95
+ let pypiName = null;
96
+ for (const branch of ["main", "master"]) {
97
+ if (!npmName) {
98
+ try {
99
+ const body = await requestText(`${base}/${branch}/package.json`, {
100
+ fetch: context.fetch,
101
+ timeoutMs: context.timeoutMs,
102
+ signal: context.signal
103
+ });
104
+ npmName = parseLikelyPackageName(parseNpmPackageName(body));
105
+ } catch {
72
106
  }
73
- this.report({
74
- stage: data.stage,
75
- message: formattedMessage,
76
- progressPercent: scaledPercent,
77
- details: data.details
78
- });
79
- });
80
- return subReporter;
81
- }
82
- report(data) {
83
- const rawPercent = data.progressPercent;
84
- const percent = Math.max(0, Math.min(100, rawPercent));
85
- const scaledPercent = this.scalePercent(percent, 0, 100);
86
- const now = Date.now();
87
- if (scaledPercent === this.lastReportedPercent && now - this.lastReportedTime < this.throttleMs && data.stage !== "completed" && data.stage !== "failed") {
88
- return;
89
- }
90
- this.lastReportedPercent = scaledPercent;
91
- this.lastReportedTime = now;
92
- const progressData = {
93
- ...data,
94
- progressPercent: scaledPercent
95
- };
96
- if (this.logProgress) {
97
- this.logger.debug(
98
- `[${this.module}] [${data.stage.toUpperCase()}] ${data.message} (${scaledPercent.toFixed(1)}%)`,
99
- data.details
100
- );
101
107
  }
102
- if (this.callback) {
108
+ if (!pypiName) {
103
109
  try {
104
- this.callback(progressData);
105
- } catch (err) {
106
- this.logger.warn(`Error in progress callback: ${err}`);
110
+ const body = await requestText(`${base}/${branch}/pyproject.toml`, {
111
+ fetch: context.fetch,
112
+ timeoutMs: context.timeoutMs,
113
+ signal: context.signal
114
+ });
115
+ pypiName = parseLikelyPackageName(parsePyProjectName(body));
116
+ } catch {
117
+ try {
118
+ const body = await requestText(`${base}/${branch}/setup.cfg`, {
119
+ fetch: context.fetch,
120
+ timeoutMs: context.timeoutMs,
121
+ signal: context.signal
122
+ });
123
+ pypiName = parseLikelyPackageName(parseSetupCfgName(body));
124
+ } catch {
125
+ }
107
126
  }
108
127
  }
128
+ if (npmName || pypiName) {
129
+ break;
130
+ }
109
131
  }
110
- scalePercent(percent, sourceMin, sourceMax) {
111
- const range = this.maxPercent - this.minPercent;
112
- const sourceRange = sourceMax - sourceMin;
113
- const scaleFactor = range / sourceRange;
114
- return this.minPercent + (percent - sourceMin) * scaleFactor;
115
- }
116
- preparing(message, percent, details) {
117
- this.report({
118
- stage: "preparing",
119
- message,
120
- progressPercent: percent,
121
- details
122
- });
132
+ if (npmName && !pypiName) {
133
+ return { registry: "npm", name: npmName };
123
134
  }
124
- submitting(message, percent, details) {
125
- this.report({
126
- stage: "submitting",
127
- message,
128
- progressPercent: percent,
129
- details
130
- });
135
+ if (pypiName && !npmName) {
136
+ return { registry: "pypi", name: pypiName };
131
137
  }
132
- confirming(message, percent, details) {
133
- this.report({
134
- stage: "confirming",
135
- message,
136
- progressPercent: percent,
137
- details
138
- });
138
+ return null;
139
+ }
140
+ async function inferRepositoryFromPackage(pkg, context) {
141
+ const candidates = [];
142
+ try {
143
+ if (pkg.registry === "pypi") {
144
+ const payload = await requestJson(`${PYPI_API_BASE}/${encodeURIComponent(pkg.name)}/json`, {
145
+ fetch: context.fetch,
146
+ timeoutMs: context.timeoutMs,
147
+ signal: context.signal
148
+ });
149
+ const home = payload.info?.home_page;
150
+ if (typeof home === "string") {
151
+ candidates.push(home);
152
+ }
153
+ const urls = payload.info?.project_urls;
154
+ if (urls && typeof urls === "object" && !Array.isArray(urls)) {
155
+ for (const value of Object.values(urls)) {
156
+ if (typeof value === "string") {
157
+ candidates.push(value);
158
+ }
159
+ }
160
+ }
161
+ } else {
162
+ const payload = await requestJson(`${NPM_REGISTRY_BASE}/${encodeURIComponent(pkg.name)}`, {
163
+ fetch: context.fetch,
164
+ timeoutMs: context.timeoutMs,
165
+ signal: context.signal
166
+ });
167
+ const repo = payload.repository && typeof payload.repository === "object" && !Array.isArray(payload.repository) ? payload.repository.url : payload.repository;
168
+ if (typeof repo === "string") {
169
+ candidates.push(repo);
170
+ }
171
+ if (typeof payload.homepage === "string") {
172
+ candidates.push(payload.homepage);
173
+ }
174
+ const bugs = payload.bugs && typeof payload.bugs === "object" && !Array.isArray(payload.bugs) ? payload.bugs.url : payload.bugs;
175
+ if (typeof bugs === "string") {
176
+ candidates.push(bugs);
177
+ }
178
+ }
179
+ } catch {
180
+ return null;
139
181
  }
140
- verifying(message, percent, details) {
141
- this.report({
142
- stage: "verifying",
143
- message,
144
- progressPercent: percent,
145
- details
146
- });
182
+ for (const candidate of candidates) {
183
+ const repo = parseGithubRepo(candidate);
184
+ if (repo) {
185
+ return repo;
186
+ }
147
187
  }
148
- completed(message, details) {
149
- this.report({ stage: "completed", message, progressPercent: 100, details });
188
+ return null;
189
+ }
190
+ async function fetchGithubStarsViaHtml(repo, context) {
191
+ const url = `https://github.com/${repo.split("/").map(encodeURIComponent).join("/")}`;
192
+ const body = await requestText(url, {
193
+ fetch: context.fetch,
194
+ timeoutMs: context.timeoutMs,
195
+ signal: context.signal,
196
+ headers: { accept: "text/html" }
197
+ });
198
+ const match = body.match(
199
+ /id="repo-stars-counter-star"[^>]*aria-label="(?<count>[0-9,]+)\s+users?\s+starred/i
200
+ ) ?? body.match(/id="repo-stars-counter-star"[^>]*title="(?<count>[0-9,]+)"/i);
201
+ const raw = match?.groups?.count;
202
+ if (!raw) {
203
+ return null;
150
204
  }
151
- failed(message, details) {
152
- this.report({
153
- stage: "failed",
154
- message,
155
- progressPercent: this.lastReportedPercent,
156
- details
205
+ const parsed = Number(raw.replace(/,/g, ""));
206
+ return Number.isFinite(parsed) ? Math.max(0, Math.floor(parsed)) : null;
207
+ }
208
+ function createOssPopularitySignalAdapter(options = {}) {
209
+ const collect = async (subject, context) => {
210
+ const now = context.now.toISOString();
211
+ let repo = resolveGithubRepo(subject);
212
+ let pkg = resolvePackage(subject);
213
+ if (!repo && pkg && options.inferRepository !== false) {
214
+ repo = await inferRepositoryFromPackage(pkg, context).catch(
215
+ () => null
216
+ );
217
+ }
218
+ if (!pkg && repo && options.inferPackageIdentity !== false) {
219
+ pkg = await inferPackageIdentity(repo, context).catch(() => null);
220
+ }
221
+ const results = [];
222
+ const additional = {};
223
+ if (repo) {
224
+ additional.githubRepo = repo;
225
+ additional.packageRepositoryUpdatedAt = now;
226
+ try {
227
+ const headers = {
228
+ accept: "application/vnd.github+json"
229
+ };
230
+ if (options.githubToken) {
231
+ headers.authorization = `Bearer ${options.githubToken}`;
232
+ }
233
+ let stars = null;
234
+ try {
235
+ const data = await requestJson(
236
+ `${options.githubApiBase ?? GITHUB_API_BASE}/repos/${repo}`,
237
+ {
238
+ fetch: context.fetch,
239
+ headers,
240
+ timeoutMs: context.timeoutMs,
241
+ signal: context.signal
242
+ }
243
+ );
244
+ stars = typeof data.stargazers_count === "number" ? Math.max(0, Math.floor(data.stargazers_count)) : null;
245
+ } catch (error) {
246
+ if (options.githubHtmlFallback === false) {
247
+ throw error;
248
+ }
249
+ }
250
+ if (stars === null && options.githubHtmlFallback !== false) {
251
+ stars = await fetchGithubStarsViaHtml(repo, context).catch(
252
+ () => null
253
+ );
254
+ }
255
+ additional.githubStars = stars;
256
+ additional.githubStarsUpdatedAt = now;
257
+ results.push({
258
+ signalId: "oss.github_stars",
259
+ status: stars === null ? "missing" : "ok",
260
+ value: stars,
261
+ provenance: {
262
+ source: "github",
263
+ sourceUrl: `${options.githubApiBase ?? GITHUB_API_BASE}/repos/${repo}`,
264
+ subjectId: repo,
265
+ fetchedAt: now
266
+ }
267
+ });
268
+ } catch (error) {
269
+ results.push({
270
+ signalId: "oss.github_stars",
271
+ status: statusFromError(error),
272
+ provenance: {
273
+ source: "github",
274
+ subjectId: repo,
275
+ fetchedAt: now
276
+ }
277
+ });
278
+ }
279
+ }
280
+ if (pkg) {
281
+ additional.packageRegistry = pkg.registry;
282
+ additional.packageName = pkg.name;
283
+ additional.packageIdentityUpdatedAt = now;
284
+ const signalId = pkg.registry === "npm" ? "oss.npm_downloads" : "oss.pypi_downloads";
285
+ try {
286
+ if (pkg.registry === "npm") {
287
+ const data = await requestJson(
288
+ `${options.npmApiBase ?? NPM_API_BASE}/downloads/point/last-month/${encodeURIComponent(pkg.name)}`,
289
+ {
290
+ fetch: context.fetch,
291
+ timeoutMs: context.timeoutMs,
292
+ signal: context.signal
293
+ }
294
+ );
295
+ const downloads = typeof data.downloads === "number" ? Math.max(0, Math.floor(data.downloads)) : null;
296
+ additional.npmDownloads30d = downloads;
297
+ additional.npmDownloadsUpdatedAt = now;
298
+ if (downloads !== null) {
299
+ additional.packageDownloadCount = downloads;
300
+ }
301
+ results.push({
302
+ signalId,
303
+ status: downloads === null ? "missing" : "ok",
304
+ value: downloads,
305
+ provenance: {
306
+ source: "npm",
307
+ subjectId: pkg.name,
308
+ fetchedAt: now
309
+ }
310
+ });
311
+ } else {
312
+ const data = await requestJson(
313
+ `${options.pypiApiBase ?? PYPISTATS_API_BASE}/packages/${encodeURIComponent(pkg.name)}/recent`,
314
+ {
315
+ fetch: context.fetch,
316
+ timeoutMs: context.timeoutMs,
317
+ signal: context.signal
318
+ }
319
+ );
320
+ const downloads = typeof data.data?.last_month === "number" ? Math.max(0, Math.floor(data.data.last_month)) : null;
321
+ additional.pypiDownloads30d = downloads;
322
+ additional.pypiDownloadsUpdatedAt = now;
323
+ if (downloads !== null) {
324
+ additional.packageDownloadCount = downloads;
325
+ }
326
+ results.push({
327
+ signalId,
328
+ status: downloads === null ? "missing" : "ok",
329
+ value: downloads,
330
+ provenance: {
331
+ source: "pypi",
332
+ subjectId: pkg.name,
333
+ fetchedAt: now
334
+ }
335
+ });
336
+ }
337
+ } catch (error) {
338
+ results.push({
339
+ signalId,
340
+ status: statusFromError(error),
341
+ provenance: {
342
+ source: pkg.registry,
343
+ subjectId: pkg.name,
344
+ fetchedAt: now
345
+ }
346
+ });
347
+ }
348
+ }
349
+ if (results.length === 0) {
350
+ return [
351
+ {
352
+ signalId: "oss.github_stars",
353
+ status: "missing"
354
+ }
355
+ ];
356
+ }
357
+ const rootValues = {};
358
+ if (repo && !readString(subject.metadata ?? {}, "repository")) {
359
+ rootValues.repository = `https://github.com/${repo}`;
360
+ }
361
+ results.push({
362
+ signalId: "oss.popularity",
363
+ status: "ok",
364
+ fields: [
365
+ { scope: "additional", values: additional },
366
+ ...Object.keys(rootValues).length > 0 ? [{ scope: "root", values: rootValues }] : []
367
+ ],
368
+ provenance: {
369
+ source: "oss-popularity",
370
+ subjectId: subject.id,
371
+ fetchedAt: now
372
+ }
157
373
  });
158
- }
374
+ return results;
375
+ };
376
+ return {
377
+ id: "oss-popularity",
378
+ produces: [
379
+ "oss.github_stars",
380
+ "oss.npm_downloads",
381
+ "oss.pypi_downloads",
382
+ "oss.popularity"
383
+ ],
384
+ timeoutMs: options.timeoutMs,
385
+ includeRegistries: options.includeRegistries,
386
+ excludeRegistries: options.excludeRegistries,
387
+ appliesTo: options.appliesTo,
388
+ collect
389
+ };
159
390
  }
160
391
  export {
161
- ProgressReporter
392
+ createOssPopularitySignalAdapter,
393
+ parseGithubRepo
162
394
  };
163
395
  //# sourceMappingURL=standards-sdk.es131.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es131.js","sources":["../../src/utils/progress-reporter.ts"],"sourcesContent":["import { Logger, ILogger } from './logger';\n\nexport type ProgressStage =\n | 'preparing'\n | 'submitting'\n | 'confirming'\n | 'verifying'\n | 'completed'\n | 'failed';\n\nexport interface ProgressData {\n stage: ProgressStage;\n message: string;\n progressPercent: number;\n details?: Record<string, any>;\n}\n\nexport type ProgressCallback = (data: ProgressData) => void;\n\nexport interface ProgressReporterOptions {\n module?: string;\n callback?: ProgressCallback;\n logger?: ILogger;\n logProgress?: boolean;\n minPercent?: number;\n maxPercent?: number;\n}\n\n/**\n * ProgressReporter is a singleton class that reports progress of a task.\n * Can be used in a generalized fashion.\n */\nexport class ProgressReporter {\n private static instance: ProgressReporter;\n private module: string;\n private callback?: ProgressCallback;\n private logger: ILogger;\n private logProgress: boolean;\n private minPercent: number;\n private maxPercent: number;\n private lastReportedPercent: number;\n private lastReportedTime: number;\n private throttleMs: number;\n\n constructor(options: ProgressReporterOptions = {}) {\n this.module = options.module || 'Progress';\n this.callback = options.callback;\n this.logger =\n options.logger ||\n new Logger({\n level: 'info',\n module: 'ProgressReporter',\n });\n this.logProgress = options.logProgress ?? true;\n this.minPercent = options.minPercent ?? 0;\n this.maxPercent = options.maxPercent ?? 100;\n this.lastReportedPercent = -1;\n this.lastReportedTime = 0;\n this.throttleMs = 100;\n }\n\n static getInstance(options: ProgressReporterOptions = {}): ProgressReporter {\n if (!ProgressReporter.instance) {\n ProgressReporter.instance = new ProgressReporter(options);\n } else {\n if (options.callback) {\n ProgressReporter.instance.setCallback(options.callback);\n }\n if (options.module) {\n ProgressReporter.instance.setModule(options.module);\n }\n if (options.logger) {\n ProgressReporter.instance.setLogger(options.logger);\n }\n if (options.minPercent !== undefined) {\n ProgressReporter.instance.setMinPercent(options.minPercent);\n }\n if (options.maxPercent !== undefined) {\n ProgressReporter.instance.setMaxPercent(options.maxPercent);\n }\n }\n return ProgressReporter.instance;\n }\n\n setCallback(callback: ProgressCallback): void {\n this.callback = callback;\n }\n\n setModule(module: string): void {\n this.module = module;\n }\n\n setLogger(logger: ILogger): void {\n this.logger = logger;\n }\n\n setMinPercent(minPercent: number): void {\n this.minPercent = minPercent;\n }\n\n setMaxPercent(maxPercent: number): void {\n this.maxPercent = maxPercent;\n }\n\n createSubProgress(options: {\n minPercent: number;\n maxPercent: number;\n logPrefix?: string;\n }): ProgressReporter {\n const subReporter = new ProgressReporter({\n module: this.module,\n logger: this.logger,\n logProgress: this.logProgress,\n minPercent: options.minPercent,\n maxPercent: options.maxPercent,\n });\n\n const logPrefix = options.logPrefix || '';\n\n subReporter.setCallback(data => {\n const scaledPercent = this.scalePercent(\n data.progressPercent,\n options.minPercent,\n options.maxPercent,\n );\n\n let formattedMessage = data.message;\n if (logPrefix && !formattedMessage.startsWith(logPrefix)) {\n formattedMessage = `${logPrefix}: ${formattedMessage}`;\n }\n\n this.report({\n stage: data.stage,\n message: formattedMessage,\n progressPercent: scaledPercent,\n details: data.details,\n });\n });\n\n return subReporter;\n }\n\n report(data: ProgressData): void {\n const rawPercent = data.progressPercent;\n const percent = Math.max(0, Math.min(100, rawPercent));\n\n const scaledPercent = this.scalePercent(percent, 0, 100);\n\n const now = Date.now();\n if (\n scaledPercent === this.lastReportedPercent &&\n now - this.lastReportedTime < this.throttleMs &&\n data.stage !== 'completed' &&\n data.stage !== 'failed'\n ) {\n return;\n }\n\n this.lastReportedPercent = scaledPercent;\n this.lastReportedTime = now;\n\n const progressData = {\n ...data,\n progressPercent: scaledPercent,\n };\n\n if (this.logProgress) {\n this.logger.debug(\n `[${this.module}] [${data.stage.toUpperCase()}] ${\n data.message\n } (${scaledPercent.toFixed(1)}%)`,\n data.details,\n );\n }\n\n if (this.callback) {\n try {\n this.callback(progressData);\n } catch (err) {\n this.logger.warn(`Error in progress callback: ${err}`);\n }\n }\n }\n\n private scalePercent(\n percent: number,\n sourceMin: number,\n sourceMax: number,\n ): number {\n const range = this.maxPercent - this.minPercent;\n const sourceRange = sourceMax - sourceMin;\n const scaleFactor = range / sourceRange;\n\n return this.minPercent + (percent - sourceMin) * scaleFactor;\n }\n\n preparing(\n message: string,\n percent: number,\n details?: Record<string, any>,\n ): void {\n this.report({\n stage: 'preparing',\n message,\n progressPercent: percent,\n details,\n });\n }\n\n submitting(\n message: string,\n percent: number,\n details?: Record<string, any>,\n ): void {\n this.report({\n stage: 'submitting',\n message,\n progressPercent: percent,\n details,\n });\n }\n\n confirming(\n message: string,\n percent: number,\n details?: Record<string, any>,\n ): void {\n this.report({\n stage: 'confirming',\n message,\n progressPercent: percent,\n details,\n });\n }\n\n verifying(\n message: string,\n percent: number,\n details?: Record<string, any>,\n ): void {\n this.report({\n stage: 'verifying',\n message,\n progressPercent: percent,\n details,\n });\n }\n\n completed(message: string, details?: Record<string, any>): void {\n this.report({ stage: 'completed', message, progressPercent: 100, details });\n }\n\n failed(message: string, details?: Record<string, any>): void {\n this.report({\n stage: 'failed',\n message,\n progressPercent: this.lastReportedPercent,\n details,\n });\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"standards-sdk.es131.js","sources":["../../src/hcs-25/collectors/oss-popularity.ts"],"sourcesContent":["import type { Hcs25JsonValue, Hcs25Subject } from '../types';\nimport { isJsonObject, readString, readSubjectAdditional } from '../signals';\nimport { resolveSubjectEndpoint } from './endpoints';\nimport {\n Hcs25CollectorHttpError,\n isTimeoutError,\n requestJson,\n requestText,\n} from './http';\nimport type {\n Hcs25CollectContext,\n Hcs25SignalAdapter,\n Hcs25SignalAdapterResult,\n Hcs25SignalStatus,\n} from './types';\n\nconst GITHUB_API_BASE = 'https://api.github.com';\nconst NPM_API_BASE = 'https://api.npmjs.org';\nconst NPM_REGISTRY_BASE = 'https://registry.npmjs.org';\nconst PYPISTATS_API_BASE = 'https://pypistats.org/api';\nconst PYPI_API_BASE = 'https://pypi.org/pypi';\nconst RAW_GITHUB_BASE = 'https://raw.githubusercontent.com';\n\nconst GITHUB_REPO_PATTERN =\n /github\\.com[:/]+([A-Za-z0-9_.-]+)\\/([A-Za-z0-9_.-]+)/;\n\n/**\n * Options for the OSS popularity signal adapter.\n */\nexport interface Hcs25OssPopularitySignalAdapterOptions {\n /** GitHub API base URL. Default `https://api.github.com`. */\n githubApiBase?: string;\n /** Optional GitHub token for higher rate limits. */\n githubToken?: string;\n /** npm downloads API base. Default `https://api.npmjs.org`. */\n npmApiBase?: string;\n /** pypistats API base. Default `https://pypistats.org/api`. */\n pypiApiBase?: string;\n /**\n * When no GitHub repo is declared, infer one from the package's\n * registry metadata (npm `repository.url`, PyPI `project_urls` /\n * `home_page`). Default true.\n */\n inferRepository?: boolean;\n /**\n * When no package identity is declared, infer one from the repo's\n * `package.json` / `pyproject.toml` / `setup.cfg` on `main`/`master`.\n * Default true.\n */\n inferPackageIdentity?: boolean;\n /**\n * When the GitHub API lookup fails or returns no star count, scrape the\n * repo page's star counter as a fallback. Default true.\n */\n githubHtmlFallback?: boolean;\n /** Per-adapter timeout in milliseconds. */\n timeoutMs?: number;\n includeRegistries?: readonly string[];\n excludeRegistries?: readonly string[];\n appliesTo?: (subject: Hcs25Subject) => boolean;\n}\n\n/**\n * Extracts an `owner/repo` pair from a free-form value (URL, git SSH form,\n * or an already-normalized `owner/repo` slug).\n */\nexport function parseGithubRepo(value: string | null): string | null {\n if (!value) {\n return null;\n }\n const direct = value.match(/^([A-Za-z0-9_.-]+)\\/([A-Za-z0-9_.-]+)$/);\n if (direct) {\n return `${direct[1]}/${direct[2]}`;\n }\n const match = value.match(GITHUB_REPO_PATTERN);\n if (!match) {\n return null;\n }\n return `${match[1]}/${match[2].replace(/\\.git$/, '')}`;\n}\n\nfunction resolveGithubRepo(subject: Hcs25Subject): string | null {\n const additional = readSubjectAdditional(subject);\n const metadata = subject.metadata ?? {};\n const mcp = isJsonObject(metadata.mcp) ? metadata.mcp : undefined;\n\n for (const value of [\n readString(additional, 'githubRepo'),\n readString(additional, 'repository'),\n readString(metadata, 'repository'),\n readString(mcp, 'repository'),\n readString(metadata, 'repoUrl'),\n readString(additional, 'repoUrl'),\n readString(metadata, 'homepage'),\n readString(additional, 'homepage'),\n resolveSubjectEndpoint(subject),\n ]) {\n const repo = parseGithubRepo(value);\n if (repo) {\n return repo;\n }\n }\n return null;\n}\n\nfunction resolvePackage(\n subject: Hcs25Subject,\n): { registry: 'npm' | 'pypi'; name: string } | null {\n const additional = readSubjectAdditional(subject);\n const registry = readString(additional, 'packageRegistry');\n const name = readString(additional, 'packageName');\n if (name && (registry === 'npm' || registry === 'pypi')) {\n return { registry, name };\n }\n if (name) {\n return { registry: 'npm', name };\n }\n return null;\n}\n\ninterface GithubRepoResponse {\n stargazers_count?: number;\n}\n\ninterface NpmDownloadsResponse {\n downloads?: number;\n}\n\ninterface PyPiRecentResponse {\n data?: { last_month?: number };\n}\n\nfunction statusFromError(error: unknown): Hcs25SignalStatus {\n if (error instanceof Hcs25CollectorHttpError && error.status === 404) {\n return 'missing';\n }\n return isTimeoutError(error) ? 'timeout' : 'error';\n}\n\nconst parseLikelyPackageName = (value: string | null): string | null => {\n if (!value) {\n return null;\n }\n const trimmed = value.trim();\n return /^[a-zA-Z0-9._~@/-]{1,214}$/.test(trimmed) ? trimmed : null;\n};\n\nconst parseNpmPackageName = (body: string): string | null => {\n try {\n const parsed = JSON.parse(body) as { name?: unknown };\n return typeof parsed.name === 'string' ? parsed.name : null;\n } catch {\n return null;\n }\n};\n\nconst parsePyProjectName = (body: string): string | null => {\n const match = body.match(/^\\s*name\\s*=\\s*[\"']([^\"']+)[\"']/m);\n return match?.[1] ?? null;\n};\n\nconst parseSetupCfgName = (body: string): string | null => {\n const match = body.match(/^\\s*name\\s*=\\s*(\\S+)\\s*$/m);\n return match?.[1] ?? null;\n};\n\n/**\n * Infers the package identity (`npm`/`pypi` + name) from the repository's\n * package manifests on `main`/`master`, per production behavior.\n */\nasync function inferPackageIdentity(\n repo: string,\n context: Hcs25CollectContext,\n): Promise<{ registry: 'npm' | 'pypi'; name: string } | null> {\n const base = `${RAW_GITHUB_BASE}/${repo\n .split('/')\n .map(encodeURIComponent)\n .join('/')}`;\n let npmName: string | null = null;\n let pypiName: string | null = null;\n\n for (const branch of ['main', 'master']) {\n if (!npmName) {\n try {\n const body = await requestText(`${base}/${branch}/package.json`, {\n fetch: context.fetch,\n timeoutMs: context.timeoutMs,\n signal: context.signal,\n });\n npmName = parseLikelyPackageName(parseNpmPackageName(body));\n } catch {\n // manifest not present on this branch\n }\n }\n if (!pypiName) {\n try {\n const body = await requestText(`${base}/${branch}/pyproject.toml`, {\n fetch: context.fetch,\n timeoutMs: context.timeoutMs,\n signal: context.signal,\n });\n pypiName = parseLikelyPackageName(parsePyProjectName(body));\n } catch {\n try {\n const body = await requestText(`${base}/${branch}/setup.cfg`, {\n fetch: context.fetch,\n timeoutMs: context.timeoutMs,\n signal: context.signal,\n });\n pypiName = parseLikelyPackageName(parseSetupCfgName(body));\n } catch {\n // no python manifest either\n }\n }\n }\n if (npmName || pypiName) {\n break;\n }\n }\n\n if (npmName && !pypiName) {\n return { registry: 'npm', name: npmName };\n }\n if (pypiName && !npmName) {\n return { registry: 'pypi', name: pypiName };\n }\n return null;\n}\n\n/**\n * Infers the GitHub repository for a package from its registry metadata\n * (PyPI `project_urls`/`home_page`; npm `repository.url`/`homepage`/\n * `bugs.url`).\n */\nasync function inferRepositoryFromPackage(\n pkg: { registry: 'npm' | 'pypi'; name: string },\n context: Hcs25CollectContext,\n): Promise<string | null> {\n const candidates: string[] = [];\n try {\n if (pkg.registry === 'pypi') {\n const payload = await requestJson<{\n info?: {\n home_page?: unknown;\n project_urls?: Record<string, unknown>;\n };\n }>(`${PYPI_API_BASE}/${encodeURIComponent(pkg.name)}/json`, {\n fetch: context.fetch,\n timeoutMs: context.timeoutMs,\n signal: context.signal,\n });\n const home = payload.info?.home_page;\n if (typeof home === 'string') {\n candidates.push(home);\n }\n const urls = payload.info?.project_urls;\n if (urls && typeof urls === 'object' && !Array.isArray(urls)) {\n for (const value of Object.values(urls)) {\n if (typeof value === 'string') {\n candidates.push(value);\n }\n }\n }\n } else {\n const payload = await requestJson<{\n repository?: { url?: unknown } | unknown;\n homepage?: unknown;\n bugs?: { url?: unknown } | unknown;\n }>(`${NPM_REGISTRY_BASE}/${encodeURIComponent(pkg.name)}`, {\n fetch: context.fetch,\n timeoutMs: context.timeoutMs,\n signal: context.signal,\n });\n const repo =\n payload.repository &&\n typeof payload.repository === 'object' &&\n !Array.isArray(payload.repository)\n ? (payload.repository as Record<string, unknown>).url\n : payload.repository;\n if (typeof repo === 'string') {\n candidates.push(repo);\n }\n if (typeof payload.homepage === 'string') {\n candidates.push(payload.homepage);\n }\n const bugs =\n payload.bugs &&\n typeof payload.bugs === 'object' &&\n !Array.isArray(payload.bugs)\n ? (payload.bugs as Record<string, unknown>).url\n : payload.bugs;\n if (typeof bugs === 'string') {\n candidates.push(bugs);\n }\n }\n } catch {\n return null;\n }\n for (const candidate of candidates) {\n const repo = parseGithubRepo(candidate);\n if (repo) {\n return repo;\n }\n }\n return null;\n}\n\n/**\n * Reads GitHub star count from the repo HTML page's counter badge\n * (production fallback when the API is rate-limited).\n */\nasync function fetchGithubStarsViaHtml(\n repo: string,\n context: Hcs25CollectContext,\n): Promise<number | null> {\n const url = `https://github.com/${repo\n .split('/')\n .map(encodeURIComponent)\n .join('/')}`;\n const body = await requestText(url, {\n fetch: context.fetch,\n timeoutMs: context.timeoutMs,\n signal: context.signal,\n headers: { accept: 'text/html' },\n });\n const match =\n body.match(\n /id=\"repo-stars-counter-star\"[^>]*aria-label=\"(?<count>[0-9,]+)\\s+users?\\s+starred/i,\n ) ??\n body.match(/id=\"repo-stars-counter-star\"[^>]*title=\"(?<count>[0-9,]+)\"/i);\n const raw = match?.groups?.count;\n if (!raw) {\n return null;\n }\n const parsed = Number(raw.replace(/,/g, ''));\n return Number.isFinite(parsed) ? Math.max(0, Math.floor(parsed)) : null;\n}\n\n/**\n * Creates the `oss-popularity` signal adapter: collects GitHub repository\n * stars and npm/PyPI 30-day download counts — with package/repo identity\n * inference across `package.json`, `pyproject.toml`, `setup.cfg`, PyPI\n * metadata, and npm registry metadata — writing the catalog fields under\n * `metadata.additional`.\n */\nexport function createOssPopularitySignalAdapter(\n options: Hcs25OssPopularitySignalAdapterOptions = {},\n): Hcs25SignalAdapter {\n const collect = async (\n subject: Hcs25Subject,\n context: Hcs25CollectContext,\n ): Promise<Hcs25SignalAdapterResult[]> => {\n const now = context.now.toISOString();\n let repo = resolveGithubRepo(subject);\n let pkg = resolvePackage(subject);\n\n // Cross-inference: repo ⇄ package (production behavior).\n if (!repo && pkg && options.inferRepository !== false) {\n repo = await inferRepositoryFromPackage(pkg, context).catch(\n (): null => null,\n );\n }\n if (!pkg && repo && options.inferPackageIdentity !== false) {\n pkg = await inferPackageIdentity(repo, context).catch((): null => null);\n }\n\n const results: Hcs25SignalAdapterResult[] = [];\n const additional: Record<string, Hcs25JsonValue> = {};\n\n if (repo) {\n additional.githubRepo = repo;\n additional.packageRepositoryUpdatedAt = now;\n try {\n const headers: Record<string, string> = {\n accept: 'application/vnd.github+json',\n };\n if (options.githubToken) {\n headers.authorization = `Bearer ${options.githubToken}`;\n }\n let stars: number | null = null;\n try {\n const data = await requestJson<GithubRepoResponse>(\n `${options.githubApiBase ?? GITHUB_API_BASE}/repos/${repo}`,\n {\n fetch: context.fetch,\n headers,\n timeoutMs: context.timeoutMs,\n signal: context.signal,\n },\n );\n stars =\n typeof data.stargazers_count === 'number'\n ? Math.max(0, Math.floor(data.stargazers_count))\n : null;\n } catch (error) {\n if (options.githubHtmlFallback === false) {\n throw error;\n }\n }\n if (stars === null && options.githubHtmlFallback !== false) {\n stars = await fetchGithubStarsViaHtml(repo, context).catch(\n (): null => null,\n );\n }\n additional.githubStars = stars;\n additional.githubStarsUpdatedAt = now;\n results.push({\n signalId: 'oss.github_stars',\n status: stars === null ? 'missing' : 'ok',\n value: stars,\n provenance: {\n source: 'github',\n sourceUrl: `${options.githubApiBase ?? GITHUB_API_BASE}/repos/${repo}`,\n subjectId: repo,\n fetchedAt: now,\n },\n });\n } catch (error) {\n results.push({\n signalId: 'oss.github_stars',\n status: statusFromError(error),\n provenance: {\n source: 'github',\n subjectId: repo,\n fetchedAt: now,\n },\n });\n }\n }\n\n if (pkg) {\n additional.packageRegistry = pkg.registry;\n additional.packageName = pkg.name;\n additional.packageIdentityUpdatedAt = now;\n const signalId =\n pkg.registry === 'npm' ? 'oss.npm_downloads' : 'oss.pypi_downloads';\n try {\n if (pkg.registry === 'npm') {\n const data = await requestJson<NpmDownloadsResponse>(\n `${options.npmApiBase ?? NPM_API_BASE}/downloads/point/last-month/${encodeURIComponent(pkg.name)}`,\n {\n fetch: context.fetch,\n timeoutMs: context.timeoutMs,\n signal: context.signal,\n },\n );\n const downloads =\n typeof data.downloads === 'number'\n ? Math.max(0, Math.floor(data.downloads))\n : null;\n additional.npmDownloads30d = downloads;\n additional.npmDownloadsUpdatedAt = now;\n if (downloads !== null) {\n additional.packageDownloadCount = downloads;\n }\n results.push({\n signalId,\n status: downloads === null ? 'missing' : 'ok',\n value: downloads,\n provenance: {\n source: 'npm',\n subjectId: pkg.name,\n fetchedAt: now,\n },\n });\n } else {\n const data = await requestJson<PyPiRecentResponse>(\n `${options.pypiApiBase ?? PYPISTATS_API_BASE}/packages/${encodeURIComponent(pkg.name)}/recent`,\n {\n fetch: context.fetch,\n timeoutMs: context.timeoutMs,\n signal: context.signal,\n },\n );\n const downloads =\n typeof data.data?.last_month === 'number'\n ? Math.max(0, Math.floor(data.data.last_month))\n : null;\n additional.pypiDownloads30d = downloads;\n additional.pypiDownloadsUpdatedAt = now;\n if (downloads !== null) {\n additional.packageDownloadCount = downloads;\n }\n results.push({\n signalId,\n status: downloads === null ? 'missing' : 'ok',\n value: downloads,\n provenance: {\n source: 'pypi',\n subjectId: pkg.name,\n fetchedAt: now,\n },\n });\n }\n } catch (error) {\n results.push({\n signalId,\n status: statusFromError(error),\n provenance: {\n source: pkg.registry,\n subjectId: pkg.name,\n fetchedAt: now,\n },\n });\n }\n }\n\n if (results.length === 0) {\n return [\n {\n signalId: 'oss.github_stars',\n status: 'missing',\n },\n ];\n }\n\n const rootValues: Record<string, Hcs25JsonValue> = {};\n // Persist an inferred repository at the metadata root so downstream\n // collectors and the stored record share the canonical value.\n if (repo && !readString(subject.metadata ?? {}, 'repository')) {\n rootValues.repository = `https://github.com/${repo}`;\n }\n\n results.push({\n signalId: 'oss.popularity',\n status: 'ok',\n fields: [\n { scope: 'additional', values: additional },\n ...(Object.keys(rootValues).length > 0\n ? [{ scope: 'root' as const, values: rootValues }]\n : []),\n ],\n provenance: {\n source: 'oss-popularity',\n subjectId: subject.id,\n fetchedAt: now,\n },\n });\n return results;\n };\n\n return {\n id: 'oss-popularity',\n produces: [\n 'oss.github_stars',\n 'oss.npm_downloads',\n 'oss.pypi_downloads',\n 'oss.popularity',\n ],\n timeoutMs: options.timeoutMs,\n includeRegistries: options.includeRegistries,\n excludeRegistries: options.excludeRegistries,\n appliesTo: options.appliesTo,\n collect,\n };\n}\n"],"names":[],"mappings":"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"}