@moltzap/openclaw-channel 2026.327.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.
@@ -0,0 +1,569 @@
1
+ /**
2
+ * OpenClaw plugin entry point for MoltZap.
3
+ *
4
+ * Wraps the existing MoltZapWsClient + mapping modules into the
5
+ * ChannelPlugin shape expected by OpenClaw's api.registerChannel().
6
+ *
7
+ * Installed via: openclaw plugin install @moltzap/openclaw-channel
8
+ * Config: channels.moltzap.accounts[].{apiKey, serverUrl, agentName}
9
+ */
10
+ import { MoltZapWsClient } from "./ws-client.js";
11
+ import { extractMessage, extractReadReceipt, extractReaction, extractDelivery, extractDeletion, extractConversationCreated, extractConversationUpdated, extractContactRequest, extractContactAccepted, extractPresenceChanged, extractTypingIndicator, mapMessageToEnvelope, } from "./mapping.js";
12
+ const DEFAULT_ACCOUNT_ID = "default";
13
+ const CHANNEL_ID = "moltzap";
14
+ const TARGET_PREFIX_AGENT = "agent:";
15
+ const TARGET_PREFIX_CONV = "conv:";
16
+ const MOLTZAP_TARGET_RE = /^(agent|conv):.+$/;
17
+ function isMoltZapTarget(raw) {
18
+ return MOLTZAP_TARGET_RE.test(raw);
19
+ }
20
+ function resolveAccountList(cfg) {
21
+ const section = cfg.channels?.moltzap;
22
+ if (!section)
23
+ return [];
24
+ return Array.isArray(section.accounts) ? section.accounts : [];
25
+ }
26
+ function resolveAccount(cfg, accountId) {
27
+ const accounts = resolveAccountList(cfg);
28
+ const id = accountId ?? DEFAULT_ACCOUNT_ID;
29
+ return (accounts.find((a) => a.id === id) ??
30
+ accounts[0] ?? { id, apiKey: "", serverUrl: "", agentName: "" });
31
+ }
32
+ const activeClients = new Map();
33
+ /** Cache: accountId → (agentName → conversationId) for auto-created DM conversations. */
34
+ export const agentConversationCache = new Map();
35
+ export const moltzapChannelPlugin = {
36
+ id: CHANNEL_ID,
37
+ meta: {
38
+ id: CHANNEL_ID,
39
+ label: "MoltZap",
40
+ selectionLabel: "MoltZap (agent messaging)",
41
+ docsPath: "/channels/moltzap",
42
+ docsLabel: "moltzap",
43
+ blurb: "Agent-to-agent messaging via the MoltZap protocol.",
44
+ detailLabel: "MoltZap",
45
+ aliases: ["mz"],
46
+ order: 200,
47
+ },
48
+ capabilities: {
49
+ chatTypes: ["dm", "group"],
50
+ },
51
+ messaging: {
52
+ targetResolver: {
53
+ looksLikeId(raw) {
54
+ return isMoltZapTarget(raw);
55
+ },
56
+ hint: 'Use "agent:<name>" for DMs or "conv:<id>" for existing conversations',
57
+ async resolveTarget(params) {
58
+ const { normalized } = params;
59
+ if (!isMoltZapTarget(normalized))
60
+ return null;
61
+ // "user" = DM target (agent:*), "group" = conversation target (conv:*)
62
+ const kind = normalized.startsWith(TARGET_PREFIX_CONV)
63
+ ? "group"
64
+ : "user";
65
+ return {
66
+ to: normalized,
67
+ kind,
68
+ display: normalized.split(":").slice(1).join(":"),
69
+ source: "normalized",
70
+ };
71
+ },
72
+ },
73
+ },
74
+ directory: {
75
+ async listPeers(params) {
76
+ const client = activeClients.get(params.accountId ?? DEFAULT_ACCOUNT_ID);
77
+ if (!client)
78
+ return [];
79
+ try {
80
+ const { contacts } = (await client.sendRpc("contacts/list", {
81
+ status: "accepted",
82
+ }));
83
+ const agentIds = contacts.flatMap((c) => (c.agents ?? []).map((a) => a.id));
84
+ if (agentIds.length === 0)
85
+ return [];
86
+ const { agents } = (await client.sendRpc("agents/lookup", {
87
+ agentIds,
88
+ }));
89
+ return agents.map((a) => ({
90
+ id: `agent:${a.name}`,
91
+ name: a.displayName ?? a.name,
92
+ kind: "user",
93
+ }));
94
+ }
95
+ catch {
96
+ return [];
97
+ }
98
+ },
99
+ async listGroups(params) {
100
+ const client = activeClients.get(params.accountId ?? DEFAULT_ACCOUNT_ID);
101
+ if (!client)
102
+ return [];
103
+ try {
104
+ const { conversations } = (await client.sendRpc("conversations/list", {}));
105
+ return conversations
106
+ .filter((c) => c.type === "group" && c.name)
107
+ .map((c) => ({
108
+ id: `conv:${c.id}`,
109
+ name: c.name,
110
+ kind: "group",
111
+ }));
112
+ }
113
+ catch {
114
+ return [];
115
+ }
116
+ },
117
+ },
118
+ config: {
119
+ listAccountIds(cfg) {
120
+ const accounts = resolveAccountList(cfg);
121
+ return accounts.length > 0
122
+ ? accounts.map((a) => a.id || DEFAULT_ACCOUNT_ID)
123
+ : [];
124
+ },
125
+ resolveAccount(cfg, accountId) {
126
+ return resolveAccount(cfg, accountId);
127
+ },
128
+ isConfigured(account) {
129
+ return Boolean(account.apiKey && account.serverUrl);
130
+ },
131
+ unconfiguredReason() {
132
+ return "missing apiKey or serverUrl";
133
+ },
134
+ isEnabled(account) {
135
+ return account.enabled !== false;
136
+ },
137
+ },
138
+ gateway: {
139
+ async startAccount(ctx) {
140
+ const { accountId, account, abortSignal, log, setStatus } = ctx;
141
+ if (!account.apiKey || !account.serverUrl) {
142
+ log?.error?.("MoltZap: missing apiKey or serverUrl");
143
+ return;
144
+ }
145
+ log?.info?.(`MoltZap: connecting as ${account.agentName} to ${account.serverUrl}`);
146
+ const senderNameCache = new Map();
147
+ const conversationMetaCache = new Map();
148
+ async function lookupSenderName(client, agentId) {
149
+ const cached = senderNameCache.get(agentId);
150
+ if (cached)
151
+ return cached;
152
+ try {
153
+ const result = (await client.sendRpc("agents/lookup", {
154
+ agentIds: [agentId],
155
+ }));
156
+ const agent = result.agents[0];
157
+ if (agent) {
158
+ senderNameCache.set(agentId, agent.name);
159
+ return agent.name;
160
+ }
161
+ }
162
+ catch {
163
+ log?.warn?.(`MoltZap: agents/lookup failed for ${agentId}`);
164
+ }
165
+ return agentId;
166
+ }
167
+ async function getConversationMeta(client, conversationId) {
168
+ const cached = conversationMetaCache.get(conversationId);
169
+ if (cached)
170
+ return cached;
171
+ try {
172
+ const result = (await client.sendRpc("conversations/get", {
173
+ conversationId,
174
+ }));
175
+ const meta = {
176
+ type: result.conversation.type,
177
+ name: result.conversation.name,
178
+ participants: result.participants.map((p) => `${p.participant.type}:${p.participant.id}`),
179
+ };
180
+ conversationMetaCache.set(conversationId, meta);
181
+ return meta;
182
+ }
183
+ catch {
184
+ log?.warn?.(`MoltZap: conversations/get failed for ${conversationId}`);
185
+ return undefined;
186
+ }
187
+ }
188
+ // Serialize dispatches — OpenClaw's workspace-state writer can't handle
189
+ // concurrent writes within the same process.
190
+ let dispatchChain = Promise.resolve();
191
+ let ownAgentId;
192
+ function dispatchMessage(message, client) {
193
+ // Skip messages sent by this agent (avoid echo loops)
194
+ if (ownAgentId &&
195
+ message.sender.type === "agent" &&
196
+ message.sender.id === ownAgentId) {
197
+ return;
198
+ }
199
+ dispatchChain = dispatchChain
200
+ .then(async () => {
201
+ const [senderName, convMeta] = await Promise.all([
202
+ message.sender.type === "agent"
203
+ ? lookupSenderName(client, message.sender.id)
204
+ : Promise.resolve(undefined),
205
+ getConversationMeta(client, message.conversationId),
206
+ ]);
207
+ const envelope = mapMessageToEnvelope(message, {
208
+ senderName,
209
+ chatType: convMeta?.type === "group"
210
+ ? "group"
211
+ : convMeta?.type === "dm"
212
+ ? "direct"
213
+ : undefined,
214
+ groupSubject: convMeta?.name,
215
+ groupMembers: convMeta?.participants.join(","),
216
+ conversationLabel: convMeta?.name,
217
+ });
218
+ log?.info?.(`MoltZap: inbound from ${envelope.peer.id}: ${envelope.text.slice(0, 80)}`);
219
+ setStatus({
220
+ accountId,
221
+ lastInboundAt: Date.now(),
222
+ lastEventAt: Date.now(),
223
+ });
224
+ if (ctx.channelRuntime?.reply
225
+ ?.dispatchReplyWithBufferedBlockDispatcher) {
226
+ try {
227
+ const result = await ctx.channelRuntime.reply.dispatchReplyWithBufferedBlockDispatcher({
228
+ ctx: {
229
+ Body: envelope.text,
230
+ BodyForAgent: envelope.text,
231
+ From: envelope.peer.id,
232
+ To: account.agentName ?? accountId,
233
+ SessionKey: `agent:main:moltzap:dm:${envelope.conversationId}`,
234
+ AccountId: accountId,
235
+ Provider: CHANNEL_ID,
236
+ Surface: CHANNEL_ID,
237
+ OriginatingChannel: CHANNEL_ID,
238
+ OriginatingTo: envelope.conversationId,
239
+ ...(envelope.chatType
240
+ ? { ChatType: envelope.chatType }
241
+ : {}),
242
+ ...(envelope.groupSubject
243
+ ? { GroupSubject: envelope.groupSubject }
244
+ : {}),
245
+ ...(envelope.groupMembers
246
+ ? { GroupMembers: envelope.groupMembers }
247
+ : {}),
248
+ ...(envelope.conversationLabel
249
+ ? { ConversationLabel: envelope.conversationLabel }
250
+ : {}),
251
+ ...(envelope.senderName
252
+ ? { SenderName: envelope.senderName }
253
+ : {}),
254
+ },
255
+ cfg: ctx.cfg,
256
+ dispatcherOptions: {
257
+ deliver: async (payload, info) => {
258
+ if (info?.kind !== "final")
259
+ return true;
260
+ const text = payload.text ?? payload.body;
261
+ if (!text)
262
+ return true;
263
+ try {
264
+ await client.sendRpc("messages/send", {
265
+ conversationId: envelope.conversationId,
266
+ parts: [{ type: "text", text }],
267
+ });
268
+ log?.info?.(`MoltZap: outbound reply to ${envelope.conversationId}: ${text.slice(0, 80)}`);
269
+ return true;
270
+ }
271
+ catch (sendErr) {
272
+ log?.error?.(`MoltZap: failed to send reply: ${sendErr}`);
273
+ return false;
274
+ }
275
+ },
276
+ },
277
+ });
278
+ if (!result.queuedFinal) {
279
+ log?.debug?.(`MoltZap: dispatch completed without final reply for ${envelope.conversationId}`);
280
+ }
281
+ }
282
+ catch (err) {
283
+ log?.error?.(`MoltZap: dispatch error: ${err}`);
284
+ }
285
+ }
286
+ })
287
+ .catch((err) => {
288
+ log?.error?.(`MoltZap: dispatch chain error: ${err}`);
289
+ });
290
+ }
291
+ async function fetchMissedMessages(client, helloOk) {
292
+ const hello = helloOk;
293
+ const unreadCounts = hello?.unreadCounts;
294
+ if (!unreadCounts)
295
+ return;
296
+ const sorted = Object.entries(unreadCounts)
297
+ .filter(([, count]) => count > 0)
298
+ .sort(([, a], [, b]) => b - a)
299
+ .slice(0, 5);
300
+ let totalFetched = 0;
301
+ for (const [conversationId] of sorted) {
302
+ try {
303
+ const result = (await client.sendRpc("messages/list", {
304
+ conversationId,
305
+ limit: 50,
306
+ }));
307
+ for (const msg of result.messages) {
308
+ dispatchMessage(msg, client);
309
+ }
310
+ totalFetched += result.messages.length;
311
+ }
312
+ catch {
313
+ log?.warn?.(`MoltZap: failed to fetch missed messages for ${conversationId}`);
314
+ }
315
+ }
316
+ if (totalFetched > 0) {
317
+ log?.info?.(`MoltZap: fetched ${totalFetched} missed messages from ${sorted.length} conversations`);
318
+ }
319
+ }
320
+ const eventHandlers = {
321
+ "messages/received": (event) => {
322
+ const message = extractMessage(event);
323
+ if (message)
324
+ dispatchMessage(message, client);
325
+ },
326
+ "messages/read": (event) => {
327
+ const receipt = extractReadReceipt(event);
328
+ if (receipt) {
329
+ log?.debug?.(`MoltZap: read receipt from ${receipt.participant.id} in ${receipt.conversationId} up to seq ${receipt.seq}`);
330
+ setStatus({ accountId, lastEventAt: Date.now() });
331
+ }
332
+ },
333
+ "messages/delivered": (event) => {
334
+ const delivery = extractDelivery(event);
335
+ if (delivery) {
336
+ log?.debug?.(`MoltZap: delivery for ${delivery.messageId} in ${delivery.conversationId}`);
337
+ setStatus({ accountId, lastEventAt: Date.now() });
338
+ }
339
+ },
340
+ "messages/reacted": (event) => {
341
+ const reaction = extractReaction(event);
342
+ if (reaction) {
343
+ log?.debug?.(`MoltZap: reaction ${reaction.action} ${reaction.emoji} on ${reaction.messageId}`);
344
+ setStatus({ accountId, lastEventAt: Date.now() });
345
+ }
346
+ },
347
+ "messages/deleted": (event) => {
348
+ const deletion = extractDeletion(event);
349
+ if (deletion) {
350
+ log?.debug?.(`MoltZap: message ${deletion.messageId} deleted in ${deletion.conversationId}`);
351
+ setStatus({ accountId, lastEventAt: Date.now() });
352
+ }
353
+ },
354
+ "conversations/created": (event) => {
355
+ const created = extractConversationCreated(event);
356
+ if (created) {
357
+ conversationMetaCache.set(created.conversation.id, {
358
+ type: created.conversation.type,
359
+ name: created.conversation.name,
360
+ participants: [],
361
+ });
362
+ log?.debug?.(`MoltZap: conversation created ${created.conversation.id}`);
363
+ setStatus({ accountId, lastEventAt: Date.now() });
364
+ }
365
+ },
366
+ "conversations/updated": (event) => {
367
+ const updated = extractConversationUpdated(event);
368
+ if (updated) {
369
+ const existing = conversationMetaCache.get(updated.conversation.id);
370
+ conversationMetaCache.set(updated.conversation.id, {
371
+ type: updated.conversation.type,
372
+ name: updated.conversation.name,
373
+ participants: existing?.participants ?? [],
374
+ });
375
+ log?.debug?.(`MoltZap: conversation updated ${updated.conversation.id}`);
376
+ setStatus({ accountId, lastEventAt: Date.now() });
377
+ }
378
+ },
379
+ "contact/request": (event) => {
380
+ const contact = extractContactRequest(event);
381
+ if (contact) {
382
+ log?.debug?.(`MoltZap: contact request from ${contact.contact.requesterId}`);
383
+ setStatus({ accountId, lastEventAt: Date.now() });
384
+ }
385
+ },
386
+ "contact/accepted": (event) => {
387
+ const contact = extractContactAccepted(event);
388
+ if (contact) {
389
+ log?.debug?.(`MoltZap: contact accepted ${contact.contact.id}`);
390
+ setStatus({ accountId, lastEventAt: Date.now() });
391
+ }
392
+ },
393
+ "presence/changed": (event) => {
394
+ const presence = extractPresenceChanged(event);
395
+ if (presence) {
396
+ log?.debug?.(`MoltZap: ${presence.participant.id} is now ${presence.status}`);
397
+ setStatus({ accountId, lastEventAt: Date.now() });
398
+ }
399
+ },
400
+ "typing/indicator": (event) => {
401
+ const typing = extractTypingIndicator(event);
402
+ if (typing) {
403
+ log?.debug?.(`MoltZap: typing in ${typing.conversationId} by ${typing.participant.id}`);
404
+ }
405
+ },
406
+ };
407
+ const client = new MoltZapWsClient({
408
+ serverUrl: account.serverUrl,
409
+ agentKey: account.apiKey,
410
+ logger: log
411
+ ? {
412
+ info: log.info ?? (() => { }),
413
+ warn: log.warn ?? (() => { }),
414
+ error: log.error ?? (() => { }),
415
+ }
416
+ : undefined,
417
+ onEvent: (event) => {
418
+ const handler = eventHandlers[event.event];
419
+ if (handler) {
420
+ handler(event);
421
+ }
422
+ else {
423
+ log?.debug?.(`MoltZap: unhandled event type: ${event.event}`);
424
+ }
425
+ },
426
+ onDisconnect: () => {
427
+ log?.warn?.("MoltZap: disconnected");
428
+ setStatus({
429
+ accountId,
430
+ connected: false,
431
+ lastDisconnect: { at: Date.now() },
432
+ });
433
+ },
434
+ onReconnect: (helloOk) => {
435
+ log?.info?.("MoltZap: reconnected");
436
+ setStatus({
437
+ accountId,
438
+ connected: true,
439
+ lastConnectedAt: Date.now(),
440
+ });
441
+ populateConversationCache(helloOk);
442
+ void fetchMissedMessages(client, helloOk);
443
+ },
444
+ });
445
+ function populateConversationCache(helloOk) {
446
+ const hello = helloOk;
447
+ if (!hello?.conversations)
448
+ return;
449
+ for (const conv of hello.conversations) {
450
+ conversationMetaCache.set(conv.id, {
451
+ type: conv.type,
452
+ name: conv.name,
453
+ participants: (conv.participants ?? []).map((p) => `${p.type}:${p.id}`),
454
+ });
455
+ }
456
+ }
457
+ activeClients.set(accountId, client);
458
+ abortSignal.addEventListener("abort", () => {
459
+ client.close();
460
+ activeClients.delete(accountId);
461
+ }, { once: true });
462
+ try {
463
+ const helloOk = await client.connect();
464
+ ownAgentId = helloOk?.agentId;
465
+ log?.info?.(`MoltZap: connected as ${account.agentName} (${ownAgentId})`);
466
+ setStatus({
467
+ accountId,
468
+ connected: true,
469
+ lastConnectedAt: Date.now(),
470
+ });
471
+ populateConversationCache(helloOk);
472
+ // Keep the gateway task alive until abort.
473
+ await new Promise((resolve) => {
474
+ abortSignal.addEventListener("abort", () => resolve(), {
475
+ once: true,
476
+ });
477
+ });
478
+ }
479
+ catch (err) {
480
+ log?.error?.(`MoltZap: connection failed: ${err}`);
481
+ throw err;
482
+ }
483
+ },
484
+ async stopAccount(ctx) {
485
+ const client = activeClients.get(ctx.accountId);
486
+ if (client) {
487
+ ctx.log?.info?.("MoltZap: stopping");
488
+ client.close();
489
+ activeClients.delete(ctx.accountId);
490
+ agentConversationCache.delete(ctx.accountId);
491
+ }
492
+ },
493
+ },
494
+ outbound: {
495
+ deliveryMode: "gateway",
496
+ resolveTarget(params) {
497
+ const to = params.to?.trim();
498
+ if (!to) {
499
+ return { ok: false, error: new Error("MoltZap: target is required") };
500
+ }
501
+ if (to.includes(":") && !isMoltZapTarget(to)) {
502
+ return {
503
+ ok: false,
504
+ error: new Error(`MoltZap: unsupported target format "${to}" — use agent:<name> or conv:<id>`),
505
+ };
506
+ }
507
+ return { ok: true, to };
508
+ },
509
+ async sendText(ctx) {
510
+ const accountId = ctx.accountId ?? DEFAULT_ACCOUNT_ID;
511
+ const client = activeClients.get(accountId);
512
+ if (!client) {
513
+ return {
514
+ ok: false,
515
+ error: new Error("MoltZap client not connected"),
516
+ };
517
+ }
518
+ try {
519
+ let conversationId;
520
+ if (ctx.to.startsWith(TARGET_PREFIX_AGENT)) {
521
+ const agentName = ctx.to.slice(TARGET_PREFIX_AGENT.length);
522
+ const accountCache = agentConversationCache.get(accountId) ?? new Map();
523
+ conversationId = accountCache.get(agentName);
524
+ if (!conversationId) {
525
+ const lookupResult = (await client.sendRpc("agents/lookupByName", {
526
+ name: agentName,
527
+ }));
528
+ const createResult = (await client.sendRpc("conversations/create", {
529
+ type: "dm",
530
+ participants: [{ type: "agent", id: lookupResult.agent.id }],
531
+ }));
532
+ conversationId = createResult.conversation.id;
533
+ accountCache.set(agentName, conversationId);
534
+ agentConversationCache.set(accountId, accountCache);
535
+ }
536
+ }
537
+ else if (ctx.to.startsWith(TARGET_PREFIX_CONV)) {
538
+ conversationId = ctx.to.slice(TARGET_PREFIX_CONV.length);
539
+ }
540
+ else {
541
+ conversationId = ctx.to;
542
+ }
543
+ await client.sendRpc("messages/send", {
544
+ conversationId,
545
+ parts: [{ type: "text", text: ctx.text }],
546
+ ...(ctx.replyToId ? { replyToId: ctx.replyToId } : {}),
547
+ });
548
+ return { ok: true };
549
+ }
550
+ catch (err) {
551
+ return {
552
+ ok: false,
553
+ error: err instanceof Error ? err : new Error(String(err)),
554
+ };
555
+ }
556
+ },
557
+ },
558
+ };
559
+ const plugin = {
560
+ id: "openclaw-channel",
561
+ name: "MoltZap",
562
+ description: "Agent-to-agent messaging via the MoltZap protocol",
563
+ configSchema: {},
564
+ register(api) {
565
+ api.registerChannel({ plugin: moltzapChannelPlugin });
566
+ },
567
+ };
568
+ export default plugin;
569
+ //# sourceMappingURL=openclaw-entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openclaw-entry.js","sourceRoot":"","sources":["../src/openclaw-entry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { type EventFrame } from "@moltzap/protocol";
2
+ export interface WsClientLogger {
3
+ info: (...args: unknown[]) => void;
4
+ warn: (...args: unknown[]) => void;
5
+ error: (...args: unknown[]) => void;
6
+ }
7
+ export interface MoltZapWsClientOptions {
8
+ serverUrl: string;
9
+ agentKey: string;
10
+ onEvent: (event: EventFrame) => void;
11
+ onDisconnect: () => void;
12
+ onReconnect: (helloOk: unknown) => void;
13
+ logger?: WsClientLogger;
14
+ }
15
+ /**
16
+ * WebSocket connection lifecycle:
17
+ *
18
+ * connect -> auth/connect -> HelloOk -> active
19
+ * | (disconnect)
20
+ * backoff (1s, 2s, 4s, 8s, max 30s with jitter) -> reconnect -> auth/connect -> ...
21
+ */
22
+ export declare class MoltZapWsClient {
23
+ private options;
24
+ private ws;
25
+ private reconnectAttempt;
26
+ private maxReconnectDelay;
27
+ private pendingRequests;
28
+ private requestCounter;
29
+ private closed;
30
+ private _helloOk;
31
+ constructor(options: MoltZapWsClientOptions);
32
+ get helloOk(): unknown;
33
+ connect(): Promise<unknown>;
34
+ sendRpc(method: string, params?: unknown): Promise<unknown>;
35
+ /** Close the socket permanently (no reconnection). */
36
+ close(): void;
37
+ /** Close the socket without marking as permanently closed, triggering reconnection. */
38
+ disconnect(): void;
39
+ private scheduleReconnect;
40
+ }
41
+ //# sourceMappingURL=ws-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ws-client.d.ts","sourceRoot":"","sources":["../src/ws-client.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,UAAU,EAChB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACnC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACnC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;CACrC;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IACrC,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,WAAW,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB;AAED;;;;;;GAMG;AACH,qBAAa,eAAe;IAed,OAAO,CAAC,OAAO;IAd3B,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,iBAAiB,CAAU;IACnC,OAAO,CAAC,eAAe,CAMnB;IACJ,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAiB;gBAEb,OAAO,EAAE,sBAAsB;IAEnD,IAAI,OAAO,IAAI,OAAO,CAErB;IAEK,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAqD3B,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IA4CjE,sDAAsD;IACtD,KAAK,IAAI,IAAI;IAKb,uFAAuF;IACvF,UAAU,IAAI,IAAI;IAIlB,OAAO,CAAC,iBAAiB;CAiB1B"}