@antseed/node 0.1.2 → 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 (35) hide show
  1. package/dist/discovery/announcer.d.ts +11 -0
  2. package/dist/discovery/announcer.d.ts.map +1 -1
  3. package/dist/discovery/announcer.js +103 -70
  4. package/dist/discovery/announcer.js.map +1 -1
  5. package/dist/discovery/index.d.ts +1 -1
  6. package/dist/discovery/index.d.ts.map +1 -1
  7. package/dist/discovery/index.js +1 -1
  8. package/dist/discovery/index.js.map +1 -1
  9. package/dist/discovery/metadata-codec.d.ts +4 -0
  10. package/dist/discovery/metadata-codec.d.ts.map +1 -1
  11. package/dist/discovery/metadata-codec.js +89 -0
  12. package/dist/discovery/metadata-codec.js.map +1 -1
  13. package/dist/discovery/metadata-validator.d.ts +3 -0
  14. package/dist/discovery/metadata-validator.d.ts.map +1 -1
  15. package/dist/discovery/metadata-validator.js +72 -0
  16. package/dist/discovery/metadata-validator.js.map +1 -1
  17. package/dist/discovery/peer-metadata.d.ts +4 -1
  18. package/dist/discovery/peer-metadata.d.ts.map +1 -1
  19. package/dist/discovery/peer-metadata.js +9 -1
  20. package/dist/discovery/peer-metadata.js.map +1 -1
  21. package/dist/index.d.ts +1 -1
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +1 -0
  24. package/dist/index.js.map +1 -1
  25. package/dist/interfaces/seller-provider.d.ts +2 -0
  26. package/dist/interfaces/seller-provider.d.ts.map +1 -1
  27. package/dist/node.d.ts +11 -0
  28. package/dist/node.d.ts.map +1 -1
  29. package/dist/node.js +150 -59
  30. package/dist/node.js.map +1 -1
  31. package/dist/p2p/message-protocol.js +3 -3
  32. package/dist/p2p/message-protocol.js.map +1 -1
  33. package/dist/types/peer.d.ts +5 -0
  34. package/dist/types/peer.d.ts.map +1 -1
  35. package/package.json +1 -1
@@ -5,6 +5,10 @@ export const MAX_PROVIDERS = 10;
5
5
  export const MAX_MODELS_PER_PROVIDER = 20;
6
6
  export const MAX_MODEL_NAME_LENGTH = 64;
7
7
  export const MAX_REGION_LENGTH = 32;
8
+ export const MAX_DISPLAY_NAME_LENGTH = 64;
9
+ export const MAX_MODEL_CATEGORIES_PER_MODEL = 8;
10
+ export const MAX_MODEL_CATEGORY_LENGTH = 32;
11
+ const MODEL_CATEGORY_PATTERN = /^[a-z0-9][a-z0-9-]*$/;
8
12
  export function validateMetadata(metadata) {
9
13
  const errors = [];
10
14
  // version
@@ -34,6 +38,20 @@ export function validateMetadata(metadata) {
34
38
  message: `Region length ${metadata.region.length} exceeds max ${MAX_REGION_LENGTH}`,
35
39
  });
36
40
  }
41
+ if (metadata.displayName !== undefined) {
42
+ if (metadata.displayName.trim().length === 0) {
43
+ errors.push({
44
+ field: "displayName",
45
+ message: "Display name must not be empty when provided",
46
+ });
47
+ }
48
+ else if (metadata.displayName.length > MAX_DISPLAY_NAME_LENGTH) {
49
+ errors.push({
50
+ field: "displayName",
51
+ message: `Display name length ${metadata.displayName.length} exceeds max ${MAX_DISPLAY_NAME_LENGTH}`,
52
+ });
53
+ }
54
+ }
37
55
  // timestamp
38
56
  if (metadata.timestamp <= 0 || !Number.isFinite(metadata.timestamp)) {
39
57
  errors.push({
@@ -104,6 +122,60 @@ export function validateMetadata(metadata) {
104
122
  }
105
123
  }
106
124
  }
125
+ if (p.modelCategories !== undefined) {
126
+ for (const [modelName, categories] of Object.entries(p.modelCategories)) {
127
+ if (!p.models.includes(modelName)) {
128
+ errors.push({
129
+ field: `providers[${i}].modelCategories.${modelName}`,
130
+ message: "Model categories must reference a model listed in providers[].models",
131
+ });
132
+ }
133
+ if (!Array.isArray(categories) || categories.length === 0) {
134
+ errors.push({
135
+ field: `providers[${i}].modelCategories.${modelName}`,
136
+ message: "Model categories must be a non-empty string array",
137
+ });
138
+ continue;
139
+ }
140
+ if (categories.length > MAX_MODEL_CATEGORIES_PER_MODEL) {
141
+ errors.push({
142
+ field: `providers[${i}].modelCategories.${modelName}`,
143
+ message: `Model category count ${categories.length} exceeds max ${MAX_MODEL_CATEGORIES_PER_MODEL}`,
144
+ });
145
+ }
146
+ const deduped = new Set();
147
+ for (let j = 0; j < categories.length; j++) {
148
+ const category = categories[j];
149
+ if (typeof category !== "string" || category.trim().length === 0) {
150
+ errors.push({
151
+ field: `providers[${i}].modelCategories.${modelName}[${j}]`,
152
+ message: "Model category must be a non-empty string",
153
+ });
154
+ continue;
155
+ }
156
+ const normalized = category.trim().toLowerCase();
157
+ if (normalized.length > MAX_MODEL_CATEGORY_LENGTH) {
158
+ errors.push({
159
+ field: `providers[${i}].modelCategories.${modelName}[${j}]`,
160
+ message: `Model category length ${normalized.length} exceeds max ${MAX_MODEL_CATEGORY_LENGTH}`,
161
+ });
162
+ }
163
+ if (!MODEL_CATEGORY_PATTERN.test(normalized)) {
164
+ errors.push({
165
+ field: `providers[${i}].modelCategories.${modelName}[${j}]`,
166
+ message: "Model category must use lowercase letters, digits, or hyphen",
167
+ });
168
+ }
169
+ if (deduped.has(normalized)) {
170
+ errors.push({
171
+ field: `providers[${i}].modelCategories.${modelName}[${j}]`,
172
+ message: "Model category values must be unique per model",
173
+ });
174
+ }
175
+ deduped.add(normalized);
176
+ }
177
+ }
178
+ }
107
179
  // concurrency
108
180
  if (p.maxConcurrency < 1) {
109
181
  errors.push({
@@ -1 +1 @@
1
- {"version":3,"file":"metadata-validator.js","sourceRoot":"","sources":["../../src/discovery/metadata-validator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"metadata-validator.js","sourceRoot":"","sources":["../../src/discovery/metadata-validator.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import type { PeerId } from "../types/peer.js";
2
2
  import type { PeerOffering } from "../types/capability.js";
3
- export declare const METADATA_VERSION = 2;
3
+ export declare const METADATA_VERSION = 3;
4
+ export declare const WELL_KNOWN_MODEL_CATEGORIES: readonly ["privacy", "legal", "uncensored", "coding", "finance", "tee"];
4
5
  export interface TokenPricingUsdPerMillion {
5
6
  inputUsdPerMillion: number;
6
7
  outputUsdPerMillion: number;
@@ -10,12 +11,14 @@ export interface ProviderAnnouncement {
10
11
  models: string[];
11
12
  defaultPricing: TokenPricingUsdPerMillion;
12
13
  modelPricing?: Record<string, TokenPricingUsdPerMillion>;
14
+ modelCategories?: Record<string, string[]>;
13
15
  maxConcurrency: number;
14
16
  currentLoad: number;
15
17
  }
16
18
  export interface PeerMetadata {
17
19
  peerId: PeerId;
18
20
  version: number;
21
+ displayName?: string;
19
22
  providers: ProviderAnnouncement[];
20
23
  offerings?: PeerOffering[];
21
24
  region: string;
@@ -1 +1 @@
1
- {"version":3,"file":"peer-metadata.d.ts","sourceRoot":"","sources":["../../src/discovery/peer-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC,MAAM,WAAW,yBAAyB;IACxC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,cAAc,EAAE,yBAAyB,CAAC;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;IACzD,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,oBAAoB,EAAE,CAAC;IAClC,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;CACnB"}
1
+ {"version":3,"file":"peer-metadata.d.ts","sourceRoot":"","sources":["../../src/discovery/peer-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAClC,eAAO,MAAM,2BAA2B,yEAO9B,CAAC;AAEX,MAAM,WAAW,yBAAyB;IACxC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,cAAc,EAAE,yBAAyB,CAAC;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;IACzD,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3C,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,oBAAoB,EAAE,CAAC;IAClC,SAAS,CAAC,EAAE,YAAY,EAAE,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;CACnB"}
@@ -1,2 +1,10 @@
1
- export const METADATA_VERSION = 2;
1
+ export const METADATA_VERSION = 3;
2
+ export const WELL_KNOWN_MODEL_CATEGORIES = [
3
+ "privacy",
4
+ "legal",
5
+ "uncensored",
6
+ "coding",
7
+ "finance",
8
+ "tee",
9
+ ];
2
10
  //# sourceMappingURL=peer-metadata.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"peer-metadata.js","sourceRoot":"","sources":["../../src/discovery/peer-metadata.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC"}
1
+ {"version":3,"file":"peer-metadata.js","sourceRoot":"","sources":["../../src/discovery/peer-metadata.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAClC,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,SAAS;IACT,OAAO;IACP,YAAY;IACZ,QAAQ;IACR,SAAS;IACT,KAAK;CACG,CAAC"}
package/dist/index.d.ts CHANGED
@@ -5,7 +5,7 @@ export * from './types/index.js';
5
5
  export { loadOrCreateIdentity, type Identity } from './p2p/identity.js';
6
6
  export { DHTNode, DEFAULT_DHT_CONFIG } from './discovery/dht-node.js';
7
7
  export { OFFICIAL_BOOTSTRAP_NODES, mergeBootstrapNodes, toBootstrapConfig } from './discovery/bootstrap.js';
8
- export { type PeerMetadata, type ProviderAnnouncement } from './discovery/peer-metadata.js';
8
+ export { WELL_KNOWN_MODEL_CATEGORIES, type PeerMetadata, type ProviderAnnouncement } from './discovery/peer-metadata.js';
9
9
  export { MetadataServer, type MetadataServerConfig } from './discovery/metadata-server.js';
10
10
  export { MeteringStorage } from './metering/storage.js';
11
11
  export { BalanceManager } from './payments/balance-manager.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,WAAW,EACX,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,6BAA6B,GACnC,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,QAAQ,EAAE,uBAAuB,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAC9I,YAAY,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAG3D,cAAc,kBAAkB,CAAC;AAGjC,OAAO,EAAE,oBAAoB,EAAE,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC5G,OAAO,EAAE,2BAA2B,EAAE,KAAK,YAAY,EAAE,KAAK,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACzH,OAAO,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAC3F,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAC1F,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,KAAK,UAAU,EAAE,KAAK,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAChG,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACjG,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,KAAK,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAEtF,YAAY,EAAE,aAAa,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACrI,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAG9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACvF,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC/E,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACrF,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAChG,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGtF,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAG7F,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACnG,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,WAAW,EACX,YAAY,EACZ,oBAAoB,GACrB,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,KAAK,cAAc,EACnB,KAAK,YAAY,GAClB,MAAM,2BAA2B,CAAA"}
package/dist/index.js CHANGED
@@ -6,6 +6,7 @@ export * from './types/index.js';
6
6
  export { loadOrCreateIdentity } from './p2p/identity.js';
7
7
  export { DHTNode, DEFAULT_DHT_CONFIG } from './discovery/dht-node.js';
8
8
  export { OFFICIAL_BOOTSTRAP_NODES, mergeBootstrapNodes, toBootstrapConfig } from './discovery/bootstrap.js';
9
+ export { WELL_KNOWN_MODEL_CATEGORIES } from './discovery/peer-metadata.js';
9
10
  export { MetadataServer } from './discovery/metadata-server.js';
10
11
  export { MeteringStorage } from './metering/storage.js';
11
12
  export { BalanceManager } from './payments/balance-manager.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,OAAO,EACL,WAAW,GAMZ,MAAM,WAAW,CAAC;AAInB,+BAA+B;AAC/B,cAAc,kBAAkB,CAAC;AAEjC,uCAAuC;AACvC,OAAO,EAAE,oBAAoB,EAAiB,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE5G,OAAO,EAAE,cAAc,EAA6B,MAAM,gCAAgC,CAAC;AAC3F,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAyB,MAAM,iCAAiC,CAAC;AAC1F,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtF,OAAO,EAAE,YAAY,EAA4C,MAAM,wBAAwB,CAAC;AAChG,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAE1E,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,aAAa,EAA4B,MAAM,6BAA6B,CAAC;AAGtF,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAGhE,aAAa;AACb,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAGvF,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAE/D,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAG/D,iBAAiB;AACjB,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAGnE,0BAA0B;AAC1B,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACnG,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,WAAW,EACX,YAAY,EACZ,oBAAoB,GACrB,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EACL,gBAAgB,EAChB,cAAc,GAGf,MAAM,2BAA2B,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,OAAO,EACL,WAAW,GAMZ,MAAM,WAAW,CAAC;AAInB,+BAA+B;AAC/B,cAAc,kBAAkB,CAAC;AAEjC,uCAAuC;AACvC,OAAO,EAAE,oBAAoB,EAAiB,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC5G,OAAO,EAAE,2BAA2B,EAAgD,MAAM,8BAA8B,CAAC;AACzH,OAAO,EAAE,cAAc,EAA6B,MAAM,gCAAgC,CAAC;AAC3F,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAyB,MAAM,iCAAiC,CAAC;AAC1F,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtF,OAAO,EAAE,YAAY,EAA4C,MAAM,wBAAwB,CAAC;AAChG,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAE1E,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,aAAa,EAA4B,MAAM,6BAA6B,CAAC;AAGtF,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAGhE,aAAa;AACb,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAGvF,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAE/D,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAG/D,iBAAiB;AACjB,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAGnE,0BAA0B;AAC1B,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACnG,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,WAAW,EACX,YAAY,EACZ,oBAAoB,GACrB,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EACL,gBAAgB,EAChB,cAAc,GAGf,MAAM,2BAA2B,CAAA"}
@@ -22,6 +22,8 @@ export interface Provider {
22
22
  models: string[];
23
23
  /** Seller pricing in USD per 1M tokens (defaults + optional per-model overrides). */
24
24
  pricing: ProviderPricing;
25
+ /** Optional model category tags used for discovery metadata. */
26
+ modelCategories?: Record<string, string[]>;
25
27
  /** Maximum concurrent requests this provider can handle */
26
28
  maxConcurrency: number;
27
29
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"seller-provider.d.ts","sourceRoot":"","sources":["../../src/interfaces/seller-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AACnH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,MAAM,WAAW,iCAAiC;IAChD,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,iCAAiC,CAAC;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iCAAiC,CAAC,CAAC;CAC5D;AAED;;;;;;GAMG;AACH,MAAM,WAAW,QAAQ;IACvB,kFAAkF;IAClF,IAAI,EAAE,MAAM,CAAC;IAEb,0GAA0G;IAC1G,MAAM,EAAE,MAAM,EAAE,CAAC;IAEjB,qFAAqF;IACrF,OAAO,EAAE,eAAe,CAAC;IAEzB,2DAA2D;IAC3D,cAAc,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,aAAa,CAAC,GAAG,EAAE,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAE3E;;;;;;OAMG;IACH,mBAAmB,CAAC,CAClB,GAAG,EAAE,qBAAqB,EAC1B,SAAS,EAAE,uBAAuB,GACjC,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAEnC,sEAAsE;IACtE,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB,2DAA2D;IAC3D,WAAW,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAEhD,2EAA2E;IAC3E,YAAY,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAEpC,6EAA6E;IAC7E,UAAU,CAAC,CAAC,IAAI,EAAE,WAAW,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;IAEzD,uCAAuC;IACvC,WAAW,CAAC,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;CAC3D;AAED,MAAM,WAAW,uBAAuB;IACtC,eAAe,EAAE,CAAC,QAAQ,EAAE,sBAAsB,KAAK,IAAI,CAAC;IAC5D,eAAe,EAAE,CAAC,KAAK,EAAE,2BAA2B,KAAK,IAAI,CAAC;CAC/D;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,kBAAkB,CAAC;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,cAAc,GAAG,OAAO,CAAC;IACvD,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,kBAAkB,CAAC;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,UAAU,EAAE,MAAM,CAAC;CACpB"}
1
+ {"version":3,"file":"seller-provider.d.ts","sourceRoot":"","sources":["../../src/interfaces/seller-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AACnH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,MAAM,WAAW,iCAAiC;IAChD,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,iCAAiC,CAAC;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iCAAiC,CAAC,CAAC;CAC5D;AAED;;;;;;GAMG;AACH,MAAM,WAAW,QAAQ;IACvB,kFAAkF;IAClF,IAAI,EAAE,MAAM,CAAC;IAEb,0GAA0G;IAC1G,MAAM,EAAE,MAAM,EAAE,CAAC;IAEjB,qFAAqF;IACrF,OAAO,EAAE,eAAe,CAAC;IAEzB,gEAAgE;IAChE,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAE3C,2DAA2D;IAC3D,cAAc,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,aAAa,CAAC,GAAG,EAAE,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAE3E;;;;;;OAMG;IACH,mBAAmB,CAAC,CAClB,GAAG,EAAE,qBAAqB,EAC1B,SAAS,EAAE,uBAAuB,GACjC,OAAO,CAAC,sBAAsB,CAAC,CAAC;IAEnC,sEAAsE;IACtE,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB,2DAA2D;IAC3D,WAAW,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAEhD,2EAA2E;IAC3E,YAAY,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAEpC,6EAA6E;IAC7E,UAAU,CAAC,CAAC,IAAI,EAAE,WAAW,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;IAEzD,uCAAuC;IACvC,WAAW,CAAC,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;CAC3D;AAED,MAAM,WAAW,uBAAuB;IACtC,eAAe,EAAE,CAAC,QAAQ,EAAE,sBAAsB,KAAK,IAAI,CAAC;IAC5D,eAAe,EAAE,CAAC,KAAK,EAAE,2BAA2B,KAAK,IAAI,CAAC;CAC/D;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,kBAAkB,CAAC;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,cAAc,GAAG,OAAO,CAAC;IACvD,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,kBAAkB,CAAC;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,UAAU,EAAE,MAAM,CAAC;CACpB"}
package/dist/node.d.ts CHANGED
@@ -33,6 +33,7 @@ export interface NodePaymentsConfig {
33
33
  }
34
34
  export interface NodeConfig {
35
35
  role: 'seller' | 'buyer';
36
+ displayName?: string;
36
37
  dataDir?: string;
37
38
  dhtPort?: number;
38
39
  signalingPort?: number;
@@ -41,6 +42,10 @@ export interface NodeConfig {
41
42
  port: number;
42
43
  }>;
43
44
  requestTimeoutMs?: number;
45
+ /** Maximum buffered body size (bytes) while reconstructing streaming responses. Default: 16 MiB. */
46
+ maxStreamBufferBytes?: number;
47
+ /** Maximum wall time allowed for a streaming response. Default: 5 minutes. */
48
+ maxStreamDurationMs?: number;
44
49
  /** Allow private/loopback IPs in DHT lookups. Default: false. Set true for local testing. */
45
50
  allowPrivateIPs?: boolean;
46
51
  /** Optional seller-side payment runtime wiring. */
@@ -69,6 +74,7 @@ export interface RequestStreamCallbacks {
69
74
  onResponseChunk?: (chunk: SerializedHttpResponseChunk) => void;
70
75
  }
71
76
  export declare class AntseedNode extends EventEmitter {
77
+ private static readonly _METADATA_REFRESH_DEBOUNCE_MS;
72
78
  private _config;
73
79
  private _identity;
74
80
  private _dht;
@@ -86,6 +92,8 @@ export declare class AntseedNode extends EventEmitter {
86
92
  private _balanceManager;
87
93
  private _escrowClient;
88
94
  private _paymentMuxes;
95
+ private _providerLoadCounts;
96
+ private _metadataRefreshTimer;
89
97
  /** Per-buyer session tracking: buyerPeerId → seller session state */
90
98
  private _sessions;
91
99
  private _settlementTimers;
@@ -185,5 +193,8 @@ export declare class AntseedNode extends EventEmitter {
185
193
  */
186
194
  private _endAllBuyerSessions;
187
195
  private _lookupResultToPeerInfo;
196
+ private _adjustProviderLoad;
197
+ private _scheduleMetadataRefresh;
198
+ private _unrefTimer;
188
199
  }
189
200
  //# sourceMappingURL=node.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"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"}
package/dist/node.js CHANGED
@@ -25,6 +25,7 @@ import { debugLog, debugWarn } from "./utils/debug.js";
25
25
  import { BuyerPaymentManager } from "./payments/buyer-payment-manager.js";
26
26
  import { identityToEvmAddress } from "./payments/evm/keypair.js";
27
27
  export class AntseedNode extends EventEmitter {
28
+ static _METADATA_REFRESH_DEBOUNCE_MS = 200;
28
29
  _config;
29
30
  _identity = null;
30
31
  _dht = null;
@@ -42,6 +43,8 @@ export class AntseedNode extends EventEmitter {
42
43
  _balanceManager = null;
43
44
  _escrowClient = null;
44
45
  _paymentMuxes = new Map();
46
+ _providerLoadCounts = new Map();
47
+ _metadataRefreshTimer = null;
45
48
  /** Per-buyer session tracking: buyerPeerId → seller session state */
46
49
  _sessions = new Map();
47
50
  _settlementTimers = new Map();
@@ -147,6 +150,11 @@ export class AntseedNode extends EventEmitter {
147
150
  clearTimeout(timer);
148
151
  }
149
152
  this._settlementTimers.clear();
153
+ if (this._metadataRefreshTimer) {
154
+ clearTimeout(this._metadataRefreshTimer);
155
+ this._metadataRefreshTimer = null;
156
+ }
157
+ this._providerLoadCounts.clear();
150
158
  // Remove NAT port mappings
151
159
  if (this._nat) {
152
160
  await this._nat.cleanup();
@@ -266,12 +274,16 @@ export class AntseedNode extends EventEmitter {
266
274
  const startTime = Date.now();
267
275
  return new Promise((resolve, reject) => {
268
276
  const timeoutMs = this._config.requestTimeoutMs ?? 30_000;
277
+ const maxStreamBufferBytes = Math.max(1, this._config.maxStreamBufferBytes ?? 16 * 1024 * 1024);
278
+ const maxStreamDurationMs = Math.max(1, this._config.maxStreamDurationMs ?? 5 * 60_000);
269
279
  // Idle timeout for streaming: resets on each chunk so long-running
270
280
  // streams (thinking models, large outputs) stay alive as long as
271
281
  // data keeps flowing.
272
282
  const streamIdleTimeoutMs = Math.max(timeoutMs, 60_000);
273
283
  let settled = false;
274
284
  let streamStarted = false;
285
+ let streamStartedAtMs = 0;
286
+ let streamBufferedBytes = 0;
275
287
  let streamStartResponse = null;
276
288
  const streamChunks = [];
277
289
  let activeTimeout = null;
@@ -308,8 +320,12 @@ export class AntseedNode extends EventEmitter {
308
320
  reject(error);
309
321
  };
310
322
  mux.sendProxyRequest(req, (response, metadata) => {
323
+ if (settled)
324
+ return;
311
325
  if (metadata.streamingStart) {
312
326
  streamStarted = true;
327
+ streamStartedAtMs = Date.now();
328
+ streamBufferedBytes = 0;
313
329
  streamStartResponse = this._stripStreamingHeader(response);
314
330
  // Switch to streaming idle timeout: resets on each chunk.
315
331
  resetTimeout(streamIdleTimeoutMs);
@@ -319,10 +335,26 @@ export class AntseedNode extends EventEmitter {
319
335
  callbacks?.onResponseStart?.(this._stripStreamingHeader(response), { streaming: false });
320
336
  finish(response);
321
337
  }, (chunk) => {
338
+ if (settled)
339
+ return;
322
340
  if (!streamStarted)
323
341
  return;
324
342
  // Reset idle timeout on each chunk so streaming stays alive.
325
343
  resetTimeout(streamIdleTimeoutMs);
344
+ if (Date.now() - streamStartedAtMs > maxStreamDurationMs) {
345
+ mux.cancelProxyRequest(req.requestId);
346
+ fail(new Error(`Stream ${req.requestId} exceeded max duration (${maxStreamDurationMs}ms)`));
347
+ return;
348
+ }
349
+ if (chunk.data.length > 0) {
350
+ const nextBufferedBytes = streamBufferedBytes + chunk.data.length;
351
+ if (nextBufferedBytes > maxStreamBufferBytes) {
352
+ mux.cancelProxyRequest(req.requestId);
353
+ fail(new Error(`Stream ${req.requestId} exceeded max buffered size (${maxStreamBufferBytes} bytes)`));
354
+ return;
355
+ }
356
+ streamBufferedBytes = nextBufferedBytes;
357
+ }
326
358
  callbacks?.onResponseChunk?.(chunk);
327
359
  if (chunk.data.length > 0) {
328
360
  streamChunks.push(chunk.data);
@@ -391,7 +423,16 @@ export class AntseedNode extends EventEmitter {
391
423
  _wireConnection(conn, peerId) {
392
424
  const decoder = new FrameDecoder();
393
425
  conn.on("message", (data) => {
394
- const frames = decoder.feed(data);
426
+ let frames;
427
+ try {
428
+ frames = decoder.feed(data);
429
+ }
430
+ catch (err) {
431
+ const message = err instanceof Error ? err.message : String(err);
432
+ debugWarn(`[Node] Failed to decode frame from ${peerId.slice(0, 12)}...: ${message}`);
433
+ conn.fail(err instanceof Error ? err : new Error(message));
434
+ return;
435
+ }
395
436
  const proxyMux = this._muxes.get(peerId);
396
437
  const paymentMux = this._paymentMuxes.get(peerId);
397
438
  for (const frame of frames) {
@@ -478,8 +519,10 @@ export class AntseedNode extends EventEmitter {
478
519
  providers: this._providers.map((p) => ({
479
520
  provider: p.name,
480
521
  models: p.models,
522
+ ...(p.modelCategories ? { modelCategories: { ...p.modelCategories } } : {}),
481
523
  maxConcurrency: p.maxConcurrency,
482
524
  })),
525
+ ...(this._config.displayName ? { displayName: this._config.displayName } : {}),
483
526
  region: "unknown",
484
527
  pricing: new Map(this._providers.map((p) => [
485
528
  p.name,
@@ -574,7 +617,10 @@ export class AntseedNode extends EventEmitter {
574
617
  });
575
618
  return;
576
619
  }
577
- const provider = this._providers.find((p) => p.models.some((m) => request.path.includes(m)) || this._providers.length === 1);
620
+ const requestedModel = this._extractRequestedModel(request);
621
+ const provider = this._providers.find((p) => p.models.length === 0
622
+ || (requestedModel && p.models.includes(requestedModel))
623
+ || this._providers.length === 1);
578
624
  if (!provider) {
579
625
  debugWarn(`[Node] No matching provider for ${request.path}`);
580
626
  mux.sendProxyResponse({
@@ -593,60 +639,66 @@ export class AntseedNode extends EventEmitter {
593
639
  let statusCode = 500;
594
640
  let responseBody = new Uint8Array(0);
595
641
  let streamedResponseStarted = false;
642
+ this._adjustProviderLoad(provider.name, 1);
596
643
  try {
597
- const response = await this._executeProviderRequest(provider, request, {
598
- onResponseStart: (streamResponseStart) => {
599
- streamedResponseStarted = true;
600
- statusCode = streamResponseStart.statusCode;
601
- mux.sendProxyResponse(streamResponseStart);
602
- },
603
- onResponseChunk: (chunk) => {
604
- if (!streamedResponseStarted)
605
- return;
606
- mux.sendProxyChunk(chunk);
607
- },
608
- });
609
- statusCode = response.statusCode;
610
- responseBody = response.body;
611
- debugLog(`[Node] Provider responded: status=${statusCode} (${Date.now() - startTime}ms, ${responseBody.length}b)`);
612
- if (!streamedResponseStarted) {
613
- mux.sendProxyResponse(response);
614
- }
615
- }
616
- catch (err) {
617
- const message = err instanceof Error ? err.message : "Internal error";
618
- debugWarn(`[Node] Provider error after ${Date.now() - startTime}ms: ${message}`);
619
- responseBody = new TextEncoder().encode(message);
620
- if (streamedResponseStarted) {
621
- mux.sendProxyChunk({
622
- requestId: request.requestId,
623
- data: new TextEncoder().encode(`event: error\ndata: ${message}\n\n`),
624
- done: false,
625
- });
626
- mux.sendProxyChunk({
627
- requestId: request.requestId,
628
- data: new Uint8Array(0),
629
- done: true,
644
+ try {
645
+ const response = await this._executeProviderRequest(provider, request, {
646
+ onResponseStart: (streamResponseStart) => {
647
+ streamedResponseStarted = true;
648
+ statusCode = streamResponseStart.statusCode;
649
+ mux.sendProxyResponse(streamResponseStart);
650
+ },
651
+ onResponseChunk: (chunk) => {
652
+ if (!streamedResponseStarted)
653
+ return;
654
+ mux.sendProxyChunk(chunk);
655
+ },
630
656
  });
657
+ statusCode = response.statusCode;
658
+ responseBody = response.body;
659
+ debugLog(`[Node] Provider responded: status=${statusCode} (${Date.now() - startTime}ms, ${responseBody.length}b)`);
660
+ if (!streamedResponseStarted) {
661
+ mux.sendProxyResponse(response);
662
+ }
631
663
  }
632
- else {
633
- statusCode = 500;
634
- mux.sendProxyResponse({
635
- requestId: request.requestId,
636
- statusCode: 500,
637
- headers: { "content-type": "text/plain" },
638
- body: responseBody,
639
- });
664
+ catch (err) {
665
+ const message = err instanceof Error ? err.message : "Internal error";
666
+ debugWarn(`[Node] Provider error after ${Date.now() - startTime}ms: ${message}`);
667
+ responseBody = new TextEncoder().encode(message);
668
+ if (streamedResponseStarted) {
669
+ mux.sendProxyChunk({
670
+ requestId: request.requestId,
671
+ data: new TextEncoder().encode(`event: error\ndata: ${message}\n\n`),
672
+ done: false,
673
+ });
674
+ mux.sendProxyChunk({
675
+ requestId: request.requestId,
676
+ data: new Uint8Array(0),
677
+ done: true,
678
+ });
679
+ }
680
+ else {
681
+ statusCode = 500;
682
+ mux.sendProxyResponse({
683
+ requestId: request.requestId,
684
+ statusCode: 500,
685
+ headers: { "content-type": "text/plain" },
686
+ body: responseBody,
687
+ });
688
+ }
689
+ }
690
+ // Record metering
691
+ const latencyMs = Date.now() - startTime;
692
+ const requestPricing = this._resolveProviderPricing(provider, request);
693
+ await this._recordMetering(buyerPeerId, provider.name, requestPricing, request, statusCode, latencyMs, request.body.length, responseBody.length);
694
+ // Generate bilateral receipt after each request if lock committed (Task 3)
695
+ const currentSession = this._sessions.get(buyerPeerId);
696
+ if (currentSession?.lockCommitted) {
697
+ await this._sendBilateralReceipt(buyerPeerId, currentSession, requestPricing, responseBody, paymentMux);
640
698
  }
641
699
  }
642
- // Record metering
643
- const latencyMs = Date.now() - startTime;
644
- const requestPricing = this._resolveProviderPricing(provider, request);
645
- await this._recordMetering(buyerPeerId, provider.name, requestPricing, request, statusCode, latencyMs, request.body.length, responseBody.length);
646
- // Generate bilateral receipt after each request if lock committed (Task 3)
647
- const currentSession = this._sessions.get(buyerPeerId);
648
- if (currentSession?.lockCommitted) {
649
- await this._sendBilateralReceipt(buyerPeerId, currentSession, requestPricing, responseBody, paymentMux);
700
+ finally {
701
+ this._adjustProviderLoad(provider.name, -1);
650
702
  }
651
703
  });
652
704
  this._muxes.set(buyerPeerId, mux);
@@ -1407,23 +1459,33 @@ export class AntseedNode extends EventEmitter {
1407
1459
  _lookupResultToPeerInfo(result) {
1408
1460
  const providers = result.metadata.providers.map((p) => p.provider);
1409
1461
  const firstProvider = result.metadata.providers[0];
1410
- const providerPricingEntries = Object.fromEntries(result.metadata.providers.map((p) => [
1411
- p.provider,
1412
- {
1462
+ const providerPricingEntries = {};
1463
+ const providerModelCategoryEntries = {};
1464
+ for (const providerAnnouncement of result.metadata.providers) {
1465
+ providerPricingEntries[providerAnnouncement.provider] = {
1413
1466
  defaults: {
1414
- inputUsdPerMillion: p.defaultPricing.inputUsdPerMillion,
1415
- outputUsdPerMillion: p.defaultPricing.outputUsdPerMillion,
1467
+ inputUsdPerMillion: providerAnnouncement.defaultPricing.inputUsdPerMillion,
1468
+ outputUsdPerMillion: providerAnnouncement.defaultPricing.outputUsdPerMillion,
1416
1469
  },
1417
- ...(p.modelPricing ? { models: { ...p.modelPricing } } : {}),
1418
- },
1419
- ]));
1470
+ ...(providerAnnouncement.modelPricing ? { models: { ...providerAnnouncement.modelPricing } } : {}),
1471
+ };
1472
+ if (providerAnnouncement.modelCategories && Object.keys(providerAnnouncement.modelCategories).length > 0) {
1473
+ providerModelCategoryEntries[providerAnnouncement.provider] = {
1474
+ models: Object.fromEntries(Object.entries(providerAnnouncement.modelCategories)
1475
+ .map(([model, categories]) => [model, [...categories]])),
1476
+ };
1477
+ }
1478
+ }
1420
1479
  const hasProviderPricing = Object.keys(providerPricingEntries).length > 0;
1480
+ const hasProviderModelCategories = Object.keys(providerModelCategoryEntries).length > 0;
1421
1481
  return {
1422
1482
  peerId: result.metadata.peerId,
1483
+ displayName: result.metadata.displayName,
1423
1484
  lastSeen: result.metadata.timestamp,
1424
1485
  providers,
1425
1486
  publicAddress: `${result.host}:${result.port}`,
1426
1487
  ...(hasProviderPricing ? { providerPricing: providerPricingEntries } : {}),
1488
+ ...(hasProviderModelCategories ? { providerModelCategories: providerModelCategoryEntries } : {}),
1427
1489
  defaultInputUsdPerMillion: firstProvider?.defaultPricing.inputUsdPerMillion,
1428
1490
  defaultOutputUsdPerMillion: firstProvider?.defaultPricing.outputUsdPerMillion,
1429
1491
  maxConcurrency: firstProvider?.maxConcurrency,
@@ -1435,6 +1497,35 @@ export class AntseedNode extends EventEmitter {
1435
1497
  trustScore: result.metadata.onChainReputation,
1436
1498
  };
1437
1499
  }
1500
+ _adjustProviderLoad(providerName, delta) {
1501
+ const nextLoad = Math.max(0, (this._providerLoadCounts.get(providerName) ?? 0) + delta);
1502
+ this._providerLoadCounts.set(providerName, nextLoad);
1503
+ if (!this._announcer)
1504
+ return;
1505
+ this._announcer.updateLoad(providerName, nextLoad);
1506
+ this._scheduleMetadataRefresh();
1507
+ }
1508
+ _scheduleMetadataRefresh() {
1509
+ if (!this._announcer || this._metadataRefreshTimer) {
1510
+ return;
1511
+ }
1512
+ const timer = setTimeout(() => {
1513
+ this._metadataRefreshTimer = null;
1514
+ const announcer = this._announcer;
1515
+ if (!announcer)
1516
+ return;
1517
+ void announcer.refreshMetadata().catch((err) => {
1518
+ debugWarn(`[Node] Failed to refresh metadata snapshot: ${err instanceof Error ? err.message : err}`);
1519
+ });
1520
+ }, AntseedNode._METADATA_REFRESH_DEBOUNCE_MS);
1521
+ this._metadataRefreshTimer = timer;
1522
+ this._unrefTimer(timer);
1523
+ }
1524
+ _unrefTimer(timer) {
1525
+ if (typeof timer.unref === "function") {
1526
+ timer.unref();
1527
+ }
1528
+ }
1438
1529
  }
1439
1530
  function concatChunks(chunks) {
1440
1531
  if (chunks.length === 0)