@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.
- package/dist/discovery/announcer.d.ts +11 -0
- package/dist/discovery/announcer.d.ts.map +1 -1
- package/dist/discovery/announcer.js +103 -70
- package/dist/discovery/announcer.js.map +1 -1
- package/dist/discovery/index.d.ts +1 -1
- package/dist/discovery/index.d.ts.map +1 -1
- package/dist/discovery/index.js +1 -1
- package/dist/discovery/index.js.map +1 -1
- package/dist/discovery/metadata-codec.d.ts +4 -0
- package/dist/discovery/metadata-codec.d.ts.map +1 -1
- package/dist/discovery/metadata-codec.js +89 -0
- package/dist/discovery/metadata-codec.js.map +1 -1
- package/dist/discovery/metadata-validator.d.ts +3 -0
- package/dist/discovery/metadata-validator.d.ts.map +1 -1
- package/dist/discovery/metadata-validator.js +72 -0
- package/dist/discovery/metadata-validator.js.map +1 -1
- package/dist/discovery/peer-metadata.d.ts +4 -1
- package/dist/discovery/peer-metadata.d.ts.map +1 -1
- package/dist/discovery/peer-metadata.js +9 -1
- package/dist/discovery/peer-metadata.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/interfaces/seller-provider.d.ts +2 -0
- package/dist/interfaces/seller-provider.d.ts.map +1 -1
- package/dist/node.d.ts +11 -0
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +150 -59
- package/dist/node.js.map +1 -1
- package/dist/p2p/message-protocol.js +3 -3
- package/dist/p2p/message-protocol.js.map +1 -1
- package/dist/types/peer.d.ts +5 -0
- package/dist/types/peer.d.ts.map +1 -1
- 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":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC;AACtC,MAAM,CAAC,MAAM,aAAa,GAAG,EAAE,CAAC;AAChC,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAC1C,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACxC,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"metadata-validator.js","sourceRoot":"","sources":["../../src/discovery/metadata-validator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC;AACtC,MAAM,CAAC,MAAM,aAAa,GAAG,EAAE,CAAC;AAChC,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAC1C,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACxC,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AACpC,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAC1C,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,CAAC;AAChD,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAC5C,MAAM,sBAAsB,GAAG,sBAAsB,CAAC;AAOtD,MAAM,UAAU,gBAAgB,CAAC,QAAsB;IACrD,MAAM,MAAM,GAAsB,EAAE,CAAC;IAErC,UAAU;IACV,IAAI,QAAQ,CAAC,OAAO,KAAK,gBAAgB,EAAE,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,oBAAoB,gBAAgB,SAAS,QAAQ,CAAC,OAAO,EAAE;SACzE,CAAC,CAAC;IACL,CAAC;IAED,0CAA0C;IAC1C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,QAAQ;YACf,OAAO,EAAE,oDAAoD;SAC9D,CAAC,CAAC;IACL,CAAC;IAED,SAAS;IACT,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrD,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,QAAQ;YACf,OAAO,EAAE,0BAA0B;SACpC,CAAC,CAAC;IACL,CAAC;SAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,iBAAiB,EAAE,CAAC;QACtD,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,QAAQ;YACf,OAAO,EAAE,iBAAiB,QAAQ,CAAC,MAAM,CAAC,MAAM,gBAAgB,iBAAiB,EAAE;SACpF,CAAC,CAAC;IACL,CAAC;IAED,IAAI,QAAQ,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QACvC,IAAI,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7C,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,aAAa;gBACpB,OAAO,EAAE,8CAA8C;aACxD,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,QAAQ,CAAC,WAAW,CAAC,MAAM,GAAG,uBAAuB,EAAE,CAAC;YACjE,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,aAAa;gBACpB,OAAO,EAAE,uBAAuB,QAAQ,CAAC,WAAW,CAAC,MAAM,gBAAgB,uBAAuB,EAAE;aACrG,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,YAAY;IACZ,IAAI,QAAQ,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACpE,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,WAAW;YAClB,OAAO,EAAE,4CAA4C;SACtD,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB;IAClB,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpC,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,WAAW;YAClB,OAAO,EAAE,iCAAiC;SAC3C,CAAC,CAAC;IACL,CAAC;SAAM,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,GAAG,aAAa,EAAE,CAAC;QACrD,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,WAAW;YAClB,OAAO,EAAE,kBAAkB,QAAQ,CAAC,SAAS,CAAC,MAAM,gBAAgB,aAAa,EAAE;SACpF,CAAC,CAAC;IACL,CAAC;IAED,gBAAgB;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnD,MAAM,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC;QAEjC,eAAe;QACf,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,uBAAuB,EAAE,CAAC;YAC9C,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,aAAa,CAAC,UAAU;gBAC/B,OAAO,EAAE,eAAe,CAAC,CAAC,MAAM,CAAC,MAAM,gBAAgB,uBAAuB,EAAE;aACjF,CAAC,CAAC;QACL,CAAC;QAED,oBAAoB;QACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC;YAC3B,IAAI,KAAK,CAAC,MAAM,GAAG,qBAAqB,EAAE,CAAC;gBACzC,MAAM,CAAC,IAAI,CAAC;oBACV,KAAK,EAAE,aAAa,CAAC,YAAY,CAAC,GAAG;oBACrC,OAAO,EAAE,qBAAqB,KAAK,CAAC,MAAM,gBAAgB,qBAAqB,EAAE;iBAClF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,kBAAkB;QAClB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,EAAE,kBAAkB,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,kBAAkB,GAAG,CAAC,EAAE,CAAC;YACtG,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,aAAa,CAAC,qCAAqC;gBAC1D,OAAO,EAAE,0DAA0D;aACpE,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,mBAAmB,GAAG,CAAC,EAAE,CAAC;YACxG,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,aAAa,CAAC,sCAAsC;gBAC3D,OAAO,EAAE,2DAA2D;aACrE,CAAC,CAAC;QACL,CAAC;QAED,2BAA2B;QAC3B,IAAI,CAAC,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YACjC,KAAK,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC;gBACvE,IAAI,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,YAAY,CAAC,kBAAkB,GAAG,CAAC,EAAE,CAAC;oBAC9G,MAAM,CAAC,IAAI,CAAC;wBACV,KAAK,EAAE,aAAa,CAAC,kBAAkB,SAAS,qBAAqB;wBACrE,OAAO,EAAE,wDAAwD;qBAClE,CAAC,CAAC;gBACL,CAAC;gBACD,IAAI,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,mBAAmB,CAAC,IAAI,YAAY,CAAC,mBAAmB,GAAG,CAAC,EAAE,CAAC;oBAChH,MAAM,CAAC,IAAI,CAAC;wBACV,KAAK,EAAE,aAAa,CAAC,kBAAkB,SAAS,sBAAsB;wBACtE,OAAO,EAAE,yDAAyD;qBACnE,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;YACpC,KAAK,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC;gBACxE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;oBAClC,MAAM,CAAC,IAAI,CAAC;wBACV,KAAK,EAAE,aAAa,CAAC,qBAAqB,SAAS,EAAE;wBACrD,OAAO,EAAE,sEAAsE;qBAChF,CAAC,CAAC;gBACL,CAAC;gBACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC1D,MAAM,CAAC,IAAI,CAAC;wBACV,KAAK,EAAE,aAAa,CAAC,qBAAqB,SAAS,EAAE;wBACrD,OAAO,EAAE,mDAAmD;qBAC7D,CAAC,CAAC;oBACH,SAAS;gBACX,CAAC;gBACD,IAAI,UAAU,CAAC,MAAM,GAAG,8BAA8B,EAAE,CAAC;oBACvD,MAAM,CAAC,IAAI,CAAC;wBACV,KAAK,EAAE,aAAa,CAAC,qBAAqB,SAAS,EAAE;wBACrD,OAAO,EAAE,wBAAwB,UAAU,CAAC,MAAM,gBAAgB,8BAA8B,EAAE;qBACnG,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;gBAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC3C,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;oBAC/B,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACjE,MAAM,CAAC,IAAI,CAAC;4BACV,KAAK,EAAE,aAAa,CAAC,qBAAqB,SAAS,IAAI,CAAC,GAAG;4BAC3D,OAAO,EAAE,2CAA2C;yBACrD,CAAC,CAAC;wBACH,SAAS;oBACX,CAAC;oBACD,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;oBACjD,IAAI,UAAU,CAAC,MAAM,GAAG,yBAAyB,EAAE,CAAC;wBAClD,MAAM,CAAC,IAAI,CAAC;4BACV,KAAK,EAAE,aAAa,CAAC,qBAAqB,SAAS,IAAI,CAAC,GAAG;4BAC3D,OAAO,EAAE,yBAAyB,UAAU,CAAC,MAAM,gBAAgB,yBAAyB,EAAE;yBAC/F,CAAC,CAAC;oBACL,CAAC;oBACD,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;wBAC7C,MAAM,CAAC,IAAI,CAAC;4BACV,KAAK,EAAE,aAAa,CAAC,qBAAqB,SAAS,IAAI,CAAC,GAAG;4BAC3D,OAAO,EAAE,8DAA8D;yBACxE,CAAC,CAAC;oBACL,CAAC;oBACD,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;wBAC5B,MAAM,CAAC,IAAI,CAAC;4BACV,KAAK,EAAE,aAAa,CAAC,qBAAqB,SAAS,IAAI,CAAC,GAAG;4BAC3D,OAAO,EAAE,gDAAgD;yBAC1D,CAAC,CAAC;oBACL,CAAC;oBACD,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;QACH,CAAC;QAED,cAAc;QACd,IAAI,CAAC,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,aAAa,CAAC,kBAAkB;gBACvC,OAAO,EAAE,oCAAoC;aAC9C,CAAC,CAAC;QACL,CAAC;QAED,cAAc;QACd,IAAI,CAAC,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,aAAa,CAAC,eAAe;gBACpC,OAAO,EAAE,mCAAmC;aAC7C,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,cAAc,EAAE,CAAC;YACrC,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,aAAa,CAAC,eAAe;gBACpC,OAAO,EAAE,8CAA8C;aACxD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,8CAA8C;IAC9C,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,WAAW;YAClB,OAAO,EAAE,mEAAmE;SAC7E,CAAC,CAAC;IACL,CAAC;IAED,eAAe;IACf,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,OAAO,CAAC,MAAM,GAAG,iBAAiB,EAAE,CAAC;YACvC,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,SAAS;gBAChB,OAAO,EAAE,gBAAgB,OAAO,CAAC,MAAM,gBAAgB,iBAAiB,EAAE;aAC3E,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,0CAA0C;SACpD,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -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 =
|
|
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;
|
|
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 +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';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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,KAAK,YAAY,EAAE,KAAK,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
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;
|
|
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
|
package/dist/node.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAK3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAGlD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAEL,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,2BAA2B,EACjC,MAAM,iBAAiB,CAAC;AA8BzB,OAAO,KAAK,EACV,QAAQ,EACR,uBAAuB,EACvB,WAAW,EACX,SAAS,EACT,YAAY,EACZ,aAAa,EACd,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAI3D,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,aAAa,EAQnB,MAAM,qBAAqB,CAAC;AAS7B,OAAO,EAAE,mBAAmB,EAAE,KAAK,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAGnG,YAAY,EAAE,QAAQ,EAAE,uBAAuB,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC;AACvG,YAAY,EAAE,MAAM,EAAE,CAAC;AACvB,YAAY,EAAE,kBAAkB,EAAE,CAAC;AAEnC,MAAM,WAAW,kBAAkB;IACjC,oEAAoE;IACpE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,4DAA4D;IAC5D,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,gDAAgD;IAChD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,4EAA4E;IAC5E,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,wDAAwD;IACxD,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,qEAAqE;IACrE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iDAAiD;IACjD,aAAa,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IACrC,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8CAA8C;IAC9C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,6FAA6F;IAC7F,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,mDAAmD;IACnD,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CAC/B;AA2BD,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,6BAA6B;IAC5C,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,sBAAsB;IACrC,eAAe,CAAC,EAAE,CAChB,QAAQ,EAAE,sBAAsB,EAChC,QAAQ,EAAE,6BAA6B,KACpC,IAAI,CAAC;IACV,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,2BAA2B,KAAK,IAAI,CAAC;CAChE;AAED,qBAAa,WAAY,SAAQ,YAAY;IAC3C,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,IAAI,CAAwB;IACpC,OAAO,CAAC,kBAAkB,CAAkC;IAC5D,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,UAAU,CAA8B;IAChD,OAAO,CAAC,WAAW,CAA2B;IAC9C,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,SAAS,CAAmC;IACpD,OAAO,CAAC,IAAI,CAA6B;IACzC,OAAO,CAAC,SAAS,CAAgC;IACjD,OAAO,CAAC,iBAAiB,CAAiC;IAC1D,OAAO,CAAC,eAAe,CAA+B;IACtD,OAAO,CAAC,aAAa,CAAiC;IACtD,OAAO,CAAC,aAAa,CAAiC;IACtD,qEAAqE;IACrE,OAAO,CAAC,SAAS,CAAyC;IAC1D,OAAO,CAAC,iBAAiB,CAAoD;IAC7E,8EAA8E;IAC9E,OAAO,CAAC,oBAAoB,CAAoC;IAChE,4EAA4E;IAC5E,OAAO,CAAC,iBAAiB,CAAqB;gBAElC,MAAM,EAAE,UAAU;IAK9B,IAAI,MAAM,IAAI,MAAM,GAAG,IAAI,CAE1B;IAED,IAAI,QAAQ,IAAI,QAAQ,GAAG,IAAI,CAE9B;IAED,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAI1C,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B,IAAI,MAAM,IAAI,MAAM,GAAG,IAAI,CAE1B;IAED,sFAAsF;IACtF,IAAI,mBAAmB,IAAI,mBAAmB,GAAG,IAAI,CAEpD;IAED,2DAA2D;IAC3D,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,4EAA4E;IAC5E,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED;;;OAGG;IACH,uBAAuB,IAAI,qBAAqB,EAAE;IAsBlD,kFAAkF;IAClF,2BAA2B,IAAI,MAAM;IAU/B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA0BtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
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
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
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
|
-
|
|
643
|
-
|
|
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 =
|
|
1411
|
-
|
|
1412
|
-
|
|
1462
|
+
const providerPricingEntries = {};
|
|
1463
|
+
const providerModelCategoryEntries = {};
|
|
1464
|
+
for (const providerAnnouncement of result.metadata.providers) {
|
|
1465
|
+
providerPricingEntries[providerAnnouncement.provider] = {
|
|
1413
1466
|
defaults: {
|
|
1414
|
-
inputUsdPerMillion:
|
|
1415
|
-
outputUsdPerMillion:
|
|
1467
|
+
inputUsdPerMillion: providerAnnouncement.defaultPricing.inputUsdPerMillion,
|
|
1468
|
+
outputUsdPerMillion: providerAnnouncement.defaultPricing.outputUsdPerMillion,
|
|
1416
1469
|
},
|
|
1417
|
-
...(
|
|
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)
|