@hashgraphonline/standards-sdk 0.1.190 → 0.1.191
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.
- package/dist/browser/hcs-25/adapters/ans-trust-discovery.d.ts +22 -0
- package/dist/browser/hcs-25/adapters/ans-trust-discovery.d.ts.map +1 -0
- package/dist/browser/hcs-25/adapters/index.d.ts +1 -0
- package/dist/browser/hcs-25/adapters/index.d.ts.map +1 -1
- package/dist/browser/hcs-25/collectors/ans-trust-discovery.d.ts +32 -0
- package/dist/browser/hcs-25/collectors/ans-trust-discovery.d.ts.map +1 -0
- package/dist/browser/hcs-25/collectors/catalog.d.ts +9 -2
- package/dist/browser/hcs-25/collectors/catalog.d.ts.map +1 -1
- package/dist/browser/hcs-25/collectors/index.d.ts +1 -0
- package/dist/browser/hcs-25/collectors/index.d.ts.map +1 -1
- package/dist/browser/hcs-25/signals/ans-trust-discovery.d.ts +50 -0
- package/dist/browser/hcs-25/signals/ans-trust-discovery.d.ts.map +1 -0
- package/dist/browser/hcs-25/signals/index.d.ts +1 -0
- package/dist/browser/hcs-25/signals/index.d.ts.map +1 -1
- package/dist/browser-root/hcs-25/adapters/ans-trust-discovery.d.ts +22 -0
- package/dist/browser-root/hcs-25/adapters/ans-trust-discovery.d.ts.map +1 -0
- package/dist/browser-root/hcs-25/adapters/index.d.ts +1 -0
- package/dist/browser-root/hcs-25/adapters/index.d.ts.map +1 -1
- package/dist/browser-root/hcs-25/collectors/ans-trust-discovery.d.ts +32 -0
- package/dist/browser-root/hcs-25/collectors/ans-trust-discovery.d.ts.map +1 -0
- package/dist/browser-root/hcs-25/collectors/catalog.d.ts +9 -2
- package/dist/browser-root/hcs-25/collectors/catalog.d.ts.map +1 -1
- package/dist/browser-root/hcs-25/collectors/index.d.ts +1 -0
- package/dist/browser-root/hcs-25/collectors/index.d.ts.map +1 -1
- package/dist/browser-root/hcs-25/signals/ans-trust-discovery.d.ts +50 -0
- package/dist/browser-root/hcs-25/signals/ans-trust-discovery.d.ts.map +1 -0
- package/dist/browser-root/hcs-25/signals/index.d.ts +1 -0
- package/dist/browser-root/hcs-25/signals/index.d.ts.map +1 -1
- package/dist/cjs/hcs-25/adapters/ans-trust-discovery.d.ts +22 -0
- package/dist/cjs/hcs-25/adapters/ans-trust-discovery.d.ts.map +1 -0
- package/dist/cjs/hcs-25/adapters/index.d.ts +1 -0
- package/dist/cjs/hcs-25/adapters/index.d.ts.map +1 -1
- package/dist/cjs/hcs-25/collectors/ans-trust-discovery.d.ts +32 -0
- package/dist/cjs/hcs-25/collectors/ans-trust-discovery.d.ts.map +1 -0
- package/dist/cjs/hcs-25/collectors/catalog.d.ts +9 -2
- package/dist/cjs/hcs-25/collectors/catalog.d.ts.map +1 -1
- package/dist/cjs/hcs-25/collectors/index.d.ts +1 -0
- package/dist/cjs/hcs-25/collectors/index.d.ts.map +1 -1
- package/dist/cjs/hcs-25/signals/ans-trust-discovery.d.ts +50 -0
- package/dist/cjs/hcs-25/signals/ans-trust-discovery.d.ts.map +1 -0
- package/dist/cjs/hcs-25/signals/index.d.ts +1 -0
- package/dist/cjs/hcs-25/signals/index.d.ts.map +1 -1
- package/dist/cjs/standards-sdk.cjs +1 -1
- package/dist/cjs/standards-sdk.cjs.map +1 -1
- package/dist/es/hcs-25/adapters/ans-trust-discovery.d.ts +22 -0
- package/dist/es/hcs-25/adapters/ans-trust-discovery.d.ts.map +1 -0
- package/dist/es/hcs-25/adapters/index.d.ts +1 -0
- package/dist/es/hcs-25/adapters/index.d.ts.map +1 -1
- package/dist/es/hcs-25/collectors/ans-trust-discovery.d.ts +32 -0
- package/dist/es/hcs-25/collectors/ans-trust-discovery.d.ts.map +1 -0
- package/dist/es/hcs-25/collectors/catalog.d.ts +9 -2
- package/dist/es/hcs-25/collectors/catalog.d.ts.map +1 -1
- package/dist/es/hcs-25/collectors/index.d.ts +1 -0
- package/dist/es/hcs-25/collectors/index.d.ts.map +1 -1
- package/dist/es/hcs-25/signals/ans-trust-discovery.d.ts +50 -0
- package/dist/es/hcs-25/signals/ans-trust-discovery.d.ts.map +1 -0
- package/dist/es/hcs-25/signals/index.d.ts +1 -0
- package/dist/es/hcs-25/signals/index.d.ts.map +1 -1
- package/dist/es/standards-sdk.es.js +78 -71
- package/dist/es/standards-sdk.es.js.map +1 -1
- package/dist/es/standards-sdk.es101.js +2 -2
- package/dist/es/standards-sdk.es103.js +2 -2
- package/dist/es/standards-sdk.es104.js +1 -1
- package/dist/es/standards-sdk.es106.js +1 -1
- package/dist/es/standards-sdk.es108.js +2 -2
- package/dist/es/standards-sdk.es11.js +1 -1
- package/dist/es/standards-sdk.es110.js +1 -1
- package/dist/es/standards-sdk.es111.js +2 -2
- package/dist/es/standards-sdk.es115.js +3 -3
- package/dist/es/standards-sdk.es116.js +4 -4
- package/dist/es/standards-sdk.es12.js +1 -1
- package/dist/es/standards-sdk.es120.js +22 -4
- package/dist/es/standards-sdk.es120.js.map +1 -1
- package/dist/es/standards-sdk.es121.js +15 -12
- package/dist/es/standards-sdk.es121.js.map +1 -1
- package/dist/es/standards-sdk.es123.js +6 -5
- package/dist/es/standards-sdk.es123.js.map +1 -1
- package/dist/es/standards-sdk.es124.js +6 -5
- package/dist/es/standards-sdk.es124.js.map +1 -1
- package/dist/es/standards-sdk.es127.js +6 -5
- package/dist/es/standards-sdk.es127.js.map +1 -1
- package/dist/es/standards-sdk.es128.js +110 -136
- package/dist/es/standards-sdk.es128.js.map +1 -1
- package/dist/es/standards-sdk.es129.js +133 -141
- package/dist/es/standards-sdk.es129.js.map +1 -1
- package/dist/es/standards-sdk.es13.js +1 -1
- package/dist/es/standards-sdk.es130.js +135 -345
- package/dist/es/standards-sdk.es130.js.map +1 -1
- package/dist/es/standards-sdk.es131.js +332 -344
- package/dist/es/standards-sdk.es131.js.map +1 -1
- package/dist/es/standards-sdk.es132.js +338 -178
- package/dist/es/standards-sdk.es132.js.map +1 -1
- package/dist/es/standards-sdk.es133.js +200 -196
- package/dist/es/standards-sdk.es133.js.map +1 -1
- package/dist/es/standards-sdk.es134.js +216 -364
- package/dist/es/standards-sdk.es134.js.map +1 -1
- package/dist/es/standards-sdk.es135.js +358 -100
- package/dist/es/standards-sdk.es135.js.map +1 -1
- package/dist/es/standards-sdk.es136.js +91 -220
- package/dist/es/standards-sdk.es136.js.map +1 -1
- package/dist/es/standards-sdk.es137.js +173 -1250
- package/dist/es/standards-sdk.es137.js.map +1 -1
- package/dist/es/standards-sdk.es138.js +1295 -98
- package/dist/es/standards-sdk.es138.js.map +1 -1
- package/dist/es/standards-sdk.es139.js +109 -246
- package/dist/es/standards-sdk.es139.js.map +1 -1
- package/dist/es/standards-sdk.es14.js +1 -1
- package/dist/es/standards-sdk.es140.js +263 -97
- package/dist/es/standards-sdk.es140.js.map +1 -1
- package/dist/es/standards-sdk.es141.js +107 -248
- package/dist/es/standards-sdk.es141.js.map +1 -1
- package/dist/es/standards-sdk.es142.js +246 -472
- package/dist/es/standards-sdk.es142.js.map +1 -1
- package/dist/es/standards-sdk.es143.js +458 -85
- package/dist/es/standards-sdk.es143.js.map +1 -1
- package/dist/es/standards-sdk.es144.js +96 -151
- package/dist/es/standards-sdk.es144.js.map +1 -1
- package/dist/es/standards-sdk.es145.js +155 -29
- package/dist/es/standards-sdk.es145.js.map +1 -1
- package/dist/es/standards-sdk.es146.js +26 -4
- package/dist/es/standards-sdk.es146.js.map +1 -1
- package/dist/es/standards-sdk.es147.js +10 -180
- package/dist/es/standards-sdk.es147.js.map +1 -1
- package/dist/es/standards-sdk.es148.js +179 -26
- package/dist/es/standards-sdk.es148.js.map +1 -1
- package/dist/es/standards-sdk.es149.js +27 -20
- package/dist/es/standards-sdk.es149.js.map +1 -1
- package/dist/es/standards-sdk.es15.js +1 -1
- package/dist/es/standards-sdk.es150.js +18 -156
- package/dist/es/standards-sdk.es150.js.map +1 -1
- package/dist/es/standards-sdk.es151.js +148 -190
- package/dist/es/standards-sdk.es151.js.map +1 -1
- package/dist/es/standards-sdk.es152.js +159 -747
- package/dist/es/standards-sdk.es152.js.map +1 -1
- package/dist/es/standards-sdk.es153.js +786 -9
- package/dist/es/standards-sdk.es153.js.map +1 -1
- package/dist/es/standards-sdk.es154.js +13 -567
- package/dist/es/standards-sdk.es154.js.map +1 -1
- package/dist/es/standards-sdk.es155.js +541 -600
- package/dist/es/standards-sdk.es155.js.map +1 -1
- package/dist/es/standards-sdk.es156.js +625 -12
- package/dist/es/standards-sdk.es156.js.map +1 -1
- package/dist/es/standards-sdk.es157.js +13 -2
- package/dist/es/standards-sdk.es157.js.map +1 -1
- package/dist/es/standards-sdk.es158.js +2 -87
- package/dist/es/standards-sdk.es158.js.map +1 -1
- package/dist/es/standards-sdk.es159.js +84 -37
- package/dist/es/standards-sdk.es159.js.map +1 -1
- package/dist/es/standards-sdk.es16.js +6 -6
- package/dist/es/standards-sdk.es160.js +40 -2
- package/dist/es/standards-sdk.es160.js.map +1 -1
- package/dist/es/standards-sdk.es161.js +2 -235
- package/dist/es/standards-sdk.es161.js.map +1 -1
- package/dist/es/standards-sdk.es162.js +204 -1109
- package/dist/es/standards-sdk.es162.js.map +1 -1
- package/dist/es/standards-sdk.es163.js +1059 -225
- package/dist/es/standards-sdk.es163.js.map +1 -1
- package/dist/es/standards-sdk.es164.js +303 -419
- package/dist/es/standards-sdk.es164.js.map +1 -1
- package/dist/es/standards-sdk.es165.js +418 -351
- package/dist/es/standards-sdk.es165.js.map +1 -1
- package/dist/es/standards-sdk.es166.js +347 -1114
- package/dist/es/standards-sdk.es166.js.map +1 -1
- package/dist/es/standards-sdk.es167.js +1094 -180
- package/dist/es/standards-sdk.es167.js.map +1 -1
- package/dist/es/standards-sdk.es168.js +153 -1512
- package/dist/es/standards-sdk.es168.js.map +1 -1
- package/dist/es/standards-sdk.es169.js +1457 -1056
- package/dist/es/standards-sdk.es169.js.map +1 -1
- package/dist/es/standards-sdk.es170.js +1163 -14
- package/dist/es/standards-sdk.es170.js.map +1 -1
- package/dist/es/standards-sdk.es171.js +15 -449
- package/dist/es/standards-sdk.es171.js.map +1 -1
- package/dist/es/standards-sdk.es172.js +440 -248
- package/dist/es/standards-sdk.es172.js.map +1 -1
- package/dist/es/standards-sdk.es173.js +259 -4
- package/dist/es/standards-sdk.es173.js.map +1 -1
- package/dist/es/standards-sdk.es174.js +4 -81
- package/dist/es/standards-sdk.es174.js.map +1 -1
- package/dist/es/standards-sdk.es175.js +71 -77
- package/dist/es/standards-sdk.es175.js.map +1 -1
- package/dist/es/standards-sdk.es176.js +80 -53
- package/dist/es/standards-sdk.es176.js.map +1 -1
- package/dist/es/standards-sdk.es177.js +59 -2546
- package/dist/es/standards-sdk.es177.js.map +1 -1
- package/dist/es/standards-sdk.es178.js +2547 -159
- package/dist/es/standards-sdk.es178.js.map +1 -1
- package/dist/es/standards-sdk.es179.js +159 -7
- package/dist/es/standards-sdk.es179.js.map +1 -1
- package/dist/es/standards-sdk.es18.js +13 -13
- package/dist/es/standards-sdk.es180.js +7 -86
- package/dist/es/standards-sdk.es180.js.map +1 -1
- package/dist/es/standards-sdk.es181.js +65 -44
- package/dist/es/standards-sdk.es181.js.map +1 -1
- package/dist/es/standards-sdk.es182.js +57 -188
- package/dist/es/standards-sdk.es182.js.map +1 -1
- package/dist/es/standards-sdk.es183.js +27 -26
- package/dist/es/standards-sdk.es183.js.map +1 -1
- package/dist/es/standards-sdk.es184.js +191 -53
- package/dist/es/standards-sdk.es184.js.map +1 -1
- package/dist/es/standards-sdk.es185.js +21 -109
- package/dist/es/standards-sdk.es185.js.map +1 -1
- package/dist/es/standards-sdk.es186.js +49 -47
- package/dist/es/standards-sdk.es186.js.map +1 -1
- package/dist/es/standards-sdk.es187.js +89 -205
- package/dist/es/standards-sdk.es187.js.map +1 -1
- package/dist/es/standards-sdk.es188.js +35 -58
- package/dist/es/standards-sdk.es188.js.map +1 -1
- package/dist/es/standards-sdk.es189.js +48 -39
- package/dist/es/standards-sdk.es189.js.map +1 -1
- package/dist/es/standards-sdk.es19.js +10 -10
- package/dist/es/standards-sdk.es190.js +218 -48
- package/dist/es/standards-sdk.es190.js.map +1 -1
- package/dist/es/standards-sdk.es191.js +66 -42
- package/dist/es/standards-sdk.es191.js.map +1 -1
- package/dist/es/standards-sdk.es192.js +33 -105
- package/dist/es/standards-sdk.es192.js.map +1 -1
- package/dist/es/standards-sdk.es193.js +49 -43
- package/dist/es/standards-sdk.es193.js.map +1 -1
- package/dist/es/standards-sdk.es194.js +33 -42
- package/dist/es/standards-sdk.es194.js.map +1 -1
- package/dist/es/standards-sdk.es195.js +123 -72
- package/dist/es/standards-sdk.es195.js.map +1 -1
- package/dist/es/standards-sdk.es196.js +58 -75
- package/dist/es/standards-sdk.es196.js.map +1 -1
- package/dist/es/standards-sdk.es197.js +60 -44
- package/dist/es/standards-sdk.es197.js.map +1 -1
- package/dist/es/standards-sdk.es198.js +72 -36
- package/dist/es/standards-sdk.es198.js.map +1 -1
- package/dist/es/standards-sdk.es199.js +75 -30
- package/dist/es/standards-sdk.es199.js.map +1 -1
- package/dist/es/standards-sdk.es2.js +2 -2
- package/dist/es/standards-sdk.es20.js +1 -1
- package/dist/es/standards-sdk.es200.js +44 -34
- package/dist/es/standards-sdk.es200.js.map +1 -1
- package/dist/es/standards-sdk.es201.js +36 -48
- package/dist/es/standards-sdk.es201.js.map +1 -1
- package/dist/es/standards-sdk.es202.js +30 -138
- package/dist/es/standards-sdk.es202.js.map +1 -1
- package/dist/es/standards-sdk.es203.js +34 -42
- package/dist/es/standards-sdk.es203.js.map +1 -1
- package/dist/es/standards-sdk.es204.js +48 -12482
- package/dist/es/standards-sdk.es204.js.map +1 -1
- package/dist/es/standards-sdk.es205.js +134 -13
- package/dist/es/standards-sdk.es205.js.map +1 -1
- package/dist/es/standards-sdk.es206.js +36 -50
- package/dist/es/standards-sdk.es206.js.map +1 -1
- package/dist/es/standards-sdk.es207.js +12449 -78
- package/dist/es/standards-sdk.es207.js.map +1 -1
- package/dist/es/standards-sdk.es208.js +15 -79
- package/dist/es/standards-sdk.es208.js.map +1 -1
- package/dist/es/standards-sdk.es209.js +48 -192
- package/dist/es/standards-sdk.es209.js.map +1 -1
- package/dist/es/standards-sdk.es21.js +1 -1
- package/dist/es/standards-sdk.es210.js +90 -651
- package/dist/es/standards-sdk.es210.js.map +1 -1
- package/dist/es/standards-sdk.es211.js +71 -63
- package/dist/es/standards-sdk.es211.js.map +1 -1
- package/dist/es/standards-sdk.es212.js +188 -160
- package/dist/es/standards-sdk.es212.js.map +1 -1
- package/dist/es/standards-sdk.es213.js +65 -314
- package/dist/es/standards-sdk.es213.js.map +1 -1
- package/dist/es/standards-sdk.es214.js +661 -335
- package/dist/es/standards-sdk.es214.js.map +1 -1
- package/dist/es/standards-sdk.es215.js +129 -410
- package/dist/es/standards-sdk.es215.js.map +1 -1
- package/dist/es/standards-sdk.es216.js +200 -209
- package/dist/es/standards-sdk.es216.js.map +1 -1
- package/dist/es/standards-sdk.es217.js +334 -64
- package/dist/es/standards-sdk.es217.js.map +1 -1
- package/dist/es/standards-sdk.es218.js +438 -124
- package/dist/es/standards-sdk.es218.js.map +1 -1
- package/dist/es/standards-sdk.es219.js +310 -496
- package/dist/es/standards-sdk.es219.js.map +1 -1
- package/dist/es/standards-sdk.es22.js +1 -1
- package/dist/es/standards-sdk.es220.js +60 -243
- package/dist/es/standards-sdk.es220.js.map +1 -1
- package/dist/es/standards-sdk.es221.js +118 -175
- package/dist/es/standards-sdk.es221.js.map +1 -1
- package/dist/es/standards-sdk.es222.js +465 -67
- package/dist/es/standards-sdk.es222.js.map +1 -1
- package/dist/es/standards-sdk.es223.js +250 -143
- package/dist/es/standards-sdk.es223.js.map +1 -1
- package/dist/es/standards-sdk.es224.js +172 -160
- package/dist/es/standards-sdk.es224.js.map +1 -1
- package/dist/es/standards-sdk.es225.js +65 -630
- package/dist/es/standards-sdk.es225.js.map +1 -1
- package/dist/es/standards-sdk.es226.js +128 -161
- package/dist/es/standards-sdk.es226.js.map +1 -1
- package/dist/es/standards-sdk.es227.js +144 -195
- package/dist/es/standards-sdk.es227.js.map +1 -1
- package/dist/es/standards-sdk.es228.js +668 -223
- package/dist/es/standards-sdk.es228.js.map +1 -1
- package/dist/es/standards-sdk.es229.js +188 -0
- package/dist/es/standards-sdk.es229.js.map +1 -0
- package/dist/es/standards-sdk.es23.js +1 -1
- package/dist/es/standards-sdk.es230.js +238 -0
- package/dist/es/standards-sdk.es230.js.map +1 -0
- package/dist/es/standards-sdk.es231.js +242 -0
- package/dist/es/standards-sdk.es231.js.map +1 -0
- package/dist/es/standards-sdk.es24.js +1 -1
- package/dist/es/standards-sdk.es25.js +1 -1
- package/dist/es/standards-sdk.es26.js +1 -1
- package/dist/es/standards-sdk.es27.js +13 -13
- package/dist/es/standards-sdk.es30.js +2 -2
- package/dist/es/standards-sdk.es31.js +4 -4
- package/dist/es/standards-sdk.es32.js +1 -1
- package/dist/es/standards-sdk.es35.js +7 -7
- package/dist/es/standards-sdk.es36.js +4 -4
- package/dist/es/standards-sdk.es37.js +2 -2
- package/dist/es/standards-sdk.es38.js +2 -2
- package/dist/es/standards-sdk.es39.js +1 -1
- package/dist/es/standards-sdk.es4.js +2 -2
- package/dist/es/standards-sdk.es40.js +1 -1
- package/dist/es/standards-sdk.es41.js +2 -2
- package/dist/es/standards-sdk.es46.js +1 -1
- package/dist/es/standards-sdk.es5.js +2 -2
- package/dist/es/standards-sdk.es51.js +1 -1
- package/dist/es/standards-sdk.es53.js +1 -1
- package/dist/es/standards-sdk.es56.js +2 -2
- package/dist/es/standards-sdk.es59.js +1 -1
- package/dist/es/standards-sdk.es6.js +2 -2
- package/dist/es/standards-sdk.es60.js +1 -1
- package/dist/es/standards-sdk.es62.js +1 -1
- package/dist/es/standards-sdk.es63.js +2 -2
- package/dist/es/standards-sdk.es64.js +1 -1
- package/dist/es/standards-sdk.es65.js +1 -1
- package/dist/es/standards-sdk.es66.js +1 -1
- package/dist/es/standards-sdk.es67.js +8 -8
- package/dist/es/standards-sdk.es69.js +1 -1
- package/dist/es/standards-sdk.es7.js +1 -1
- package/dist/es/standards-sdk.es71.js +2 -2
- package/dist/es/standards-sdk.es72.js +3 -3
- package/dist/es/standards-sdk.es75.js +5 -5
- package/dist/es/standards-sdk.es76.js +3 -3
- package/dist/es/standards-sdk.es77.js +2 -2
- package/dist/es/standards-sdk.es78.js +1 -1
- package/dist/es/standards-sdk.es81.js +2 -2
- package/dist/es/standards-sdk.es83.js +2 -2
- package/dist/es/standards-sdk.es84.js +5 -5
- package/dist/es/standards-sdk.es85.js +1 -1
- package/dist/es/standards-sdk.es88.js +1 -1
- package/dist/es/standards-sdk.es89.js +2 -2
- package/dist/es/standards-sdk.es9.js +2 -2
- package/dist/es/standards-sdk.es90.js +4 -4
- package/dist/es/standards-sdk.es94.js +3 -3
- package/dist/es/standards-sdk.es96.js +2 -2
- package/dist/es/standards-sdk.es98.js +1 -1
- package/dist/es/standards-sdk.es99.js +3 -3
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es135.js","sources":["../../src/hcs-25/collectors/acp.ts"],"sourcesContent":["import type { Hcs25JsonValue, Hcs25Subject } from '../types';\nimport { readString } from '../signals';\nimport { Hcs25CollectorHttpError, isTimeoutError, requestJson } from './http';\nimport type {\n Hcs25CollectContext,\n Hcs25SignalAdapter,\n Hcs25SignalAdapterResult,\n} from './types';\n\n/**\n * Marketplace-native performance metrics consumed by the `acp` scoring\n * adapter (stored under `metadata.metrics` with top-level fallbacks).\n */\nexport interface Hcs25AcpMetrics {\n successRate?: number;\n successfulJobCount?: number;\n totalJobCount?: number;\n volume?: number;\n revenue?: number;\n rating?: number;\n}\n\n/**\n * Options for the ACP/Virtuals signal adapter.\n */\nexport interface Hcs25AcpSignalAdapterOptions {\n /**\n * Marketplace endpoint: a URL template supporting `{address}` /\n * `{nativeId}` placeholders, or a function returning the URL (null =\n * not listed in the marketplace).\n */\n endpoint: string | ((subject: Hcs25Subject) => string | null);\n /**\n * Maps the marketplace response JSON to normalized metrics. Default reads\n * the metric keys from the payload root, `.metrics`, or `.agent`.\n */\n mapResponse?: (data: unknown) => Hcs25AcpMetrics | null;\n timeoutMs?: number;\n includeRegistries?: readonly string[];\n excludeRegistries?: readonly string[];\n appliesTo?: (subject: Hcs25Subject) => boolean;\n}\n\nconst DEFAULT_INCLUDED_REGISTRIES: readonly string[] = ['virtuals-protocol'];\n\nconst METRIC_KEYS = [\n 'successRate',\n 'successfulJobCount',\n 'totalJobCount',\n 'volume',\n 'revenue',\n 'rating',\n] as const;\n\nfunction pickMetrics(record: unknown): Hcs25AcpMetrics | null {\n if (typeof record !== 'object' || record === null) {\n return null;\n }\n const source = record as Record<string, unknown>;\n const metrics: Hcs25AcpMetrics = {};\n let found = false;\n for (const key of METRIC_KEYS) {\n const value = source[key];\n if (typeof value === 'number' && Number.isFinite(value)) {\n metrics[key] = value;\n found = true;\n }\n }\n return found ? metrics : null;\n}\n\nfunction defaultMapResponse(data: unknown): Hcs25AcpMetrics | null {\n if (typeof data !== 'object' || data === null) {\n return null;\n }\n const root = data as Record<string, unknown>;\n return (\n pickMetrics(root.metrics) ?? pickMetrics(root.agent) ?? pickMetrics(root)\n );\n}\n\nfunction resolveAgentAddress(subject: Hcs25Subject): string | null {\n const metadata = subject.metadata ?? {};\n for (const key of ['nativeId', 'address', 'uid']) {\n const value = readString(metadata, key);\n if (value) {\n return value;\n }\n }\n return null;\n}\n\n/**\n * Creates the `acp` signal adapter: fetches marketplace-native recent\n * performance metrics for ACP/Virtuals-style agents and stores them under\n * `metadata.metrics` (with `successRate`/`successfulJobCount` top-level\n * fallbacks per the signal catalog).\n */\nexport function createAcpSignalAdapter(\n options: Hcs25AcpSignalAdapterOptions,\n): Hcs25SignalAdapter {\n const mapResponse = options.mapResponse ?? defaultMapResponse;\n\n const collect = async (\n subject: Hcs25Subject,\n context: Hcs25CollectContext,\n ): Promise<Hcs25SignalAdapterResult[]> => {\n const now = context.now.toISOString();\n const address = resolveAgentAddress(subject) ?? subject.id;\n const url =\n typeof options.endpoint === 'function'\n ? options.endpoint(subject)\n : options.endpoint\n .replace('{address}', encodeURIComponent(address))\n .replace('{nativeId}', encodeURIComponent(address));\n\n if (!url) {\n return [{ signalId: 'acp.metrics', status: 'missing' }];\n }\n\n try {\n const data = await requestJson(url, {\n fetch: context.fetch,\n timeoutMs: context.timeoutMs,\n signal: context.signal,\n });\n const metrics = mapResponse(data);\n if (!metrics) {\n return [{ signalId: 'acp.metrics', status: 'missing' }];\n }\n\n const metricsValues: Record<string, Hcs25JsonValue> = {};\n for (const key of METRIC_KEYS) {\n const value = metrics[key];\n if (value !== undefined) {\n metricsValues[key] = value;\n }\n }\n const rootValues: Record<string, Hcs25JsonValue> = {};\n if (metrics.successRate !== undefined) {\n rootValues.successRate = metrics.successRate;\n }\n if (metrics.successfulJobCount !== undefined) {\n rootValues.successfulJobCount = metrics.successfulJobCount;\n }\n\n return [\n {\n signalId: 'acp.metrics',\n status: 'ok',\n value: metrics.successRate ?? null,\n fields: [\n { scope: 'metrics', values: metricsValues },\n { scope: 'root', values: rootValues },\n ],\n provenance: {\n source: 'acp',\n sourceUrl: url,\n subjectId: address,\n fetchedAt: now,\n },\n },\n ];\n } catch (error) {\n if (error instanceof Hcs25CollectorHttpError && error.status === 404) {\n return [{ signalId: 'acp.metrics', status: 'missing' }];\n }\n return [\n {\n signalId: 'acp.metrics',\n status: isTimeoutError(error) ? 'timeout' : 'error',\n },\n ];\n }\n };\n\n return {\n id: 'acp',\n produces: ['acp.metrics'],\n timeoutMs: options.timeoutMs,\n includeRegistries: options.includeRegistries ?? DEFAULT_INCLUDED_REGISTRIES,\n excludeRegistries: options.excludeRegistries,\n appliesTo: options.appliesTo,\n collect,\n };\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"standards-sdk.es135.js","sources":["../../src/hcs-25/collectors/x402-onchain.ts"],"sourcesContent":["import {\n createPublicClient,\n fallback,\n formatUnits,\n getAddress,\n http as httpTransport,\n type Address,\n type Chain,\n} from 'viem';\nimport { base, baseSepolia } from 'viem/chains';\n\n/**\n * Aggregated on-chain x402 payment usage for a `payTo` address.\n */\nexport interface Hcs25X402UsageSummary {\n volume7dUsd: number;\n volume24hUsd: number;\n inboundTrades7d: number;\n outboundTrades7d: number;\n}\n\n/**\n * One UTC day of scanned payment activity.\n */\nexport interface Hcs25X402UsageDailyBucket {\n /** UTC day, `YYYY-MM-DD`. */\n day: string;\n inboundTrades: number;\n outboundTrades: number;\n volumeUsd: number;\n}\n\n/**\n * Incremental scan checkpoint. Stored on the subject record\n * (`metadata.x402UsageCursor`) so subsequent refreshes only scan blocks\n * produced since the last run.\n */\nexport interface Hcs25X402UsageCursor {\n network: string;\n asset: string;\n payTo: string;\n lastScannedBlock: number;\n daily: Hcs25X402UsageDailyBucket[];\n}\n\nexport interface Hcs25X402UsageStateParams {\n /** x402 network identifier (`base` or `base-sepolia`). */\n network: unknown;\n /** Payment asset contract address (e.g. USDC). */\n asset: unknown;\n /** Recipient address whose inbound/outbound transfers are scanned. */\n payTo: unknown;\n /** Previously stored `x402UsageCursor` for incremental refresh. */\n cursor?: unknown;\n}\n\nexport interface Hcs25X402OnchainUsageOptions {\n /** Rolling window in days (1–14). Default 7. */\n days?: number;\n /** Cache TTL applied to per-block/per-contract lookups. Default 30 min. */\n ttlMs?: number;\n /** Retries per RPC call with exponential backoff. Default 2. */\n maxRetries?: number;\n /** getLogs range chunk size in blocks. Default 50000. */\n chunkSizeBlocks?: number;\n /** RPC endpoint overrides per network (replaces the built-in lists). */\n rpcUrls?: Partial<Record<string, readonly string[]>>;\n}\n\nexport interface Hcs25X402UsageStateResult {\n summary: Hcs25X402UsageSummary | null;\n cursor: Hcs25X402UsageCursor | null;\n}\n\ntype X402Network = 'base' | 'base-sepolia';\n\ninterface NetworkConfig {\n chain: Chain;\n rpcUrls: string[];\n usdcAddresses: Set<string>;\n}\n\nconst TRANSFER_EVENT_ABI = [\n {\n type: 'event',\n name: 'Transfer',\n inputs: [\n { indexed: true, name: 'from', type: 'address' },\n { indexed: true, name: 'to', type: 'address' },\n { indexed: false, name: 'value', type: 'uint256' },\n ],\n anonymous: false,\n },\n] as const;\n\nconst DECIMALS_ABI = [\n {\n type: 'function',\n name: 'decimals',\n inputs: [],\n outputs: [{ name: '', type: 'uint8' }],\n stateMutability: 'view',\n },\n] as const;\n\nconst NETWORK_CONFIG: Record<X402Network, NetworkConfig> = {\n base: {\n chain: base,\n rpcUrls: [\n 'https://mainnet.base.org',\n 'https://1rpc.io/base',\n 'https://base.llamarpc.com',\n 'https://base-rpc.publicnode.com',\n ],\n usdcAddresses: new Set(['0x833589fcd6edb6e08f4c7c32d4f71b54bda02913']),\n },\n 'base-sepolia': {\n chain: baseSepolia,\n rpcUrls: [\n 'https://sepolia.base.org',\n 'https://1rpc.io/base-sepolia',\n 'https://base-sepolia-rpc.publicnode.com',\n ],\n usdcAddresses: new Set(['0x036cbd53842c5426634e7929541ec2318f3dcf7e']),\n },\n};\n\nconst toNetwork = (value: unknown): X402Network | null => {\n if (typeof value !== 'string') {\n return null;\n }\n const normalized = value.trim().toLowerCase();\n if (normalized === 'base') {\n return 'base';\n }\n if (normalized === 'base-sepolia' || normalized === 'basesepolia') {\n return 'base-sepolia';\n }\n return null;\n};\n\nconst sleep = (ms: number): Promise<void> =>\n new Promise(resolve => setTimeout(resolve, ms));\n\nconst round6 = (value: number): number => Math.round(value * 1e6) / 1e6;\n\nconst toDayStringUtc = (timestampMs: number): string => {\n const date = new Date(timestampMs);\n return `${date.getUTCFullYear()}-${String(date.getUTCMonth() + 1).padStart(2, '0')}-${String(\n date.getUTCDate(),\n ).padStart(2, '0')}`;\n};\n\ninterface CachedValue<T> {\n value: T;\n expiresAt: number;\n}\n\nconst decimalsCache = new Map<string, CachedValue<number>>();\nconst fromBlockCache = new Map<string, CachedValue<bigint>>();\nconst blockDayCache = new Map<string, CachedValue<string>>();\n\n/**\n * Minimal structural view of a viem `PublicClient` — keeps the scanner's\n * type surface shallow (viem's full client type is too deep for tsc) and\n * makes the client mockable in tests.\n */\nexport interface X402PublicClient {\n chain?: { id?: number } | undefined;\n getBlockNumber(): Promise<bigint>;\n getBlock(params: { blockNumber: bigint }): Promise<{ timestamp: bigint }>;\n getLogs(params: {\n address: Address;\n event: unknown;\n args?: { from?: Address; to?: Address };\n fromBlock: bigint;\n toBlock: bigint;\n }): Promise<\n readonly { blockNumber: bigint | null; args: { value?: bigint } }[]\n >;\n readContract(params: {\n address: Address;\n abi: readonly unknown[];\n functionName: string;\n }): Promise<unknown>;\n}\n\ntype PublicClient = X402PublicClient;\n\nasync function withRetries<T>(\n operation: () => Promise<T>,\n maxRetries: number,\n baseDelayMs: number,\n): Promise<T> {\n let lastError: unknown;\n for (let attempt = 0; attempt <= maxRetries; attempt += 1) {\n try {\n return await operation();\n } catch (error) {\n lastError = error;\n if (attempt >= maxRetries) {\n throw error;\n }\n await sleep(baseDelayMs * 2 ** attempt);\n }\n }\n throw lastError;\n}\n\nconst keepRollingDays = (\n buckets: Hcs25X402UsageDailyBucket[],\n keepDays: number,\n): Hcs25X402UsageDailyBucket[] => {\n const keep = new Set<string>();\n const today = toDayStringUtc(Date.now());\n const [year, month, day] = today.split('-').map(v => Number.parseInt(v, 10));\n const baseUtc = Date.UTC(year, month - 1, day);\n for (let offset = 0; offset < keepDays; offset += 1) {\n keep.add(toDayStringUtc(baseUtc - offset * 24 * 60 * 60 * 1000));\n }\n return buckets\n .filter(bucket => keep.has(bucket.day))\n .sort((a, b) => (a.day < b.day ? -1 : a.day > b.day ? 1 : 0))\n .slice(-keepDays);\n};\n\nfunction parseCursor(value: unknown): Hcs25X402UsageCursor | null {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return null;\n }\n const cursor = value as Partial<Hcs25X402UsageCursor>;\n if (\n typeof cursor.asset !== 'string' ||\n typeof cursor.payTo !== 'string' ||\n typeof cursor.lastScannedBlock !== 'number' ||\n !Number.isFinite(cursor.lastScannedBlock) ||\n cursor.lastScannedBlock < 0 ||\n !Array.isArray(cursor.daily)\n ) {\n return null;\n }\n const network = toNetwork(cursor.network);\n if (!network) {\n return null;\n }\n const daily = cursor.daily\n .filter(\n (entry): entry is Hcs25X402UsageDailyBucket =>\n !!entry &&\n typeof entry === 'object' &&\n typeof entry.day === 'string' &&\n typeof entry.inboundTrades === 'number' &&\n Number.isFinite(entry.inboundTrades) &&\n typeof entry.outboundTrades === 'number' &&\n Number.isFinite(entry.outboundTrades) &&\n typeof entry.volumeUsd === 'number' &&\n Number.isFinite(entry.volumeUsd),\n )\n .map(entry => ({\n day: entry.day,\n inboundTrades: Math.max(0, Math.floor(entry.inboundTrades)),\n outboundTrades: Math.max(0, Math.floor(entry.outboundTrades)),\n volumeUsd: round6(Math.max(0, entry.volumeUsd)),\n }));\n return {\n network,\n asset: cursor.asset,\n payTo: cursor.payTo,\n lastScannedBlock: Math.floor(cursor.lastScannedBlock),\n daily,\n };\n}\n\nasync function resolveDecimals(params: {\n client: PublicClient;\n asset: Address;\n isUsdc: boolean;\n cacheTtlMs: number;\n maxRetries: number;\n}): Promise<number> {\n if (params.isUsdc) {\n return 6;\n }\n const cacheKey = `${params.client.chain?.id ?? 'unknown'}:${params.asset}:decimals`;\n const cached = decimalsCache.get(cacheKey);\n if (cached && cached.expiresAt > Date.now()) {\n return cached.value;\n }\n const decimals = await withRetries(\n async () => {\n const value = await params.client.readContract({\n address: params.asset,\n abi: DECIMALS_ABI,\n functionName: 'decimals',\n });\n return Number(value);\n },\n params.maxRetries,\n 200,\n );\n const normalized = Number.isFinite(decimals)\n ? Math.max(0, Math.min(255, Math.floor(decimals)))\n : 18;\n decimalsCache.set(cacheKey, {\n value: normalized,\n expiresAt: Date.now() + params.cacheTtlMs,\n });\n return normalized;\n}\n\nasync function estimateFromBlockByTimestamp(params: {\n client: PublicClient;\n targetTimestampSec: bigint;\n cacheKey: string;\n cacheTtlMs: number;\n maxRetries: number;\n}): Promise<bigint> {\n const cached = fromBlockCache.get(params.cacheKey);\n if (cached && cached.expiresAt > Date.now()) {\n return cached.value;\n }\n\n const latestBlockNumber = await withRetries(\n () => params.client.getBlockNumber(),\n params.maxRetries,\n 200,\n );\n const latest = await withRetries(\n () => params.client.getBlock({ blockNumber: latestBlockNumber }),\n params.maxRetries,\n 200,\n );\n\n const probeDelta = 5000n;\n const probeBlockNumber =\n latestBlockNumber > probeDelta ? latestBlockNumber - probeDelta : 0n;\n const probe = await withRetries(\n () => params.client.getBlock({ blockNumber: probeBlockNumber }),\n params.maxRetries,\n 200,\n );\n\n const latestTs = BigInt(latest.timestamp);\n const probeTs = BigInt(probe.timestamp);\n const deltaSeconds = latestTs > probeTs ? latestTs - probeTs : 0n;\n const secondsPerBlock =\n deltaSeconds > 0n\n ? Number(deltaSeconds) /\n Number(latestBlockNumber - probeBlockNumber || 1n)\n : 2;\n\n const secondsAgo =\n latestTs > params.targetTimestampSec\n ? latestTs - params.targetTimestampSec\n : 0n;\n const approxBlocksAgo =\n secondsPerBlock > 0\n ? BigInt(Math.ceil(Number(secondsAgo) / secondsPerBlock))\n : 0n;\n const margin = 1000n;\n let low =\n latestBlockNumber > approxBlocksAgo + margin\n ? latestBlockNumber - approxBlocksAgo - margin\n : 0n;\n let high = latestBlockNumber;\n while (low < high) {\n const mid = (low + high) / 2n;\n const block = await withRetries(\n () => params.client.getBlock({ blockNumber: mid }),\n params.maxRetries,\n 200,\n );\n if (BigInt(block.timestamp) >= params.targetTimestampSec) {\n high = mid;\n } else {\n low = mid + 1n;\n }\n }\n\n fromBlockCache.set(params.cacheKey, {\n value: low,\n expiresAt: Date.now() + params.cacheTtlMs,\n });\n return low;\n}\n\nasync function resolveBlockDay(params: {\n client: PublicClient;\n blockNumber: bigint;\n cacheTtlMs: number;\n maxRetries: number;\n}): Promise<string> {\n const cacheKey = `${params.client.chain?.id ?? 'unknown'}:${params.blockNumber.toString()}:day`;\n const cached = blockDayCache.get(cacheKey);\n if (cached && cached.expiresAt > Date.now()) {\n return cached.value;\n }\n const block = await withRetries(\n () => params.client.getBlock({ blockNumber: params.blockNumber }),\n params.maxRetries,\n 200,\n );\n const day = toDayStringUtc(Number(block.timestamp) * 1000);\n blockDayCache.set(cacheKey, {\n value: day,\n expiresAt: Date.now() + params.cacheTtlMs,\n });\n return day;\n}\n\n/**\n * Scans ERC-20 `Transfer` events to/from `payTo` on the configured x402\n * network and aggregates daily inbound/outbound trade counts and USD\n * volume, resuming from a stored cursor when possible.\n *\n * Ported from Registry Broker's `fetchX402OnchainUsageState`: chunked\n * `getLogs` ranges, per-block day resolution caching, binary-search window\n * estimation, and retry/backoff on RPC failures.\n */\nexport async function fetchX402OnchainUsageState(\n params: Hcs25X402UsageStateParams,\n options: Hcs25X402OnchainUsageOptions = {},\n): Promise<Hcs25X402UsageStateResult> {\n const network = toNetwork(params.network);\n if (!network) {\n return { summary: null, cursor: null };\n }\n const config = NETWORK_CONFIG[network];\n\n if (typeof params.asset !== 'string' || typeof params.payTo !== 'string') {\n return { summary: null, cursor: null };\n }\n let asset: Address;\n let payTo: Address;\n try {\n asset = getAddress(params.asset.trim());\n payTo = getAddress(params.payTo.trim());\n } catch {\n return { summary: null, cursor: null };\n }\n\n const now = Date.now();\n const ttlMs =\n typeof options.ttlMs === 'number' &&\n Number.isFinite(options.ttlMs) &&\n options.ttlMs > 0\n ? options.ttlMs\n : 30 * 60 * 1000;\n const maxRetries =\n typeof options.maxRetries === 'number' &&\n Number.isFinite(options.maxRetries) &&\n options.maxRetries >= 0\n ? Math.floor(options.maxRetries)\n : 2;\n const chunkSizeBlocks =\n typeof options.chunkSizeBlocks === 'number' &&\n Number.isFinite(options.chunkSizeBlocks) &&\n options.chunkSizeBlocks > 0\n ? BigInt(Math.floor(options.chunkSizeBlocks))\n : 50_000n;\n\n const rpcUrls = options.rpcUrls?.[network]?.length\n ? [...options.rpcUrls[network]!]\n : config.rpcUrls;\n const transports = rpcUrls.map(url => httpTransport(url));\n if (transports.length === 0) {\n return { summary: null, cursor: null };\n }\n const client = createPublicClient({\n chain: config.chain,\n transport: transports.length > 1 ? fallback(transports) : transports[0],\n }) as unknown as PublicClient;\n\n const assetLower = asset.toLowerCase();\n const payToLower = payTo.toLowerCase();\n const decimals = await resolveDecimals({\n client,\n asset,\n isUsdc: config.usdcAddresses.has(assetLower),\n cacheTtlMs: ttlMs,\n maxRetries,\n });\n\n const days =\n typeof options.days === 'number' &&\n Number.isFinite(options.days) &&\n options.days > 0\n ? Math.min(14, Math.max(1, Math.floor(options.days)))\n : 7;\n\n const targetTimestampSec = BigInt(\n Math.floor((now - days * 24 * 60 * 60 * 1000) / 1000),\n );\n const windowFromBlock = await estimateFromBlockByTimestamp({\n client,\n targetTimestampSec,\n cacheKey: `${network}:${assetLower}:${payToLower}:fromBlock:${days}`,\n cacheTtlMs: ttlMs,\n maxRetries,\n });\n const toBlock = await client.getBlockNumber();\n\n const parsedCursor = parseCursor(params.cursor);\n const hasMatchingCursor =\n parsedCursor !== null &&\n parsedCursor.network === network &&\n parsedCursor.asset.toLowerCase() === assetLower &&\n parsedCursor.payTo.toLowerCase() === payToLower;\n\n const cursorFromBlock =\n hasMatchingCursor && parsedCursor\n ? BigInt(Math.max(0, parsedCursor.lastScannedBlock + 1))\n : windowFromBlock;\n const fromBlock =\n cursorFromBlock < windowFromBlock ? windowFromBlock : cursorFromBlock;\n const shouldResync = !hasMatchingCursor || cursorFromBlock < windowFromBlock;\n\n const bucketsByDay = new Map<string, Hcs25X402UsageDailyBucket>();\n if (!shouldResync && parsedCursor) {\n for (const bucket of keepRollingDays(parsedCursor.daily, days)) {\n bucketsByDay.set(bucket.day, { ...bucket });\n }\n }\n const ensureBucket = (day: string): Hcs25X402UsageDailyBucket => {\n const existing = bucketsByDay.get(day);\n if (existing) {\n return existing;\n }\n const created: Hcs25X402UsageDailyBucket = {\n day,\n inboundTrades: 0,\n outboundTrades: 0,\n volumeUsd: 0,\n };\n bucketsByDay.set(day, created);\n return created;\n };\n\n const aggregateLogs = async (\n direction: 'inbound' | 'outbound',\n ): Promise<void> => {\n if (toBlock < fromBlock) {\n return;\n }\n for (let start = fromBlock; start <= toBlock; ) {\n const end =\n start + chunkSizeBlocks - 1n <= toBlock\n ? start + chunkSizeBlocks - 1n\n : toBlock;\n const args =\n direction === 'inbound'\n ? ({ to: payTo } as const)\n : ({ from: payTo } as const);\n const logs = await withRetries(\n () =>\n client.getLogs({\n address: asset,\n event: TRANSFER_EVENT_ABI[0],\n args,\n fromBlock: start,\n toBlock: end,\n }),\n maxRetries,\n 200,\n );\n for (const log of logs) {\n const blockNumber = log.blockNumber ?? null;\n if (!blockNumber) {\n continue;\n }\n const value = (log.args as { value?: bigint }).value ?? 0n;\n if (value <= 0n) {\n continue;\n }\n const day = await resolveBlockDay({\n client,\n blockNumber,\n cacheTtlMs: ttlMs,\n maxRetries,\n });\n const bucket = ensureBucket(day);\n if (direction === 'inbound') {\n bucket.inboundTrades += 1;\n } else {\n bucket.outboundTrades += 1;\n }\n const amount = Number.parseFloat(formatUnits(value, decimals));\n if (Number.isFinite(amount) && amount > 0) {\n bucket.volumeUsd = round6(bucket.volumeUsd + amount);\n }\n }\n start = end + 1n;\n }\n };\n\n await aggregateLogs('inbound');\n await aggregateLogs('outbound');\n\n const mergedDaily = keepRollingDays(Array.from(bucketsByDay.values()), days);\n const inboundTrades7d = mergedDaily.reduce(\n (sum, bucket) => sum + bucket.inboundTrades,\n 0,\n );\n const outboundTrades7d = mergedDaily.reduce(\n (sum, bucket) => sum + bucket.outboundTrades,\n 0,\n );\n const volume7dUsd = round6(\n mergedDaily.reduce((sum, bucket) => sum + bucket.volumeUsd, 0),\n );\n const today = toDayStringUtc(now);\n const volume24hUsd = round6(\n mergedDaily\n .filter(bucket => bucket.day === today)\n .reduce((sum, bucket) => sum + bucket.volumeUsd, 0),\n );\n\n const cursor: Hcs25X402UsageCursor = {\n network,\n asset: assetLower,\n payTo: payToLower,\n lastScannedBlock: Number(toBlock),\n daily: mergedDaily,\n };\n\n if (inboundTrades7d + outboundTrades7d <= 0) {\n return { summary: null, cursor };\n }\n\n return {\n summary: {\n volume7dUsd,\n volume24hUsd,\n inboundTrades7d,\n outboundTrades7d,\n },\n cursor,\n };\n}\n"],"names":["httpTransport"],"mappings":"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"}
|
|
@@ -1,246 +1,117 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import "./standards-sdk.
|
|
3
|
-
import "./standards-sdk.
|
|
4
|
-
import "./standards-sdk.
|
|
5
|
-
import "./standards-sdk.
|
|
6
|
-
import
|
|
1
|
+
import { readString } from "./standards-sdk.es201.js";
|
|
2
|
+
import "./standards-sdk.es184.js";
|
|
3
|
+
import "./standards-sdk.es198.js";
|
|
4
|
+
import "./standards-sdk.es199.js";
|
|
5
|
+
import "./standards-sdk.es200.js";
|
|
6
|
+
import "./standards-sdk.es183.js";
|
|
7
7
|
import { requestJson, Hcs25CollectorHttpError, isTimeoutError } from "./standards-sdk.es122.js";
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
readString(metadata, "address")
|
|
21
|
-
]) {
|
|
22
|
-
if (value && AGENTVERSE_ADDRESS_REGEX.test(value.trim())) {
|
|
23
|
-
return value.trim();
|
|
24
|
-
}
|
|
8
|
+
const DEFAULT_INCLUDED_REGISTRIES = ["virtuals-protocol"];
|
|
9
|
+
const METRIC_KEYS = [
|
|
10
|
+
"successRate",
|
|
11
|
+
"successfulJobCount",
|
|
12
|
+
"totalJobCount",
|
|
13
|
+
"volume",
|
|
14
|
+
"revenue",
|
|
15
|
+
"rating"
|
|
16
|
+
];
|
|
17
|
+
function pickMetrics(record) {
|
|
18
|
+
if (typeof record !== "object" || record === null) {
|
|
19
|
+
return null;
|
|
25
20
|
}
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
21
|
+
const source = record;
|
|
22
|
+
const metrics = {};
|
|
23
|
+
let found = false;
|
|
24
|
+
for (const key of METRIC_KEYS) {
|
|
25
|
+
const value = source[key];
|
|
26
|
+
if (typeof value === "number" && Number.isFinite(value)) {
|
|
27
|
+
metrics[key] = value;
|
|
28
|
+
found = true;
|
|
31
29
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
30
|
+
}
|
|
31
|
+
return found ? metrics : null;
|
|
32
|
+
}
|
|
33
|
+
function defaultMapResponse(data) {
|
|
34
|
+
if (typeof data !== "object" || data === null) {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
const root = data;
|
|
38
|
+
return pickMetrics(root.metrics) ?? pickMetrics(root.agent) ?? pickMetrics(root);
|
|
39
|
+
}
|
|
40
|
+
function resolveAgentAddress(subject) {
|
|
41
|
+
const metadata = subject.metadata ?? {};
|
|
42
|
+
for (const key of ["nativeId", "address", "uid"]) {
|
|
43
|
+
const value = readString(metadata, key);
|
|
44
|
+
if (value) {
|
|
45
|
+
return value;
|
|
35
46
|
}
|
|
36
47
|
}
|
|
37
48
|
return null;
|
|
38
49
|
}
|
|
39
|
-
function
|
|
40
|
-
|
|
41
|
-
}
|
|
42
|
-
function createAgentverseInsightsSignalAdapter(options = {}) {
|
|
43
|
-
const baseUrl = options.baseUrl ?? AGENTVERSE_API_BASE;
|
|
44
|
-
const fetchAgentStatus = options.fetchAgentStatus ?? true;
|
|
50
|
+
function createAcpSignalAdapter(options) {
|
|
51
|
+
const mapResponse = options.mapResponse ?? defaultMapResponse;
|
|
45
52
|
const collect = async (subject, context) => {
|
|
46
53
|
const now = context.now.toISOString();
|
|
47
|
-
const address = resolveAgentAddress(subject);
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
signalId: "agentverse.insights",
|
|
52
|
-
status: "missing",
|
|
53
|
-
fields: [
|
|
54
|
-
{
|
|
55
|
-
scope: "additional",
|
|
56
|
-
values: {
|
|
57
|
-
agentverseInsightsStatus: "missing",
|
|
58
|
-
agentverseInsightsUpdatedAt: now
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
]
|
|
62
|
-
}
|
|
63
|
-
];
|
|
54
|
+
const address = resolveAgentAddress(subject) ?? subject.id;
|
|
55
|
+
const url = typeof options.endpoint === "function" ? options.endpoint(subject) : options.endpoint.replace("{address}", encodeURIComponent(address)).replace("{nativeId}", encodeURIComponent(address));
|
|
56
|
+
if (!url) {
|
|
57
|
+
return [{ signalId: "acp.metrics", status: "missing" }];
|
|
64
58
|
}
|
|
65
|
-
|
|
66
|
-
const
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
);
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
return [
|
|
75
|
-
{
|
|
76
|
-
signalId: "agentverse.insights",
|
|
77
|
-
status: storedStatus === "ok" ? "ok" : "missing",
|
|
78
|
-
provenance: {
|
|
79
|
-
source: "agentverse",
|
|
80
|
-
subjectId: address,
|
|
81
|
-
fetchedAt: new Date(storedUpdatedMs).toISOString()
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
];
|
|
85
|
-
}
|
|
59
|
+
try {
|
|
60
|
+
const data = await requestJson(url, {
|
|
61
|
+
fetch: context.fetch,
|
|
62
|
+
timeoutMs: context.timeoutMs,
|
|
63
|
+
signal: context.signal
|
|
64
|
+
});
|
|
65
|
+
const metrics = mapResponse(data);
|
|
66
|
+
if (!metrics) {
|
|
67
|
+
return [{ signalId: "acp.metrics", status: "missing" }];
|
|
86
68
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
let insightsResult = { status: "missing" };
|
|
93
|
-
for (const contract of contractsToTry) {
|
|
94
|
-
const insightsUrl = `${baseUrl}/v1/search/analytics/insights/${encodeURIComponent(address)}?contract=${contract}`;
|
|
95
|
-
try {
|
|
96
|
-
const data = await requestJson(
|
|
97
|
-
insightsUrl,
|
|
98
|
-
{
|
|
99
|
-
fetch: context.fetch,
|
|
100
|
-
timeoutMs: context.timeoutMs,
|
|
101
|
-
signal: context.signal
|
|
102
|
-
}
|
|
103
|
-
);
|
|
104
|
-
const hasAnySignal = num(data.rating) !== null || num(data.readme_quality_score) !== null || num(data.readme_uniqueness_score) !== null || num(data.interactions_score) !== null || num(data.avg_response_time) !== null || (num(data.asi1_total_interactions) ?? 0) > 0 || (num(data.asi1_recent_interactions) ?? 0) > 0 || (num(data.verifier_total_interactions) ?? 0) > 0 || (num(data.verifier_recent_interactions) ?? 0) > 0;
|
|
105
|
-
if (!hasAnySignal) {
|
|
106
|
-
continue;
|
|
69
|
+
const metricsValues = {};
|
|
70
|
+
for (const key of METRIC_KEYS) {
|
|
71
|
+
const value = metrics[key];
|
|
72
|
+
if (value !== void 0) {
|
|
73
|
+
metricsValues[key] = value;
|
|
107
74
|
}
|
|
108
|
-
insightsResult = { data, contract, url: insightsUrl };
|
|
109
|
-
break;
|
|
110
|
-
} catch (error) {
|
|
111
|
-
if (error instanceof Hcs25CollectorHttpError && (error.status === 404 || error.status === 422)) {
|
|
112
|
-
continue;
|
|
113
|
-
}
|
|
114
|
-
insightsResult = {
|
|
115
|
-
status: isTimeoutError(error) ? "timeout" : "upstream-error"
|
|
116
|
-
};
|
|
117
|
-
break;
|
|
118
75
|
}
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
scope: "additional",
|
|
130
|
-
values: {
|
|
131
|
-
agentverseInsightsUpdatedAt: now,
|
|
132
|
-
agentverseInsightsStatus: "ok",
|
|
133
|
-
agentverseInsightsAddress: address,
|
|
134
|
-
agentverseInsightsContract: contract,
|
|
135
|
-
agentverseInsightsSources: [...INSIGHTS_SOURCES],
|
|
136
|
-
agentverseInsightsRating: num(data.rating),
|
|
137
|
-
agentverseInsightsReadmeQualityScore: num(
|
|
138
|
-
data.readme_quality_score
|
|
139
|
-
),
|
|
140
|
-
agentverseInsightsReadmeUniquenessScore: num(
|
|
141
|
-
data.readme_uniqueness_score
|
|
142
|
-
),
|
|
143
|
-
agentverseInsightsInteractionsScore: num(data.interactions_score),
|
|
144
|
-
agentverseInsightsAvgResponseTime: num(data.avg_response_time),
|
|
145
|
-
agentverseInsightsAsi1TotalInteractions: num(data.asi1_total_interactions) ?? 0,
|
|
146
|
-
agentverseInsightsAsi1TotalSuccessInteractions: num(data.asi1_total_success_interactions) ?? 0,
|
|
147
|
-
agentverseInsightsAsi1RecentInteractions: num(data.asi1_recent_interactions) ?? 0,
|
|
148
|
-
agentverseInsightsAsi1RecentSuccessInteractions: num(data.asi1_recent_success_interactions) ?? 0,
|
|
149
|
-
agentverseInsightsVerifierTotalInteractions: num(data.verifier_total_interactions) ?? 0,
|
|
150
|
-
agentverseInsightsVerifierTotalSuccessInteractions: num(data.verifier_total_success_interactions) ?? 0,
|
|
151
|
-
agentverseInsightsVerifierRecentInteractions: num(data.verifier_recent_interactions) ?? 0,
|
|
152
|
-
agentverseInsightsVerifierRecentSuccessInteractions: num(data.verifier_recent_success_interactions) ?? 0
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
],
|
|
156
|
-
provenance: {
|
|
157
|
-
source: "agentverse",
|
|
158
|
-
sourceUrl: url,
|
|
159
|
-
subjectId: address,
|
|
160
|
-
fetchedAt: now
|
|
161
|
-
}
|
|
162
|
-
});
|
|
163
|
-
} else {
|
|
164
|
-
const stored = insightsResult.status === "missing" ? "missing" : "upstream-error";
|
|
165
|
-
results.push({
|
|
166
|
-
signalId: "agentverse.insights",
|
|
167
|
-
status: insightsResult.status === "timeout" ? "timeout" : stored === "missing" ? "missing" : "error",
|
|
168
|
-
fields: [
|
|
169
|
-
{
|
|
170
|
-
scope: "additional",
|
|
171
|
-
values: {
|
|
172
|
-
agentverseInsightsUpdatedAt: now,
|
|
173
|
-
agentverseInsightsStatus: stored,
|
|
174
|
-
agentverseInsightsAddress: address,
|
|
175
|
-
agentverseInsightsSources: [...INSIGHTS_SOURCES]
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
],
|
|
179
|
-
provenance: {
|
|
180
|
-
source: "agentverse",
|
|
181
|
-
subjectId: address,
|
|
182
|
-
fetchedAt: now
|
|
183
|
-
}
|
|
184
|
-
});
|
|
185
|
-
}
|
|
186
|
-
if (fetchAgentStatus) {
|
|
187
|
-
const agentUrl = `${baseUrl}/v1/search/agents/${encodeURIComponent(address)}${contractParam ? `?contract=${contractParam}` : ""}`;
|
|
188
|
-
try {
|
|
189
|
-
const agent = await requestJson(agentUrl, {
|
|
190
|
-
fetch: context.fetch,
|
|
191
|
-
timeoutMs: context.timeoutMs,
|
|
192
|
-
signal: context.signal
|
|
193
|
-
});
|
|
194
|
-
sources.push("search-agent");
|
|
195
|
-
results.push({
|
|
196
|
-
signalId: "agentverse.agent_status",
|
|
76
|
+
const rootValues = {};
|
|
77
|
+
if (metrics.successRate !== void 0) {
|
|
78
|
+
rootValues.successRate = metrics.successRate;
|
|
79
|
+
}
|
|
80
|
+
if (metrics.successfulJobCount !== void 0) {
|
|
81
|
+
rootValues.successfulJobCount = metrics.successfulJobCount;
|
|
82
|
+
}
|
|
83
|
+
return [
|
|
84
|
+
{
|
|
85
|
+
signalId: "acp.metrics",
|
|
197
86
|
status: "ok",
|
|
198
|
-
value:
|
|
87
|
+
value: metrics.successRate ?? null,
|
|
199
88
|
fields: [
|
|
200
|
-
{
|
|
201
|
-
|
|
202
|
-
values: {
|
|
203
|
-
isOnline: agent.status === "active",
|
|
204
|
-
lastActiveAt: agent.last_updated ?? null
|
|
205
|
-
}
|
|
206
|
-
}
|
|
89
|
+
{ scope: "metrics", values: metricsValues },
|
|
90
|
+
{ scope: "root", values: rootValues }
|
|
207
91
|
],
|
|
208
92
|
provenance: {
|
|
209
|
-
source: "
|
|
210
|
-
sourceUrl:
|
|
93
|
+
source: "acp",
|
|
94
|
+
sourceUrl: url,
|
|
211
95
|
subjectId: address,
|
|
212
96
|
fetchedAt: now
|
|
213
97
|
}
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
});
|
|
98
|
+
}
|
|
99
|
+
];
|
|
100
|
+
} catch (error) {
|
|
101
|
+
if (error instanceof Hcs25CollectorHttpError && error.status === 404) {
|
|
102
|
+
return [{ signalId: "acp.metrics", status: "missing" }];
|
|
220
103
|
}
|
|
104
|
+
return [
|
|
105
|
+
{
|
|
106
|
+
signalId: "acp.metrics",
|
|
107
|
+
status: isTimeoutError(error) ? "timeout" : "error"
|
|
108
|
+
}
|
|
109
|
+
];
|
|
221
110
|
}
|
|
222
|
-
if (sources.length > 0) {
|
|
223
|
-
results.push({
|
|
224
|
-
signalId: "agentverse.sources",
|
|
225
|
-
status: "ok",
|
|
226
|
-
value: sources,
|
|
227
|
-
fields: [
|
|
228
|
-
{
|
|
229
|
-
scope: "additional",
|
|
230
|
-
values: { agentverseInsightsSources: sources }
|
|
231
|
-
}
|
|
232
|
-
]
|
|
233
|
-
});
|
|
234
|
-
}
|
|
235
|
-
return results;
|
|
236
111
|
};
|
|
237
112
|
return {
|
|
238
|
-
id: "
|
|
239
|
-
produces: [
|
|
240
|
-
"agentverse.insights",
|
|
241
|
-
"agentverse.agent_status",
|
|
242
|
-
"agentverse.sources"
|
|
243
|
-
],
|
|
113
|
+
id: "acp",
|
|
114
|
+
produces: ["acp.metrics"],
|
|
244
115
|
timeoutMs: options.timeoutMs,
|
|
245
116
|
includeRegistries: options.includeRegistries ?? DEFAULT_INCLUDED_REGISTRIES,
|
|
246
117
|
excludeRegistries: options.excludeRegistries,
|
|
@@ -249,6 +120,6 @@ function createAgentverseInsightsSignalAdapter(options = {}) {
|
|
|
249
120
|
};
|
|
250
121
|
}
|
|
251
122
|
export {
|
|
252
|
-
|
|
123
|
+
createAcpSignalAdapter
|
|
253
124
|
};
|
|
254
125
|
//# sourceMappingURL=standards-sdk.es136.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es136.js","sources":["../../src/hcs-25/collectors/agentverse.ts"],"sourcesContent":["import type { Hcs25JsonValue, Hcs25Subject } from '../types';\nimport { readString, readSubjectAdditional } from '../signals';\nimport { parseTimestampMs } from './freshness';\nimport { Hcs25CollectorHttpError, isTimeoutError, requestJson } from './http';\nimport type {\n Hcs25CollectContext,\n Hcs25SignalAdapter,\n Hcs25SignalAdapterResult,\n} from './types';\n\nconst AGENTVERSE_API_BASE = 'https://agentverse.ai';\nconst INSIGHTS_SOURCES = ['agentverse:insights:v1'];\nconst AGENTVERSE_ADDRESS_REGEX =\n /^agent1[qpzry9x8gf2tvdw0s3jn54khce6mua7l]{59}$/i;\n\n/**\n * Options for the AgentVerse insights signal adapter.\n */\nexport interface Hcs25AgentverseSignalAdapterOptions {\n /** AgentVerse API base URL. Default `https://agentverse.ai`. */\n baseUrl?: string;\n /**\n * Almanac contract network query hint. When omitted, production behavior\n * applies: `mainnet` is tried first and `testnet` is probed on\n * missing/empty payloads.\n */\n contract?: 'mainnet' | 'testnet';\n /**\n * Also fetch `GET /v1/search/agents/{address}` and store its operational\n * status as `metrics.isOnline` / `metrics.lastActiveAt`. Default true.\n */\n fetchAgentStatus?: boolean;\n /** Refresh interval for stored `ok` state in ms. Default 6 hours. */\n ttlMs?: number;\n /** Refresh interval after a failure state in ms. Default 1 hour. */\n failureTtlMs?: number;\n timeoutMs?: number;\n includeRegistries?: readonly string[];\n excludeRegistries?: readonly string[];\n appliesTo?: (subject: Hcs25Subject) => boolean;\n}\n\nconst DEFAULT_INCLUDED_REGISTRIES: readonly string[] = ['agentverse', 'uagent'];\n\ninterface AgentverseInsightsResponse {\n address?: string;\n rating?: number | null;\n contract?: string;\n readme_quality_score?: number | null;\n readme_uniqueness_score?: number | null;\n interactions_score?: number | null;\n avg_response_time?: number | null;\n recent_uptime?: number | null;\n asi1_total_interactions?: number | null;\n asi1_total_success_interactions?: number | null;\n asi1_recent_interactions?: number | null;\n asi1_recent_success_interactions?: number | null;\n verifier_total_interactions?: number | null;\n verifier_total_success_interactions?: number | null;\n verifier_recent_interactions?: number | null;\n verifier_recent_success_interactions?: number | null;\n}\n\ninterface AgentverseAgentResponse {\n status?: string;\n last_updated?: string;\n}\n\nfunction resolveAgentAddress(subject: Hcs25Subject): string | null {\n const additional = readSubjectAdditional(subject);\n const metadata = subject.metadata ?? {};\n for (const value of [\n readString(additional, 'agentverseInsightsAddress'),\n subject.id,\n readString(metadata, 'nativeId'),\n readString(metadata, 'uid'),\n readString(metadata, 'address'),\n ]) {\n if (value && AGENTVERSE_ADDRESS_REGEX.test(value.trim())) {\n return value.trim();\n }\n }\n const uaidFull = readString(metadata, 'uaidFull');\n if (uaidFull) {\n const nativeId = uaidFull\n .match(/(?:^|;)nativeId=([^;]+)(?:;|$)/i)?.[1]\n ?.trim();\n if (nativeId && AGENTVERSE_ADDRESS_REGEX.test(nativeId)) {\n return nativeId;\n }\n const uid = uaidFull.match(/(?:^|;)uid=([^;]+)(?:;|$)/i)?.[1]?.trim();\n if (uid && AGENTVERSE_ADDRESS_REGEX.test(uid)) {\n return uid;\n }\n }\n return null;\n}\n\nfunction num(value: number | null | undefined): number | null {\n return typeof value === 'number' && Number.isFinite(value) ? value : null;\n}\n\n/**\n * Creates the `agentverse-insights` signal adapter: fetches the AgentVerse\n * insights endpoint for the subject's agent address and stores the\n * `agentverseInsights*` field family (rating, quality proxies, interaction\n * and verifier counters) under `metadata.additional`. Optionally also reads\n * the agent record for online status.\n */\nexport function createAgentverseInsightsSignalAdapter(\n options: Hcs25AgentverseSignalAdapterOptions = {},\n): Hcs25SignalAdapter {\n const baseUrl = options.baseUrl ?? AGENTVERSE_API_BASE;\n const fetchAgentStatus = options.fetchAgentStatus ?? true;\n\n const collect = async (\n subject: Hcs25Subject,\n context: Hcs25CollectContext,\n ): Promise<Hcs25SignalAdapterResult[]> => {\n const now = context.now.toISOString();\n const address = resolveAgentAddress(subject);\n if (!address) {\n return [\n {\n signalId: 'agentverse.insights',\n status: 'missing',\n fields: [\n {\n scope: 'additional',\n values: {\n agentverseInsightsStatus: 'missing',\n agentverseInsightsUpdatedAt: now,\n },\n },\n ],\n },\n ];\n }\n\n // Freshness gate (production TTL/failure-TTL semantics).\n if (!context.force) {\n const additional = readSubjectAdditional(subject);\n const storedStatus = readString(additional, 'agentverseInsightsStatus');\n const storedUpdatedMs = parseTimestampMs(\n (additional as Record<string, Hcs25JsonValue>)\n .agentverseInsightsUpdatedAt,\n );\n if (storedStatus && storedUpdatedMs !== null) {\n const ttl =\n storedStatus === 'ok'\n ? (options.ttlMs ?? 6 * 60 * 60 * 1000)\n : (options.failureTtlMs ?? 60 * 60 * 1000);\n if (context.now.getTime() - storedUpdatedMs < ttl) {\n return [\n {\n signalId: 'agentverse.insights',\n status: storedStatus === 'ok' ? 'ok' : 'missing',\n provenance: {\n source: 'agentverse',\n subjectId: address,\n fetchedAt: new Date(storedUpdatedMs).toISOString(),\n },\n },\n ];\n }\n }\n }\n\n const results: Hcs25SignalAdapterResult[] = [];\n const sources: string[] = [];\n\n const contractParam =\n options.contract ??\n readString(readSubjectAdditional(subject), 'agentverseInsightsContract');\n // Production behavior: mainnet first, then testnet on 404/422 or an\n // all-empty payload; non-missing HTTP failures are upstream-error.\n const contractsToTry: Array<'mainnet' | 'testnet'> =\n contractParam === 'mainnet' || contractParam === 'testnet'\n ? [contractParam]\n : ['mainnet', 'testnet'];\n\n let insightsResult:\n | {\n data: AgentverseInsightsResponse;\n contract: 'mainnet' | 'testnet';\n url: string;\n }\n | { status: 'missing' | 'upstream-error' }\n | { status: 'timeout' | 'error' } = { status: 'missing' };\n\n for (const contract of contractsToTry) {\n const insightsUrl = `${baseUrl}/v1/search/analytics/insights/${encodeURIComponent(address)}?contract=${contract}`;\n try {\n const data = await requestJson<AgentverseInsightsResponse>(\n insightsUrl,\n {\n fetch: context.fetch,\n timeoutMs: context.timeoutMs,\n signal: context.signal,\n },\n );\n const hasAnySignal =\n num(data.rating) !== null ||\n num(data.readme_quality_score) !== null ||\n num(data.readme_uniqueness_score) !== null ||\n num(data.interactions_score) !== null ||\n num(data.avg_response_time) !== null ||\n (num(data.asi1_total_interactions) ?? 0) > 0 ||\n (num(data.asi1_recent_interactions) ?? 0) > 0 ||\n (num(data.verifier_total_interactions) ?? 0) > 0 ||\n (num(data.verifier_recent_interactions) ?? 0) > 0;\n if (!hasAnySignal) {\n continue;\n }\n insightsResult = { data, contract, url: insightsUrl };\n break;\n } catch (error) {\n if (\n error instanceof Hcs25CollectorHttpError &&\n (error.status === 404 || error.status === 422)\n ) {\n continue;\n }\n insightsResult = {\n status: isTimeoutError(error) ? 'timeout' : 'upstream-error',\n };\n break;\n }\n }\n\n if ('data' in insightsResult) {\n const { data, contract, url } = insightsResult;\n sources.push('insights');\n results.push({\n signalId: 'agentverse.insights',\n status: 'ok',\n value: num(data.rating),\n fields: [\n {\n scope: 'additional',\n values: {\n agentverseInsightsUpdatedAt: now,\n agentverseInsightsStatus: 'ok',\n agentverseInsightsAddress: address,\n agentverseInsightsContract: contract,\n agentverseInsightsSources: [...INSIGHTS_SOURCES],\n agentverseInsightsRating: num(data.rating),\n agentverseInsightsReadmeQualityScore: num(\n data.readme_quality_score,\n ),\n agentverseInsightsReadmeUniquenessScore: num(\n data.readme_uniqueness_score,\n ),\n agentverseInsightsInteractionsScore: num(data.interactions_score),\n agentverseInsightsAvgResponseTime: num(data.avg_response_time),\n agentverseInsightsAsi1TotalInteractions:\n num(data.asi1_total_interactions) ?? 0,\n agentverseInsightsAsi1TotalSuccessInteractions:\n num(data.asi1_total_success_interactions) ?? 0,\n agentverseInsightsAsi1RecentInteractions:\n num(data.asi1_recent_interactions) ?? 0,\n agentverseInsightsAsi1RecentSuccessInteractions:\n num(data.asi1_recent_success_interactions) ?? 0,\n agentverseInsightsVerifierTotalInteractions:\n num(data.verifier_total_interactions) ?? 0,\n agentverseInsightsVerifierTotalSuccessInteractions:\n num(data.verifier_total_success_interactions) ?? 0,\n agentverseInsightsVerifierRecentInteractions:\n num(data.verifier_recent_interactions) ?? 0,\n agentverseInsightsVerifierRecentSuccessInteractions:\n num(data.verifier_recent_success_interactions) ?? 0,\n },\n },\n ],\n provenance: {\n source: 'agentverse',\n sourceUrl: url,\n subjectId: address,\n fetchedAt: now,\n },\n });\n } else {\n const stored =\n insightsResult.status === 'missing' ? 'missing' : 'upstream-error';\n results.push({\n signalId: 'agentverse.insights',\n status:\n insightsResult.status === 'timeout'\n ? 'timeout'\n : stored === 'missing'\n ? 'missing'\n : 'error',\n fields: [\n {\n scope: 'additional',\n values: {\n agentverseInsightsUpdatedAt: now,\n agentverseInsightsStatus: stored,\n agentverseInsightsAddress: address,\n agentverseInsightsSources: [...INSIGHTS_SOURCES],\n },\n },\n ],\n provenance: {\n source: 'agentverse',\n subjectId: address,\n fetchedAt: now,\n },\n });\n }\n\n if (fetchAgentStatus) {\n const agentUrl = `${baseUrl}/v1/search/agents/${encodeURIComponent(address)}${contractParam ? `?contract=${contractParam}` : ''}`;\n try {\n const agent = await requestJson<AgentverseAgentResponse>(agentUrl, {\n fetch: context.fetch,\n timeoutMs: context.timeoutMs,\n signal: context.signal,\n });\n sources.push('search-agent');\n results.push({\n signalId: 'agentverse.agent_status',\n status: 'ok',\n value: agent.status ?? null,\n fields: [\n {\n scope: 'metrics',\n values: {\n isOnline: agent.status === 'active',\n lastActiveAt: agent.last_updated ?? null,\n },\n },\n ],\n provenance: {\n source: 'agentverse',\n sourceUrl: agentUrl,\n subjectId: address,\n fetchedAt: now,\n },\n });\n } catch {\n results.push({\n signalId: 'agentverse.agent_status',\n status: 'missing',\n });\n }\n }\n\n if (sources.length > 0) {\n results.push({\n signalId: 'agentverse.sources',\n status: 'ok',\n value: sources,\n fields: [\n {\n scope: 'additional',\n values: { agentverseInsightsSources: sources },\n },\n ],\n });\n }\n\n return results;\n };\n\n return {\n id: 'agentverse-insights',\n produces: [\n 'agentverse.insights',\n 'agentverse.agent_status',\n 'agentverse.sources',\n ],\n timeoutMs: options.timeoutMs,\n includeRegistries: options.includeRegistries ?? DEFAULT_INCLUDED_REGISTRIES,\n excludeRegistries: options.excludeRegistries,\n appliesTo: options.appliesTo,\n collect,\n };\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"standards-sdk.es136.js","sources":["../../src/hcs-25/collectors/acp.ts"],"sourcesContent":["import type { Hcs25JsonValue, Hcs25Subject } from '../types';\nimport { readString } from '../signals';\nimport { Hcs25CollectorHttpError, isTimeoutError, requestJson } from './http';\nimport type {\n Hcs25CollectContext,\n Hcs25SignalAdapter,\n Hcs25SignalAdapterResult,\n} from './types';\n\n/**\n * Marketplace-native performance metrics consumed by the `acp` scoring\n * adapter (stored under `metadata.metrics` with top-level fallbacks).\n */\nexport interface Hcs25AcpMetrics {\n successRate?: number;\n successfulJobCount?: number;\n totalJobCount?: number;\n volume?: number;\n revenue?: number;\n rating?: number;\n}\n\n/**\n * Options for the ACP/Virtuals signal adapter.\n */\nexport interface Hcs25AcpSignalAdapterOptions {\n /**\n * Marketplace endpoint: a URL template supporting `{address}` /\n * `{nativeId}` placeholders, or a function returning the URL (null =\n * not listed in the marketplace).\n */\n endpoint: string | ((subject: Hcs25Subject) => string | null);\n /**\n * Maps the marketplace response JSON to normalized metrics. Default reads\n * the metric keys from the payload root, `.metrics`, or `.agent`.\n */\n mapResponse?: (data: unknown) => Hcs25AcpMetrics | null;\n timeoutMs?: number;\n includeRegistries?: readonly string[];\n excludeRegistries?: readonly string[];\n appliesTo?: (subject: Hcs25Subject) => boolean;\n}\n\nconst DEFAULT_INCLUDED_REGISTRIES: readonly string[] = ['virtuals-protocol'];\n\nconst METRIC_KEYS = [\n 'successRate',\n 'successfulJobCount',\n 'totalJobCount',\n 'volume',\n 'revenue',\n 'rating',\n] as const;\n\nfunction pickMetrics(record: unknown): Hcs25AcpMetrics | null {\n if (typeof record !== 'object' || record === null) {\n return null;\n }\n const source = record as Record<string, unknown>;\n const metrics: Hcs25AcpMetrics = {};\n let found = false;\n for (const key of METRIC_KEYS) {\n const value = source[key];\n if (typeof value === 'number' && Number.isFinite(value)) {\n metrics[key] = value;\n found = true;\n }\n }\n return found ? metrics : null;\n}\n\nfunction defaultMapResponse(data: unknown): Hcs25AcpMetrics | null {\n if (typeof data !== 'object' || data === null) {\n return null;\n }\n const root = data as Record<string, unknown>;\n return (\n pickMetrics(root.metrics) ?? pickMetrics(root.agent) ?? pickMetrics(root)\n );\n}\n\nfunction resolveAgentAddress(subject: Hcs25Subject): string | null {\n const metadata = subject.metadata ?? {};\n for (const key of ['nativeId', 'address', 'uid']) {\n const value = readString(metadata, key);\n if (value) {\n return value;\n }\n }\n return null;\n}\n\n/**\n * Creates the `acp` signal adapter: fetches marketplace-native recent\n * performance metrics for ACP/Virtuals-style agents and stores them under\n * `metadata.metrics` (with `successRate`/`successfulJobCount` top-level\n * fallbacks per the signal catalog).\n */\nexport function createAcpSignalAdapter(\n options: Hcs25AcpSignalAdapterOptions,\n): Hcs25SignalAdapter {\n const mapResponse = options.mapResponse ?? defaultMapResponse;\n\n const collect = async (\n subject: Hcs25Subject,\n context: Hcs25CollectContext,\n ): Promise<Hcs25SignalAdapterResult[]> => {\n const now = context.now.toISOString();\n const address = resolveAgentAddress(subject) ?? subject.id;\n const url =\n typeof options.endpoint === 'function'\n ? options.endpoint(subject)\n : options.endpoint\n .replace('{address}', encodeURIComponent(address))\n .replace('{nativeId}', encodeURIComponent(address));\n\n if (!url) {\n return [{ signalId: 'acp.metrics', status: 'missing' }];\n }\n\n try {\n const data = await requestJson(url, {\n fetch: context.fetch,\n timeoutMs: context.timeoutMs,\n signal: context.signal,\n });\n const metrics = mapResponse(data);\n if (!metrics) {\n return [{ signalId: 'acp.metrics', status: 'missing' }];\n }\n\n const metricsValues: Record<string, Hcs25JsonValue> = {};\n for (const key of METRIC_KEYS) {\n const value = metrics[key];\n if (value !== undefined) {\n metricsValues[key] = value;\n }\n }\n const rootValues: Record<string, Hcs25JsonValue> = {};\n if (metrics.successRate !== undefined) {\n rootValues.successRate = metrics.successRate;\n }\n if (metrics.successfulJobCount !== undefined) {\n rootValues.successfulJobCount = metrics.successfulJobCount;\n }\n\n return [\n {\n signalId: 'acp.metrics',\n status: 'ok',\n value: metrics.successRate ?? null,\n fields: [\n { scope: 'metrics', values: metricsValues },\n { scope: 'root', values: rootValues },\n ],\n provenance: {\n source: 'acp',\n sourceUrl: url,\n subjectId: address,\n fetchedAt: now,\n },\n },\n ];\n } catch (error) {\n if (error instanceof Hcs25CollectorHttpError && error.status === 404) {\n return [{ signalId: 'acp.metrics', status: 'missing' }];\n }\n return [\n {\n signalId: 'acp.metrics',\n status: isTimeoutError(error) ? 'timeout' : 'error',\n },\n ];\n }\n };\n\n return {\n id: 'acp',\n produces: ['acp.metrics'],\n timeoutMs: options.timeoutMs,\n includeRegistries: options.includeRegistries ?? DEFAULT_INCLUDED_REGISTRIES,\n excludeRegistries: options.excludeRegistries,\n appliesTo: options.appliesTo,\n collect,\n };\n}\n"],"names":[],"mappings":"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"}
|