@resciencelab/agent-world-network 1.0.0

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 (50) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +357 -0
  3. package/dist/address.d.ts +5 -0
  4. package/dist/address.d.ts.map +1 -0
  5. package/dist/address.js +44 -0
  6. package/dist/address.js.map +1 -0
  7. package/dist/channel.d.ts +107 -0
  8. package/dist/channel.d.ts.map +1 -0
  9. package/dist/channel.js +94 -0
  10. package/dist/channel.js.map +1 -0
  11. package/dist/identity.d.ts +31 -0
  12. package/dist/identity.d.ts.map +1 -0
  13. package/dist/identity.js +312 -0
  14. package/dist/identity.js.map +1 -0
  15. package/dist/index.d.ts +2 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +812 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/peer-client.d.ts +26 -0
  20. package/dist/peer-client.d.ts.map +1 -0
  21. package/dist/peer-client.js +199 -0
  22. package/dist/peer-client.js.map +1 -0
  23. package/dist/peer-db.d.ts +32 -0
  24. package/dist/peer-db.d.ts.map +1 -0
  25. package/dist/peer-db.js +299 -0
  26. package/dist/peer-db.js.map +1 -0
  27. package/dist/peer-server.d.ts +36 -0
  28. package/dist/peer-server.d.ts.map +1 -0
  29. package/dist/peer-server.js +319 -0
  30. package/dist/peer-server.js.map +1 -0
  31. package/dist/transport-quic.d.ts +32 -0
  32. package/dist/transport-quic.d.ts.map +1 -0
  33. package/dist/transport-quic.js +195 -0
  34. package/dist/transport-quic.js.map +1 -0
  35. package/dist/transport.d.ts +55 -0
  36. package/dist/transport.d.ts.map +1 -0
  37. package/dist/transport.js +80 -0
  38. package/dist/transport.js.map +1 -0
  39. package/dist/types.d.ts +107 -0
  40. package/dist/types.d.ts.map +1 -0
  41. package/dist/types.js +4 -0
  42. package/dist/types.js.map +1 -0
  43. package/openclaw.plugin.json +77 -0
  44. package/package.json +62 -0
  45. package/scripts/release.sh.bak +113 -0
  46. package/scripts/sync-version.mjs +19 -0
  47. package/skills/awn/SKILL.md +95 -0
  48. package/skills/awn/references/discovery.md +71 -0
  49. package/skills/awn/references/flows.md +84 -0
  50. package/skills/awn/references/install.md +38 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"peer-db.js","sourceRoot":"","sources":["../src/peer-db.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { P2PMessage, Identity, Endpoint } from "./types";
2
+ export type MessageHandler = (msg: P2PMessage & {
3
+ verified: boolean;
4
+ }) => void;
5
+ export declare function addWorldMembers(worldId: string, memberIds: string[]): void;
6
+ /** Replace the member set for a world — revokes access for any IDs not in the new list. */
7
+ export declare function setWorldMembers(worldId: string, memberIds: string[]): void;
8
+ export declare function removeWorld(worldId: string): void;
9
+ export declare function isCoMember(agentId: string): boolean;
10
+ export declare function clearWorldMembers(): void;
11
+ interface SelfMeta {
12
+ agentId?: string;
13
+ publicKey?: string;
14
+ alias?: string;
15
+ version?: string;
16
+ endpoints?: Endpoint[];
17
+ }
18
+ export interface PeerServerOptions {
19
+ /** If true, disables startup delays for tests */
20
+ testMode?: boolean;
21
+ /** Identity for response signing (optional) */
22
+ identity?: Identity;
23
+ /** When set, incoming messages are dispatched to this handler and world co-member check is skipped (used by World Servers) */
24
+ onMessage?: MessageHandler;
25
+ }
26
+ export declare function setSelfMeta(meta: SelfMeta): void;
27
+ export declare function onMessage(handler: MessageHandler): void;
28
+ export declare function startPeerServer(port?: number, opts?: PeerServerOptions): Promise<void>;
29
+ export declare function stopPeerServer(): Promise<void>;
30
+ /**
31
+ * Process a raw UDP datagram as a P2PMessage.
32
+ * Returns true if the message was valid and handled, false otherwise.
33
+ */
34
+ export declare function handleUdpMessage(data: Buffer, from: string): boolean;
35
+ export {};
36
+ //# sourceMappingURL=peer-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"peer-server.d.ts","sourceRoot":"","sources":["../src/peer-server.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AASxD,MAAM,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,UAAU,GAAG;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,KAAK,IAAI,CAAA;AAU9E,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAO1E;AAED,2FAA2F;AAC3F,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAE1E;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEjD;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAKnD;AAED,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAED,UAAU,QAAQ;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAA;CACvB;AAGD,MAAM,WAAW,iBAAiB;IAChC,iDAAiD;IACjD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,8HAA8H;IAC9H,SAAS,CAAC,EAAE,cAAc,CAAA;CAC3B;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,CAGhD;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAEvD;AAYD,wBAAsB,eAAe,CAAC,IAAI,GAAE,MAAa,EAAE,IAAI,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8KlG;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAMpD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAqDpE"}
@@ -0,0 +1,319 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.addWorldMembers = addWorldMembers;
7
+ exports.setWorldMembers = setWorldMembers;
8
+ exports.removeWorld = removeWorld;
9
+ exports.isCoMember = isCoMember;
10
+ exports.clearWorldMembers = clearWorldMembers;
11
+ exports.setSelfMeta = setSelfMeta;
12
+ exports.onMessage = onMessage;
13
+ exports.startPeerServer = startPeerServer;
14
+ exports.stopPeerServer = stopPeerServer;
15
+ exports.handleUdpMessage = handleUdpMessage;
16
+ /**
17
+ * P2P peer HTTP server listening on [::]:8099.
18
+ *
19
+ * Trust model:
20
+ * Layer 1 — Ed25519 signature (universal trust anchor)
21
+ * Layer 2 — TOFU: agentId -> publicKey binding
22
+ * Layer 3 — World membership: only co-members can exchange messages
23
+ *
24
+ * All source IP filtering has been removed. Trust is established at the
25
+ * application layer via Ed25519 signatures, not at the network layer.
26
+ */
27
+ const fastify_1 = __importDefault(require("fastify"));
28
+ const identity_1 = require("./identity");
29
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
30
+ const pkgVersion = require("../package.json").version;
31
+ const PROTOCOL_VERSION = pkgVersion.split(".").slice(0, 2).join(".");
32
+ const peer_db_1 = require("./peer-db");
33
+ const MAX_MESSAGE_AGE_MS = 5 * 60 * 1000; // 5 minutes
34
+ let server = null;
35
+ const _handlers = [];
36
+ let _identity = null;
37
+ // ── World membership allowlist ───────────────────────────────────────────────
38
+ const _worldMembers = new Map();
39
+ function addWorldMembers(worldId, memberIds) {
40
+ let set = _worldMembers.get(worldId);
41
+ if (!set) {
42
+ set = new Set();
43
+ _worldMembers.set(worldId, set);
44
+ }
45
+ for (const id of memberIds)
46
+ set.add(id);
47
+ }
48
+ /** Replace the member set for a world — revokes access for any IDs not in the new list. */
49
+ function setWorldMembers(worldId, memberIds) {
50
+ _worldMembers.set(worldId, new Set(memberIds));
51
+ }
52
+ function removeWorld(worldId) {
53
+ _worldMembers.delete(worldId);
54
+ }
55
+ function isCoMember(agentId) {
56
+ for (const members of _worldMembers.values()) {
57
+ if (members.has(agentId))
58
+ return true;
59
+ }
60
+ return false;
61
+ }
62
+ function clearWorldMembers() {
63
+ _worldMembers.clear();
64
+ }
65
+ let _selfMeta = {};
66
+ function setSelfMeta(meta) {
67
+ _selfMeta = meta;
68
+ // If we have agentId but no signing key, we can't sign responses without privateKey
69
+ }
70
+ function onMessage(handler) {
71
+ _handlers.push(handler);
72
+ }
73
+ function canonical(msg) {
74
+ return {
75
+ from: msg.from,
76
+ publicKey: msg.publicKey,
77
+ event: msg.event,
78
+ content: msg.content,
79
+ timestamp: msg.timestamp,
80
+ };
81
+ }
82
+ async function startPeerServer(port = 8099, opts) {
83
+ if (opts?.identity) {
84
+ _identity = opts.identity;
85
+ }
86
+ server = (0, fastify_1.default)({ logger: false });
87
+ // Preserve raw body string for Content-Digest verification
88
+ server.decorateRequest("rawBody", "");
89
+ server.addContentTypeParser("application/json", { parseAs: "string" }, (req, body, done) => {
90
+ try {
91
+ ;
92
+ req.rawBody = body;
93
+ done(null, JSON.parse(body));
94
+ }
95
+ catch (err) {
96
+ done(err, undefined);
97
+ }
98
+ });
99
+ // Sign all /peer/* JSON responses
100
+ server.addHook("onSend", async (_req, reply, payload) => {
101
+ if (!_identity || typeof payload !== "string")
102
+ return payload;
103
+ const url = (_req.url ?? "").split("?")[0];
104
+ if (!url.startsWith("/peer/"))
105
+ return payload;
106
+ const ct = reply.getHeader("content-type");
107
+ if (!ct || !ct.includes("application/json"))
108
+ return payload;
109
+ const hdrs = (0, identity_1.signHttpResponse)(_identity, reply.statusCode, payload);
110
+ for (const [k, v] of Object.entries(hdrs))
111
+ reply.header(k, v);
112
+ return payload;
113
+ });
114
+ server.get("/peer/ping", async () => ({
115
+ ok: true,
116
+ ts: Date.now(),
117
+ agentId: _selfMeta.agentId ?? _identity?.agentId,
118
+ publicKey: _selfMeta.publicKey ?? _identity?.publicKey,
119
+ }));
120
+ server.post("/peer/message", async (req, reply) => {
121
+ const raw = req.body;
122
+ if (!raw?.publicKey || !raw?.from) {
123
+ return reply.code(400).send({ error: "Missing 'from' or 'publicKey'" });
124
+ }
125
+ // Verify X-AgentWorld-* header signature
126
+ const rawBody = req.rawBody;
127
+ const authority = req.headers["host"] ?? "localhost";
128
+ const reqPath = req.url.split("?")[0];
129
+ const result = (0, identity_1.verifyHttpRequestHeaders)(req.headers, req.method, reqPath, authority, rawBody, raw.publicKey);
130
+ if (!result.ok)
131
+ return reply.code(403).send({ error: result.error });
132
+ const headerFrom = req.headers["x-agentworld-from"];
133
+ if (headerFrom !== raw.from) {
134
+ return reply.code(400).send({ error: "X-AgentWorld-From does not match body 'from'" });
135
+ }
136
+ const agentId = raw.from;
137
+ const knownPeer = (0, peer_db_1.getPeer)(agentId);
138
+ if (!knownPeer?.publicKey && (0, identity_1.agentIdFromPublicKey)(raw.publicKey) !== agentId) {
139
+ return reply.code(400).send({ error: "agentId does not match publicKey" });
140
+ }
141
+ if (raw.timestamp && Math.abs(Date.now() - raw.timestamp) > MAX_MESSAGE_AGE_MS) {
142
+ return reply.code(400).send({ error: "Message timestamp too old or too far in the future" });
143
+ }
144
+ if (!(0, peer_db_1.tofuVerifyAndCache)(agentId, raw.publicKey)) {
145
+ return reply.code(403).send({
146
+ error: `Public key mismatch for ${agentId} — possible key rotation, re-add peer`,
147
+ });
148
+ }
149
+ // World co-member check (skip when onMessage handler is set — world servers handle their own auth)
150
+ if (!opts?.onMessage && !isCoMember(agentId)) {
151
+ return reply.code(403).send({ error: "Not a world co-member" });
152
+ }
153
+ const msg = {
154
+ from: agentId,
155
+ publicKey: raw.publicKey,
156
+ event: raw.event,
157
+ content: raw.content,
158
+ timestamp: raw.timestamp,
159
+ signature: raw.signature,
160
+ };
161
+ if (msg.event === "leave") {
162
+ (0, peer_db_1.removePeer)(agentId);
163
+ console.log(`[p2p] <- leave from=${agentId} — removed from peer table`);
164
+ return { ok: true };
165
+ }
166
+ console.log(`[p2p] <- verified from=${agentId} event=${msg.event}`);
167
+ _handlers.forEach((h) => h({ ...msg, verified: true }));
168
+ return { ok: true };
169
+ });
170
+ // TODO: transport-level header signing for /peer/key-rotation is deferred —
171
+ // rotation uses its own dual-signature proof structure (signedByOld + signedByNew)
172
+ server.post("/peer/key-rotation", async (req, reply) => {
173
+ const rot = req.body;
174
+ if (!rot.oldAgentId || !rot.newAgentId ||
175
+ !rot.oldIdentity?.publicKeyMultibase ||
176
+ !rot.newIdentity?.publicKeyMultibase ||
177
+ !rot.proofs?.signedByOld?.signature || !rot.proofs?.signedByNew?.signature) {
178
+ return reply.code(400).send({ error: "Missing required key rotation fields" });
179
+ }
180
+ if (rot.type !== "agentworld-identity-rotation" || rot.version !== PROTOCOL_VERSION) {
181
+ return reply.code(400).send({ error: `Expected type=agentworld-identity-rotation and version=${PROTOCOL_VERSION}` });
182
+ }
183
+ const agentId = rot.oldAgentId;
184
+ // Only accept key rotation from known peers or co-members
185
+ if (!(0, peer_db_1.getPeer)(agentId) && !isCoMember(agentId)) {
186
+ return reply.code(403).send({ error: "Unknown agent — key rotation requires existing relationship" });
187
+ }
188
+ let oldPublicKeyB64, newPublicKeyB64;
189
+ try {
190
+ oldPublicKeyB64 = multibaseToBase64(rot.oldIdentity.publicKeyMultibase);
191
+ newPublicKeyB64 = multibaseToBase64(rot.newIdentity.publicKeyMultibase);
192
+ }
193
+ catch {
194
+ return reply.code(400).send({ error: "Invalid publicKeyMultibase encoding" });
195
+ }
196
+ const timestamp = rot.timestamp;
197
+ if ((0, identity_1.agentIdFromPublicKey)(oldPublicKeyB64) !== agentId) {
198
+ return reply.code(400).send({ error: "agentId does not match oldPublicKey" });
199
+ }
200
+ if (timestamp && Math.abs(Date.now() - timestamp) > MAX_MESSAGE_AGE_MS) {
201
+ return reply.code(400).send({ error: "Key rotation timestamp too old or too far in the future" });
202
+ }
203
+ const signable = {
204
+ agentId,
205
+ oldPublicKey: oldPublicKeyB64,
206
+ newPublicKey: newPublicKeyB64,
207
+ timestamp,
208
+ };
209
+ if (!(0, identity_1.verifyWithDomainSeparator)(identity_1.DOMAIN_SEPARATORS.KEY_ROTATION, oldPublicKeyB64, signable, rot.proofs.signedByOld.signature)) {
210
+ return reply.code(403).send({ error: "Invalid signatureByOldKey" });
211
+ }
212
+ if (!(0, identity_1.verifyWithDomainSeparator)(identity_1.DOMAIN_SEPARATORS.KEY_ROTATION, newPublicKeyB64, signable, rot.proofs.signedByNew.signature)) {
213
+ return reply.code(403).send({ error: "Invalid signatureByNewKey" });
214
+ }
215
+ // TOFU: clean rotation only — key-loss recovery requires manual re-pairing
216
+ const knownPeer = (0, peer_db_1.getPeer)(agentId);
217
+ if (knownPeer?.publicKey && knownPeer.publicKey !== oldPublicKeyB64) {
218
+ return reply.code(403).send({ error: "TOFU binding mismatch — key-loss recovery requires manual re-pairing" });
219
+ }
220
+ (0, peer_db_1.tofuReplaceKey)(agentId, newPublicKeyB64);
221
+ console.log(`[p2p] key-rotation agentId=${agentId} newKey=${newPublicKeyB64.slice(0, 16)}...`);
222
+ return { ok: true };
223
+ });
224
+ await server.listen({ port, host: "::" });
225
+ console.log(`[p2p] Peer server listening on [::]:${port}`);
226
+ }
227
+ async function stopPeerServer() {
228
+ if (server) {
229
+ await server.close();
230
+ server = null;
231
+ }
232
+ _identity = null;
233
+ }
234
+ /**
235
+ * Process a raw UDP datagram as a P2PMessage.
236
+ * Returns true if the message was valid and handled, false otherwise.
237
+ */
238
+ function handleUdpMessage(data, from) {
239
+ let raw;
240
+ try {
241
+ raw = JSON.parse(data.toString("utf-8"));
242
+ }
243
+ catch {
244
+ return false;
245
+ }
246
+ if (!raw || !raw.from || !raw.publicKey || !raw.event || !raw.signature) {
247
+ return false;
248
+ }
249
+ const knownPeer = (0, peer_db_1.getPeer)(raw.from);
250
+ if (!knownPeer?.publicKey && (0, identity_1.agentIdFromPublicKey)(raw.publicKey) !== raw.from) {
251
+ return false;
252
+ }
253
+ if (raw.timestamp && Math.abs(Date.now() - raw.timestamp) > MAX_MESSAGE_AGE_MS) {
254
+ return false;
255
+ }
256
+ const { signature, ...signable } = raw;
257
+ if (!(0, identity_1.verifyWithDomainSeparator)(identity_1.DOMAIN_SEPARATORS.MESSAGE, raw.publicKey, signable, signature)) {
258
+ return false;
259
+ }
260
+ if (!(0, peer_db_1.tofuVerifyAndCache)(raw.from, raw.publicKey)) {
261
+ return false;
262
+ }
263
+ // World co-member check
264
+ if (!isCoMember(raw.from)) {
265
+ return false;
266
+ }
267
+ const msg = {
268
+ from: raw.from,
269
+ publicKey: raw.publicKey,
270
+ event: raw.event,
271
+ content: raw.content,
272
+ timestamp: raw.timestamp,
273
+ signature: raw.signature,
274
+ };
275
+ if (msg.event === "leave") {
276
+ (0, peer_db_1.removePeer)(raw.from);
277
+ console.log(`[p2p] <- leave (UDP) from=${raw.from}`);
278
+ return true;
279
+ }
280
+ console.log(`[p2p] <- verified (UDP) from=${raw.from} event=${msg.event}`);
281
+ _handlers.forEach((h) => h({ ...msg, verified: true }));
282
+ return true;
283
+ }
284
+ // ── Key rotation helpers ─────────────────────────────────────────────────────
285
+ const BASE58_ALPHABET_KR = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
286
+ function base58Decode(str) {
287
+ const bytes = [0];
288
+ for (const char of str) {
289
+ let carry = BASE58_ALPHABET_KR.indexOf(char);
290
+ if (carry < 0)
291
+ throw new Error(`Invalid base58 char: ${char}`);
292
+ for (let j = 0; j < bytes.length; j++) {
293
+ carry += bytes[j] * 58;
294
+ bytes[j] = carry & 0xff;
295
+ carry >>= 8;
296
+ }
297
+ while (carry > 0) {
298
+ bytes.push(carry & 0xff);
299
+ carry >>= 8;
300
+ }
301
+ }
302
+ for (const char of str) {
303
+ if (char === "1")
304
+ bytes.push(0);
305
+ else
306
+ break;
307
+ }
308
+ return new Uint8Array(bytes.reverse());
309
+ }
310
+ /** Convert a multibase (z<base58btc>) Ed25519 public key to base64. */
311
+ function multibaseToBase64(multibase) {
312
+ if (!multibase.startsWith("z"))
313
+ throw new Error("Unsupported multibase prefix");
314
+ const bytes = base58Decode(multibase.slice(1));
315
+ // Strip 2-byte multicodec prefix (0xed 0x01 for Ed25519 public keys)
316
+ const keyBytes = bytes.length === 34 ? bytes.slice(2) : bytes;
317
+ return Buffer.from(keyBytes).toString("base64");
318
+ }
319
+ //# sourceMappingURL=peer-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"peer-server.js","sourceRoot":"","sources":["../src/peer-server.ts"],"names":[],"mappings":";;;;;AA+BA,0CAOC;AAGD,0CAEC;AAED,kCAEC;AAED,gCAKC;AAED,8CAEC;AAoBD,kCAGC;AAED,8BAEC;AAYD,0CA8KC;AAED,wCAMC;AAMD,4CAqDC;AAlVD;;;;;;;;;;GAUG;AACH,sDAAkD;AAElD,yCAAiK;AACjK,8DAA8D;AAC9D,MAAM,UAAU,GAAW,OAAO,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAA;AAC7D,MAAM,gBAAgB,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACpE,uCAA8H;AAE9H,MAAM,kBAAkB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAA,CAAC,YAAY;AAIrD,IAAI,MAAM,GAA2B,IAAI,CAAA;AACzC,MAAM,SAAS,GAAqB,EAAE,CAAA;AAEtC,IAAI,SAAS,GAAoB,IAAI,CAAA;AAErC,gFAAgF;AAChF,MAAM,aAAa,GAAG,IAAI,GAAG,EAAuB,CAAA;AAEpD,SAAgB,eAAe,CAAC,OAAe,EAAE,SAAmB;IAClE,IAAI,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IACpC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,GAAG,GAAG,IAAI,GAAG,EAAE,CAAA;QACf,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;IACjC,CAAC;IACD,KAAK,MAAM,EAAE,IAAI,SAAS;QAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;AACzC,CAAC;AAED,2FAA2F;AAC3F,SAAgB,eAAe,CAAC,OAAe,EAAE,SAAmB;IAClE,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAA;AAChD,CAAC;AAED,SAAgB,WAAW,CAAC,OAAe;IACzC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;AAC/B,CAAC;AAED,SAAgB,UAAU,CAAC,OAAe;IACxC,KAAK,MAAM,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC;QAC7C,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAA;IACvC,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAgB,iBAAiB;IAC/B,aAAa,CAAC,KAAK,EAAE,CAAA;AACvB,CAAC;AASD,IAAI,SAAS,GAAa,EAAE,CAAA;AAW5B,SAAgB,WAAW,CAAC,IAAc;IACxC,SAAS,GAAG,IAAI,CAAA;IAChB,oFAAoF;AACtF,CAAC;AAED,SAAgB,SAAS,CAAC,OAAuB;IAC/C,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AACzB,CAAC;AAED,SAAS,SAAS,CAAC,GAAe;IAChC,OAAO;QACL,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,SAAS,EAAE,GAAG,CAAC,SAAS;KACzB,CAAA;AACH,CAAC;AAEM,KAAK,UAAU,eAAe,CAAC,OAAe,IAAI,EAAE,IAAwB;IACjF,IAAI,IAAI,EAAE,QAAQ,EAAE,CAAC;QACnB,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAA;IAC3B,CAAC;IAED,MAAM,GAAG,IAAA,iBAAO,EAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;IAEnC,2DAA2D;IAC3D,MAAM,CAAC,eAAe,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;IACrC,MAAM,CAAC,oBAAoB,CACzB,kBAAkB,EAClB,EAAE,OAAO,EAAE,QAAQ,EAAE,EACrB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;QAClB,IAAI,CAAC;YACH,CAAC;YAAC,GAAW,CAAC,OAAO,GAAG,IAAc,CAAA;YACtC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAc,CAAC,CAAC,CAAA;QACxC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAY,EAAE,SAAS,CAAC,CAAA;QAC/B,CAAC;IACH,CAAC,CACF,CAAA;IAED,kCAAkC;IAClC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QACtD,IAAI,CAAC,SAAS,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,OAAO,CAAA;QAC7D,MAAM,GAAG,GAAG,CAAE,IAAY,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAW,CAAA;QAC7D,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,OAAO,OAAO,CAAA;QAC7C,MAAM,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,cAAc,CAAuB,CAAA;QAChE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YAAE,OAAO,OAAO,CAAA;QAC3D,MAAM,IAAI,GAAG,IAAA,2BAAkB,EAAC,SAAS,EAAE,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;QACrE,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAC7D,OAAO,OAAO,CAAA;IAChB,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;QACpC,EAAE,EAAE,IAAI;QACR,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;QACd,OAAO,EAAE,SAAS,CAAC,OAAO,IAAI,SAAS,EAAE,OAAO;QAChD,SAAS,EAAE,SAAS,CAAC,SAAS,IAAI,SAAS,EAAE,SAAS;KACvD,CAAC,CAAC,CAAA;IAEH,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QAChD,MAAM,GAAG,GAAG,GAAG,CAAC,IAAW,CAAA;QAE3B,IAAI,CAAC,GAAG,EAAE,SAAS,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;YAClC,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,+BAA+B,EAAE,CAAC,CAAA;QACzE,CAAC;QAED,yCAAyC;QACzC,MAAM,OAAO,GAAI,GAAW,CAAC,OAAiB,CAAA;QAC9C,MAAM,SAAS,GAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAY,IAAI,WAAW,CAAA;QAChE,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;QACrC,MAAM,MAAM,GAAG,IAAA,mCAAwB,EACrC,GAAG,CAAC,OAAiC,EACrC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,SAAS,CACvD,CAAA;QACD,IAAI,CAAC,MAAM,CAAC,EAAE;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAA;QACpE,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAW,CAAA;QAC7D,IAAI,UAAU,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC;YAC5B,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,8CAA8C,EAAE,CAAC,CAAA;QACxF,CAAC;QAED,MAAM,OAAO,GAAW,GAAG,CAAC,IAAI,CAAA;QAEhC,MAAM,SAAS,GAAG,IAAA,iBAAO,EAAC,OAAO,CAAC,CAAA;QAClC,IAAI,CAAC,SAAS,EAAE,SAAS,IAAI,IAAA,+BAAoB,EAAC,GAAG,CAAC,SAAS,CAAC,KAAK,OAAO,EAAE,CAAC;YAC7E,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,kCAAkC,EAAE,CAAC,CAAA;QAC5E,CAAC;QAED,IAAI,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,kBAAkB,EAAE,CAAC;YAC/E,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,oDAAoD,EAAE,CAAC,CAAA;QAC9F,CAAC;QAED,IAAI,CAAC,IAAA,4BAAkB,EAAC,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAChD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBAC1B,KAAK,EAAE,2BAA2B,OAAO,uCAAuC;aACjF,CAAC,CAAA;QACJ,CAAC;QAED,mGAAmG;QACnG,IAAI,CAAC,IAAI,EAAE,SAAS,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7C,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAA;QACjE,CAAC;QAED,MAAM,GAAG,GAAe;YACtB,IAAI,EAAE,OAAO;YACb,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,SAAS,EAAE,GAAG,CAAC,SAAS;SACzB,CAAA;QAED,IAAI,GAAG,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;YAC1B,IAAA,oBAAU,EAAC,OAAO,CAAC,CAAA;YACnB,OAAO,CAAC,GAAG,CAAC,wBAAwB,OAAO,4BAA4B,CAAC,CAAA;YACxE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAA;QACrB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,2BAA2B,OAAO,WAAW,GAAG,CAAC,KAAK,EAAE,CAAC,CAAA;QAErE,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QACvD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAA;IACrB,CAAC,CAAC,CAAA;IAEF,4EAA4E;IAC5E,mFAAmF;IACnF,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;QACrD,MAAM,GAAG,GAAG,GAAG,CAAC,IAAW,CAAA;QAE3B,IAAI,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,GAAG,CAAC,UAAU;YAClC,CAAC,GAAG,CAAC,WAAW,EAAE,kBAAkB;YACpC,CAAC,GAAG,CAAC,WAAW,EAAE,kBAAkB;YACpC,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;YAC/E,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,sCAAsC,EAAE,CAAC,CAAA;QAChF,CAAC;QAED,IAAI,GAAG,CAAC,IAAI,KAAK,8BAA8B,IAAI,GAAG,CAAC,OAAO,KAAK,gBAAgB,EAAE,CAAC;YACpF,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,0DAA0D,gBAAgB,EAAE,EAAE,CAAC,CAAA;QACtH,CAAC;QAED,MAAM,OAAO,GAAW,GAAG,CAAC,UAAU,CAAA;QAEtC,0DAA0D;QAC1D,IAAI,CAAC,IAAA,iBAAO,EAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9C,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,6DAA6D,EAAE,CAAC,CAAA;QACvG,CAAC;QAED,IAAI,eAAuB,EAAE,eAAuB,CAAA;QACpD,IAAI,CAAC;YACH,eAAe,GAAG,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAA;YACvE,eAAe,GAAG,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAA;QACzE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,qCAAqC,EAAE,CAAC,CAAA;QAC/E,CAAC;QACD,MAAM,SAAS,GAAW,GAAG,CAAC,SAAS,CAAA;QAEvC,IAAI,IAAA,+BAAoB,EAAC,eAAe,CAAC,KAAK,OAAO,EAAE,CAAC;YACtD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,qCAAqC,EAAE,CAAC,CAAA;QAC/E,CAAC;QAED,IAAI,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,kBAAkB,EAAE,CAAC;YACvE,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,yDAAyD,EAAE,CAAC,CAAA;QACnG,CAAC;QAED,MAAM,QAAQ,GAAG;YACf,OAAO;YACP,YAAY,EAAE,eAAe;YAC7B,YAAY,EAAE,eAAe;YAC7B,SAAS;SACV,CAAA;QAED,IAAI,CAAC,IAAA,oCAAyB,EAAC,4BAAiB,CAAC,YAAY,EAAE,eAAe,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;YAC5H,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAAC,CAAA;QACrE,CAAC;QAED,IAAI,CAAC,IAAA,oCAAyB,EAAC,4BAAiB,CAAC,YAAY,EAAE,eAAe,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;YAC5H,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAAC,CAAA;QACrE,CAAC;QAED,2EAA2E;QAC3E,MAAM,SAAS,GAAG,IAAA,iBAAO,EAAC,OAAO,CAAC,CAAA;QAClC,IAAI,SAAS,EAAE,SAAS,IAAI,SAAS,CAAC,SAAS,KAAK,eAAe,EAAE,CAAC;YACpE,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,sEAAsE,EAAE,CAAC,CAAA;QAChH,CAAC;QAED,IAAA,wBAAc,EAAC,OAAO,EAAE,eAAe,CAAC,CAAA;QACxC,OAAO,CAAC,GAAG,CAAC,+BAA+B,OAAO,YAAY,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAA;QAEhG,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAA;IACrB,CAAC,CAAC,CAAA;IAEF,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;IACzC,OAAO,CAAC,GAAG,CAAC,uCAAuC,IAAI,EAAE,CAAC,CAAA;AAC5D,CAAC;AAEM,KAAK,UAAU,cAAc;IAClC,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;QACpB,MAAM,GAAG,IAAI,CAAA;IACf,CAAC;IACD,SAAS,GAAG,IAAI,CAAA;AAClB,CAAC;AAED;;;GAGG;AACH,SAAgB,gBAAgB,CAAC,IAAY,EAAE,IAAY;IACzD,IAAI,GAAQ,CAAA;IACZ,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAA;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;QACxE,OAAO,KAAK,CAAA;IACd,CAAC;IAED,MAAM,SAAS,GAAG,IAAA,iBAAO,EAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IACnC,IAAI,CAAC,SAAS,EAAE,SAAS,IAAI,IAAA,+BAAoB,EAAC,GAAG,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9E,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,kBAAkB,EAAE,CAAC;QAC/E,OAAO,KAAK,CAAA;IACd,CAAC;IAED,MAAM,EAAE,SAAS,EAAE,GAAG,QAAQ,EAAE,GAAG,GAAG,CAAA;IACtC,IAAI,CAAC,IAAA,oCAAyB,EAAC,4BAAiB,CAAC,OAAO,EAAE,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC;QAC9F,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,CAAC,IAAA,4BAAkB,EAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QACjD,OAAO,KAAK,CAAA;IACd,CAAC;IAED,wBAAwB;IACxB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAA;IACd,CAAC;IAED,MAAM,GAAG,GAAe;QACtB,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,SAAS,EAAE,GAAG,CAAC,SAAS;KACzB,CAAA;IAED,IAAI,GAAG,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;QAC1B,IAAA,oBAAU,EAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACpB,OAAO,CAAC,GAAG,CAAC,6BAA6B,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;QACpD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,gCAAgC,GAAG,CAAC,IAAI,WAAW,GAAG,CAAC,KAAK,EAAE,CAAC,CAAA;IAC3E,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IACvD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,gFAAgF;AAEhF,MAAM,kBAAkB,GAAG,4DAA4D,CAAA;AAEvF,SAAS,YAAY,CAAC,GAAW;IAC/B,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAA;IACjB,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC;QACvB,IAAI,KAAK,GAAG,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAC5C,IAAI,KAAK,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,EAAE,CAAC,CAAA;QAC9D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAA;YACtB,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAA;YACvB,KAAK,KAAK,CAAC,CAAA;QACb,CAAC;QACD,OAAO,KAAK,GAAG,CAAC,EAAE,CAAC;YACjB,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAA;YACxB,KAAK,KAAK,CAAC,CAAA;QACb,CAAC;IACH,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC;QACvB,IAAI,IAAI,KAAK,GAAG;YAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;;YAC1B,MAAK;IACZ,CAAC;IACD,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;AACxC,CAAC;AAED,uEAAuE;AACvE,SAAS,iBAAiB,CAAC,SAAiB;IAC1C,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;IAC/E,MAAM,KAAK,GAAG,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IAC9C,qEAAqE;IACrE,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IAC7D,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;AACjD,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { Transport, TransportId, TransportEndpoint } from "./transport";
2
+ import { Identity } from "./types";
3
+ /** Check if Node.js native QUIC is available (node:quic, Node 24+). */
4
+ declare function isNativeQuicAvailable(): boolean;
5
+ export declare class UDPTransport implements Transport {
6
+ readonly id: TransportId;
7
+ private _address;
8
+ private _port;
9
+ private _active;
10
+ private _socket;
11
+ private _handlers;
12
+ private _publicEndpoint;
13
+ private _useNativeQuic;
14
+ get address(): string;
15
+ get publicEndpoint(): {
16
+ address: string;
17
+ port: number;
18
+ } | null;
19
+ start(identity: Identity, opts?: Record<string, unknown>): Promise<boolean>;
20
+ stop(): Promise<void>;
21
+ isActive(): boolean;
22
+ send(target: string, data: Buffer): Promise<void>;
23
+ onMessage(handler: (from: string, data: Buffer) => void): void;
24
+ getEndpoint(): TransportEndpoint;
25
+ }
26
+ /** Parse a host:port or [host]:port string. */
27
+ declare function parseHostPort(addr: string): {
28
+ host: string;
29
+ port: number;
30
+ };
31
+ export { parseHostPort, isNativeQuicAvailable };
32
+ //# sourceMappingURL=transport-quic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport-quic.d.ts","sourceRoot":"","sources":["../src/transport-quic.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAElC,uEAAuE;AACvE,iBAAS,qBAAqB,IAAI,OAAO,CAOxC;AAED,qBAAa,YAAa,YAAW,SAAS;IAC5C,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,KAAK,CAAY;IACzB,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,SAAS,CAAkD;IACnE,OAAO,CAAC,eAAe,CAAiD;IACxE,OAAO,CAAC,cAAc,CAAiB;IAEvC,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,cAAc;iBAPkB,MAAM;cAAQ,MAAM;aASvD;IAEK,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAmE3E,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3B,QAAQ,IAAI,OAAO;IAIb,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAevD,SAAS,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAI9D,WAAW,IAAI,iBAAiB;CASjC;AAED,+CAA+C;AAC/C,iBAAS,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAenE;AAED,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,CAAA"}
@@ -0,0 +1,195 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.UDPTransport = void 0;
37
+ exports.parseHostPort = parseHostPort;
38
+ exports.isNativeQuicAvailable = isNativeQuicAvailable;
39
+ /**
40
+ * UDP transport backend — optional fast transport alongside the primary HTTP/TCP layer.
41
+ *
42
+ * IMPORTANT: This is a plain UDP datagram transport, NOT a real QUIC
43
+ * implementation. It provides:
44
+ * - Unencrypted, unreliable UDP delivery (no retransmission, no ordering)
45
+ * - Messages >MTU (~1400 bytes) may be silently dropped
46
+ *
47
+ * The advertised public endpoint is determined by explicit configuration
48
+ * (ADVERTISE_ADDRESS / ADVERTISE_PORT env vars or plugin config), not by
49
+ * automatic NIC scanning or STUN. This is intentional: in the world-scoped
50
+ * architecture, reachable addresses are a deployment concern.
51
+ *
52
+ * Security relies entirely on the application-layer Ed25519 signatures.
53
+ * When Node.js native QUIC (node:quic, Node 24+) becomes stable, this
54
+ * transport should be upgraded to use it for transport-layer encryption.
55
+ */
56
+ const dgram = __importStar(require("node:dgram"));
57
+ /** Check if Node.js native QUIC is available (node:quic, Node 24+). */
58
+ function isNativeQuicAvailable() {
59
+ try {
60
+ require("node:quic");
61
+ return true;
62
+ }
63
+ catch {
64
+ return false;
65
+ }
66
+ }
67
+ class UDPTransport {
68
+ id = "quic";
69
+ _address = "";
70
+ _port = 0;
71
+ _active = false;
72
+ _socket = null;
73
+ _handlers = [];
74
+ _publicEndpoint = null;
75
+ _useNativeQuic = false;
76
+ get address() {
77
+ return this._address;
78
+ }
79
+ get publicEndpoint() {
80
+ return this._publicEndpoint;
81
+ }
82
+ async start(identity, opts) {
83
+ const port = opts?.quicPort ?? 8098;
84
+ const testMode = opts?.testMode ?? false;
85
+ const advertiseAddress = opts?.advertiseAddress ?? process.env.ADVERTISE_ADDRESS;
86
+ const advertisePort = opts?.advertisePort
87
+ ?? (process.env.ADVERTISE_PORT ? parseInt(process.env.ADVERTISE_PORT, 10) : undefined);
88
+ if (!testMode && !advertiseAddress) {
89
+ console.warn("[transport:quic] Disabled: no advertised public endpoint configured (set ADVERTISE_ADDRESS / advertise_address)");
90
+ return false;
91
+ }
92
+ // Check for native QUIC support first
93
+ this._useNativeQuic = isNativeQuicAvailable();
94
+ if (this._useNativeQuic) {
95
+ console.log("[transport:quic] Native QUIC available (node:quic)");
96
+ }
97
+ try {
98
+ // Create UDP socket for QUIC transport
99
+ this._socket = dgram.createSocket("udp6");
100
+ await new Promise((resolve, reject) => {
101
+ this._socket.on("error", reject);
102
+ this._socket.bind(port, "::", () => {
103
+ this._socket.removeListener("error", reject);
104
+ resolve();
105
+ });
106
+ });
107
+ const actualPort = this._socket.address().port;
108
+ this._port = actualPort;
109
+ // Set up message handler
110
+ this._socket.on("message", (msg, rinfo) => {
111
+ const from = rinfo.address.includes(":") ? `[${rinfo.address}]:${rinfo.port}` : `${rinfo.address}:${rinfo.port}`;
112
+ for (const h of this._handlers) {
113
+ h(from, msg);
114
+ }
115
+ });
116
+ // Use explicit advertise address if configured
117
+ if (!testMode && advertiseAddress) {
118
+ const effPort = advertisePort ?? actualPort;
119
+ const isIpv6 = advertiseAddress.includes(":") && !advertiseAddress.includes(".");
120
+ this._address = isIpv6 ? `[${advertiseAddress}]:${effPort}` : `${advertiseAddress}:${effPort}`;
121
+ this._publicEndpoint = { address: advertiseAddress, port: effPort };
122
+ console.log(`[transport:quic] Advertised endpoint: ${this._address}`);
123
+ }
124
+ // Tests can run without a public endpoint; production cannot.
125
+ if (!this._address) {
126
+ this._address = `[::1]:${actualPort}`;
127
+ if (!testMode) {
128
+ console.log(`[transport:quic] Local endpoint: ${this._address} (set ADVERTISE_ADDRESS for public reachability)`);
129
+ }
130
+ }
131
+ this._active = true;
132
+ console.log(`[transport:quic] Listening on UDP port ${actualPort}`);
133
+ return true;
134
+ }
135
+ catch (err) {
136
+ console.warn(`[transport:quic] Failed to start: ${err?.message}`);
137
+ return false;
138
+ }
139
+ }
140
+ async stop() {
141
+ this._active = false;
142
+ if (this._socket) {
143
+ this._socket.close();
144
+ this._socket = null;
145
+ }
146
+ }
147
+ isActive() {
148
+ return this._active;
149
+ }
150
+ async send(target, data) {
151
+ if (!this._socket || !this._active) {
152
+ throw new Error("QUIC transport not active");
153
+ }
154
+ const { host, port } = parseHostPort(target);
155
+ return new Promise((resolve, reject) => {
156
+ this._socket.send(data, 0, data.length, port, host, (err) => {
157
+ if (err)
158
+ reject(err);
159
+ else
160
+ resolve();
161
+ });
162
+ });
163
+ }
164
+ onMessage(handler) {
165
+ this._handlers.push(handler);
166
+ }
167
+ getEndpoint() {
168
+ return {
169
+ transport: "quic",
170
+ address: this._publicEndpoint?.address ?? this._address,
171
+ port: this._publicEndpoint?.port ?? this._port,
172
+ priority: 0,
173
+ ttl: 3600,
174
+ };
175
+ }
176
+ }
177
+ exports.UDPTransport = UDPTransport;
178
+ /** Parse a host:port or [host]:port string. */
179
+ function parseHostPort(addr) {
180
+ // [ipv6]:port format
181
+ const bracketMatch = addr.match(/^\[([^\]]+)\]:(\d+)$/);
182
+ if (bracketMatch) {
183
+ return { host: bracketMatch[1], port: parseInt(bracketMatch[2], 10) };
184
+ }
185
+ // host:port (IPv4 or hostname)
186
+ const lastColon = addr.lastIndexOf(":");
187
+ if (lastColon > 0) {
188
+ return {
189
+ host: addr.slice(0, lastColon),
190
+ port: parseInt(addr.slice(lastColon + 1), 10),
191
+ };
192
+ }
193
+ throw new Error(`Invalid address format: ${addr}`);
194
+ }
195
+ //# sourceMappingURL=transport-quic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport-quic.js","sourceRoot":"","sources":["../src/transport-quic.ts"],"names":[],"mappings":"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"}