@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,161 +1,156 @@
|
|
|
1
|
+
import { readMetadataRecord, 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";
|
|
1
7
|
import { resolveSubjectEndpoint } from "./standards-sdk.es127.js";
|
|
2
|
-
import { isTimeoutError } from "./standards-sdk.es122.js";
|
|
3
|
-
const MCP_PROTOCOL_VERSION = "2024-11-05";
|
|
4
|
-
async function fetchOk(context, url, init) {
|
|
5
|
-
const response = await context.fetch(url, {
|
|
6
|
-
...init,
|
|
7
|
-
signal: context.signal
|
|
8
|
-
});
|
|
9
|
-
return response.status < 500;
|
|
10
|
-
}
|
|
11
|
-
const mcpConnectivityProbe = async (subject, context) => {
|
|
12
|
-
const endpoint = resolveSubjectEndpoint(subject);
|
|
13
|
-
if (!endpoint) {
|
|
14
|
-
return null;
|
|
15
|
-
}
|
|
16
|
-
const ok = await fetchOk(context, endpoint, {
|
|
17
|
-
method: "POST",
|
|
18
|
-
headers: {
|
|
19
|
-
"content-type": "application/json",
|
|
20
|
-
accept: "application/json, text/event-stream"
|
|
21
|
-
},
|
|
22
|
-
body: JSON.stringify({
|
|
23
|
-
jsonrpc: "2.0",
|
|
24
|
-
id: 1,
|
|
25
|
-
method: "initialize",
|
|
26
|
-
params: {
|
|
27
|
-
protocolVersion: MCP_PROTOCOL_VERSION,
|
|
28
|
-
capabilities: {},
|
|
29
|
-
clientInfo: { name: "hcs-25-connectivity-probe", version: "1" }
|
|
30
|
-
}
|
|
31
|
-
})
|
|
32
|
-
});
|
|
33
|
-
return ok ? 100 : 0;
|
|
34
|
-
};
|
|
35
|
-
const a2aConnectivityProbe = async (subject, context) => {
|
|
36
|
-
const endpoint = resolveSubjectEndpoint(subject);
|
|
37
|
-
if (!endpoint) {
|
|
38
|
-
return null;
|
|
39
|
-
}
|
|
40
|
-
const cardUrl = endpoint.includes("/.well-known/") ? endpoint : new URL("/.well-known/agent.json", endpoint).toString();
|
|
41
|
-
const ok = await fetchOk(context, cardUrl);
|
|
42
|
-
return ok ? 100 : 0;
|
|
43
|
-
};
|
|
44
|
-
const httpConnectivityProbe = async (subject, context) => {
|
|
45
|
-
const endpoint = resolveSubjectEndpoint(subject);
|
|
46
|
-
if (!endpoint) {
|
|
47
|
-
return null;
|
|
48
|
-
}
|
|
49
|
-
const ok = await fetchOk(context, endpoint);
|
|
50
|
-
return ok ? 100 : 0;
|
|
51
|
-
};
|
|
52
|
-
const DEFAULT_PROBES = {
|
|
53
|
-
mcp: mcpConnectivityProbe,
|
|
54
|
-
a2a: a2aConnectivityProbe
|
|
55
|
-
};
|
|
8
|
+
import { Hcs25CollectorHttpError, isTimeoutError } from "./standards-sdk.es122.js";
|
|
56
9
|
const DEFAULT_EXCLUDED_REGISTRIES = [
|
|
57
10
|
"openrouter",
|
|
58
11
|
"near-ai"
|
|
59
12
|
];
|
|
60
|
-
function
|
|
61
|
-
const
|
|
13
|
+
function minutesSince(timestamp, now) {
|
|
14
|
+
const ms = Date.parse(timestamp);
|
|
15
|
+
if (Number.isNaN(ms)) {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
return Math.max(0, (now.getTime() - ms) / 6e4);
|
|
19
|
+
}
|
|
20
|
+
function missingResult(now, reason) {
|
|
21
|
+
return [
|
|
22
|
+
{
|
|
23
|
+
signalId: "availability.probe",
|
|
24
|
+
status: "missing",
|
|
25
|
+
fields: [
|
|
26
|
+
{
|
|
27
|
+
scope: "root",
|
|
28
|
+
values: {
|
|
29
|
+
availabilityScore: null,
|
|
30
|
+
availabilityCheckedAt: now.toISOString(),
|
|
31
|
+
availabilityReason: reason,
|
|
32
|
+
availabilitySource: "probe",
|
|
33
|
+
availabilityStatus: "missing"
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
]
|
|
37
|
+
}
|
|
38
|
+
];
|
|
39
|
+
}
|
|
40
|
+
function createAvailabilitySignalAdapter(options = {}) {
|
|
41
|
+
const resolveEndpoint = options.resolveEndpoint ?? resolveSubjectEndpoint;
|
|
42
|
+
const method = options.method ?? "auto";
|
|
62
43
|
const collect = async (subject, context) => {
|
|
63
|
-
const now = context
|
|
64
|
-
const protocol = subject.protocol?.toLowerCase();
|
|
65
|
-
const protocolProbe = protocol ? probes[protocol] : void 0;
|
|
66
|
-
const defaultProbe = probes.default ?? httpConnectivityProbe;
|
|
67
|
-
const namedTargets = Object.keys(probes).filter(
|
|
68
|
-
(key) => key !== protocol && key !== "default" && !(key in DEFAULT_PROBES)
|
|
69
|
-
);
|
|
44
|
+
const { now } = context;
|
|
70
45
|
const results = [];
|
|
71
|
-
const
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
try {
|
|
77
|
-
const score = await probe(subject, context);
|
|
78
|
-
if (score === null) {
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
probed = true;
|
|
82
|
-
const clamped = Math.min(100, Math.max(0, score));
|
|
83
|
-
if (target) {
|
|
84
|
-
targets[target] = clamped;
|
|
85
|
-
} else {
|
|
86
|
-
primaryScore = clamped;
|
|
87
|
-
}
|
|
46
|
+
const metrics = readMetadataRecord(subject, "metrics");
|
|
47
|
+
const lastActiveAt = metrics ? readString(metrics, "lastActiveAt") : null;
|
|
48
|
+
if (lastActiveAt !== null) {
|
|
49
|
+
const mins = minutesSince(lastActiveAt, now);
|
|
50
|
+
if (mins !== null) {
|
|
88
51
|
results.push({
|
|
89
|
-
signalId,
|
|
52
|
+
signalId: "availability.last_seen",
|
|
90
53
|
status: "ok",
|
|
91
|
-
value:
|
|
54
|
+
value: mins,
|
|
55
|
+
fields: [{ scope: "metrics", values: { minsFromLastOnline: mins } }],
|
|
92
56
|
provenance: {
|
|
93
|
-
source: "
|
|
94
|
-
sourceUrl: resolveSubjectEndpoint(subject) ?? void 0,
|
|
95
|
-
subjectId: subject.id,
|
|
96
|
-
fetchedAt: now.toISOString()
|
|
97
|
-
}
|
|
98
|
-
});
|
|
99
|
-
} catch (error) {
|
|
100
|
-
probed = true;
|
|
101
|
-
const status = isTimeoutError(error) ? "timeout" : "error";
|
|
102
|
-
if (!target) {
|
|
103
|
-
primaryStatus = status;
|
|
104
|
-
primaryScore = 0;
|
|
105
|
-
}
|
|
106
|
-
results.push({
|
|
107
|
-
signalId,
|
|
108
|
-
status,
|
|
109
|
-
provenance: {
|
|
110
|
-
source: "connectivity-probe",
|
|
57
|
+
source: "metadata",
|
|
111
58
|
subjectId: subject.id,
|
|
112
59
|
fetchedAt: now.toISOString()
|
|
113
60
|
}
|
|
114
61
|
});
|
|
115
62
|
}
|
|
116
|
-
};
|
|
117
|
-
await runProbe(protocolProbe ?? defaultProbe, "connectivity.probe");
|
|
118
|
-
for (const target of namedTargets) {
|
|
119
|
-
await runProbe(probes[target], `connectivity.${target}`, target);
|
|
120
63
|
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
64
|
+
const endpoint = resolveEndpoint(subject);
|
|
65
|
+
if (!endpoint) {
|
|
66
|
+
if (results.length > 0) {
|
|
67
|
+
return results;
|
|
68
|
+
}
|
|
69
|
+
return missingResult(now, "no endpoint metadata");
|
|
70
|
+
}
|
|
71
|
+
const started = now.getTime();
|
|
72
|
+
try {
|
|
73
|
+
const attempt = async (verb) => {
|
|
74
|
+
const response = await context.fetch(endpoint, {
|
|
75
|
+
method: verb,
|
|
76
|
+
headers: options.headers,
|
|
77
|
+
signal: context.signal
|
|
78
|
+
});
|
|
79
|
+
return response.status;
|
|
80
|
+
};
|
|
81
|
+
let status;
|
|
82
|
+
if (method === "auto") {
|
|
83
|
+
try {
|
|
84
|
+
status = await attempt("HEAD");
|
|
85
|
+
if (status === 405 || status === 501) {
|
|
86
|
+
status = await attempt("GET");
|
|
87
|
+
}
|
|
88
|
+
} catch (error) {
|
|
89
|
+
if (error instanceof Hcs25CollectorHttpError) {
|
|
90
|
+
throw error;
|
|
91
|
+
}
|
|
92
|
+
status = await attempt("GET");
|
|
93
|
+
}
|
|
94
|
+
} else {
|
|
95
|
+
status = await attempt(method);
|
|
96
|
+
}
|
|
97
|
+
const latencyMs = Date.now() - started;
|
|
98
|
+
const reachable = status < 500;
|
|
99
|
+
results.push({
|
|
100
|
+
signalId: "availability.probe",
|
|
101
|
+
status: "ok",
|
|
102
|
+
value: reachable ? 1 : 0,
|
|
103
|
+
fields: [
|
|
104
|
+
{
|
|
105
|
+
scope: "root",
|
|
106
|
+
values: {
|
|
107
|
+
availabilityScore: reachable ? 1 : 0,
|
|
108
|
+
availabilityCheckedAt: now.toISOString(),
|
|
109
|
+
availabilityLatencyMs: latencyMs,
|
|
110
|
+
availabilityReason: reachable ? "reachable" : `endpoint returned HTTP ${status}`,
|
|
111
|
+
availabilitySource: "probe",
|
|
112
|
+
availabilityStatus: "ok"
|
|
130
113
|
}
|
|
131
|
-
|
|
114
|
+
}
|
|
115
|
+
],
|
|
116
|
+
provenance: {
|
|
117
|
+
source: "probe",
|
|
118
|
+
sourceUrl: endpoint,
|
|
119
|
+
subjectId: subject.id,
|
|
120
|
+
fetchedAt: now.toISOString()
|
|
132
121
|
}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
122
|
+
});
|
|
123
|
+
return results;
|
|
124
|
+
} catch (error) {
|
|
125
|
+
const timedOut = isTimeoutError(error);
|
|
126
|
+
const statusValue = timedOut ? "timeout" : "error";
|
|
127
|
+
results.push({
|
|
128
|
+
signalId: "availability.probe",
|
|
129
|
+
status: statusValue,
|
|
130
|
+
fields: [
|
|
131
|
+
{
|
|
132
|
+
scope: "root",
|
|
133
|
+
values: {
|
|
134
|
+
availabilityCheckedAt: now.toISOString(),
|
|
135
|
+
availabilityReason: error instanceof Error ? error.message : String(error),
|
|
136
|
+
availabilitySource: "probe",
|
|
137
|
+
availabilityStatus: statusValue
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
],
|
|
141
|
+
provenance: {
|
|
142
|
+
source: "probe",
|
|
143
|
+
sourceUrl: endpoint,
|
|
144
|
+
subjectId: subject.id,
|
|
145
|
+
fetchedAt: now.toISOString()
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
return results;
|
|
143
149
|
}
|
|
144
|
-
const last = results[results.length - 1];
|
|
145
|
-
return [
|
|
146
|
-
...results,
|
|
147
|
-
{
|
|
148
|
-
signalId: "connectivity.score",
|
|
149
|
-
status: primaryStatus === "ok" ? "ok" : primaryStatus,
|
|
150
|
-
value: primaryScore ?? void 0,
|
|
151
|
-
fields: [{ scope: "additional", values: additional }],
|
|
152
|
-
provenance: last?.provenance
|
|
153
|
-
}
|
|
154
|
-
];
|
|
155
150
|
};
|
|
156
151
|
return {
|
|
157
|
-
id: "
|
|
158
|
-
produces: ["
|
|
152
|
+
id: "availability",
|
|
153
|
+
produces: ["availability.probe", "availability.last_seen"],
|
|
159
154
|
timeoutMs: options.timeoutMs,
|
|
160
155
|
includeRegistries: options.includeRegistries,
|
|
161
156
|
excludeRegistries: options.excludeRegistries ?? DEFAULT_EXCLUDED_REGISTRIES,
|
|
@@ -164,9 +159,6 @@ function createConnectivitySignalAdapter(options = {}) {
|
|
|
164
159
|
};
|
|
165
160
|
}
|
|
166
161
|
export {
|
|
167
|
-
|
|
168
|
-
createConnectivitySignalAdapter,
|
|
169
|
-
httpConnectivityProbe,
|
|
170
|
-
mcpConnectivityProbe
|
|
162
|
+
createAvailabilitySignalAdapter
|
|
171
163
|
};
|
|
172
164
|
//# sourceMappingURL=standards-sdk.es129.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standards-sdk.es129.js","sources":["../../src/hcs-25/collectors/connectivity.ts"],"sourcesContent":["import type { Hcs25JsonValue, Hcs25Subject } from '../types';\nimport { resolveSubjectEndpoint } from './endpoints';\nimport { isTimeoutError } from './http';\nimport type {\n Hcs25CollectContext,\n Hcs25SignalAdapter,\n Hcs25SignalAdapterResult,\n} from './types';\n\n/**\n * A protocol probe: returns a connectivity score in `[0,100]`, or null when\n * the probe is not meaningful for the subject.\n */\nexport type Hcs25ConnectivityProbe = (\n subject: Hcs25Subject,\n context: Hcs25CollectContext,\n) => Promise<number | null>;\n\nconst MCP_PROTOCOL_VERSION = '2024-11-05';\n\nasync function fetchOk(\n context: Hcs25CollectContext,\n url: string,\n init?: { method?: string; headers?: Record<string, string>; body?: string },\n): Promise<boolean> {\n const response = await context.fetch(url, {\n ...init,\n signal: context.signal,\n });\n return response.status < 500;\n}\n\n/**\n * MCP probe: posts a JSON-RPC `initialize` request to the endpoint. Any\n * definite HTTP response (including 4xx such as 405 on SSE-only endpoints)\n * proves connectivity; only network failure or 5xx count as disconnected.\n */\nexport const mcpConnectivityProbe: Hcs25ConnectivityProbe = async (\n subject,\n context,\n) => {\n const endpoint = resolveSubjectEndpoint(subject);\n if (!endpoint) {\n return null;\n }\n const ok = await fetchOk(context, endpoint, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n accept: 'application/json, text/event-stream',\n },\n body: JSON.stringify({\n jsonrpc: '2.0',\n id: 1,\n method: 'initialize',\n params: {\n protocolVersion: MCP_PROTOCOL_VERSION,\n capabilities: {},\n clientInfo: { name: 'hcs-25-connectivity-probe', version: '1' },\n },\n }),\n });\n return ok ? 100 : 0;\n};\n\n/**\n * A2A probe: fetches the agent card at `/.well-known/agent.json` relative to\n * the endpoint origin (or the endpoint itself when it already points at a\n * well-known path).\n */\nexport const a2aConnectivityProbe: Hcs25ConnectivityProbe = async (\n subject,\n context,\n) => {\n const endpoint = resolveSubjectEndpoint(subject);\n if (!endpoint) {\n return null;\n }\n const cardUrl = endpoint.includes('/.well-known/')\n ? endpoint\n : new URL('/.well-known/agent.json', endpoint).toString();\n const ok = await fetchOk(context, cardUrl);\n return ok ? 100 : 0;\n};\n\n/**\n * Generic HTTP probe: GET the endpoint; any response below 500 counts as\n * connected.\n */\nexport const httpConnectivityProbe: Hcs25ConnectivityProbe = async (\n subject,\n context,\n) => {\n const endpoint = resolveSubjectEndpoint(subject);\n if (!endpoint) {\n return null;\n }\n const ok = await fetchOk(context, endpoint);\n return ok ? 100 : 0;\n};\n\nconst DEFAULT_PROBES: Record<string, Hcs25ConnectivityProbe> = {\n mcp: mcpConnectivityProbe,\n a2a: a2aConnectivityProbe,\n};\n\n/**\n * Options for the connectivity signal adapter.\n */\nexport interface Hcs25ConnectivitySignalAdapterOptions {\n /**\n * Probe map keyed by target name. Keys `mcp`/`a2a` are used automatically\n * for matching `subject.protocol`; other keys run unconditionally as\n * named targets and populate `connectivityTargets`. Pass `{default: fn}`\n * to override the fallback HTTP probe.\n */\n probes?: Record<string, Hcs25ConnectivityProbe>;\n /** Per-adapter timeout in milliseconds. */\n timeoutMs?: number;\n includeRegistries?: readonly string[];\n excludeRegistries?: readonly string[];\n appliesTo?: (subject: Hcs25Subject) => boolean;\n}\n\nconst DEFAULT_EXCLUDED_REGISTRIES: readonly string[] = [\n 'openrouter',\n 'near-ai',\n];\n\n/**\n * Creates the `connectivity` signal adapter: probes the subject's endpoint\n * using a protocol-aware probe (MCP initialize / A2A agent card / generic\n * HTTP) plus any named custom probes, and stores `connectivityScore` /\n * `connectivityTargets` under `metadata.additional`.\n */\nexport function createConnectivitySignalAdapter(\n options: Hcs25ConnectivitySignalAdapterOptions = {},\n): Hcs25SignalAdapter {\n const probes = { ...DEFAULT_PROBES, ...options.probes };\n\n const collect = async (\n subject: Hcs25Subject,\n context: Hcs25CollectContext,\n ): Promise<Hcs25SignalAdapterResult[]> => {\n const now = context.now;\n const protocol = subject.protocol?.toLowerCase();\n const protocolProbe = protocol ? probes[protocol] : undefined;\n const defaultProbe = probes.default ?? httpConnectivityProbe;\n const namedTargets = Object.keys(probes).filter(\n key => key !== protocol && key !== 'default' && !(key in DEFAULT_PROBES),\n );\n\n const results: Hcs25SignalAdapterResult[] = [];\n const targets: Record<string, number> = {};\n let primaryScore: number | null = null;\n let primaryStatus: 'ok' | 'timeout' | 'error' = 'ok';\n let probed = false;\n\n const runProbe = async (\n probe: Hcs25ConnectivityProbe,\n signalId: string,\n target?: string,\n ): Promise<void> => {\n try {\n const score = await probe(subject, context);\n if (score === null) {\n return;\n }\n probed = true;\n const clamped = Math.min(100, Math.max(0, score));\n if (target) {\n targets[target] = clamped;\n } else {\n primaryScore = clamped;\n }\n results.push({\n signalId,\n status: 'ok',\n value: clamped,\n provenance: {\n source: 'connectivity-probe',\n sourceUrl: resolveSubjectEndpoint(subject) ?? undefined,\n subjectId: subject.id,\n fetchedAt: now.toISOString(),\n },\n });\n } catch (error) {\n probed = true;\n const status = isTimeoutError(error) ? 'timeout' : 'error';\n if (!target) {\n primaryStatus = status;\n primaryScore = 0;\n }\n results.push({\n signalId,\n status,\n provenance: {\n source: 'connectivity-probe',\n subjectId: subject.id,\n fetchedAt: now.toISOString(),\n },\n });\n }\n };\n\n await runProbe(protocolProbe ?? defaultProbe, 'connectivity.probe');\n\n for (const target of namedTargets) {\n await runProbe(probes[target], `connectivity.${target}`, target);\n }\n\n if (!probed) {\n return [\n {\n signalId: 'connectivity.probe',\n status: 'missing',\n fields: [\n {\n scope: 'additional',\n values: { connectivityStatus: 'missing' },\n },\n ],\n },\n ];\n }\n\n const additional: Record<string, Hcs25JsonValue> = {\n connectivityStatus: primaryStatus === 'ok' ? 'ok' : primaryStatus,\n };\n if (primaryScore !== null) {\n additional.connectivityScore = primaryScore;\n }\n if (Object.keys(targets).length > 0) {\n additional.connectivityTargets = { ...targets };\n }\n\n const last = results[results.length - 1];\n return [\n ...results,\n {\n signalId: 'connectivity.score',\n status: primaryStatus === 'ok' ? 'ok' : primaryStatus,\n value: primaryScore ?? undefined,\n fields: [{ scope: 'additional', values: additional }],\n provenance: last?.provenance,\n },\n ];\n };\n\n return {\n id: 'connectivity',\n produces: ['connectivity.probe', 'connectivity.score'],\n timeoutMs: options.timeoutMs,\n includeRegistries: options.includeRegistries,\n excludeRegistries: options.excludeRegistries ?? DEFAULT_EXCLUDED_REGISTRIES,\n appliesTo: options.appliesTo,\n collect,\n };\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"standards-sdk.es129.js","sources":["../../src/hcs-25/collectors/availability.ts"],"sourcesContent":["import type { Hcs25Subject } from '../types';\nimport { readMetadataRecord, readString } from '../signals';\nimport { resolveSubjectEndpoint } from './endpoints';\nimport { Hcs25CollectorHttpError, isTimeoutError } from './http';\nimport type {\n Hcs25CollectContext,\n Hcs25SignalAdapter,\n Hcs25SignalAdapterResult,\n} from './types';\n\n/**\n * Options for the availability signal adapter.\n */\nexport interface Hcs25AvailabilitySignalAdapterOptions {\n /** Custom endpoint resolver; defaults to {@link resolveSubjectEndpoint}. */\n resolveEndpoint?: (subject: Hcs25Subject) => string | null;\n /** Probe method. `auto` (default) tries HEAD and falls back to GET. */\n method?: 'auto' | 'HEAD' | 'GET';\n /** Per-probe timeout in milliseconds. */\n timeoutMs?: number;\n /** Extra request headers (e.g. auth for gated endpoints). */\n headers?: Record<string, string>;\n /** Applicability constraints. */\n includeRegistries?: readonly string[];\n excludeRegistries?: readonly string[];\n appliesTo?: (subject: Hcs25Subject) => boolean;\n}\n\nconst DEFAULT_EXCLUDED_REGISTRIES: readonly string[] = [\n 'openrouter',\n 'near-ai',\n];\n\nfunction minutesSince(timestamp: string, now: Date): number | null {\n const ms = Date.parse(timestamp);\n if (Number.isNaN(ms)) {\n return null;\n }\n return Math.max(0, (now.getTime() - ms) / 60000);\n}\n\nfunction missingResult(now: Date, reason: string): Hcs25SignalAdapterResult[] {\n return [\n {\n signalId: 'availability.probe',\n status: 'missing',\n fields: [\n {\n scope: 'root',\n values: {\n availabilityScore: null,\n availabilityCheckedAt: now.toISOString(),\n availabilityReason: reason,\n availabilitySource: 'probe',\n availabilityStatus: 'missing',\n },\n },\n ],\n },\n ];\n}\n\n/**\n * Creates the `availability` signal adapter: probes the subject's endpoint,\n * records reachability, latency, and probe provenance, and converts the\n * ecosystem-native `metrics.lastActiveAt` field into\n * `metrics.minsFromLastOnline` (the deterministic scoring adapter consumes\n * the derived field). Unreachable endpoints score 0; absent endpoints are\n * `missing`.\n */\nexport function createAvailabilitySignalAdapter(\n options: Hcs25AvailabilitySignalAdapterOptions = {},\n): Hcs25SignalAdapter {\n const resolveEndpoint = options.resolveEndpoint ?? resolveSubjectEndpoint;\n const method = options.method ?? 'auto';\n\n const collect = async (\n subject: Hcs25Subject,\n context: Hcs25CollectContext,\n ): Promise<Hcs25SignalAdapterResult[]> => {\n const { now } = context;\n const results: Hcs25SignalAdapterResult[] = [];\n\n const metrics = readMetadataRecord(subject, 'metrics');\n const lastActiveAt = metrics ? readString(metrics, 'lastActiveAt') : null;\n if (lastActiveAt !== null) {\n const mins = minutesSince(lastActiveAt, now);\n if (mins !== null) {\n results.push({\n signalId: 'availability.last_seen',\n status: 'ok',\n value: mins,\n fields: [{ scope: 'metrics', values: { minsFromLastOnline: mins } }],\n provenance: {\n source: 'metadata',\n subjectId: subject.id,\n fetchedAt: now.toISOString(),\n },\n });\n }\n }\n\n const endpoint = resolveEndpoint(subject);\n if (!endpoint) {\n if (results.length > 0) {\n return results;\n }\n return missingResult(now, 'no endpoint metadata');\n }\n\n const started = now.getTime();\n try {\n const attempt = async (verb: 'HEAD' | 'GET'): Promise<number> => {\n const response = await context.fetch(endpoint, {\n method: verb,\n headers: options.headers,\n signal: context.signal,\n });\n return response.status;\n };\n\n let status: number;\n if (method === 'auto') {\n try {\n status = await attempt('HEAD');\n if (status === 405 || status === 501) {\n status = await attempt('GET');\n }\n } catch (error) {\n if (error instanceof Hcs25CollectorHttpError) {\n throw error;\n }\n status = await attempt('GET');\n }\n } else {\n status = await attempt(method);\n }\n\n const latencyMs = Date.now() - started;\n const reachable = status < 500;\n results.push({\n signalId: 'availability.probe',\n status: 'ok',\n value: reachable ? 1 : 0,\n fields: [\n {\n scope: 'root',\n values: {\n availabilityScore: reachable ? 1 : 0,\n availabilityCheckedAt: now.toISOString(),\n availabilityLatencyMs: latencyMs,\n availabilityReason: reachable\n ? 'reachable'\n : `endpoint returned HTTP ${status}`,\n availabilitySource: 'probe',\n availabilityStatus: 'ok',\n },\n },\n ],\n provenance: {\n source: 'probe',\n sourceUrl: endpoint,\n subjectId: subject.id,\n fetchedAt: now.toISOString(),\n },\n });\n return results;\n } catch (error) {\n const timedOut = isTimeoutError(error);\n const statusValue = timedOut ? 'timeout' : 'error';\n results.push({\n signalId: 'availability.probe',\n status: statusValue,\n fields: [\n {\n scope: 'root',\n values: {\n availabilityCheckedAt: now.toISOString(),\n availabilityReason:\n error instanceof Error ? error.message : String(error),\n availabilitySource: 'probe',\n availabilityStatus: statusValue,\n },\n },\n ],\n provenance: {\n source: 'probe',\n sourceUrl: endpoint,\n subjectId: subject.id,\n fetchedAt: now.toISOString(),\n },\n });\n return results;\n }\n };\n\n return {\n id: 'availability',\n produces: ['availability.probe', 'availability.last_seen'],\n timeoutMs: options.timeoutMs,\n includeRegistries: options.includeRegistries,\n excludeRegistries: options.excludeRegistries ?? DEFAULT_EXCLUDED_REGISTRIES,\n appliesTo: options.appliesTo,\n collect,\n };\n}\n"],"names":[],"mappings":"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"}
|