@antseed/node 0.1.1 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +7 -5
  3. package/dist/discovery/announcer.d.ts +11 -0
  4. package/dist/discovery/announcer.d.ts.map +1 -1
  5. package/dist/discovery/announcer.js +103 -70
  6. package/dist/discovery/announcer.js.map +1 -1
  7. package/dist/discovery/http-metadata-resolver.d.ts +6 -0
  8. package/dist/discovery/http-metadata-resolver.d.ts.map +1 -1
  9. package/dist/discovery/http-metadata-resolver.js +32 -4
  10. package/dist/discovery/http-metadata-resolver.js.map +1 -1
  11. package/dist/discovery/index.d.ts +1 -1
  12. package/dist/discovery/index.d.ts.map +1 -1
  13. package/dist/discovery/index.js +1 -1
  14. package/dist/discovery/index.js.map +1 -1
  15. package/dist/discovery/metadata-codec.d.ts +4 -0
  16. package/dist/discovery/metadata-codec.d.ts.map +1 -1
  17. package/dist/discovery/metadata-codec.js +89 -0
  18. package/dist/discovery/metadata-codec.js.map +1 -1
  19. package/dist/discovery/metadata-validator.d.ts +3 -0
  20. package/dist/discovery/metadata-validator.d.ts.map +1 -1
  21. package/dist/discovery/metadata-validator.js +72 -0
  22. package/dist/discovery/metadata-validator.js.map +1 -1
  23. package/dist/discovery/peer-lookup.d.ts +1 -0
  24. package/dist/discovery/peer-lookup.d.ts.map +1 -1
  25. package/dist/discovery/peer-lookup.js +10 -25
  26. package/dist/discovery/peer-lookup.js.map +1 -1
  27. package/dist/discovery/peer-metadata.d.ts +4 -1
  28. package/dist/discovery/peer-metadata.d.ts.map +1 -1
  29. package/dist/discovery/peer-metadata.js +9 -1
  30. package/dist/discovery/peer-metadata.js.map +1 -1
  31. package/dist/index.d.ts +1 -1
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +1 -0
  34. package/dist/index.js.map +1 -1
  35. package/dist/interfaces/seller-provider.d.ts +2 -0
  36. package/dist/interfaces/seller-provider.d.ts.map +1 -1
  37. package/dist/node.d.ts +11 -0
  38. package/dist/node.d.ts.map +1 -1
  39. package/dist/node.js +177 -69
  40. package/dist/node.js.map +1 -1
  41. package/dist/p2p/message-protocol.js +3 -3
  42. package/dist/p2p/message-protocol.js.map +1 -1
  43. package/dist/types/peer.d.ts +5 -0
  44. package/dist/types/peer.d.ts.map +1 -1
  45. package/package.json +1 -1
package/README.md CHANGED
@@ -4,7 +4,9 @@
4
4
  [![Node.js](https://img.shields.io/badge/node-%3E%3D20.0.0-brightgreen.svg)](https://nodejs.org/)
5
5
  [![TypeScript](https://img.shields.io/badge/TypeScript-5.3+-blue.svg)](https://www.typescriptlang.org/)
6
6
 
7
- Core protocol SDK for AntSeed -- a peer-to-peer AI services network. Sellers expose AI capacity, buyers discover sellers via DHT and send requests over encrypted P2P connections.
7
+ Core protocol SDK for AntSeed a peer-to-peer AI services network. Providers offer AI services, buyers discover providers via DHT and send requests over encrypted P2P connections.
8
+
9
+ > **Important:** AntSeed is designed for providers who build differentiated services on top of AI APIs — such as TEE-secured inference, domain-specific skills and agents, fine-tuned models, or managed product experiences. Simply reselling raw API access or subscription credentials is not the intended use and may violate your upstream provider's terms of service.
8
10
 
9
11
  ## Installation
10
12
 
@@ -14,9 +16,9 @@ npm install @antseed/node
14
16
 
15
17
  ## Quick Start
16
18
 
17
- ### Seller Mode
19
+ ### Provider Mode
18
20
 
19
- A seller node announces its capacity on the DHT and serves inference requests from buyers.
21
+ A provider node announces its capacity on the DHT and serves inference requests from buyers.
20
22
 
21
23
  ```ts
22
24
  import { AntseedNode } from '@antseed/node';
@@ -207,7 +209,7 @@ import { BalanceManager } from '@antseed/node/payments';
207
209
 
208
210
  ## Provider Interface
209
211
 
210
- Implement `Provider` to expose any LLM backend as a seller on the network.
212
+ Implement `Provider` to expose any LLM backend as a provider on the network.
211
213
 
212
214
  ```ts
213
215
  interface Provider {
@@ -321,7 +323,7 @@ const plugin: AntseedProviderPlugin = {
321
323
  displayName: 'My Provider',
322
324
  version: '1.0.0',
323
325
  type: 'provider',
324
- description: 'Sells My LLM capacity on the Antseed Network',
326
+ description: 'Provides My LLM capacity on the Antseed Network',
325
327
  configSchema: [
326
328
  { key: 'MY_API_KEY', label: 'API Key', type: 'secret', required: true, description: 'API key for My LLM' },
327
329
  { key: 'MY_MODELS', label: 'Models', type: 'string[]', required: false, description: 'Comma-separated model list' },
@@ -9,8 +9,10 @@ export interface AnnouncerConfig {
9
9
  providers: Array<{
10
10
  provider: string;
11
11
  models: string[];
12
+ modelCategories?: Record<string, string[]>;
12
13
  maxConcurrency: number;
13
14
  }>;
15
+ displayName?: string;
14
16
  region: string;
15
17
  pricing: Map<string, {
16
18
  defaults: {
@@ -36,9 +38,18 @@ export declare class PeerAnnouncer {
36
38
  private _latestMetadata;
37
39
  constructor(config: AnnouncerConfig);
38
40
  announce(): Promise<void>;
41
+ /**
42
+ * Refresh signed metadata snapshot without announcing to DHT.
43
+ * Useful for high-frequency fields like current provider load.
44
+ */
45
+ refreshMetadata(): Promise<void>;
39
46
  startPeriodicAnnounce(): void;
40
47
  stopPeriodicAnnounce(): void;
41
48
  updateLoad(providerName: string, currentLoad: number): void;
42
49
  getLatestMetadata(): PeerMetadata | null;
50
+ private _buildSignedMetadata;
51
+ private _announceTopics;
52
+ private _tryAnnounceTopic;
53
+ private _normalizeModelCategories;
43
54
  }
44
55
  //# sourceMappingURL=announcer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"announcer.d.ts","sourceRoot":"","sources":["../../src/discovery/announcer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAwB,MAAM,oBAAoB,CAAC;AAK7E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAGzE,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,QAAQ,CAAC;IACnB,GAAG,EAAE,OAAO,CAAC;IACb,SAAS,EAAE,KAAK,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC,CAAC;IACH,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,GAAG,CACV,MAAM,EACN;QACE,QAAQ,EAAE;YAAE,kBAAkB,EAAE,MAAM,CAAC;YAAC,mBAAmB,EAAE,MAAM,CAAA;SAAE,CAAC;QACtE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,kBAAkB,EAAE,MAAM,CAAC;YAAC,mBAAmB,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACtF,CACF,CAAC;IACF,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,cAAc,CAA+C;IACrE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkC;IAC1D,OAAO,CAAC,eAAe,CAA6B;gBAExC,MAAM,EAAE,eAAe;IAI7B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IA4F/B,qBAAqB,IAAI,IAAI;IAe7B,oBAAoB,IAAI,IAAI;IAO5B,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAI3D,iBAAiB,IAAI,YAAY,GAAG,IAAI;CAGzC"}
1
+ {"version":3,"file":"announcer.d.ts","sourceRoot":"","sources":["../../src/discovery/announcer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAwB,MAAM,oBAAoB,CAAC;AAK7E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAGzE,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,QAAQ,CAAC;IACnB,GAAG,EAAE,OAAO,CAAC;IACb,SAAS,EAAE,KAAK,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAC3C,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC,CAAC;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,GAAG,CACV,MAAM,EACN;QACE,QAAQ,EAAE;YAAE,kBAAkB,EAAE,MAAM,CAAC;YAAC,mBAAmB,EAAE,MAAM,CAAA;SAAE,CAAC;QACtE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,kBAAkB,EAAE,MAAM,CAAC;YAAC,mBAAmB,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACtF,CACF,CAAC;IACF,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,cAAc,CAA+C;IACrE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkC;IAC1D,OAAO,CAAC,eAAe,CAA6B;gBAExC,MAAM,EAAE,eAAe;IAI7B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAO/B;;;OAGG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAItC,qBAAqB,IAAI,IAAI;IAe7B,oBAAoB,IAAI,IAAI;IAO5B,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAI3D,iBAAiB,IAAI,YAAY,GAAG,IAAI;YAI1B,oBAAoB;YAsEpB,eAAe;YAcf,iBAAiB;IAS/B,OAAO,CAAC,yBAAyB;CA6BlC"}
@@ -14,6 +14,44 @@ export class PeerAnnouncer {
14
14
  this.config = config;
15
15
  }
16
16
  async announce() {
17
+ const metadata = await this._buildSignedMetadata(true);
18
+ this._latestMetadata = metadata;
19
+ await this._announceTopics(metadata.providers);
20
+ }
21
+ /**
22
+ * Refresh signed metadata snapshot without announcing to DHT.
23
+ * Useful for high-frequency fields like current provider load.
24
+ */
25
+ async refreshMetadata() {
26
+ this._latestMetadata = await this._buildSignedMetadata(false);
27
+ }
28
+ startPeriodicAnnounce() {
29
+ if (this.intervalHandle) {
30
+ return;
31
+ }
32
+ // Announce immediately, then on interval
33
+ void this.announce().catch((err) => {
34
+ debugWarn(`[Announcer] Initial announce failed: ${err instanceof Error ? err.message : err}`);
35
+ });
36
+ this.intervalHandle = setInterval(() => {
37
+ void this.announce().catch((err) => {
38
+ debugWarn(`[Announcer] Periodic announce failed: ${err instanceof Error ? err.message : err}`);
39
+ });
40
+ }, this.config.reannounceIntervalMs);
41
+ }
42
+ stopPeriodicAnnounce() {
43
+ if (this.intervalHandle) {
44
+ clearInterval(this.intervalHandle);
45
+ this.intervalHandle = null;
46
+ }
47
+ }
48
+ updateLoad(providerName, currentLoad) {
49
+ this.loadMap.set(providerName, currentLoad);
50
+ }
51
+ getLatestMetadata() {
52
+ return this._latestMetadata;
53
+ }
54
+ async _buildSignedMetadata(includeOnChainReputation = true) {
17
55
  const providers = this.config.providers.map((p) => {
18
56
  const pricing = this.config.pricing.get(p.provider) ?? {
19
57
  defaults: {
@@ -21,109 +59,104 @@ export class PeerAnnouncer {
21
59
  outputUsdPerMillion: 0,
22
60
  },
23
61
  };
24
- return {
62
+ const providerAnnouncement = {
25
63
  provider: p.provider,
26
64
  models: p.models,
27
65
  defaultPricing: pricing.defaults,
28
- ...(pricing.models ? { modelPricing: pricing.models } : {}),
29
66
  maxConcurrency: p.maxConcurrency,
30
67
  currentLoad: this.loadMap.get(p.provider) ?? 0,
31
68
  };
69
+ if (pricing.models) {
70
+ providerAnnouncement.modelPricing = pricing.models;
71
+ }
72
+ const normalizedModelCategories = this._normalizeModelCategories(p.modelCategories, p.models);
73
+ if (normalizedModelCategories) {
74
+ providerAnnouncement.modelCategories = normalizedModelCategories;
75
+ }
76
+ return providerAnnouncement;
32
77
  });
33
78
  const metadata = {
34
79
  peerId: this.config.identity.peerId,
35
80
  version: METADATA_VERSION,
81
+ ...(this.config.displayName ? { displayName: this.config.displayName } : {}),
36
82
  providers,
37
- ...(this.config.offerings && this.config.offerings.length > 0
38
- ? { offerings: this.config.offerings }
39
- : {}),
40
- ...(this.config.stakeAmountUSDC != null
41
- ? { stakeAmountUSDC: this.config.stakeAmountUSDC }
42
- : {}),
43
- ...(this.config.trustScore != null
44
- ? { trustScore: this.config.trustScore }
45
- : {}),
46
83
  region: this.config.region,
47
84
  timestamp: Date.now(),
48
85
  signature: "",
49
86
  };
50
- // Populate EVM address and on-chain reputation if escrow client is available
87
+ if (this.config.offerings && this.config.offerings.length > 0) {
88
+ metadata.offerings = this.config.offerings;
89
+ }
90
+ if (this.config.stakeAmountUSDC != null) {
91
+ metadata.stakeAmountUSDC = this.config.stakeAmountUSDC;
92
+ }
93
+ if (this.config.trustScore != null) {
94
+ metadata.trustScore = this.config.trustScore;
95
+ }
51
96
  if (this.config.escrowClient) {
52
- try {
53
- const evmAddress = identityToEvmAddress(this.config.identity);
54
- metadata.evmAddress = evmAddress;
55
- const reputation = await this.config.escrowClient.getReputation(evmAddress);
56
- metadata.onChainReputation = reputation.weightedAverage;
57
- metadata.onChainSessionCount = reputation.sessionCount;
58
- metadata.onChainDisputeCount = reputation.disputeCount;
97
+ const evmAddress = identityToEvmAddress(this.config.identity);
98
+ metadata.evmAddress = evmAddress;
99
+ if (includeOnChainReputation) {
100
+ try {
101
+ const reputation = await this.config.escrowClient.getReputation(evmAddress);
102
+ metadata.onChainReputation = reputation.weightedAverage;
103
+ metadata.onChainSessionCount = reputation.sessionCount;
104
+ metadata.onChainDisputeCount = reputation.disputeCount;
105
+ }
106
+ catch {
107
+ // Silently continue without reputation data
108
+ }
59
109
  }
60
- catch {
61
- // Silently continue without reputation data
110
+ else if (this._latestMetadata) {
111
+ metadata.onChainReputation = this._latestMetadata.onChainReputation;
112
+ metadata.onChainSessionCount = this._latestMetadata.onChainSessionCount;
113
+ metadata.onChainDisputeCount = this._latestMetadata.onChainDisputeCount;
62
114
  }
63
115
  }
64
- // Sign metadata
65
116
  const dataToSign = encodeMetadataForSigning(metadata);
66
117
  const signature = await signData(this.config.identity.privateKey, dataToSign);
67
118
  metadata.signature = bytesToHex(signature);
68
- this._latestMetadata = metadata;
69
- // Announce under each provider topic (continue on failure)
119
+ return metadata;
120
+ }
121
+ async _announceTopics(providers) {
70
122
  for (const p of providers) {
71
- try {
72
- const topic = providerTopic(p.provider);
73
- const infoHash = topicToInfoHash(topic);
74
- await this.config.dht.announce(infoHash, this.config.signalingPort);
75
- }
76
- catch {
77
- // DHT may not have peers yet — will retry on next cycle
123
+ await this._tryAnnounceTopic(providerTopic(p.provider));
124
+ }
125
+ await this._tryAnnounceTopic(providerTopic("*"));
126
+ if (this.config.offerings) {
127
+ for (const offering of this.config.offerings) {
128
+ await this._tryAnnounceTopic(capabilityTopic(offering.capability, offering.name));
78
129
  }
79
130
  }
80
- // Also announce under the wildcard topic for generic discovery
131
+ }
132
+ async _tryAnnounceTopic(topic) {
81
133
  try {
82
- const wildcardInfoHash = topicToInfoHash(providerTopic("*"));
83
- await this.config.dht.announce(wildcardInfoHash, this.config.signalingPort);
134
+ const infoHash = topicToInfoHash(topic);
135
+ await this.config.dht.announce(infoHash, this.config.signalingPort);
84
136
  }
85
137
  catch {
86
138
  // DHT may not have peers yet — will retry on next cycle
87
139
  }
88
- // Announce under each capability topic
89
- if (this.config.offerings) {
90
- for (const offering of this.config.offerings) {
91
- try {
92
- const topic = capabilityTopic(offering.capability, offering.name);
93
- const infoHash = topicToInfoHash(topic);
94
- await this.config.dht.announce(infoHash, this.config.signalingPort);
95
- }
96
- catch {
97
- // DHT may not have peers yet — will retry on next cycle
98
- }
99
- }
100
- }
101
140
  }
102
- startPeriodicAnnounce() {
103
- if (this.intervalHandle) {
104
- return;
141
+ _normalizeModelCategories(modelCategories, supportedModels) {
142
+ if (!modelCategories) {
143
+ return undefined;
105
144
  }
106
- // Announce immediately, then on interval
107
- void this.announce().catch((err) => {
108
- debugWarn(`[Announcer] Initial announce failed: ${err instanceof Error ? err.message : err}`);
109
- });
110
- this.intervalHandle = setInterval(() => {
111
- void this.announce().catch((err) => {
112
- debugWarn(`[Announcer] Periodic announce failed: ${err instanceof Error ? err.message : err}`);
113
- });
114
- }, this.config.reannounceIntervalMs);
115
- }
116
- stopPeriodicAnnounce() {
117
- if (this.intervalHandle) {
118
- clearInterval(this.intervalHandle);
119
- this.intervalHandle = null;
145
+ const supportedModelSet = new Set(supportedModels);
146
+ const normalized = {};
147
+ for (const [model, categories] of Object.entries(modelCategories)) {
148
+ if (!supportedModelSet.has(model)) {
149
+ continue;
150
+ }
151
+ const deduped = Array.from(new Set(categories
152
+ .map((category) => category.trim().toLowerCase())
153
+ .filter((category) => category.length > 0)));
154
+ if (deduped.length === 0) {
155
+ continue;
156
+ }
157
+ normalized[model] = deduped;
120
158
  }
121
- }
122
- updateLoad(providerName, currentLoad) {
123
- this.loadMap.set(providerName, currentLoad);
124
- }
125
- getLatestMetadata() {
126
- return this._latestMetadata;
159
+ return Object.keys(normalized).length > 0 ? normalized : undefined;
127
160
  }
128
161
  }
129
162
  //# sourceMappingURL=announcer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"announcer.js","sourceRoot":"","sources":["../../src/discovery/announcer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"announcer.js","sourceRoot":"","sources":["../../src/discovery/announcer.ts"],"names":[],"mappings":"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"}
@@ -5,11 +5,17 @@ export interface HttpMetadataResolverConfig {
5
5
  timeoutMs?: number;
6
6
  /** Port offset from the signaling port to the metadata HTTP port. Default: 0 (same port) */
7
7
  metadataPortOffset?: number;
8
+ /** Cooldown in ms before retrying an endpoint that recently failed. Default: 30000 */
9
+ failureCooldownMs?: number;
8
10
  }
9
11
  export declare class HttpMetadataResolver implements MetadataResolver {
10
12
  private readonly timeoutMs;
11
13
  private readonly metadataPortOffset;
14
+ private readonly failureCooldownMs;
15
+ private readonly failedEndpoints;
12
16
  constructor(config?: HttpMetadataResolverConfig);
13
17
  resolve(peer: PeerEndpoint): Promise<PeerMetadata | null>;
18
+ private markEndpointFailure;
19
+ private getEndpointKey;
14
20
  }
15
21
  //# sourceMappingURL=http-metadata-resolver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"http-metadata-resolver.d.ts","sourceRoot":"","sources":["../../src/discovery/http-metadata-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGvD,MAAM,WAAW,0BAA0B;IACzC,2DAA2D;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4FAA4F;IAC5F,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,qBAAa,oBAAqB,YAAW,gBAAgB;IAC3D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;gBAEhC,MAAM,CAAC,EAAE,0BAA0B;IAKzC,OAAO,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;CA0BhE"}
1
+ {"version":3,"file":"http-metadata-resolver.d.ts","sourceRoot":"","sources":["../../src/discovery/http-metadata-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGvD,MAAM,WAAW,0BAA0B;IACzC,2DAA2D;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4FAA4F;IAC5F,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,sFAAsF;IACtF,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,qBAAa,oBAAqB,YAAW,gBAAgB;IAC3D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAsB;gBAE1C,MAAM,CAAC,EAAE,0BAA0B;IAOzC,OAAO,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAyC/D,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,cAAc;CAGvB"}
@@ -2,24 +2,40 @@ import { debugWarn } from '../utils/debug.js';
2
2
  export class HttpMetadataResolver {
3
3
  timeoutMs;
4
4
  metadataPortOffset;
5
+ failureCooldownMs;
6
+ failedEndpoints;
5
7
  constructor(config) {
6
8
  this.timeoutMs = config?.timeoutMs ?? 5000;
7
9
  this.metadataPortOffset = config?.metadataPortOffset ?? 0;
10
+ this.failureCooldownMs = Math.max(0, config?.failureCooldownMs ?? 30_000);
11
+ this.failedEndpoints = new Map();
8
12
  }
9
13
  async resolve(peer) {
10
14
  const metadataPort = peer.port + this.metadataPortOffset;
15
+ const endpointKey = this.getEndpointKey(peer.host, metadataPort);
16
+ const now = Date.now();
17
+ const failedUntil = this.failedEndpoints.get(endpointKey);
18
+ if (failedUntil !== undefined) {
19
+ if (failedUntil > now) {
20
+ return null;
21
+ }
22
+ this.failedEndpoints.delete(endpointKey);
23
+ }
11
24
  const url = `http://${peer.host}:${metadataPort}/metadata`;
25
+ const controller = new AbortController();
26
+ const timeout = setTimeout(() => controller.abort(), this.timeoutMs);
12
27
  try {
13
- const controller = new AbortController();
14
- const timeout = setTimeout(() => controller.abort(), this.timeoutMs);
15
28
  const response = await fetch(url, { signal: controller.signal });
16
- clearTimeout(timeout);
17
29
  if (!response.ok) {
30
+ this.markEndpointFailure(endpointKey);
18
31
  return null;
19
32
  }
20
- return (await response.json());
33
+ const metadata = (await response.json());
34
+ this.failedEndpoints.delete(endpointKey);
35
+ return metadata;
21
36
  }
22
37
  catch (err) {
38
+ this.markEndpointFailure(endpointKey);
23
39
  const reason = err instanceof DOMException && err.name === 'AbortError'
24
40
  ? 'timeout'
25
41
  : err instanceof SyntaxError
@@ -28,6 +44,18 @@ export class HttpMetadataResolver {
28
44
  debugWarn(`[MetadataResolver] Failed to resolve ${url}: ${reason}`);
29
45
  return null;
30
46
  }
47
+ finally {
48
+ clearTimeout(timeout);
49
+ }
50
+ }
51
+ markEndpointFailure(endpointKey) {
52
+ if (this.failureCooldownMs <= 0) {
53
+ return;
54
+ }
55
+ this.failedEndpoints.set(endpointKey, Date.now() + this.failureCooldownMs);
56
+ }
57
+ getEndpointKey(host, port) {
58
+ return `${host.toLowerCase()}:${port}`;
31
59
  }
32
60
  }
33
61
  //# sourceMappingURL=http-metadata-resolver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"http-metadata-resolver.js","sourceRoot":"","sources":["../../src/discovery/http-metadata-resolver.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAS9C,MAAM,OAAO,oBAAoB;IACd,SAAS,CAAS;IAClB,kBAAkB,CAAS;IAE5C,YAAY,MAAmC;QAC7C,IAAI,CAAC,SAAS,GAAG,MAAM,EAAE,SAAS,IAAI,IAAI,CAAC;QAC3C,IAAI,CAAC,kBAAkB,GAAG,MAAM,EAAE,kBAAkB,IAAI,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAkB;QAC9B,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC;QACzD,MAAM,GAAG,GAAG,UAAU,IAAI,CAAC,IAAI,IAAI,YAAY,WAAW,CAAC;QAE3D,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;YACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAErE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;YACjE,YAAY,CAAC,OAAO,CAAC,CAAC;YAEtB,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAiB,CAAC;QACjD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,GAAG,YAAY,YAAY,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY;gBACrE,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,GAAG,YAAY,WAAW;oBAC1B,CAAC,CAAC,cAAc;oBAChB,CAAC,CAAC,eAAe,CAAC;YACtB,SAAS,CAAC,wCAAwC,GAAG,KAAK,MAAM,EAAE,CAAC,CAAC;YACpE,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"http-metadata-resolver.js","sourceRoot":"","sources":["../../src/discovery/http-metadata-resolver.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAW9C,MAAM,OAAO,oBAAoB;IACd,SAAS,CAAS;IAClB,kBAAkB,CAAS;IAC3B,iBAAiB,CAAS;IAC1B,eAAe,CAAsB;IAEtD,YAAY,MAAmC;QAC7C,IAAI,CAAC,SAAS,GAAG,MAAM,EAAE,SAAS,IAAI,IAAI,CAAC;QAC3C,IAAI,CAAC,kBAAkB,GAAG,MAAM,EAAE,kBAAkB,IAAI,CAAC,CAAC;QAC1D,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,iBAAiB,IAAI,MAAM,CAAC,CAAC;QAC1E,IAAI,CAAC,eAAe,GAAG,IAAI,GAAG,EAAE,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAkB;QAC9B,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC;QACzD,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QACjE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC1D,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,IAAI,WAAW,GAAG,GAAG,EAAE,CAAC;gBACtB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAC3C,CAAC;QAED,MAAM,GAAG,GAAG,UAAU,IAAI,CAAC,IAAI,IAAI,YAAY,WAAW,CAAC;QAE3D,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACrE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;YAEjE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;gBACtC,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,QAAQ,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAiB,CAAC;YACzD,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACzC,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;YACtC,MAAM,MAAM,GAAG,GAAG,YAAY,YAAY,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY;gBACrE,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,GAAG,YAAY,WAAW;oBAC1B,CAAC,CAAC,cAAc;oBAChB,CAAC,CAAC,eAAe,CAAC;YACtB,SAAS,CAAC,wCAAwC,GAAG,KAAK,MAAM,EAAE,CAAC,CAAC;YACpE,OAAO,IAAI,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAEO,mBAAmB,CAAC,WAAmB;QAC7C,IAAI,IAAI,CAAC,iBAAiB,IAAI,CAAC,EAAE,CAAC;YAChC,OAAO;QACT,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC7E,CAAC;IAEO,cAAc,CAAC,IAAY,EAAE,IAAY;QAC/C,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC;IACzC,CAAC;CACF"}
@@ -5,7 +5,7 @@ export { scorePeer, rankPeers, selectBestPeer, selectDiversePeers, DEFAULT_SCORI
5
5
  export { OFFICIAL_BOOTSTRAP_NODES, parseBootstrapList, mergeBootstrapNodes, toBootstrapConfig, type BootstrapNode } from './bootstrap.js';
6
6
  export { encodeMetadata, encodeMetadataForSigning, decodeMetadata } from './metadata-codec.js';
7
7
  export { validateMetadata, MAX_METADATA_SIZE, MAX_PROVIDERS, type ValidationError } from './metadata-validator.js';
8
- export { METADATA_VERSION, type PeerMetadata, type ProviderAnnouncement } from './peer-metadata.js';
8
+ export { METADATA_VERSION, WELL_KNOWN_MODEL_CATEGORIES, type PeerMetadata, type ProviderAnnouncement } from './peer-metadata.js';
9
9
  export { type MetadataResolver, type PeerEndpoint } from './metadata-resolver.js';
10
10
  export { DefaultMetadataResolver } from './default-metadata-resolver.js';
11
11
  export { HttpMetadataResolver, type HttpMetadataResolverConfig } from './http-metadata-resolver.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/discovery/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAChH,OAAO,EAAE,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC3G,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACjL,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC1I,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC/F,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AACnH,OAAO,EAAE,gBAAgB,EAAE,KAAK,YAAY,EAAE,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACpG,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAClF,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,KAAK,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACpG,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC7H,OAAO,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,KAAK,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC5G,OAAO,EAAE,gBAAgB,EAAE,KAAK,sBAAsB,EAAE,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/discovery/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAChH,OAAO,EAAE,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC3G,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACjL,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC1I,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC/F,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AACnH,OAAO,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,KAAK,YAAY,EAAE,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACjI,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAClF,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,KAAK,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACpG,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC7H,OAAO,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,KAAK,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC5G,OAAO,EAAE,gBAAgB,EAAE,KAAK,sBAAsB,EAAE,MAAM,0BAA0B,CAAC"}
@@ -5,7 +5,7 @@ export { scorePeer, rankPeers, selectBestPeer, selectDiversePeers, DEFAULT_SCORI
5
5
  export { OFFICIAL_BOOTSTRAP_NODES, parseBootstrapList, mergeBootstrapNodes, toBootstrapConfig } from './bootstrap.js';
6
6
  export { encodeMetadata, encodeMetadataForSigning, decodeMetadata } from './metadata-codec.js';
7
7
  export { validateMetadata, MAX_METADATA_SIZE, MAX_PROVIDERS } from './metadata-validator.js';
8
- export { METADATA_VERSION } from './peer-metadata.js';
8
+ export { METADATA_VERSION, WELL_KNOWN_MODEL_CATEGORIES } from './peer-metadata.js';
9
9
  export { DefaultMetadataResolver } from './default-metadata-resolver.js';
10
10
  export { HttpMetadataResolver } from './http-metadata-resolver.js';
11
11
  export { DHTHealthMonitor, DEFAULT_HEALTH_THRESHOLDS } from './dht-health.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/discovery/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,aAAa,EAAsB,MAAM,eAAe,CAAC;AAChH,OAAO,EAAE,aAAa,EAAwB,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAwC,MAAM,kBAAkB,CAAC;AAC3G,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,kBAAkB,EAAE,uBAAuB,EAA4D,MAAM,oBAAoB,CAAC;AACjL,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,iBAAiB,EAAsB,MAAM,gBAAgB,CAAC;AAC1I,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC/F,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,aAAa,EAAwB,MAAM,yBAAyB,CAAC;AACnH,OAAO,EAAE,gBAAgB,EAAgD,MAAM,oBAAoB,CAAC;AAEpG,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAmC,MAAM,6BAA6B,CAAC;AACpG,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAiD,MAAM,iBAAiB,CAAC;AAC7H,OAAO,EAAE,cAAc,EAA6B,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAqD,MAAM,qBAAqB,CAAC;AAC5G,OAAO,EAAE,gBAAgB,EAA+B,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/discovery/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,aAAa,EAAsB,MAAM,eAAe,CAAC;AAChH,OAAO,EAAE,aAAa,EAAwB,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAwC,MAAM,kBAAkB,CAAC;AAC3G,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,kBAAkB,EAAE,uBAAuB,EAA4D,MAAM,oBAAoB,CAAC;AACjL,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,iBAAiB,EAAsB,MAAM,gBAAgB,CAAC;AAC1I,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC/F,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,aAAa,EAAwB,MAAM,yBAAyB,CAAC;AACnH,OAAO,EAAE,gBAAgB,EAAE,2BAA2B,EAAgD,MAAM,oBAAoB,CAAC;AAEjI,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAmC,MAAM,6BAA6B,CAAC;AACpG,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAiD,MAAM,iBAAiB,CAAC;AAC7H,OAAO,EAAE,cAAc,EAA6B,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAqD,MAAM,qBAAqB,CAAC;AAC5G,OAAO,EAAE,gBAAgB,EAA+B,MAAM,0BAA0B,CAAC"}
@@ -6,8 +6,12 @@ import type { PeerMetadata } from "./peer-metadata.js";
6
6
  * [providerLen:1][provider:N][modelCount:1][models...]
7
7
  * [defaultInputPrice:4][defaultOutputPrice:4]
8
8
  * [modelPricingCount:1][modelPricingEntries...]
9
+ * [modelCategoryCount:1][modelCategoryEntries...] (v3+ only)
9
10
  * [maxConcurrency:2][currentLoad:2]
10
11
  * modelPricingEntry: [modelLen:1][model:N][inputPrice:4][outputPrice:4]
12
+ * modelCategoryEntry(v3+): [modelLen:1][model:N][categoryCount:1][categories...]
13
+ * category(v3+): [categoryLen:1][category:N]
14
+ * [displayNameFlag:1][displayNameLen:1][displayName:N] (v3+ only)
11
15
  * [signature:64]
12
16
  */
13
17
  export declare function encodeMetadata(metadata: PeerMetadata): Uint8Array;
@@ -1 +1 @@
1
- {"version":3,"file":"metadata-codec.d.ts","sourceRoot":"","sources":["../../src/discovery/metadata-codec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAKvD;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,YAAY,GAAG,UAAU,CAQjE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,YAAY,GAAG,UAAU,CAE3E;AAkKD;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,YAAY,CAgQ7D"}
1
+ {"version":3,"file":"metadata-codec.d.ts","sourceRoot":"","sources":["../../src/discovery/metadata-codec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAOvD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,YAAY,GAAG,UAAU,CAQjE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,YAAY,GAAG,UAAU,CAE3E;AA4MD;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,YAAY,CAmT7D"}