@antseed/node 0.2.7 → 0.2.9
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/README.md +28 -22
- package/dist/discovery/announcer.d.ts +8 -7
- package/dist/discovery/announcer.d.ts.map +1 -1
- package/dist/discovery/announcer.js +40 -40
- package/dist/discovery/announcer.js.map +1 -1
- package/dist/discovery/default-metadata-resolver.d.ts +1 -1
- package/dist/discovery/default-metadata-resolver.js +1 -1
- package/dist/discovery/dht-node.d.ts +6 -5
- package/dist/discovery/dht-node.d.ts.map +1 -1
- package/dist/discovery/dht-node.js +10 -11
- package/dist/discovery/dht-node.js.map +1 -1
- package/dist/discovery/index.d.ts +3 -2
- package/dist/discovery/index.d.ts.map +1 -1
- package/dist/discovery/index.js +3 -2
- package/dist/discovery/index.js.map +1 -1
- package/dist/discovery/metadata-codec.d.ts +8 -7
- package/dist/discovery/metadata-codec.d.ts.map +1 -1
- package/dist/discovery/metadata-codec.js +143 -113
- package/dist/discovery/metadata-codec.js.map +1 -1
- package/dist/discovery/metadata-validator.d.ts +5 -5
- package/dist/discovery/metadata-validator.d.ts.map +1 -1
- package/dist/discovery/metadata-validator.js +96 -74
- package/dist/discovery/metadata-validator.js.map +1 -1
- package/dist/discovery/peer-lookup.d.ts +2 -2
- package/dist/discovery/peer-lookup.d.ts.map +1 -1
- package/dist/discovery/peer-lookup.js +9 -10
- package/dist/discovery/peer-lookup.js.map +1 -1
- package/dist/discovery/peer-metadata.d.ts +11 -10
- package/dist/discovery/peer-metadata.d.ts.map +1 -1
- package/dist/discovery/peer-metadata.js +4 -4
- package/dist/discovery/peer-metadata.js.map +1 -1
- package/dist/discovery/public-address.d.ts +7 -0
- package/dist/discovery/public-address.d.ts.map +1 -0
- package/dist/discovery/public-address.js +22 -0
- package/dist/discovery/public-address.js.map +1 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/interfaces/seller-provider.d.ts +9 -9
- package/dist/interfaces/seller-provider.d.ts.map +1 -1
- package/dist/node.d.ts +5 -2
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +58 -44
- package/dist/node.js.map +1 -1
- package/dist/payments/seller-payment-manager.d.ts +12 -42
- package/dist/payments/seller-payment-manager.d.ts.map +1 -1
- package/dist/payments/seller-payment-manager.js +96 -140
- package/dist/payments/seller-payment-manager.js.map +1 -1
- package/dist/proxy/index.d.ts +1 -1
- package/dist/proxy/index.d.ts.map +1 -1
- package/dist/proxy/index.js +1 -1
- package/dist/proxy/index.js.map +1 -1
- package/dist/proxy/service-api-adapter.d.ts +30 -0
- package/dist/proxy/service-api-adapter.d.ts.map +1 -0
- package/dist/proxy/service-api-adapter.js +891 -0
- package/dist/proxy/service-api-adapter.js.map +1 -0
- package/dist/types/capability.d.ts +2 -2
- package/dist/types/capability.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/peer.d.ts +11 -11
- package/dist/types/peer.d.ts.map +1 -1
- package/dist/types/protocol.d.ts +0 -6
- package/dist/types/protocol.d.ts.map +1 -1
- package/dist/types/protocol.js +0 -8
- package/dist/types/protocol.js.map +1 -1
- package/dist/types/provider.d.ts +1 -1
- package/dist/types/provider.d.ts.map +1 -1
- package/dist/types/service-api.d.ts +4 -0
- package/dist/types/service-api.d.ts.map +1 -0
- package/dist/types/service-api.js +11 -0
- package/dist/types/service-api.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -27,14 +27,14 @@ import type { Provider, SerializedHttpRequest, SerializedHttpResponse } from '@a
|
|
|
27
27
|
// Implement the Provider interface (or use an existing plugin)
|
|
28
28
|
const myProvider: Provider = {
|
|
29
29
|
name: 'my-llm',
|
|
30
|
-
|
|
30
|
+
services: ['my-model-v1'],
|
|
31
31
|
pricing: {
|
|
32
32
|
defaults: {
|
|
33
33
|
inputUsdPerMillion: 10,
|
|
34
34
|
outputUsdPerMillion: 10,
|
|
35
35
|
},
|
|
36
36
|
},
|
|
37
|
-
|
|
37
|
+
serviceCategories: {
|
|
38
38
|
'my-model-v1': ['coding', 'privacy'],
|
|
39
39
|
},
|
|
40
40
|
maxConcurrency: 10,
|
|
@@ -99,8 +99,8 @@ if (peers.length > 0) {
|
|
|
99
99
|
Discovery topics are normalized to improve lookup consistency:
|
|
100
100
|
|
|
101
101
|
- Provider topic: `antseed:{provider}` with `trim + lowercase`
|
|
102
|
-
- Model topic (canonical): `antseed:
|
|
103
|
-
- Model topic (search fallback): `antseed:
|
|
102
|
+
- Model topic (canonical): `antseed:service:{model}` with `trim + lowercase`
|
|
103
|
+
- Model topic (search fallback): `antseed:service-search:{model}` with spaces, `-`, `_` removed after canonical normalization (keeps `.`)
|
|
104
104
|
|
|
105
105
|
Canonical and search model topics are both used when their keys differ, so variants like `kimi 2.5`, `kimi-2.5`, and `kimi_2.5` can converge in discovery while keeping exact canonical topics.
|
|
106
106
|
|
|
@@ -124,6 +124,7 @@ At a high level, `@antseed/node` currently enforces:
|
|
|
124
124
|
interface NodeConfig {
|
|
125
125
|
role: 'seller' | 'buyer';
|
|
126
126
|
displayName?: string; // Optional human-readable name announced in metadata
|
|
127
|
+
publicAddress?: string; // Optional public host:port override announced in metadata
|
|
127
128
|
dataDir?: string; // Default: ~/.antseed
|
|
128
129
|
dhtPort?: number; // Default: 6881 for seller, 0 (OS-assigned) for buyer
|
|
129
130
|
signalingPort?: number; // Default: 6882 for seller
|
|
@@ -144,12 +145,22 @@ interface NodeConfig {
|
|
|
144
145
|
|---|---|---|
|
|
145
146
|
| `role` | (required) | `'seller'` to serve requests, `'buyer'` to consume them |
|
|
146
147
|
| `displayName` | unset | Optional node label included in discovery metadata |
|
|
148
|
+
| `publicAddress` | unset | Optional public `host:port` advertised in signed metadata and preferred by buyers over the raw DHT source address |
|
|
147
149
|
| `dataDir` | `~/.antseed` | Directory for identity keys, metering DB, and config |
|
|
148
150
|
| `dhtPort` | `6881` / `0` | UDP port for DHT. Seller defaults to 6881, buyer uses OS-assigned |
|
|
149
151
|
| `signalingPort` | `6882` | TCP port for P2P signaling and incoming connections (seller only) |
|
|
150
152
|
| `bootstrapNodes` | AntSeed nodes | Additional DHT bootstrap nodes merged with the official AntSeed infrastructure |
|
|
151
153
|
| `payments` | disabled | Optional seller-side payment channel + settlement lifecycle wiring |
|
|
152
154
|
|
|
155
|
+
Use `publicAddress` when the DHT announce source IP is not the address buyers should dial, such as Kubernetes or other load-balanced deployments:
|
|
156
|
+
|
|
157
|
+
```ts
|
|
158
|
+
const node = new AntseedNode({
|
|
159
|
+
role: 'seller',
|
|
160
|
+
publicAddress: 'peer.example.com:6882',
|
|
161
|
+
});
|
|
162
|
+
```
|
|
163
|
+
|
|
153
164
|
## On-Chain Settlement Flow
|
|
154
165
|
|
|
155
166
|
When `payments.enabled=true` in seller mode:
|
|
@@ -246,19 +257,19 @@ interface Provider {
|
|
|
246
257
|
name: string;
|
|
247
258
|
|
|
248
259
|
/** Model IDs this provider supports */
|
|
249
|
-
|
|
260
|
+
services: string[];
|
|
250
261
|
|
|
251
|
-
/** Pricing in USD per 1M tokens (defaults + optional per-
|
|
262
|
+
/** Pricing in USD per 1M tokens (defaults + optional per-service overrides) */
|
|
252
263
|
pricing: {
|
|
253
264
|
defaults: { inputUsdPerMillion: number; outputUsdPerMillion: number };
|
|
254
|
-
|
|
265
|
+
services?: Record<string, { inputUsdPerMillion: number; outputUsdPerMillion: number }>;
|
|
255
266
|
};
|
|
256
267
|
|
|
257
|
-
/** Optional per-
|
|
258
|
-
|
|
268
|
+
/** Optional per-service discovery tags (e.g., coding/privacy/legal) */
|
|
269
|
+
serviceCategories?: Record<string, string[]>;
|
|
259
270
|
|
|
260
|
-
/** Optional per-
|
|
261
|
-
|
|
271
|
+
/** Optional per-service API protocol support advertised via discovery metadata. */
|
|
272
|
+
serviceApiProtocols?: Record<string, ServiceApiProtocol[]>;
|
|
262
273
|
|
|
263
274
|
/** Maximum concurrent requests this provider can handle */
|
|
264
275
|
maxConcurrency: number;
|
|
@@ -275,11 +286,6 @@ interface Provider {
|
|
|
275
286
|
/** Optional capabilities beyond plain inference */
|
|
276
287
|
capabilities?: ProviderCapability[];
|
|
277
288
|
|
|
278
|
-
/** Optional long-running task endpoint backing `/v1/task` */
|
|
279
|
-
handleTask?(task: TaskRequest): AsyncIterable<TaskEvent>;
|
|
280
|
-
|
|
281
|
-
/** Optional one-shot skill endpoint backing `/v1/skill` */
|
|
282
|
-
handleSkill?(skill: SkillRequest): Promise<SkillResponse>;
|
|
283
289
|
}
|
|
284
290
|
```
|
|
285
291
|
|
|
@@ -312,13 +318,13 @@ import type { AntseedProviderPlugin, Provider, SerializedHttpRequest, Serialized
|
|
|
312
318
|
|
|
313
319
|
class MyProvider implements Provider {
|
|
314
320
|
readonly name = 'my-provider';
|
|
315
|
-
readonly
|
|
321
|
+
readonly services: string[];
|
|
316
322
|
readonly pricing: Provider['pricing'];
|
|
317
323
|
readonly maxConcurrency: number;
|
|
318
324
|
private _active = 0;
|
|
319
325
|
|
|
320
|
-
constructor(apiKey: string,
|
|
321
|
-
this.
|
|
326
|
+
constructor(apiKey: string, services: string[], inputUsdPerMillion: number, outputUsdPerMillion: number, maxConcurrency: number) {
|
|
327
|
+
this.services = services;
|
|
322
328
|
this.pricing = {
|
|
323
329
|
defaults: {
|
|
324
330
|
inputUsdPerMillion,
|
|
@@ -361,16 +367,16 @@ const plugin: AntseedProviderPlugin = {
|
|
|
361
367
|
description: 'Provides My LLM capacity on the Antseed Network',
|
|
362
368
|
configSchema: [
|
|
363
369
|
{ key: 'MY_API_KEY', label: 'API Key', type: 'secret', required: true, description: 'API key for My LLM' },
|
|
364
|
-
{ key: '
|
|
370
|
+
{ key: 'MY_SERVICES', label: 'Services', type: 'string[]', required: false, description: 'Comma-separated service list' },
|
|
365
371
|
{ key: 'MY_INPUT_USD_PER_MILLION', label: 'Input Price', type: 'number', required: false, description: 'Input price in USD per 1M tokens' },
|
|
366
372
|
{ key: 'MY_OUTPUT_USD_PER_MILLION', label: 'Output Price', type: 'number', required: false, description: 'Output price in USD per 1M tokens' },
|
|
367
373
|
],
|
|
368
374
|
createProvider(config: Record<string, string>) {
|
|
369
375
|
const apiKey = config['MY_API_KEY'] ?? '';
|
|
370
|
-
const
|
|
376
|
+
const services = (config['MY_SERVICES'] ?? 'default-service').split(',').map(s => s.trim());
|
|
371
377
|
const input = parseFloat(config['MY_INPUT_USD_PER_MILLION'] ?? '10');
|
|
372
378
|
const output = parseFloat(config['MY_OUTPUT_USD_PER_MILLION'] ?? String(input));
|
|
373
|
-
return new MyProvider(apiKey,
|
|
379
|
+
return new MyProvider(apiKey, services, input, output, 10);
|
|
374
380
|
},
|
|
375
381
|
};
|
|
376
382
|
|
|
@@ -2,26 +2,27 @@ import type { Identity } from "../p2p/identity.js";
|
|
|
2
2
|
import type { DHTNode } from "./dht-node.js";
|
|
3
3
|
import type { PeerOffering } from "../types/capability.js";
|
|
4
4
|
import type { PeerMetadata } from "./peer-metadata.js";
|
|
5
|
-
import type {
|
|
5
|
+
import type { ServiceApiProtocol } from "../types/service-api.js";
|
|
6
6
|
import type { BaseEscrowClient } from "../payments/evm/escrow-client.js";
|
|
7
7
|
export interface AnnouncerConfig {
|
|
8
8
|
identity: Identity;
|
|
9
9
|
dht: DHTNode;
|
|
10
10
|
providers: Array<{
|
|
11
11
|
provider: string;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
services: string[];
|
|
13
|
+
serviceCategories?: Record<string, string[]>;
|
|
14
|
+
serviceApiProtocols?: Record<string, ServiceApiProtocol[]>;
|
|
15
15
|
maxConcurrency: number;
|
|
16
16
|
}>;
|
|
17
17
|
displayName?: string;
|
|
18
|
+
publicAddress?: string;
|
|
18
19
|
region: string;
|
|
19
20
|
pricing: Map<string, {
|
|
20
21
|
defaults: {
|
|
21
22
|
inputUsdPerMillion: number;
|
|
22
23
|
outputUsdPerMillion: number;
|
|
23
24
|
};
|
|
24
|
-
|
|
25
|
+
services?: Record<string, {
|
|
25
26
|
inputUsdPerMillion: number;
|
|
26
27
|
outputUsdPerMillion: number;
|
|
27
28
|
}>;
|
|
@@ -52,7 +53,7 @@ export declare class PeerAnnouncer {
|
|
|
52
53
|
private _buildSignedMetadata;
|
|
53
54
|
private _announceTopics;
|
|
54
55
|
private _tryAnnounceTopic;
|
|
55
|
-
private
|
|
56
|
-
private
|
|
56
|
+
private _normalizeServiceCategories;
|
|
57
|
+
private _normalizeServiceApiProtocols;
|
|
57
58
|
}
|
|
58
59
|
//# 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;AAU7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAwB,MAAM,oBAAoB,CAAC;AAE7E,OAAO,KAAK,EAAE,
|
|
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;AAU7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAwB,MAAM,oBAAoB,CAAC;AAE7E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAKlE,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,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAC7C,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAC3D,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC,CAAC;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,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,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,kBAAkB,EAAE,MAAM,CAAC;YAAC,mBAAmB,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACxF,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;YA2EpB,eAAe;YA4Cf,iBAAiB;IAS/B,OAAO,CAAC,2BAA2B;IA+BnC,OAAO,CAAC,6BAA6B;CA8BtC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { signData } from "../p2p/identity.js";
|
|
2
|
-
import {
|
|
2
|
+
import { ANTSEED_WILDCARD_TOPIC, serviceTopic, serviceSearchTopic, capabilityTopic, topicToInfoHash, normalizeServiceTopicKey, normalizeServiceSearchTopicKey, } from "./dht-node.js";
|
|
3
3
|
import { METADATA_VERSION } from "./peer-metadata.js";
|
|
4
|
-
import {
|
|
4
|
+
import { isKnownServiceApiProtocol } from "../types/service-api.js";
|
|
5
5
|
import { encodeMetadataForSigning } from "./metadata-codec.js";
|
|
6
6
|
import { debugWarn } from "../utils/debug.js";
|
|
7
7
|
import { bytesToHex } from "../utils/hex.js";
|
|
@@ -62,21 +62,21 @@ export class PeerAnnouncer {
|
|
|
62
62
|
};
|
|
63
63
|
const providerAnnouncement = {
|
|
64
64
|
provider: p.provider,
|
|
65
|
-
|
|
65
|
+
services: p.services,
|
|
66
66
|
defaultPricing: pricing.defaults,
|
|
67
67
|
maxConcurrency: p.maxConcurrency,
|
|
68
68
|
currentLoad: this.loadMap.get(p.provider) ?? 0,
|
|
69
69
|
};
|
|
70
|
-
if (pricing.
|
|
71
|
-
providerAnnouncement.
|
|
70
|
+
if (pricing.services) {
|
|
71
|
+
providerAnnouncement.servicePricing = pricing.services;
|
|
72
72
|
}
|
|
73
|
-
const
|
|
74
|
-
if (
|
|
75
|
-
providerAnnouncement.
|
|
73
|
+
const normalizedServiceCategories = this._normalizeServiceCategories(p.serviceCategories, p.services);
|
|
74
|
+
if (normalizedServiceCategories) {
|
|
75
|
+
providerAnnouncement.serviceCategories = normalizedServiceCategories;
|
|
76
76
|
}
|
|
77
|
-
const
|
|
78
|
-
if (
|
|
79
|
-
providerAnnouncement.
|
|
77
|
+
const normalizedServiceApiProtocols = this._normalizeServiceApiProtocols(p.serviceApiProtocols, p.services);
|
|
78
|
+
if (normalizedServiceApiProtocols) {
|
|
79
|
+
providerAnnouncement.serviceApiProtocols = normalizedServiceApiProtocols;
|
|
80
80
|
}
|
|
81
81
|
return providerAnnouncement;
|
|
82
82
|
});
|
|
@@ -84,6 +84,7 @@ export class PeerAnnouncer {
|
|
|
84
84
|
peerId: this.config.identity.peerId,
|
|
85
85
|
version: METADATA_VERSION,
|
|
86
86
|
...(this.config.displayName ? { displayName: this.config.displayName } : {}),
|
|
87
|
+
...(this.config.publicAddress ? { publicAddress: this.config.publicAddress } : {}),
|
|
87
88
|
providers,
|
|
88
89
|
region: this.config.region,
|
|
89
90
|
timestamp: Date.now(),
|
|
@@ -124,30 +125,29 @@ export class PeerAnnouncer {
|
|
|
124
125
|
return metadata;
|
|
125
126
|
}
|
|
126
127
|
async _announceTopics(providers) {
|
|
127
|
-
const
|
|
128
|
+
const announcedServiceTopics = new Set();
|
|
128
129
|
for (const p of providers) {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
if (!canonicalModelKey) {
|
|
130
|
+
for (const service of p.services) {
|
|
131
|
+
const canonicalServiceKey = normalizeServiceTopicKey(service);
|
|
132
|
+
if (!canonicalServiceKey) {
|
|
133
133
|
continue;
|
|
134
134
|
}
|
|
135
|
-
const canonicalTopic =
|
|
136
|
-
if (!
|
|
137
|
-
|
|
135
|
+
const canonicalTopic = serviceTopic(canonicalServiceKey);
|
|
136
|
+
if (!announcedServiceTopics.has(canonicalTopic)) {
|
|
137
|
+
announcedServiceTopics.add(canonicalTopic);
|
|
138
138
|
await this._tryAnnounceTopic(canonicalTopic);
|
|
139
139
|
}
|
|
140
|
-
const
|
|
141
|
-
if (
|
|
142
|
-
const compactTopic =
|
|
143
|
-
if (!
|
|
144
|
-
|
|
140
|
+
const compactServiceKey = normalizeServiceSearchTopicKey(service);
|
|
141
|
+
if (compactServiceKey !== canonicalServiceKey) {
|
|
142
|
+
const compactTopic = serviceSearchTopic(compactServiceKey);
|
|
143
|
+
if (!announcedServiceTopics.has(compactTopic)) {
|
|
144
|
+
announcedServiceTopics.add(compactTopic);
|
|
145
145
|
await this._tryAnnounceTopic(compactTopic);
|
|
146
146
|
}
|
|
147
147
|
}
|
|
148
148
|
}
|
|
149
149
|
}
|
|
150
|
-
await this._tryAnnounceTopic(
|
|
150
|
+
await this._tryAnnounceTopic(ANTSEED_WILDCARD_TOPIC);
|
|
151
151
|
if (this.config.offerings) {
|
|
152
152
|
const announcedCapabilities = new Set();
|
|
153
153
|
for (const offering of this.config.offerings) {
|
|
@@ -172,15 +172,15 @@ export class PeerAnnouncer {
|
|
|
172
172
|
// DHT may not have peers yet — will retry on next cycle
|
|
173
173
|
}
|
|
174
174
|
}
|
|
175
|
-
|
|
176
|
-
if (!
|
|
175
|
+
_normalizeServiceCategories(serviceCategories, supportedServices) {
|
|
176
|
+
if (!serviceCategories) {
|
|
177
177
|
return undefined;
|
|
178
178
|
}
|
|
179
|
-
const
|
|
180
|
-
const
|
|
179
|
+
const hasWildcardServices = supportedServices.length === 0;
|
|
180
|
+
const supportedServiceSet = new Set(supportedServices);
|
|
181
181
|
const normalized = {};
|
|
182
|
-
for (const [
|
|
183
|
-
if (!
|
|
182
|
+
for (const [service, categories] of Object.entries(serviceCategories)) {
|
|
183
|
+
if (!hasWildcardServices && !supportedServiceSet.has(service)) {
|
|
184
184
|
continue;
|
|
185
185
|
}
|
|
186
186
|
const deduped = Array.from(new Set(categories
|
|
@@ -189,28 +189,28 @@ export class PeerAnnouncer {
|
|
|
189
189
|
if (deduped.length === 0) {
|
|
190
190
|
continue;
|
|
191
191
|
}
|
|
192
|
-
normalized[
|
|
192
|
+
normalized[service] = deduped;
|
|
193
193
|
}
|
|
194
194
|
return Object.keys(normalized).length > 0 ? normalized : undefined;
|
|
195
195
|
}
|
|
196
|
-
|
|
197
|
-
if (!
|
|
196
|
+
_normalizeServiceApiProtocols(serviceApiProtocols, supportedServices) {
|
|
197
|
+
if (!serviceApiProtocols) {
|
|
198
198
|
return undefined;
|
|
199
199
|
}
|
|
200
|
-
const
|
|
201
|
-
const
|
|
200
|
+
const hasWildcardServices = supportedServices.length === 0;
|
|
201
|
+
const supportedServiceSet = new Set(supportedServices);
|
|
202
202
|
const normalized = {};
|
|
203
|
-
for (const [
|
|
204
|
-
if (!
|
|
203
|
+
for (const [service, protocols] of Object.entries(serviceApiProtocols)) {
|
|
204
|
+
if (!hasWildcardServices && !supportedServiceSet.has(service)) {
|
|
205
205
|
continue;
|
|
206
206
|
}
|
|
207
207
|
const deduped = Array.from(new Set(protocols
|
|
208
208
|
.map((protocol) => protocol.trim().toLowerCase())
|
|
209
|
-
.filter((protocol) =>
|
|
209
|
+
.filter((protocol) => isKnownServiceApiProtocol(protocol))));
|
|
210
210
|
if (deduped.length === 0) {
|
|
211
211
|
continue;
|
|
212
212
|
}
|
|
213
|
-
normalized[
|
|
213
|
+
normalized[service] = deduped;
|
|
214
214
|
}
|
|
215
215
|
return Object.keys(normalized).length > 0 ? normalized : undefined;
|
|
216
216
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"announcer.js","sourceRoot":"","sources":["../../src/discovery/announcer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"announcer.js","sourceRoot":"","sources":["../../src/discovery/announcer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,OAAO,EACL,sBAAsB,EACtB,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,wBAAwB,EACxB,8BAA8B,GAC/B,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AA8BlE,MAAM,OAAO,aAAa;IACP,MAAM,CAAkB;IACjC,cAAc,GAA0C,IAAI,CAAC;IACpD,OAAO,GAAwB,IAAI,GAAG,EAAE,CAAC;IAClD,eAAe,GAAwB,IAAI,CAAC;IAEpD,YAAY,MAAuB;QACjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QACvD,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC;QAEhC,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IACjD,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,eAAe;QACnB,IAAI,CAAC,eAAe,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAChE,CAAC;IAED,qBAAqB;QACnB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,OAAO;QACT,CAAC;QACD,yCAAyC;QACzC,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACjC,SAAS,CAAC,wCAAwC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAChG,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE;YACrC,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBACjC,SAAS,CAAC,yCAAyC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YACjG,CAAC,CAAC,CAAC;QACL,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACvC,CAAC;IAED,oBAAoB;QAClB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACnC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,UAAU,CAAC,YAAoB,EAAE,WAAmB;QAClD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IAC9C,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAAC,wBAAwB,GAAG,IAAI;QAChE,MAAM,SAAS,GAA2B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACxE,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI;gBACrD,QAAQ,EAAE;oBACR,kBAAkB,EAAE,CAAC;oBACrB,mBAAmB,EAAE,CAAC;iBACvB;aACF,CAAC;YACF,MAAM,oBAAoB,GAAyB;gBACjD,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,cAAc,EAAE,OAAO,CAAC,QAAQ;gBAChC,cAAc,EAAE,CAAC,CAAC,cAAc;gBAChC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;aAC/C,CAAC;YACF,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACrB,oBAAoB,CAAC,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC;YACzD,CAAC;YACD,MAAM,2BAA2B,GAAG,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;YACtG,IAAI,2BAA2B,EAAE,CAAC;gBAChC,oBAAoB,CAAC,iBAAiB,GAAG,2BAA2B,CAAC;YACvE,CAAC;YACD,MAAM,6BAA6B,GAAG,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC,mBAAmB,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;YAC5G,IAAI,6BAA6B,EAAE,CAAC;gBAClC,oBAAoB,CAAC,mBAAmB,GAAG,6BAA6B,CAAC;YAC3E,CAAC;YACD,OAAO,oBAAoB,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAiB;YAC7B,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM;YACnC,OAAO,EAAE,gBAAgB;YACzB,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5E,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClF,SAAS;YACT,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;YAC1B,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,SAAS,EAAE,EAAE;SACd,CAAC;QACF,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9D,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;QAC7C,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,IAAI,EAAE,CAAC;YACxC,QAAQ,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;QACzD,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;YACnC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;QAC/C,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;YAC7B,MAAM,UAAU,GAAG,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC9D,QAAQ,CAAC,UAAU,GAAG,UAAU,CAAC;YAEjC,IAAI,wBAAwB,EAAE,CAAC;gBAC7B,IAAI,CAAC;oBACH,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;oBAC5E,QAAQ,CAAC,iBAAiB,GAAG,UAAU,CAAC,eAAe,CAAC;oBACxD,QAAQ,CAAC,mBAAmB,GAAG,UAAU,CAAC,YAAY,CAAC;oBACvD,QAAQ,CAAC,mBAAmB,GAAG,UAAU,CAAC,YAAY,CAAC;gBACzD,CAAC;gBAAC,MAAM,CAAC;oBACP,4CAA4C;gBAC9C,CAAC;YACH,CAAC;iBAAM,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;gBAChC,QAAQ,CAAC,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC;gBACpE,QAAQ,CAAC,mBAAmB,GAAG,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC;gBACxE,QAAQ,CAAC,mBAAmB,GAAG,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC;YAC1E,CAAC;QACH,CAAC;QAED,MAAM,UAAU,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QACtD,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAC9E,QAAQ,CAAC,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;QAC3C,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,KAAK,CAAC,eAAe,CAAC,SAAiC;QAC7D,MAAM,sBAAsB,GAAG,IAAI,GAAG,EAAU,CAAC;QAEjD,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;YAC1B,KAAK,MAAM,OAAO,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;gBACjC,MAAM,mBAAmB,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;gBAC9D,IAAI,CAAC,mBAAmB,EAAE,CAAC;oBACzB,SAAS;gBACX,CAAC;gBACD,MAAM,cAAc,GAAG,YAAY,CAAC,mBAAmB,CAAC,CAAC;gBACzD,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;oBAChD,sBAAsB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;oBAC3C,MAAM,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;gBAC/C,CAAC;gBAED,MAAM,iBAAiB,GAAG,8BAA8B,CAAC,OAAO,CAAC,CAAC;gBAClE,IAAI,iBAAiB,KAAK,mBAAmB,EAAE,CAAC;oBAC9C,MAAM,YAAY,GAAG,kBAAkB,CAAC,iBAAiB,CAAC,CAAC;oBAC3D,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;wBAC9C,sBAAsB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;wBACzC,MAAM,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;oBAC7C,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,IAAI,CAAC,iBAAiB,CAAC,sBAAsB,CAAC,CAAC;QAErD,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YAC1B,MAAM,qBAAqB,GAAG,IAAI,GAAG,EAAU,CAAC;YAChD,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;gBAC7C,MAAM,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;gBAClF,MAAM,oBAAoB,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBACtE,IAAI,CAAC,oBAAoB,EAAE,CAAC;oBAC1B,SAAS;gBACX,CAAC;gBACD,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,CAAC;oBACrD,qBAAqB,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;oBAChD,MAAM,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,oBAAoB,CAAC,CAAC,CAAC;gBACtE,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,KAAa;QAC3C,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;YACxC,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QACtE,CAAC;QAAC,MAAM,CAAC;YACP,wDAAwD;QAC1D,CAAC;IACH,CAAC;IAEO,2BAA2B,CACjC,iBAAuD,EACvD,iBAA2B;QAE3B,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,MAAM,KAAK,CAAC,CAAC;QAC3D,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,iBAAiB,CAAC,CAAC;QACvD,MAAM,UAAU,GAA6B,EAAE,CAAC;QAChD,KAAK,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACtE,IAAI,CAAC,mBAAmB,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC9D,SAAS;YACX,CAAC;YACD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CACxB,IAAI,GAAG,CACL,UAAU;iBACP,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;iBAChD,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAC7C,CACF,CAAC;YACF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,SAAS;YACX,CAAC;YACD,UAAU,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;QAChC,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;IACrE,CAAC;IAEO,6BAA6B,CACnC,mBAAqE,EACrE,iBAA2B;QAE3B,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACzB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,MAAM,KAAK,CAAC,CAAC;QAC3D,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,iBAAiB,CAAC,CAAC;QACvD,MAAM,UAAU,GAAyC,EAAE,CAAC;QAC5D,KAAK,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACvE,IAAI,CAAC,mBAAmB,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC9D,SAAS;YACX,CAAC;YACD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CACxB,IAAI,GAAG,CACL,SAAS;iBACN,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;iBAChD,MAAM,CAAC,CAAC,QAAQ,EAAkC,EAAE,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC,CAC7F,CACF,CAAC;YACF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,SAAS;YACX,CAAC;YACD,UAAU,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;QAChC,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;IACrE,CAAC;CACF"}
|
|
@@ -5,7 +5,7 @@ import type { PeerMetadata } from "./peer-metadata.js";
|
|
|
5
5
|
*
|
|
6
6
|
* Always returns `null`, meaning no peer metadata can be resolved.
|
|
7
7
|
* This is intentional: without a real transport-specific resolver wired in,
|
|
8
|
-
* no peers will pass the metadata resolution step and
|
|
8
|
+
* no peers will pass the metadata resolution step and lookups will
|
|
9
9
|
* return an empty list. Callers must supply a concrete `MetadataResolver`
|
|
10
10
|
* implementation (e.g. one that fetches metadata over HTTP or a P2P channel)
|
|
11
11
|
* to discover real peers.
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Always returns `null`, meaning no peer metadata can be resolved.
|
|
5
5
|
* This is intentional: without a real transport-specific resolver wired in,
|
|
6
|
-
* no peers will pass the metadata resolution step and
|
|
6
|
+
* no peers will pass the metadata resolution step and lookups will
|
|
7
7
|
* return an empty list. Callers must supply a concrete `MetadataResolver`
|
|
8
8
|
* implementation (e.g. one that fetches metadata over HTTP or a P2P channel)
|
|
9
9
|
* to discover real peers.
|
|
@@ -14,11 +14,12 @@ export interface DHTNodeConfig {
|
|
|
14
14
|
}
|
|
15
15
|
export declare const DEFAULT_DHT_CONFIG: Omit<DHTNodeConfig, "peerId">;
|
|
16
16
|
export declare function topicToInfoHash(topic: string): Buffer;
|
|
17
|
-
|
|
18
|
-
export declare
|
|
19
|
-
export declare function
|
|
20
|
-
export declare function
|
|
21
|
-
export declare function
|
|
17
|
+
/** Wildcard topic that all peers announce on — used for general discovery. */
|
|
18
|
+
export declare const ANTSEED_WILDCARD_TOPIC = "antseed:*";
|
|
19
|
+
export declare function normalizeServiceTopicKey(serviceName: string): string;
|
|
20
|
+
export declare function normalizeServiceSearchTopicKey(serviceName: string): string;
|
|
21
|
+
export declare function serviceTopic(serviceName: string): string;
|
|
22
|
+
export declare function serviceSearchTopic(serviceName: string): string;
|
|
22
23
|
export declare function capabilityTopic(capability: string, name?: string): string;
|
|
23
24
|
export declare class DHTNode {
|
|
24
25
|
private readonly config;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dht-node.d.ts","sourceRoot":"","sources":["../../src/discovery/dht-node.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAG/C,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtD,oBAAoB,EAAE,MAAM,CAAC;IAC7B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gGAAgG;IAChG,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,eAAO,MAAM,kBAAkB,EAAE,IAAI,CAAC,aAAa,EAAE,QAAQ,CAK5D,CAAC;AAgBF,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAErD;AAMD,
|
|
1
|
+
{"version":3,"file":"dht-node.d.ts","sourceRoot":"","sources":["../../src/discovery/dht-node.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAG/C,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtD,oBAAoB,EAAE,MAAM,CAAC;IAC7B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gGAAgG;IAChG,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,eAAO,MAAM,kBAAkB,EAAE,IAAI,CAAC,aAAa,EAAE,QAAQ,CAK5D,CAAC;AAgBF,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAErD;AAMD,8EAA8E;AAC9E,eAAO,MAAM,sBAAsB,cAAc,CAAC;AAElD,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED,wBAAgB,8BAA8B,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAI1E;AAED,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAGzE;AAED,qBAAa,OAAO;IAClB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,GAAG,CAAoB;IAC/B,SAAgB,MAAM,EAAE,YAAY,CAAsB;gBAE9C,MAAM,EAAE,aAAa;IAI3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAwCtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAarB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBvD,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAsC9E,YAAY,IAAI,MAAM;IAOtB,OAAO,IAAI,MAAM;CAWlB"}
|
|
@@ -35,22 +35,21 @@ export function topicToInfoHash(topic) {
|
|
|
35
35
|
function normalizeTopicSegment(value) {
|
|
36
36
|
return value.trim().toLowerCase();
|
|
37
37
|
}
|
|
38
|
-
|
|
39
|
-
|
|
38
|
+
/** Wildcard topic that all peers announce on — used for general discovery. */
|
|
39
|
+
export const ANTSEED_WILDCARD_TOPIC = "antseed:*";
|
|
40
|
+
export function normalizeServiceTopicKey(serviceName) {
|
|
41
|
+
return normalizeTopicSegment(serviceName);
|
|
40
42
|
}
|
|
41
|
-
export function
|
|
42
|
-
|
|
43
|
-
}
|
|
44
|
-
export function normalizeModelSearchTopicKey(modelName) {
|
|
45
|
-
const canonical = normalizeModelTopicKey(modelName);
|
|
43
|
+
export function normalizeServiceSearchTopicKey(serviceName) {
|
|
44
|
+
const canonical = normalizeServiceTopicKey(serviceName);
|
|
46
45
|
const compact = canonical.replace(/[\s_-]+/g, "");
|
|
47
46
|
return compact.length > 0 ? compact : canonical;
|
|
48
47
|
}
|
|
49
|
-
export function
|
|
50
|
-
return "antseed:
|
|
48
|
+
export function serviceTopic(serviceName) {
|
|
49
|
+
return "antseed:service:" + normalizeServiceTopicKey(serviceName);
|
|
51
50
|
}
|
|
52
|
-
export function
|
|
53
|
-
return "antseed:
|
|
51
|
+
export function serviceSearchTopic(serviceName) {
|
|
52
|
+
return "antseed:service-search:" + normalizeServiceSearchTopicKey(serviceName);
|
|
54
53
|
}
|
|
55
54
|
export function capabilityTopic(capability, name) {
|
|
56
55
|
const base = "antseed:" + normalizeTopicSegment(capability);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dht-node.js","sourceRoot":"","sources":["../../src/discovery/dht-node.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,gBAAgB,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAY7E,MAAM,CAAC,MAAM,kBAAkB,GAAkC;IAC/D,IAAI,EAAE,IAAI;IACV,cAAc,EAAE,iBAAiB,CAAC,wBAAwB,CAAC;IAC3D,oBAAoB,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI;IACpC,kBAAkB,EAAE,MAAM;CAC3B,CAAC;AAEF,SAAS,UAAU,CAAC,IAAY;IAC9B,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IACzD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACrC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,KAAK,GAAG;QAAE,OAAO,KAAK,CAAC,CAAC,WAAW;IACxC,IAAI,CAAC,KAAK,EAAE;QAAE,OAAO,KAAK,CAAC,CAAC,aAAa;IACzC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;QAAE,OAAO,KAAK,CAAC,CAAC,gBAAgB;IACtF,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG;QAAE,OAAO,KAAK,CAAC,CAAC,iBAAiB;IAC3D,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG;QAAE,OAAO,KAAK,CAAC,CAAC,aAAa;IACvD,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1B,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;AACnD,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAa;IAC1C,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,
|
|
1
|
+
{"version":3,"file":"dht-node.js","sourceRoot":"","sources":["../../src/discovery/dht-node.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
export { DHTNode, DEFAULT_DHT_CONFIG, topicToInfoHash,
|
|
1
|
+
export { DHTNode, DEFAULT_DHT_CONFIG, topicToInfoHash, ANTSEED_WILDCARD_TOPIC, serviceTopic, serviceSearchTopic, capabilityTopic, normalizeServiceTopicKey, normalizeServiceSearchTopicKey, type DHTNodeConfig, } from './dht-node.js';
|
|
2
2
|
export { PeerAnnouncer, type AnnouncerConfig } from './announcer.js';
|
|
3
3
|
export { PeerLookup, DEFAULT_LOOKUP_CONFIG, type LookupConfig, type LookupResult } from './peer-lookup.js';
|
|
4
4
|
export { scorePeer, rankPeers, selectBestPeer, selectDiversePeers, DEFAULT_SCORING_WEIGHTS, type ScoringWeights, type PeerCandidate, type ScoredPeer } from './peer-selector.js';
|
|
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,
|
|
8
|
+
export { METADATA_VERSION, WELL_KNOWN_SERVICE_CATEGORIES, type PeerMetadata, type ProviderAnnouncement } from './peer-metadata.js';
|
|
9
|
+
export { parsePublicAddress, MAX_PUBLIC_ADDRESS_LENGTH, type ParsedPublicAddress } from './public-address.js';
|
|
9
10
|
export { type MetadataResolver, type PeerEndpoint } from './metadata-resolver.js';
|
|
10
11
|
export { DefaultMetadataResolver } from './default-metadata-resolver.js';
|
|
11
12
|
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,EACL,OAAO,EACP,kBAAkB,EAClB,eAAe,EACf,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/discovery/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,kBAAkB,EAClB,eAAe,EACf,sBAAsB,EACtB,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,wBAAwB,EACxB,8BAA8B,EAC9B,KAAK,aAAa,GACnB,MAAM,eAAe,CAAC;AACvB,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;AAE3G,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,6BAA6B,EAAE,KAAK,YAAY,EAAE,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACnI,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC9G,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,gBAAgB,EAAE,KAAK,sBAAsB,EAAE,MAAM,0BAA0B,CAAC"}
|
package/dist/discovery/index.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
export { DHTNode, DEFAULT_DHT_CONFIG, topicToInfoHash,
|
|
1
|
+
export { DHTNode, DEFAULT_DHT_CONFIG, topicToInfoHash, ANTSEED_WILDCARD_TOPIC, serviceTopic, serviceSearchTopic, capabilityTopic, normalizeServiceTopicKey, normalizeServiceSearchTopicKey, } from './dht-node.js';
|
|
2
2
|
export { PeerAnnouncer } from './announcer.js';
|
|
3
3
|
export { PeerLookup, DEFAULT_LOOKUP_CONFIG } from './peer-lookup.js';
|
|
4
4
|
export { scorePeer, rankPeers, selectBestPeer, selectDiversePeers, DEFAULT_SCORING_WEIGHTS } from './peer-selector.js';
|
|
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,
|
|
8
|
+
export { METADATA_VERSION, WELL_KNOWN_SERVICE_CATEGORIES } from './peer-metadata.js';
|
|
9
|
+
export { parsePublicAddress, MAX_PUBLIC_ADDRESS_LENGTH } from './public-address.js';
|
|
9
10
|
export { DefaultMetadataResolver } from './default-metadata-resolver.js';
|
|
10
11
|
export { HttpMetadataResolver } from './http-metadata-resolver.js';
|
|
11
12
|
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,EACL,OAAO,EACP,kBAAkB,EAClB,eAAe,EACf,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/discovery/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,kBAAkB,EAClB,eAAe,EACf,sBAAsB,EACtB,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,wBAAwB,EACxB,8BAA8B,GAE/B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,aAAa,EAAwB,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAwC,MAAM,kBAAkB,CAAC;AAE3G,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,6BAA6B,EAAgD,MAAM,oBAAoB,CAAC;AACnI,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAA4B,MAAM,qBAAqB,CAAC;AAE9G,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,gBAAgB,EAA+B,MAAM,0BAA0B,CAAC"}
|
|
@@ -3,18 +3,19 @@ import type { PeerMetadata } from "./peer-metadata.js";
|
|
|
3
3
|
* Encode metadata into binary format:
|
|
4
4
|
* [version:1][peerId:32][regionLen:1][region:N][timestamp:8 BigUint64][providerCount:1]
|
|
5
5
|
* for each provider:
|
|
6
|
-
* [providerLen:1][provider:N][
|
|
6
|
+
* [providerLen:1][provider:N][serviceCount:1][services...]
|
|
7
7
|
* [defaultInputPrice:4][defaultOutputPrice:4]
|
|
8
|
-
* [
|
|
9
|
-
* [
|
|
10
|
-
* [
|
|
8
|
+
* [servicePricingCount:1][servicePricingEntries...]
|
|
9
|
+
* [serviceCategoryCount:1][serviceCategoryEntries...] (v3+ only)
|
|
10
|
+
* [serviceApiProtocolCount:1][serviceApiProtocolEntries...] (v4+ only)
|
|
11
11
|
* [maxConcurrency:2][currentLoad:2]
|
|
12
|
-
*
|
|
13
|
-
*
|
|
12
|
+
* servicePricingEntry: [serviceLen:1][service:N][inputPrice:4][outputPrice:4]
|
|
13
|
+
* serviceCategoryEntry(v3+): [serviceLen:1][service:N][categoryCount:1][categories...]
|
|
14
14
|
* category(v3+): [categoryLen:1][category:N]
|
|
15
|
-
*
|
|
15
|
+
* serviceApiProtocolEntry(v4+): [serviceLen:1][service:N][protocolCount:1][protocols...]
|
|
16
16
|
* protocol(v4+): [protocolLen:1][protocol:N]
|
|
17
17
|
* [displayNameFlag:1][displayNameLen:1][displayName:N] (v3+ only)
|
|
18
|
+
* [publicAddressFlag:1][publicAddressLen:1][publicAddress:N] (v5+ only)
|
|
18
19
|
* [signature:64]
|
|
19
20
|
*/
|
|
20
21
|
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;
|
|
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;AAWvD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,YAAY,GAAG,UAAU,CAQjE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,YAAY,GAAG,UAAU,CAE3E;AAgPD;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,YAAY,CAgV7D"}
|