azerclaw 2.1.9 → 2.2.1
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/bin/azerclaw.ts +45 -6
- package/bin/opencode.ts +1 -1
- package/dist/bin/azerclaw.d.ts +1 -47
- package/dist/bin/azerclaw.d.ts.map +1 -1
- package/dist/bin/azerclaw.js +94 -55
- package/dist/bin/azerclaw.js.map +1 -1
- package/dist/bin/opencode.js +1 -1
- package/dist/src/agents/builtin.js +12 -12
- package/dist/src/brain/adapters/base.d.ts +33 -0
- package/dist/src/brain/adapters/base.d.ts.map +1 -0
- package/dist/src/brain/adapters/base.js +11 -0
- package/dist/src/brain/adapters/base.js.map +1 -0
- package/dist/src/brain/adapters/index.d.ts +11 -0
- package/dist/src/brain/adapters/index.d.ts.map +1 -0
- package/dist/src/brain/adapters/index.js +37 -0
- package/dist/src/brain/adapters/index.js.map +1 -0
- package/dist/src/brain/adapters/native.d.ts +15 -0
- package/dist/src/brain/adapters/native.d.ts.map +1 -0
- package/dist/src/brain/adapters/native.js +25 -0
- package/dist/src/brain/adapters/native.js.map +1 -0
- package/dist/src/brain/adapters/prompt.d.ts +16 -0
- package/dist/src/brain/adapters/prompt.d.ts.map +1 -0
- package/dist/src/brain/adapters/prompt.js +91 -0
- package/dist/src/brain/adapters/prompt.js.map +1 -0
- package/dist/src/brain/hybrid.d.ts +53 -0
- package/dist/src/brain/hybrid.d.ts.map +1 -0
- package/dist/src/brain/hybrid.js +263 -0
- package/dist/src/brain/hybrid.js.map +1 -0
- package/dist/src/brain/index.d.ts +8 -0
- package/dist/src/brain/index.d.ts.map +1 -0
- package/dist/src/brain/index.js +19 -0
- package/dist/src/brain/index.js.map +1 -0
- package/dist/src/brain/router.d.ts +55 -0
- package/dist/src/brain/router.d.ts.map +1 -0
- package/dist/src/brain/router.js +174 -0
- package/dist/src/brain/router.js.map +1 -0
- package/dist/src/channels/adapter.d.ts +6 -0
- package/dist/src/channels/adapter.d.ts.map +1 -1
- package/dist/src/channels/adapter.js +44 -1
- package/dist/src/channels/adapter.js.map +1 -1
- package/dist/src/channels/discord.d.ts.map +1 -1
- package/dist/src/channels/discord.js +60 -14
- package/dist/src/channels/discord.js.map +1 -1
- package/dist/src/channels/slack.d.ts +5 -0
- package/dist/src/channels/slack.d.ts.map +1 -1
- package/dist/src/channels/slack.js +77 -9
- package/dist/src/channels/slack.js.map +1 -1
- package/dist/src/channels/telegram.d.ts +1 -0
- package/dist/src/channels/telegram.d.ts.map +1 -1
- package/dist/src/channels/telegram.js +42 -4
- package/dist/src/channels/telegram.js.map +1 -1
- package/dist/src/channels/webhook.d.ts.map +1 -1
- package/dist/src/channels/webhook.js +37 -6
- package/dist/src/channels/webhook.js.map +1 -1
- package/dist/src/cli/animations/fish.d.ts +9 -0
- package/dist/src/cli/animations/fish.d.ts.map +1 -1
- package/dist/src/cli/animations/fish.js +64 -80
- package/dist/src/cli/animations/fish.js.map +1 -1
- package/dist/src/cli/animations/markdown.d.ts.map +1 -1
- package/dist/src/cli/animations/markdown.js +0 -1
- package/dist/src/cli/animations/markdown.js.map +1 -1
- package/dist/src/cli/commands/agents.js +31 -30
- package/dist/src/cli/commands/agents.js.map +1 -1
- package/dist/src/cli/commands/channels.js +41 -48
- package/dist/src/cli/commands/channels.js.map +1 -1
- package/dist/src/cli/commands/chat.d.ts +1 -0
- package/dist/src/cli/commands/chat.d.ts.map +1 -1
- package/dist/src/cli/commands/chat.js +81 -8
- package/dist/src/cli/commands/chat.js.map +1 -1
- package/dist/src/cli/commands/config.js +0 -1
- package/dist/src/cli/commands/config.js.map +1 -1
- package/dist/src/cli/commands/doctor.js +42 -40
- package/dist/src/cli/commands/doctor.js.map +1 -1
- package/dist/src/cli/commands/export.js +6 -6
- package/dist/src/cli/commands/export.js.map +1 -1
- package/dist/src/cli/commands/mcp.js +7 -7
- package/dist/src/cli/commands/mcp.js.map +1 -1
- package/dist/src/cli/commands/models.js +0 -1
- package/dist/src/cli/commands/models.js.map +1 -1
- package/dist/src/cli/commands/onboard.js +0 -55
- package/dist/src/cli/commands/onboard.js.map +1 -1
- package/dist/src/cli/commands/pairing.js +22 -24
- package/dist/src/cli/commands/pairing.js.map +1 -1
- package/dist/src/cli/commands/plugins.js +8 -8
- package/dist/src/cli/commands/plugins.js.map +1 -1
- package/dist/src/cli/commands/run.d.ts +1 -0
- package/dist/src/cli/commands/run.d.ts.map +1 -1
- package/dist/src/cli/commands/run.js +101 -50
- package/dist/src/cli/commands/run.js.map +1 -1
- package/dist/src/cli/commands/sandbox.js +27 -32
- package/dist/src/cli/commands/sandbox.js.map +1 -1
- package/dist/src/cli/commands/settings.js +1 -16
- package/dist/src/cli/commands/settings.js.map +1 -1
- package/dist/src/cli/commands/share.js +6 -6
- package/dist/src/cli/commands/share.js.map +1 -1
- package/dist/src/cli/commands/tui.js +0 -1
- package/dist/src/cli/commands/tui.js.map +1 -1
- package/dist/src/config/hotreload.d.ts +87 -0
- package/dist/src/config/hotreload.d.ts.map +1 -0
- package/dist/src/config/hotreload.js +497 -0
- package/dist/src/config/hotreload.js.map +1 -0
- package/dist/src/config/manager.d.ts +4 -2
- package/dist/src/config/manager.d.ts.map +1 -1
- package/dist/src/config/manager.js +23 -5
- package/dist/src/config/manager.js.map +1 -1
- package/dist/src/config/schema.d.ts +286 -9
- package/dist/src/config/schema.d.ts.map +1 -1
- package/dist/src/config/schema.js +71 -7
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/core/runtime.d.ts +18 -0
- package/dist/src/core/runtime.d.ts.map +1 -1
- package/dist/src/core/runtime.js +82 -12
- package/dist/src/core/runtime.js.map +1 -1
- package/dist/src/core/server.d.ts.map +1 -1
- package/dist/src/core/server.js +18 -2
- package/dist/src/core/server.js.map +1 -1
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +6 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/interfaces/terminal/dashboard.d.ts +80 -0
- package/dist/src/interfaces/terminal/dashboard.d.ts.map +1 -0
- package/dist/src/interfaces/terminal/dashboard.js +618 -0
- package/dist/src/interfaces/terminal/dashboard.js.map +1 -0
- package/dist/src/interfaces/terminal/index.d.ts +46 -0
- package/dist/src/interfaces/terminal/index.d.ts.map +1 -0
- package/dist/src/interfaces/terminal/index.js +171 -0
- package/dist/src/interfaces/terminal/index.js.map +1 -0
- package/dist/src/interfaces/terminal/visualizations.d.ts +78 -0
- package/dist/src/interfaces/terminal/visualizations.d.ts.map +1 -0
- package/dist/src/interfaces/terminal/visualizations.js +540 -0
- package/dist/src/interfaces/terminal/visualizations.js.map +1 -0
- package/dist/src/interfaces/web/server.d.ts +73 -0
- package/dist/src/interfaces/web/server.d.ts.map +1 -0
- package/dist/src/interfaces/web/server.js +505 -0
- package/dist/src/interfaces/web/server.js.map +1 -0
- package/dist/src/mcp-servers/antigravity/index.js +2 -2
- package/dist/src/mcp-servers/antigravity/index.js.map +1 -1
- package/dist/src/memory/dreaming.d.ts +91 -0
- package/dist/src/memory/dreaming.d.ts.map +1 -0
- package/dist/src/memory/dreaming.js +582 -0
- package/dist/src/memory/dreaming.js.map +1 -0
- package/dist/src/memory/index.d.ts +8 -0
- package/dist/src/memory/index.d.ts.map +1 -0
- package/dist/src/memory/index.js +29 -0
- package/dist/src/memory/index.js.map +1 -0
- package/dist/src/memory/store.d.ts +13 -0
- package/dist/src/memory/store.d.ts.map +1 -1
- package/dist/src/memory/store.js +28 -0
- package/dist/src/memory/store.js.map +1 -1
- package/dist/src/memory/vector.d.ts +94 -0
- package/dist/src/memory/vector.d.ts.map +1 -0
- package/dist/src/memory/vector.js +457 -0
- package/dist/src/memory/vector.js.map +1 -0
- package/dist/src/networking/analyzer.d.ts +189 -0
- package/dist/src/networking/analyzer.d.ts.map +1 -0
- package/dist/src/networking/analyzer.js +604 -0
- package/dist/src/networking/analyzer.js.map +1 -0
- package/dist/src/plugins/bundled/context-engine/index.d.ts +8 -0
- package/dist/src/plugins/bundled/context-engine/index.d.ts.map +1 -0
- package/dist/src/plugins/bundled/context-engine/index.js +353 -0
- package/dist/src/plugins/bundled/context-engine/index.js.map +1 -0
- package/dist/src/plugins/bundled/observability/index.d.ts +64 -0
- package/dist/src/plugins/bundled/observability/index.d.ts.map +1 -0
- package/dist/src/plugins/bundled/observability/index.js +441 -0
- package/dist/src/plugins/bundled/observability/index.js.map +1 -0
- package/dist/src/plugins/index.d.ts +15 -0
- package/dist/src/plugins/index.d.ts.map +1 -0
- package/dist/src/plugins/index.js +117 -0
- package/dist/src/plugins/index.js.map +1 -0
- package/dist/src/plugins/loader.d.ts +19 -0
- package/dist/src/plugins/loader.d.ts.map +1 -0
- package/dist/src/plugins/loader.js +333 -0
- package/dist/src/plugins/loader.js.map +1 -0
- package/dist/src/plugins/manager.d.ts +32 -0
- package/dist/src/plugins/manager.d.ts.map +1 -0
- package/dist/src/plugins/manager.js +410 -0
- package/dist/src/plugins/manager.js.map +1 -0
- package/dist/src/plugins/registry.d.ts +50 -0
- package/dist/src/plugins/registry.d.ts.map +1 -0
- package/dist/src/plugins/registry.js +285 -0
- package/dist/src/plugins/registry.js.map +1 -0
- package/dist/src/plugins/types.d.ts +165 -0
- package/dist/src/plugins/types.d.ts.map +1 -0
- package/dist/src/plugins/types.js +7 -0
- package/dist/src/plugins/types.js.map +1 -0
- package/dist/src/providers/base.d.ts +5 -0
- package/dist/src/providers/base.d.ts.map +1 -1
- package/dist/src/providers/base.js.map +1 -1
- package/dist/src/providers/huggingface.d.ts +27 -0
- package/dist/src/providers/huggingface.d.ts.map +1 -0
- package/dist/src/providers/huggingface.js +140 -0
- package/dist/src/providers/huggingface.js.map +1 -0
- package/dist/src/providers/kiloauto.d.ts +29 -0
- package/dist/src/providers/kiloauto.d.ts.map +1 -0
- package/dist/src/providers/kiloauto.js +242 -0
- package/dist/src/providers/kiloauto.js.map +1 -0
- package/dist/src/providers/localllama.d.ts +26 -0
- package/dist/src/providers/localllama.d.ts.map +1 -0
- package/dist/src/providers/localllama.js +192 -0
- package/dist/src/providers/localllama.js.map +1 -0
- package/dist/src/providers/openai.d.ts.map +1 -1
- package/dist/src/providers/openai.js +8 -1
- package/dist/src/providers/openai.js.map +1 -1
- package/dist/src/providers/router.d.ts.map +1 -1
- package/dist/src/providers/router.js +36 -4
- package/dist/src/providers/router.js.map +1 -1
- package/dist/src/scheduler/heartbeat.d.ts.map +1 -1
- package/dist/src/scheduler/heartbeat.js +23 -1
- package/dist/src/scheduler/heartbeat.js.map +1 -1
- package/dist/src/security/privacy.d.ts +199 -0
- package/dist/src/security/privacy.d.ts.map +1 -0
- package/dist/src/security/privacy.js +600 -0
- package/dist/src/security/privacy.js.map +1 -0
- package/dist/src/server/hq.d.ts.map +1 -1
- package/dist/src/server/hq.js +56 -4
- package/dist/src/server/hq.js.map +1 -1
- package/dist/src/skills/loader.d.ts.map +1 -1
- package/dist/src/skills/loader.js +13 -3
- package/dist/src/skills/loader.js.map +1 -1
- package/dist/src/tools/advanced.d.ts.map +1 -1
- package/dist/src/tools/advanced.js +73 -18
- package/dist/src/tools/advanced.js.map +1 -1
- package/dist/src/tools/filesystem.d.ts.map +1 -1
- package/dist/src/tools/filesystem.js +110 -7
- package/dist/src/tools/filesystem.js.map +1 -1
- package/dist/src/tools/index_memory.d.ts.map +1 -1
- package/dist/src/tools/index_memory.js +13 -6
- package/dist/src/tools/index_memory.js.map +1 -1
- package/dist/src/tools/loader.d.ts.map +1 -1
- package/dist/src/tools/loader.js +4 -2
- package/dist/src/tools/loader.js.map +1 -1
- package/dist/src/tools/registry.d.ts +6 -0
- package/dist/src/tools/registry.d.ts.map +1 -1
- package/dist/src/tools/registry.js +51 -12
- package/dist/src/tools/registry.js.map +1 -1
- package/dist/src/tools/shell.d.ts.map +1 -1
- package/dist/src/tools/shell.js +2 -0
- package/dist/src/tools/shell.js.map +1 -1
- package/dist/src/tools/specialized.d.ts.map +1 -1
- package/dist/src/tools/specialized.js +52 -12
- package/dist/src/tools/specialized.js.map +1 -1
- package/dist/src/workflow/engine.d.ts.map +1 -1
- package/dist/src/workflow/engine.js +43 -13
- package/dist/src/workflow/engine.js.map +1 -1
- package/dist/src/workflow/lobster.d.ts +138 -0
- package/dist/src/workflow/lobster.d.ts.map +1 -0
- package/dist/src/workflow/lobster.js +620 -0
- package/dist/src/workflow/lobster.js.map +1 -0
- package/dist/src/workspace/heartbeat.d.ts +122 -0
- package/dist/src/workspace/heartbeat.d.ts.map +1 -0
- package/dist/src/workspace/heartbeat.js +624 -0
- package/dist/src/workspace/heartbeat.js.map +1 -0
- package/dist/src/workspace/index.d.ts +29 -0
- package/dist/src/workspace/index.d.ts.map +1 -0
- package/dist/src/workspace/index.js +97 -0
- package/dist/src/workspace/index.js.map +1 -0
- package/package.json +2 -2
|
@@ -12,8 +12,50 @@ const manager_1 = require("../config/manager");
|
|
|
12
12
|
const pairing_1 = require("./pairing");
|
|
13
13
|
const routing_1 = require("./routing");
|
|
14
14
|
// ─── Base Adapter ───────────────────────────────────────────────
|
|
15
|
+
// Channel-agent registry caps. JS Maps preserve insertion order, which we use
|
|
16
|
+
// as a simple LRU: re-inserting moves an entry to the end (most-recently used).
|
|
17
|
+
const MAX_CHANNEL_AGENTS = 1000;
|
|
18
|
+
const CHANNEL_AGENT_IDLE_MS = 60 * 60 * 1000; // 1 hour
|
|
15
19
|
class ChannelAdapter {
|
|
16
20
|
agents = new Map();
|
|
21
|
+
agentLastSeen = new Map();
|
|
22
|
+
/**
|
|
23
|
+
* Evict idle agents and trim the map to MAX_CHANNEL_AGENTS using LRU order.
|
|
24
|
+
*/
|
|
25
|
+
evictStaleAgents() {
|
|
26
|
+
const now = Date.now();
|
|
27
|
+
for (const [sid, ts] of this.agentLastSeen) {
|
|
28
|
+
if (now - ts > CHANNEL_AGENT_IDLE_MS) {
|
|
29
|
+
const a = this.agents.get(sid);
|
|
30
|
+
try {
|
|
31
|
+
a?.abort?.();
|
|
32
|
+
}
|
|
33
|
+
catch { /* ignore */ }
|
|
34
|
+
this.agents.delete(sid);
|
|
35
|
+
this.agentLastSeen.delete(sid);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// Hard cap — evict oldest until under MAX.
|
|
39
|
+
while (this.agents.size > MAX_CHANNEL_AGENTS) {
|
|
40
|
+
const oldest = this.agents.keys().next().value;
|
|
41
|
+
if (!oldest)
|
|
42
|
+
break;
|
|
43
|
+
const a = this.agents.get(oldest);
|
|
44
|
+
try {
|
|
45
|
+
a?.abort?.();
|
|
46
|
+
}
|
|
47
|
+
catch { /* ignore */ }
|
|
48
|
+
this.agents.delete(oldest);
|
|
49
|
+
this.agentLastSeen.delete(oldest);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
touchAgent(sessionId, agent) {
|
|
53
|
+
// Move to end of insertion order to mark as MRU.
|
|
54
|
+
if (this.agents.has(sessionId))
|
|
55
|
+
this.agents.delete(sessionId);
|
|
56
|
+
this.agents.set(sessionId, agent);
|
|
57
|
+
this.agentLastSeen.set(sessionId, Date.now());
|
|
58
|
+
}
|
|
17
59
|
/**
|
|
18
60
|
* Handle an incoming message — routes to agent.
|
|
19
61
|
*/
|
|
@@ -22,6 +64,7 @@ class ChannelAdapter {
|
|
|
22
64
|
const allowed = await this.enforceDmPolicy(message);
|
|
23
65
|
if (!allowed)
|
|
24
66
|
return;
|
|
67
|
+
this.evictStaleAgents();
|
|
25
68
|
const sessionId = this.resolveSessionId(message);
|
|
26
69
|
let agent = this.agents.get(sessionId);
|
|
27
70
|
if (!agent) {
|
|
@@ -42,9 +85,9 @@ class ChannelAdapter {
|
|
|
42
85
|
}
|
|
43
86
|
},
|
|
44
87
|
});
|
|
45
|
-
this.agents.set(sessionId, agent);
|
|
46
88
|
(0, security_1.auditLog)('CHANNEL_SESSION_ROUTE', `${this.platform}:${message.channelId} -> ${sessionId} (as ${character})`);
|
|
47
89
|
}
|
|
90
|
+
this.touchAgent(sessionId, agent);
|
|
48
91
|
try {
|
|
49
92
|
await agent.chat(message.content);
|
|
50
93
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/channels/adapter.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,6CAA2D;AAC3D,+CAA4C;AAC5C,+CAAqD;AACrD,uCAA0D;AAC1D,uCAAuD;AAgCvD,mEAAmE;AAEnE,MAAsB,cAAc;IAGxB,MAAM,GAA8B,IAAI,GAAG,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/channels/adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discord.d.ts","sourceRoot":"","sources":["../../../src/channels/discord.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAqB,WAAW,EAAE,MAAM,WAAW,CAAC;AAG3E,qBAAa,cAAe,SAAQ,cAAc;IAChD,QAAQ,CAAC,QAAQ,aAAa;IAC9B,QAAQ,CAAC,WAAW,aAAa;IACjC,OAAO,CAAC,EAAE,CAAa;IACvB,OAAO,CAAC,KAAK,CAAM;IACnB,OAAO,CAAC,iBAAiB,CAA+B;IACxD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAuB;IAEjC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"discord.d.ts","sourceRoot":"","sources":["../../../src/channels/discord.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAqB,WAAW,EAAE,MAAM,WAAW,CAAC;AAG3E,qBAAa,cAAe,SAAQ,cAAc;IAChD,QAAQ,CAAC,QAAQ,aAAa;IAC9B,QAAQ,CAAC,WAAW,aAAa;IACjC,OAAO,CAAC,EAAE,CAAa;IACvB,OAAO,CAAC,KAAK,CAAM;IACnB,OAAO,CAAC,iBAAiB,CAA+B;IACxD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAuB;IAEjC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA2CtD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB/C,WAAW,IAAI,OAAO;IAItB,OAAO,CAAC,kBAAkB;IAkE1B,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,QAAQ;CAcjB"}
|
|
@@ -21,21 +21,38 @@ class DiscordAdapter extends adapter_1.ChannelAdapter {
|
|
|
21
21
|
if (!this.token)
|
|
22
22
|
throw new Error('Discord bot token required');
|
|
23
23
|
const WebSocket = require('ws');
|
|
24
|
-
|
|
25
|
-
this.ws
|
|
24
|
+
const socket = new WebSocket('wss://gateway.discord.gg/?v=10&encoding=json');
|
|
25
|
+
this.ws = socket;
|
|
26
|
+
socket.on('open', () => {
|
|
26
27
|
(0, security_1.auditLog)('DISCORD_CONNECTED', 'WebSocket opened');
|
|
27
28
|
});
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
socket.on('message', (data) => {
|
|
30
|
+
let payload;
|
|
31
|
+
try {
|
|
32
|
+
payload = JSON.parse(data.toString());
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
(0, security_1.auditLog)('DISCORD_PARSE_ERROR', err?.message || String(err));
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
try {
|
|
39
|
+
this.handleGatewayEvent(payload);
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
(0, security_1.auditLog)('DISCORD_HANDLER_ERROR', err?.message || String(err));
|
|
43
|
+
}
|
|
31
44
|
});
|
|
32
|
-
|
|
33
|
-
this.
|
|
34
|
-
|
|
35
|
-
|
|
45
|
+
socket.on('close', () => {
|
|
46
|
+
if (this.ws === socket) {
|
|
47
|
+
this.connected = false;
|
|
48
|
+
if (this.heartbeatInterval) {
|
|
49
|
+
clearInterval(this.heartbeatInterval);
|
|
50
|
+
this.heartbeatInterval = null;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
36
53
|
(0, security_1.auditLog)('DISCORD_DISCONNECTED', 'WebSocket closed');
|
|
37
54
|
});
|
|
38
|
-
|
|
55
|
+
socket.on('error', (err) => {
|
|
39
56
|
(0, security_1.auditLog)('DISCORD_ERROR', err.message);
|
|
40
57
|
});
|
|
41
58
|
}
|
|
@@ -75,10 +92,35 @@ class DiscordAdapter extends adapter_1.ChannelAdapter {
|
|
|
75
92
|
break;
|
|
76
93
|
case 11: // Heartbeat ACK
|
|
77
94
|
break;
|
|
95
|
+
case 1: // Heartbeat request — respond immediately
|
|
96
|
+
this.ws?.send(JSON.stringify({ op: 1, d: this.sequence }));
|
|
97
|
+
break;
|
|
98
|
+
case 7: // Reconnect — gateway is asking us to close + reconnect
|
|
99
|
+
(0, security_1.auditLog)('DISCORD_RECONNECT_REQUEST', 'Gateway requested reconnect');
|
|
100
|
+
try {
|
|
101
|
+
this.ws?.close(4000, 'reconnect');
|
|
102
|
+
}
|
|
103
|
+
catch { /* ignore */ }
|
|
104
|
+
// Reconnect after brief jitter; reuse stored token.
|
|
105
|
+
setTimeout(() => {
|
|
106
|
+
this.connect({ token: this.token }).catch((err) => {
|
|
107
|
+
(0, security_1.auditLog)('DISCORD_RECONNECT_FAILED', err?.message || String(err));
|
|
108
|
+
});
|
|
109
|
+
}, 1000 + Math.floor(Math.random() * 2000));
|
|
110
|
+
break;
|
|
111
|
+
case 9: { // Invalid session — re-identify after delay (resumable flag in d)
|
|
112
|
+
const resumable = !!d;
|
|
113
|
+
(0, security_1.auditLog)('DISCORD_INVALID_SESSION', `resumable=${resumable}`);
|
|
114
|
+
setTimeout(() => {
|
|
115
|
+
if (this.ws && this.ws.readyState === 1 /* OPEN */)
|
|
116
|
+
this.identify();
|
|
117
|
+
}, 1000 + Math.floor(Math.random() * 4000));
|
|
118
|
+
break;
|
|
119
|
+
}
|
|
78
120
|
case 0: // Dispatch
|
|
79
|
-
if (t === 'READY') {
|
|
121
|
+
if (t === 'READY' || t === 'RESUMED') {
|
|
80
122
|
this.connected = true;
|
|
81
|
-
(0, security_1.auditLog)('DISCORD_READY', `Logged in as ${d.user?.username}`);
|
|
123
|
+
(0, security_1.auditLog)('DISCORD_READY', t === 'READY' ? `Logged in as ${d.user?.username}` : 'Session resumed');
|
|
82
124
|
}
|
|
83
125
|
if (t === 'MESSAGE_CREATE') {
|
|
84
126
|
// Don't respond to own messages
|
|
@@ -100,12 +142,16 @@ class DiscordAdapter extends adapter_1.ChannelAdapter {
|
|
|
100
142
|
timestamp: new Date(d.timestamp),
|
|
101
143
|
metadata: { guildId: d.guild_id },
|
|
102
144
|
};
|
|
103
|
-
this.handleIncoming(message)
|
|
145
|
+
this.handleIncoming(message).catch((err) => {
|
|
146
|
+
(0, security_1.auditLog)('DISCORD_HANDLE_ERROR', err?.message || String(err));
|
|
147
|
+
});
|
|
104
148
|
}
|
|
105
149
|
break;
|
|
106
150
|
}
|
|
107
151
|
}
|
|
108
152
|
startHeartbeat(interval) {
|
|
153
|
+
if (this.heartbeatInterval)
|
|
154
|
+
clearInterval(this.heartbeatInterval);
|
|
109
155
|
this.heartbeatInterval = setInterval(() => {
|
|
110
156
|
this.ws?.send(JSON.stringify({ op: 1, d: this.sequence }));
|
|
111
157
|
}, interval);
|
|
@@ -115,7 +161,7 @@ class DiscordAdapter extends adapter_1.ChannelAdapter {
|
|
|
115
161
|
op: 2,
|
|
116
162
|
d: {
|
|
117
163
|
token: this.token,
|
|
118
|
-
intents:
|
|
164
|
+
intents: 33281, // GUILDS (1) + GUILD_MESSAGES (512) + MESSAGE_CONTENT (32768)
|
|
119
165
|
properties: {
|
|
120
166
|
os: process.platform,
|
|
121
167
|
browser: 'azerclaw',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discord.js","sourceRoot":"","sources":["../../../src/channels/discord.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,uCAA2E;AAC3E,+CAA4C;AAE5C,MAAa,cAAe,SAAQ,wBAAc;IACvC,QAAQ,GAAG,SAAS,CAAC;IACrB,WAAW,GAAG,SAAS,CAAC;IACzB,EAAE,GAAQ,IAAI,CAAC;IACf,KAAK,GAAG,EAAE,CAAC;IACX,iBAAiB,GAA0B,IAAI,CAAC;IAChD,SAAS,GAAG,KAAK,CAAC;IAClB,QAAQ,GAAkB,IAAI,CAAC;IAEvC,KAAK,CAAC,OAAO,CAAC,MAA8B;QAC1C,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAE/D,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAChC,
|
|
1
|
+
{"version":3,"file":"discord.js","sourceRoot":"","sources":["../../../src/channels/discord.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,uCAA2E;AAC3E,+CAA4C;AAE5C,MAAa,cAAe,SAAQ,wBAAc;IACvC,QAAQ,GAAG,SAAS,CAAC;IACrB,WAAW,GAAG,SAAS,CAAC;IACzB,EAAE,GAAQ,IAAI,CAAC;IACf,KAAK,GAAG,EAAE,CAAC;IACX,iBAAiB,GAA0B,IAAI,CAAC;IAChD,SAAS,GAAG,KAAK,CAAC;IAClB,QAAQ,GAAkB,IAAI,CAAC;IAEvC,KAAK,CAAC,OAAO,CAAC,MAA8B;QAC1C,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAE/D,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,8CAA8C,CAAC,CAAC;QAC7E,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC;QAEjB,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YACrB,IAAA,mBAAQ,EAAC,mBAAmB,EAAE,kBAAkB,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAY,EAAE,EAAE;YACpC,IAAI,OAAY,CAAC;YACjB,IAAI,CAAC;gBACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YACxC,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,IAAA,mBAAQ,EAAC,qBAAqB,EAAE,GAAG,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC7D,OAAO;YACT,CAAC;YACD,IAAI,CAAC;gBACH,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;YACnC,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,IAAA,mBAAQ,EAAC,uBAAuB,EAAE,GAAG,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YACjE,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACtB,IAAI,IAAI,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC;gBACvB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;gBACvB,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;oBAC3B,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;oBACtC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;gBAChC,CAAC;YACH,CAAC;YACD,IAAA,mBAAQ,EAAC,sBAAsB,EAAE,kBAAkB,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE;YAChC,IAAA,mBAAQ,EAAC,eAAe,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,IAAI,CAAC,iBAAiB;YAAE,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAClE,IAAI,IAAI,CAAC,EAAE;YAAE,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAoB;QAC7B,MAAM,GAAG,GAAG,wCAAwC,OAAO,CAAC,SAAS,WAAW,CAAC;QACjF,MAAM,IAAI,GAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;QAC/C,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,IAAI,CAAC,iBAAiB,GAAG,EAAE,UAAU,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;QAC3D,CAAC;QAED,MAAM,KAAK,CAAC,GAAG,EAAE;YACf,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,eAAe,EAAE,OAAO,IAAI,CAAC,KAAK,EAAE;gBACpC,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAEO,kBAAkB,CAAC,OAAY;QACrC,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC;QAChC,IAAI,CAAC;YAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QAEzB,QAAQ,EAAE,EAAE,CAAC;YACX,KAAK,EAAE,EAAE,0BAA0B;gBACjC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC;gBAC1C,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAChB,MAAM;YACR,KAAK,EAAE,EAAE,gBAAgB;gBACvB,MAAM;YACR,KAAK,CAAC,EAAE,0CAA0C;gBAChD,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;gBAC3D,MAAM;YACR,KAAK,CAAC,EAAE,wDAAwD;gBAC9D,IAAA,mBAAQ,EAAC,2BAA2B,EAAE,6BAA6B,CAAC,CAAC;gBACrE,IAAI,CAAC;oBAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;gBACjE,oDAAoD;gBACpD,UAAU,CAAC,GAAG,EAAE;oBACd,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAQ,EAAE,EAAE;wBACrD,IAAA,mBAAQ,EAAC,0BAA0B,EAAE,GAAG,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;oBACpE,CAAC,CAAC,CAAC;gBACL,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;gBAC5C,MAAM;YACR,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,kEAAkE;gBAC1E,MAAM,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC;gBACtB,IAAA,mBAAQ,EAAC,yBAAyB,EAAE,aAAa,SAAS,EAAE,CAAC,CAAC;gBAC9D,UAAU,CAAC,GAAG,EAAE;oBACd,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,UAAU,KAAK,CAAC,CAAC,UAAU;wBAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACtE,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;gBAC5C,MAAM;YACR,CAAC;YACD,KAAK,CAAC,EAAE,WAAW;gBACjB,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;oBACrC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;oBACtB,IAAA,mBAAQ,EAAC,eAAe,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;gBACpG,CAAC;gBACD,IAAI,CAAC,KAAK,gBAAgB,EAAE,CAAC;oBAC3B,gCAAgC;oBAChC,IAAI,CAAC,CAAC,MAAM,EAAE,GAAG;wBAAE,OAAO;oBAE1B,MAAM,OAAO,GAAsB;wBACjC,EAAE,EAAE,CAAC,CAAC,EAAE;wBACR,QAAQ,EAAE,SAAS;wBACnB,SAAS,EAAE,CAAC,CAAC,UAAU;wBACvB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE;wBAC5B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,QAAQ,IAAI,SAAS;wBAC3C,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,EAAE;wBACxB,WAAW,EAAE,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;4BAClD,IAAI,EAAE,MAAM;4BACZ,GAAG,EAAE,CAAC,CAAC,GAAG;4BACV,IAAI,EAAE,CAAC,CAAC,QAAQ;4BAChB,IAAI,EAAE,CAAC,CAAC,IAAI;yBACb,CAAC,CAAC;wBACH,SAAS,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;wBAChC,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;qBAClC,CAAC;oBAEF,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,GAAQ,EAAE,EAAE;wBAC9C,IAAA,mBAAQ,EAAC,sBAAsB,EAAE,GAAG,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;oBAChE,CAAC,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM;QACV,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,QAAgB;QACrC,IAAI,IAAI,CAAC,iBAAiB;YAAE,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAClE,IAAI,CAAC,iBAAiB,GAAG,WAAW,CAAC,GAAG,EAAE;YACxC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC7D,CAAC,EAAE,QAAQ,CAAC,CAAC;IACf,CAAC;IAEO,QAAQ;QACd,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;YAC3B,EAAE,EAAE,CAAC;YACL,CAAC,EAAE;gBACD,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,OAAO,EAAE,KAAK,EAAE,8DAA8D;gBAC9E,UAAU,EAAE;oBACV,EAAE,EAAE,OAAO,CAAC,QAAQ;oBACpB,OAAO,EAAE,UAAU;oBACnB,MAAM,EAAE,UAAU;iBACnB;aACF;SACF,CAAC,CAAC,CAAC;IACN,CAAC;CACF;AAtKD,wCAsKC"}
|
|
@@ -10,7 +10,12 @@ export declare class SlackAdapter extends ChannelAdapter {
|
|
|
10
10
|
private appToken;
|
|
11
11
|
private ws;
|
|
12
12
|
private connected;
|
|
13
|
+
private pingInterval;
|
|
14
|
+
private lastPongAt;
|
|
15
|
+
private savedConfig;
|
|
13
16
|
connect(config: Record<string, string>): Promise<void>;
|
|
17
|
+
private startKeepalive;
|
|
18
|
+
private stopKeepalive;
|
|
14
19
|
disconnect(): Promise<void>;
|
|
15
20
|
send(options: SendOptions): Promise<void>;
|
|
16
21
|
isConnected(): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slack.d.ts","sourceRoot":"","sources":["../../../src/channels/slack.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAqB,WAAW,EAAE,MAAM,WAAW,CAAC;AAG3E,qBAAa,YAAa,SAAQ,cAAc;IAC9C,QAAQ,CAAC,QAAQ,WAAW;IAC5B,QAAQ,CAAC,WAAW,WAAW;IAC/B,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,EAAE,CAAa;IACvB,OAAO,CAAC,SAAS,CAAS;
|
|
1
|
+
{"version":3,"file":"slack.d.ts","sourceRoot":"","sources":["../../../src/channels/slack.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAqB,WAAW,EAAE,MAAM,WAAW,CAAC;AAG3E,qBAAa,YAAa,SAAQ,cAAc;IAC9C,QAAQ,CAAC,QAAQ,WAAW;IAC5B,QAAQ,CAAC,WAAW,WAAW;IAC/B,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,QAAQ,CAAM;IACtB,OAAO,CAAC,EAAE,CAAa;IACvB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,WAAW,CAAuC;IAEpD,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAgE5D,OAAO,CAAC,cAAc;IAoBtB,OAAO,CAAC,aAAa;IAOf,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAe/C,WAAW,IAAI,OAAO;IAItB,OAAO,CAAC,gBAAgB;CA+BzB"}
|
|
@@ -14,7 +14,11 @@ class SlackAdapter extends adapter_1.ChannelAdapter {
|
|
|
14
14
|
appToken = '';
|
|
15
15
|
ws = null;
|
|
16
16
|
connected = false;
|
|
17
|
+
pingInterval = null;
|
|
18
|
+
lastPongAt = 0;
|
|
19
|
+
savedConfig = null;
|
|
17
20
|
async connect(config) {
|
|
21
|
+
this.savedConfig = config;
|
|
18
22
|
this.botToken = config.botToken;
|
|
19
23
|
this.appToken = config.appToken;
|
|
20
24
|
if (!this.botToken || !this.appToken) {
|
|
@@ -29,21 +33,83 @@ class SlackAdapter extends adapter_1.ChannelAdapter {
|
|
|
29
33
|
if (!data.ok)
|
|
30
34
|
throw new Error(`Slack auth failed: ${data.error}`);
|
|
31
35
|
const WebSocket = require('ws');
|
|
32
|
-
|
|
33
|
-
this.ws
|
|
34
|
-
|
|
36
|
+
const socket = new WebSocket(data.url);
|
|
37
|
+
this.ws = socket;
|
|
38
|
+
socket.on('open', () => {
|
|
39
|
+
if (this.ws === socket) {
|
|
40
|
+
this.connected = true;
|
|
41
|
+
this.lastPongAt = Date.now();
|
|
42
|
+
this.startKeepalive();
|
|
43
|
+
}
|
|
35
44
|
(0, security_1.auditLog)('SLACK_CONNECTED', 'Socket Mode active');
|
|
36
45
|
});
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
46
|
+
socket.on('pong', () => {
|
|
47
|
+
if (this.ws === socket) {
|
|
48
|
+
this.lastPongAt = Date.now();
|
|
49
|
+
}
|
|
40
50
|
});
|
|
41
|
-
|
|
42
|
-
this.
|
|
51
|
+
socket.on('message', (raw) => {
|
|
52
|
+
if (this.ws !== socket)
|
|
53
|
+
return;
|
|
54
|
+
let payload;
|
|
55
|
+
try {
|
|
56
|
+
payload = JSON.parse(raw.toString());
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
(0, security_1.auditLog)('SLACK_PARSE_ERROR', err?.message || String(err));
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
try {
|
|
63
|
+
this.handleSlackEvent(payload);
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
(0, security_1.auditLog)('SLACK_HANDLER_ERROR', err?.message || String(err));
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
socket.on('close', () => {
|
|
70
|
+
if (this.ws === socket) {
|
|
71
|
+
this.connected = false;
|
|
72
|
+
this.stopKeepalive();
|
|
73
|
+
}
|
|
43
74
|
(0, security_1.auditLog)('SLACK_DISCONNECTED', '');
|
|
44
75
|
});
|
|
76
|
+
socket.on('error', (err) => {
|
|
77
|
+
(0, security_1.auditLog)('SLACK_ERROR', err.message);
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
startKeepalive() {
|
|
81
|
+
this.stopKeepalive();
|
|
82
|
+
this.pingInterval = setInterval(() => {
|
|
83
|
+
// If we haven’t seen a pong in 90s, treat the socket as dead and reconnect.
|
|
84
|
+
if (Date.now() - this.lastPongAt > 90_000) {
|
|
85
|
+
(0, security_1.auditLog)('SLACK_KEEPALIVE_TIMEOUT', 'No pong in 90s; reconnecting');
|
|
86
|
+
try {
|
|
87
|
+
this.ws?.terminate?.();
|
|
88
|
+
}
|
|
89
|
+
catch { /* ignore */ }
|
|
90
|
+
this.connected = false;
|
|
91
|
+
this.stopKeepalive();
|
|
92
|
+
if (this.savedConfig) {
|
|
93
|
+
this.connect(this.savedConfig).catch((err) => {
|
|
94
|
+
(0, security_1.auditLog)('SLACK_RECONNECT_FAILED', err?.message || String(err));
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
try {
|
|
100
|
+
this.ws?.ping?.();
|
|
101
|
+
}
|
|
102
|
+
catch { /* ignore */ }
|
|
103
|
+
}, 30_000);
|
|
104
|
+
}
|
|
105
|
+
stopKeepalive() {
|
|
106
|
+
if (this.pingInterval) {
|
|
107
|
+
clearInterval(this.pingInterval);
|
|
108
|
+
this.pingInterval = null;
|
|
109
|
+
}
|
|
45
110
|
}
|
|
46
111
|
async disconnect() {
|
|
112
|
+
this.stopKeepalive();
|
|
47
113
|
if (this.ws)
|
|
48
114
|
this.ws.close();
|
|
49
115
|
this.connected = false;
|
|
@@ -90,7 +156,9 @@ class SlackAdapter extends adapter_1.ChannelAdapter {
|
|
|
90
156
|
timestamp: new Date(parseFloat(event.ts) * 1000),
|
|
91
157
|
metadata: { threadTs: event.thread_ts, channelType: event.channel_type },
|
|
92
158
|
};
|
|
93
|
-
this.handleIncoming(normalized)
|
|
159
|
+
this.handleIncoming(normalized).catch((err) => {
|
|
160
|
+
(0, security_1.auditLog)('SLACK_HANDLE_ERROR', err?.message || String(err));
|
|
161
|
+
});
|
|
94
162
|
}
|
|
95
163
|
}
|
|
96
164
|
exports.SlackAdapter = SlackAdapter;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slack.js","sourceRoot":"","sources":["../../../src/channels/slack.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,uCAA2E;AAC3E,+CAA4C;AAE5C,MAAa,YAAa,SAAQ,wBAAc;IACrC,QAAQ,GAAG,OAAO,CAAC;IACnB,WAAW,GAAG,OAAO,CAAC;IACvB,QAAQ,GAAG,EAAE,CAAC;IACd,QAAQ,GAAG,EAAE,CAAC;IACd,EAAE,GAAQ,IAAI,CAAC;IACf,SAAS,GAAG,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"slack.js","sourceRoot":"","sources":["../../../src/channels/slack.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,7 @@ export declare class TelegramAdapter extends ChannelAdapter {
|
|
|
15
15
|
disconnect(): Promise<void>;
|
|
16
16
|
send(options: SendOptions): Promise<void>;
|
|
17
17
|
isConnected(): boolean;
|
|
18
|
+
private consecutiveErrors;
|
|
18
19
|
private pollUpdates;
|
|
19
20
|
}
|
|
20
21
|
//# sourceMappingURL=telegram.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telegram.d.ts","sourceRoot":"","sources":["../../../src/channels/telegram.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAqB,WAAW,EAAE,MAAM,WAAW,CAAC;AAG3E,qBAAa,eAAgB,SAAQ,cAAc;IACjD,QAAQ,CAAC,QAAQ,cAAc;IAC/B,QAAQ,CAAC,WAAW,cAAc;IAClC,OAAO,CAAC,KAAK,CAAM;IACnB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,SAAS,CAA+B;IAEhD,OAAO,KAAK,OAAO,GAElB;IAEK,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IActD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"telegram.d.ts","sourceRoot":"","sources":["../../../src/channels/telegram.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAqB,WAAW,EAAE,MAAM,WAAW,CAAC;AAG3E,qBAAa,eAAgB,SAAQ,cAAc;IACjD,QAAQ,CAAC,QAAQ,cAAc;IAC/B,QAAQ,CAAC,WAAW,cAAc;IAClC,OAAO,CAAC,KAAK,CAAM;IACnB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,SAAS,CAA+B;IAEhD,OAAO,KAAK,OAAO,GAElB;IAEK,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IActD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAuC/C,WAAW,IAAI,OAAO;IAItB,OAAO,CAAC,iBAAiB,CAAK;YAEhB,WAAW;CAgD1B"}
|
|
@@ -36,7 +36,7 @@ class TelegramAdapter extends adapter_1.ChannelAdapter {
|
|
|
36
36
|
clearTimeout(this.pollTimer);
|
|
37
37
|
}
|
|
38
38
|
async send(options) {
|
|
39
|
-
await fetch(`${this.baseUrl}/sendMessage`, {
|
|
39
|
+
const res = await fetch(`${this.baseUrl}/sendMessage`, {
|
|
40
40
|
method: 'POST',
|
|
41
41
|
headers: { 'Content-Type': 'application/json' },
|
|
42
42
|
body: JSON.stringify({
|
|
@@ -46,16 +46,49 @@ class TelegramAdapter extends adapter_1.ChannelAdapter {
|
|
|
46
46
|
parse_mode: 'Markdown',
|
|
47
47
|
}),
|
|
48
48
|
});
|
|
49
|
+
if (!res.ok) {
|
|
50
|
+
let errDescription = '';
|
|
51
|
+
try {
|
|
52
|
+
const data = await res.json();
|
|
53
|
+
errDescription = data.description || '';
|
|
54
|
+
}
|
|
55
|
+
catch { /* ignore */ }
|
|
56
|
+
if (errDescription.includes("can't parse entities") || errDescription.includes("can't find end of")) {
|
|
57
|
+
// Fall back to sending as plain text if Markdown formatting fails
|
|
58
|
+
const retryRes = await fetch(`${this.baseUrl}/sendMessage`, {
|
|
59
|
+
method: 'POST',
|
|
60
|
+
headers: { 'Content-Type': 'application/json' },
|
|
61
|
+
body: JSON.stringify({
|
|
62
|
+
chat_id: options.channelId,
|
|
63
|
+
text: options.content,
|
|
64
|
+
reply_to_message_id: options.replyTo ? parseInt(options.replyTo) : undefined,
|
|
65
|
+
}),
|
|
66
|
+
});
|
|
67
|
+
if (!retryRes.ok) {
|
|
68
|
+
throw new Error(`Telegram send fallback failed: ${retryRes.statusText}`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
throw new Error(`Telegram send failed: ${errDescription || res.statusText}`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
49
75
|
}
|
|
50
76
|
isConnected() {
|
|
51
77
|
return this.polling;
|
|
52
78
|
}
|
|
79
|
+
consecutiveErrors = 0;
|
|
53
80
|
async pollUpdates() {
|
|
54
81
|
if (!this.polling)
|
|
55
82
|
return;
|
|
83
|
+
let delay = 1000;
|
|
56
84
|
try {
|
|
57
85
|
const res = await fetch(`${this.baseUrl}/getUpdates?offset=${this.offset}&timeout=30`);
|
|
58
86
|
const data = await res.json();
|
|
87
|
+
if (!data.ok) {
|
|
88
|
+
throw new Error(`Telegram API Error: ${data.description || 'Unknown error'} (${data.error_code || 'no code'})`);
|
|
89
|
+
}
|
|
90
|
+
// Successful poll — reset backoff.
|
|
91
|
+
this.consecutiveErrors = 0;
|
|
59
92
|
if (data.ok && data.result) {
|
|
60
93
|
for (const update of data.result) {
|
|
61
94
|
this.offset = update.update_id + 1;
|
|
@@ -74,15 +107,20 @@ class TelegramAdapter extends adapter_1.ChannelAdapter {
|
|
|
74
107
|
timestamp: new Date(msg.date * 1000),
|
|
75
108
|
metadata: { chatType: chat.type },
|
|
76
109
|
};
|
|
77
|
-
this.handleIncoming(normalized)
|
|
110
|
+
this.handleIncoming(normalized).catch((err) => {
|
|
111
|
+
(0, security_1.auditLog)('TELEGRAM_HANDLE_ERROR', err?.message || String(err));
|
|
112
|
+
});
|
|
78
113
|
}
|
|
79
114
|
}
|
|
80
115
|
}
|
|
81
116
|
}
|
|
82
117
|
catch (e) {
|
|
83
|
-
|
|
118
|
+
this.consecutiveErrors++;
|
|
119
|
+
// 1s, 2s, 4s, 8s, ... capped at 60s
|
|
120
|
+
delay = Math.min(60_000, 1000 * Math.pow(2, this.consecutiveErrors - 1));
|
|
121
|
+
(0, security_1.auditLog)('TELEGRAM_ERROR', `${e.message} (retry in ${delay}ms, error #${this.consecutiveErrors})`);
|
|
84
122
|
}
|
|
85
|
-
this.pollTimer = setTimeout(() => this.pollUpdates(),
|
|
123
|
+
this.pollTimer = setTimeout(() => this.pollUpdates(), delay);
|
|
86
124
|
}
|
|
87
125
|
}
|
|
88
126
|
exports.TelegramAdapter = TelegramAdapter;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telegram.js","sourceRoot":"","sources":["../../../src/channels/telegram.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,uCAA2E;AAC3E,+CAA4C;AAE5C,MAAa,eAAgB,SAAQ,wBAAc;IACxC,QAAQ,GAAG,UAAU,CAAC;IACtB,WAAW,GAAG,UAAU,CAAC;IAC1B,KAAK,GAAG,EAAE,CAAC;IACX,OAAO,GAAG,KAAK,CAAC;IAChB,MAAM,GAAG,CAAC,CAAC;IACX,SAAS,GAA0B,IAAI,CAAC;IAEhD,IAAY,OAAO;QACjB,OAAO,+BAA+B,IAAI,CAAC,KAAK,EAAE,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAA8B;QAC1C,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAEhE,eAAe;QACf,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,QAAQ,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAA2E,CAAC;QACvG,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAE3E,IAAA,mBAAQ,EAAC,oBAAoB,EAAE,SAAS,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QACjE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,IAAI,CAAC,SAAS;YAAE,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAoB;QAC7B,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,cAAc,EAAE;
|
|
1
|
+
{"version":3,"file":"telegram.js","sourceRoot":"","sources":["../../../src/channels/telegram.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../../src/channels/webhook.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,cAAc,EAAqB,WAAW,EAAE,MAAM,WAAW,CAAC;AAG3E,qBAAa,cAAe,SAAQ,cAAc;IAChD,QAAQ,CAAC,QAAQ,aAAa;IAC9B,QAAQ,CAAC,WAAW,aAAa;IACjC,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,IAAI,CAAQ;IACpB,OAAO,CAAC,SAAS,CAAS;IAEpB,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../../src/channels/webhook.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,cAAc,EAAqB,WAAW,EAAE,MAAM,WAAW,CAAC;AAG3E,qBAAa,cAAe,SAAQ,cAAc;IAChD,QAAQ,CAAC,QAAQ,aAAa;IAC9B,QAAQ,CAAC,WAAW,aAAa;IACjC,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,IAAI,CAAQ;IACpB,OAAO,CAAC,SAAS,CAAS;IAEpB,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA0EtD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAa3B,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAc/C,WAAW,IAAI,OAAO;CAGvB"}
|
|
@@ -58,10 +58,29 @@ class WebhookAdapter extends adapter_1.ChannelAdapter {
|
|
|
58
58
|
res.end('Method not allowed');
|
|
59
59
|
return;
|
|
60
60
|
}
|
|
61
|
-
|
|
62
|
-
|
|
61
|
+
const MAX_BODY = 1024 * 1024; // 1 MB
|
|
62
|
+
const chunks = [];
|
|
63
|
+
let total = 0;
|
|
64
|
+
let aborted = false;
|
|
65
|
+
req.on('data', (chunk) => {
|
|
66
|
+
if (aborted)
|
|
67
|
+
return;
|
|
68
|
+
const buf = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
|
|
69
|
+
total += buf.length;
|
|
70
|
+
if (total > MAX_BODY) {
|
|
71
|
+
aborted = true;
|
|
72
|
+
res.writeHead(413);
|
|
73
|
+
res.end('Payload too large');
|
|
74
|
+
req.destroy();
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
chunks.push(buf);
|
|
78
|
+
});
|
|
63
79
|
req.on('end', async () => {
|
|
80
|
+
if (aborted)
|
|
81
|
+
return;
|
|
64
82
|
try {
|
|
83
|
+
const body = Buffer.concat(chunks).toString('utf8');
|
|
65
84
|
const data = JSON.parse(body);
|
|
66
85
|
const message = {
|
|
67
86
|
id: data.id || `wh_${Date.now()}`,
|
|
@@ -84,10 +103,22 @@ class WebhookAdapter extends adapter_1.ChannelAdapter {
|
|
|
84
103
|
}
|
|
85
104
|
});
|
|
86
105
|
});
|
|
87
|
-
// Bind to localhost only for security
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
(
|
|
106
|
+
// Bind to localhost only for security. Await `listening` so connect()
|
|
107
|
+
// resolves only when isConnected() will return true.
|
|
108
|
+
await new Promise((resolve, reject) => {
|
|
109
|
+
const onError = (err) => {
|
|
110
|
+
this.server?.removeListener('listening', onListening);
|
|
111
|
+
reject(err);
|
|
112
|
+
};
|
|
113
|
+
const onListening = () => {
|
|
114
|
+
this.server?.removeListener('error', onError);
|
|
115
|
+
this.connected = true;
|
|
116
|
+
(0, security_1.auditLog)('WEBHOOK_STARTED', `Listening on 127.0.0.1:${this.port}`);
|
|
117
|
+
resolve();
|
|
118
|
+
};
|
|
119
|
+
this.server.once('error', onError);
|
|
120
|
+
this.server.once('listening', onListening);
|
|
121
|
+
this.server.listen(this.port, '127.0.0.1');
|
|
91
122
|
});
|
|
92
123
|
}
|
|
93
124
|
async disconnect() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook.js","sourceRoot":"","sources":["../../../src/channels/webhook.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,2CAA6B;AAC7B,uCAA2E;AAC3E,+CAA4C;AAE5C,MAAa,cAAe,SAAQ,wBAAc;IACvC,QAAQ,GAAG,SAAS,CAAC;IACrB,WAAW,GAAG,SAAS,CAAC;IACzB,MAAM,GAAuB,IAAI,CAAC;IAClC,WAAW,GAAG,EAAE,CAAC;IACjB,IAAI,GAAG,IAAI,CAAC;IACZ,SAAS,GAAG,KAAK,CAAC;IAE1B,KAAK,CAAC,OAAO,CAAC,MAA8B;QAC1C,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC;QAE5C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;YACjD,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC1B,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBACnB,GAAG,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;gBAC9B,OAAO;YACT,CAAC;YAED,
|
|
1
|
+
{"version":3,"file":"webhook.js","sourceRoot":"","sources":["../../../src/channels/webhook.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,11 +2,20 @@
|
|
|
2
2
|
* 🐟 AZERCLAW Fish Animations — THE BOYS EDITION
|
|
3
3
|
* Diabolical, gritty, and uncensored.
|
|
4
4
|
*/
|
|
5
|
+
export declare const OCEAN_GRADIENT: (str: string) => string;
|
|
6
|
+
export declare const GOLD_GRADIENT: (str: string) => string;
|
|
7
|
+
export declare const NEON_GRADIENT: (str: string) => string;
|
|
8
|
+
export declare const LUXE_GRADIENT: (str: string) => string;
|
|
9
|
+
export declare const EMBER_GRADIENT: (str: string) => string;
|
|
5
10
|
export declare const FISH_FRAMES: string[];
|
|
6
11
|
export declare const FISH_SWIM_FRAMES: string[];
|
|
7
12
|
export declare const FISH_DEAD = " ><(((x> \uD83D\uDC80";
|
|
8
13
|
export declare const FISH_HAPPY = " ><(((\u00B0> \uD83E\uDE78";
|
|
9
14
|
export declare const BIG_FISH: string[];
|
|
15
|
+
/**
|
|
16
|
+
* Character-specific TTS voices for macOS
|
|
17
|
+
*/
|
|
18
|
+
export declare const CHARACTER_VOICES: Record<string, string>;
|
|
10
19
|
export declare function speak(text: string, character?: string): void;
|
|
11
20
|
export declare function playSplashScreen(version: string): Promise<void>;
|
|
12
21
|
export declare function printQuickSplash(version: string): void;
|