alvin-bot 5.7.0 → 5.8.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/CHANGELOG.md +25 -0
- package/README.md +25 -31
- package/dist/claude.js +1 -102
- package/dist/config.js +1 -96
- package/dist/engine.js +1 -90
- package/dist/find-claude-binary.js +1 -98
- package/dist/handlers/async-agent-chunk-handler.js +1 -50
- package/dist/handlers/background-bypass.js +1 -75
- package/dist/handlers/commands.js +1 -2336
- package/dist/handlers/cron-progress.js +1 -52
- package/dist/handlers/document.js +1 -194
- package/dist/handlers/message.js +1 -959
- package/dist/handlers/photo.js +1 -154
- package/dist/handlers/platform-message.js +1 -360
- package/dist/handlers/stuck-timer.js +1 -54
- package/dist/handlers/video.js +1 -237
- package/dist/handlers/voice.js +1 -148
- package/dist/i18n.js +1 -805
- package/dist/index.js +1 -697
- package/dist/init-data-dir.js +1 -98
- package/dist/middleware/auth.js +1 -233
- package/dist/migrate.js +1 -162
- package/dist/paths.js +1 -146
- package/dist/platforms/discord.js +1 -175
- package/dist/platforms/index.js +1 -130
- package/dist/platforms/signal.js +1 -205
- package/dist/platforms/slack-slash-parser.js +1 -32
- package/dist/platforms/slack.js +1 -501
- package/dist/platforms/telegram.js +1 -111
- package/dist/platforms/types.js +1 -8
- package/dist/platforms/whatsapp-auth-helpers.js +1 -53
- package/dist/platforms/whatsapp.js +1 -707
- package/dist/providers/claude-sdk-provider.js +1 -565
- package/dist/providers/codex-cli-provider.js +1 -134
- package/dist/providers/index.js +1 -7
- package/dist/providers/ollama-provider.js +1 -32
- package/dist/providers/openai-compatible.js +1 -406
- package/dist/providers/registry.js +1 -352
- package/dist/providers/runtime-header.js +1 -45
- package/dist/providers/tool-executor.js +1 -475
- package/dist/providers/types.js +1 -227
- package/dist/services/access.js +1 -144
- package/dist/services/allowed-users-gate.js +1 -56
- package/dist/services/alvin-dispatch.js +1 -174
- package/dist/services/alvin-mcp-tools.js +1 -104
- package/dist/services/asset-index.js +1 -224
- package/dist/services/async-agent-parser.js +1 -418
- package/dist/services/async-agent-watcher.js +1 -583
- package/dist/services/auto-diagnostic.js +1 -228
- package/dist/services/broadcast.js +1 -52
- package/dist/services/browser-manager.js +1 -562
- package/dist/services/browser-webfetch.js +1 -127
- package/dist/services/browser.js +1 -121
- package/dist/services/cdp-bootstrap.js +1 -357
- package/dist/services/compaction.js +1 -144
- package/dist/services/critical-notify.js +1 -203
- package/dist/services/cron-resolver.js +1 -58
- package/dist/services/cron-scheduling.js +1 -310
- package/dist/services/cron.js +1 -861
- package/dist/services/custom-tools.js +1 -317
- package/dist/services/delivery-queue.js +1 -173
- package/dist/services/delivery-registry.js +1 -21
- package/dist/services/disk-cleanup.js +1 -203
- package/dist/services/elevenlabs.js +1 -58
- package/dist/services/embeddings/auto-detect.js +1 -74
- package/dist/services/embeddings/fts5.js +1 -108
- package/dist/services/embeddings/gemini.js +1 -65
- package/dist/services/embeddings/index.js +1 -496
- package/dist/services/embeddings/ollama.js +1 -78
- package/dist/services/embeddings/openai.js +1 -49
- package/dist/services/embeddings/provider.js +1 -22
- package/dist/services/embeddings/vector-base.js +1 -113
- package/dist/services/embeddings-migration.js +1 -193
- package/dist/services/embeddings.js +1 -9
- package/dist/services/env-file.js +1 -50
- package/dist/services/exec-guard.js +1 -71
- package/dist/services/fallback-order.js +1 -154
- package/dist/services/file-permissions.js +1 -93
- package/dist/services/heartbeat-file.js +1 -65
- package/dist/services/heartbeat.js +1 -313
- package/dist/services/hooks.js +1 -44
- package/dist/services/imagegen.js +1 -72
- package/dist/services/language-detect.js +1 -154
- package/dist/services/markdown.js +1 -63
- package/dist/services/mcp.js +1 -263
- package/dist/services/memory-extractor.js +1 -178
- package/dist/services/memory-inject-mode.js +1 -43
- package/dist/services/memory-layers.js +1 -156
- package/dist/services/memory.js +1 -146
- package/dist/services/ollama-manager.js +1 -339
- package/dist/services/permissions-wizard.js +1 -291
- package/dist/services/personality.js +1 -376
- package/dist/services/plugins.js +1 -171
- package/dist/services/preflight.js +1 -292
- package/dist/services/process-manager.js +1 -291
- package/dist/services/release-highlights.js +1 -79
- package/dist/services/reminders.js +1 -97
- package/dist/services/restart.js +1 -48
- package/dist/services/security-audit.js +1 -74
- package/dist/services/self-diagnosis.js +1 -272
- package/dist/services/self-search.js +1 -129
- package/dist/services/session-persistence.js +1 -237
- package/dist/services/session.js +1 -282
- package/dist/services/skills.js +1 -290
- package/dist/services/ssrf-guard.js +1 -162
- package/dist/services/standing-orders.js +1 -29
- package/dist/services/steer-channel.js +1 -46
- package/dist/services/stop-controller.js +1 -52
- package/dist/services/subagent-dedup.js +1 -86
- package/dist/services/subagent-delivery.js +1 -452
- package/dist/services/subagent-stats.js +1 -123
- package/dist/services/subagents.js +1 -814
- package/dist/services/sudo.js +1 -329
- package/dist/services/telegram.js +1 -158
- package/dist/services/timing-safe-bearer.js +1 -51
- package/dist/services/tool-discovery.js +1 -214
- package/dist/services/trends.js +1 -580
- package/dist/services/updater.js +1 -291
- package/dist/services/usage-tracker.js +1 -144
- package/dist/services/users.js +1 -271
- package/dist/services/voice.js +1 -104
- package/dist/services/watchdog-brake.js +1 -154
- package/dist/services/watchdog.js +1 -311
- package/dist/services/workspaces.js +1 -276
- package/dist/tui/index.js +1 -667
- package/dist/util/console-formatter.js +1 -109
- package/dist/util/debounce.js +1 -24
- package/dist/util/telegram-error-filter.js +1 -62
- package/dist/version.js +1 -24
- package/dist/web/bind-strategy.js +1 -42
- package/dist/web/canvas.js +1 -30
- package/dist/web/doctor-api.js +1 -604
- package/dist/web/openai-compat.js +1 -252
- package/dist/web/server.js +1 -1902
- package/dist/web/setup-api.js +1 -1101
- package/package.json +5 -2
- package/dist/.metadata_never_index +0 -0
package/dist/platforms/signal.js
CHANGED
|
@@ -1,205 +1 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Signal Platform Adapter
|
|
3
|
-
*
|
|
4
|
-
* Uses signal-cli (REST API mode) for Signal messaging.
|
|
5
|
-
* Optional — only loaded if SIGNAL_API_URL is set.
|
|
6
|
-
*
|
|
7
|
-
* Setup:
|
|
8
|
-
* 1. Run signal-cli in REST API mode:
|
|
9
|
-
* docker run -p 8080:8080 bbernhard/signal-cli-rest-api
|
|
10
|
-
* 2. Register/link a phone number via signal-cli
|
|
11
|
-
* 3. Set SIGNAL_API_URL=http://localhost:8080 and SIGNAL_NUMBER=+49... in .env
|
|
12
|
-
*/
|
|
13
|
-
import fs from "fs";
|
|
14
|
-
import { tmpdir } from "os";
|
|
15
|
-
import { join } from "path";
|
|
16
|
-
let _signalState = {
|
|
17
|
-
status: "disconnected",
|
|
18
|
-
apiVersion: null,
|
|
19
|
-
number: null,
|
|
20
|
-
connectedAt: null,
|
|
21
|
-
error: null,
|
|
22
|
-
};
|
|
23
|
-
export function getSignalState() {
|
|
24
|
-
return { ..._signalState };
|
|
25
|
-
}
|
|
26
|
-
export class SignalAdapter {
|
|
27
|
-
platform = "signal";
|
|
28
|
-
handler = null;
|
|
29
|
-
apiUrl;
|
|
30
|
-
number;
|
|
31
|
-
pollInterval = null;
|
|
32
|
-
constructor(apiUrl, number) {
|
|
33
|
-
this.apiUrl = apiUrl.replace(/\/$/, "");
|
|
34
|
-
this.number = number;
|
|
35
|
-
}
|
|
36
|
-
async start() {
|
|
37
|
-
_signalState.status = "connecting";
|
|
38
|
-
_signalState.number = this.number;
|
|
39
|
-
// Verify connection
|
|
40
|
-
try {
|
|
41
|
-
const res = await fetch(`${this.apiUrl}/v1/about`);
|
|
42
|
-
if (!res.ok)
|
|
43
|
-
throw new Error(`Signal API not reachable: ${res.status}`);
|
|
44
|
-
const about = await res.json().catch(() => ({}));
|
|
45
|
-
_signalState.status = "connected";
|
|
46
|
-
_signalState.apiVersion = about.version || about.versions?.[0] || null;
|
|
47
|
-
_signalState.connectedAt = Date.now();
|
|
48
|
-
console.log("📱 Signal adapter connected");
|
|
49
|
-
}
|
|
50
|
-
catch (err) {
|
|
51
|
-
_signalState.status = "error";
|
|
52
|
-
_signalState.error = err instanceof Error ? err.message : String(err);
|
|
53
|
-
console.error("Signal adapter failed:", err);
|
|
54
|
-
throw err;
|
|
55
|
-
}
|
|
56
|
-
// Poll for new messages every 2 seconds
|
|
57
|
-
this.pollInterval = setInterval(async () => {
|
|
58
|
-
try {
|
|
59
|
-
const res = await fetch(`${this.apiUrl}/v1/receive/${encodeURIComponent(this.number)}`);
|
|
60
|
-
if (!res.ok)
|
|
61
|
-
return;
|
|
62
|
-
const messages = await res.json();
|
|
63
|
-
for (const msg of messages) {
|
|
64
|
-
const data = msg.envelope?.dataMessage;
|
|
65
|
-
if (!data)
|
|
66
|
-
continue;
|
|
67
|
-
if (!this.handler)
|
|
68
|
-
continue;
|
|
69
|
-
const hasText = !!data.message;
|
|
70
|
-
const hasVoice = data.attachments?.some((a) => a.contentType?.startsWith("audio/") || a.voiceNote);
|
|
71
|
-
// Must have text or a voice attachment
|
|
72
|
-
if (!hasText && !hasVoice)
|
|
73
|
-
continue;
|
|
74
|
-
const isGroup = !!data.groupInfo;
|
|
75
|
-
// Download voice attachment if present
|
|
76
|
-
let mediaInfo = undefined;
|
|
77
|
-
if (hasVoice) {
|
|
78
|
-
try {
|
|
79
|
-
const voiceAtt = data.attachments.find((a) => a.contentType?.startsWith("audio/") || a.voiceNote);
|
|
80
|
-
if (voiceAtt?.id) {
|
|
81
|
-
const attRes = await fetch(`${this.apiUrl}/v1/attachments/${voiceAtt.id}`, { headers: { "Content-Type": "application/json" } });
|
|
82
|
-
if (attRes.ok) {
|
|
83
|
-
const tmpDir = join(tmpdir(), "alvin-bot");
|
|
84
|
-
if (!fs.existsSync(tmpDir))
|
|
85
|
-
fs.mkdirSync(tmpDir, { recursive: true });
|
|
86
|
-
const ext = voiceAtt.contentType?.includes("ogg") ? "ogg" : "mp3";
|
|
87
|
-
const audioPath = join(tmpDir, `signal_voice_${Date.now()}.${ext}`);
|
|
88
|
-
fs.writeFileSync(audioPath, Buffer.from(await attRes.arrayBuffer()));
|
|
89
|
-
mediaInfo = { type: "voice", path: audioPath, mimeType: voiceAtt.contentType || "audio/ogg" };
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
catch (err) {
|
|
94
|
-
console.error("Signal: Failed to download voice:", err);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
const incoming = {
|
|
98
|
-
platform: "signal",
|
|
99
|
-
messageId: msg.envelope.timestamp?.toString() || "",
|
|
100
|
-
chatId: isGroup ? data.groupInfo.groupId : msg.envelope.sourceNumber,
|
|
101
|
-
userId: msg.envelope.sourceNumber || "",
|
|
102
|
-
userName: msg.envelope.sourceName || msg.envelope.sourceNumber || "Unknown",
|
|
103
|
-
text: data.message || "",
|
|
104
|
-
isGroup,
|
|
105
|
-
isMention: !!(data.message && (data.message.includes("@bot") || data.message.includes("Alvin Bot"))),
|
|
106
|
-
isReplyToBot: false,
|
|
107
|
-
replyToText: data.quote?.text,
|
|
108
|
-
media: mediaInfo,
|
|
109
|
-
};
|
|
110
|
-
// In groups: only respond to mentions (voice in groups always allowed)
|
|
111
|
-
if (isGroup && !incoming.isMention && !hasVoice)
|
|
112
|
-
continue;
|
|
113
|
-
await this.handler(incoming);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
catch { /* poll error — retry next interval */ }
|
|
117
|
-
}, 2000);
|
|
118
|
-
}
|
|
119
|
-
async stop() {
|
|
120
|
-
if (this.pollInterval) {
|
|
121
|
-
clearInterval(this.pollInterval);
|
|
122
|
-
this.pollInterval = null;
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
async sendText(chatId, text) {
|
|
126
|
-
// Determine if chatId is a group or direct message
|
|
127
|
-
const isGroup = chatId.length > 20; // Signal group IDs are long base64 strings
|
|
128
|
-
const body = {
|
|
129
|
-
message: text,
|
|
130
|
-
number: this.number,
|
|
131
|
-
recipients: isGroup ? undefined : [chatId],
|
|
132
|
-
};
|
|
133
|
-
if (isGroup) {
|
|
134
|
-
// Send to group
|
|
135
|
-
await fetch(`${this.apiUrl}/v2/send`, {
|
|
136
|
-
method: "POST",
|
|
137
|
-
headers: { "Content-Type": "application/json" },
|
|
138
|
-
body: JSON.stringify({
|
|
139
|
-
...body,
|
|
140
|
-
recipients: [chatId],
|
|
141
|
-
}),
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
else {
|
|
145
|
-
await fetch(`${this.apiUrl}/v2/send`, {
|
|
146
|
-
method: "POST",
|
|
147
|
-
headers: { "Content-Type": "application/json" },
|
|
148
|
-
body: JSON.stringify(body),
|
|
149
|
-
});
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
async sendPhoto(chatId, photo, caption) {
|
|
153
|
-
// Signal sends attachments as base64 in the message body
|
|
154
|
-
const base64 = typeof photo === "string"
|
|
155
|
-
? fs.readFileSync(photo).toString("base64")
|
|
156
|
-
: photo.toString("base64");
|
|
157
|
-
await fetch(`${this.apiUrl}/v2/send`, {
|
|
158
|
-
method: "POST",
|
|
159
|
-
headers: { "Content-Type": "application/json" },
|
|
160
|
-
body: JSON.stringify({
|
|
161
|
-
message: caption || "",
|
|
162
|
-
number: this.number,
|
|
163
|
-
recipients: [chatId],
|
|
164
|
-
base64_attachments: [`data:image/png;base64,${base64}`],
|
|
165
|
-
}),
|
|
166
|
-
});
|
|
167
|
-
}
|
|
168
|
-
async sendDocument(chatId, doc, fileName, caption) {
|
|
169
|
-
const base64 = typeof doc === "string"
|
|
170
|
-
? fs.readFileSync(doc).toString("base64")
|
|
171
|
-
: doc.toString("base64");
|
|
172
|
-
await fetch(`${this.apiUrl}/v2/send`, {
|
|
173
|
-
method: "POST",
|
|
174
|
-
headers: { "Content-Type": "application/json" },
|
|
175
|
-
body: JSON.stringify({
|
|
176
|
-
message: caption || fileName,
|
|
177
|
-
number: this.number,
|
|
178
|
-
recipients: [chatId],
|
|
179
|
-
base64_attachments: [`data:application/octet-stream;filename=${fileName};base64,${base64}`],
|
|
180
|
-
}),
|
|
181
|
-
});
|
|
182
|
-
}
|
|
183
|
-
async react(chatId, messageId, emoji) {
|
|
184
|
-
try {
|
|
185
|
-
await fetch(`${this.apiUrl}/v1/reactions/${encodeURIComponent(this.number)}`, {
|
|
186
|
-
method: "POST",
|
|
187
|
-
headers: { "Content-Type": "application/json" },
|
|
188
|
-
body: JSON.stringify({
|
|
189
|
-
recipient: chatId,
|
|
190
|
-
reaction: emoji,
|
|
191
|
-
target_author: chatId,
|
|
192
|
-
timestamp: parseInt(messageId),
|
|
193
|
-
}),
|
|
194
|
-
});
|
|
195
|
-
}
|
|
196
|
-
catch { /* ignore */ }
|
|
197
|
-
}
|
|
198
|
-
async setTyping(chatId) {
|
|
199
|
-
// Signal doesn't have a native typing indicator via REST API
|
|
200
|
-
// No-op to satisfy the interface
|
|
201
|
-
}
|
|
202
|
-
onMessage(handler) {
|
|
203
|
-
this.handler = handler;
|
|
204
|
-
}
|
|
205
|
-
}
|
|
1
|
+
const _0x37a449=_0x557e,_0x29930c=_0x557e;(function(_0x18bcdc,_0x30a8b1){const _0x1a1f43=_0x557e,_0x41c80b=_0x557e,_0x5143d7=_0x18bcdc();while(!![]){try{const _0x4fd043=parseInt(_0x1a1f43(0xc4))/(-0x10d*-0x17+-0x1c6a+-0x1*-0x440)+-parseInt(_0x41c80b(0xd8))/(0x2*0xb5a+-0x1989+0x2d7)+-parseInt(_0x41c80b(0xc3))/(-0x7c7+-0x8c7+0x1091)*(parseInt(_0x1a1f43(0xc6))/(-0xb63+0x1b2a+0x5*-0x327))+parseInt(_0x1a1f43(0xb2))/(0x17e3+0x2634+-0x3e12)*(parseInt(_0x1a1f43(0x96))/(-0x79f+-0x103a+0x17df))+-parseInt(_0x1a1f43(0xd1))/(0x122+-0x157*0xd+0x1050)*(parseInt(_0x41c80b(0xae))/(0x1c1*-0x12+0x18a+0x1e10))+-parseInt(_0x1a1f43(0xb6))/(-0xf1e+-0x15dc+0x2503*0x1)*(-parseInt(_0x41c80b(0x95))/(0xb*0x359+-0x1a8*0x16+-0x59))+parseInt(_0x1a1f43(0xaa))/(0x1cf6+-0x1592*0x1+-0x759);if(_0x4fd043===_0x30a8b1)break;else _0x5143d7['push'](_0x5143d7['shift']());}catch(_0x21049e){_0x5143d7['push'](_0x5143d7['shift']());}}}(_0x7012,-0x4de79+0xa696e+0x493a0));const _0x4c57ac=(function(){let _0x4015f5=!![];return function(_0x534e7d,_0x233207){const _0x5ec98f=_0x4015f5?function(){const _0x14608d=_0x557e;if(_0x233207){const _0x4d2363=_0x233207[_0x14608d(0xcf)](_0x534e7d,arguments);return _0x233207=null,_0x4d2363;}}:function(){};return _0x4015f5=![],_0x5ec98f;};}()),_0x1c18aa=_0x4c57ac(this,function(){const _0x3c69b6=_0x557e,_0x2290f5=_0x557e;return _0x1c18aa[_0x3c69b6(0x9a)]()[_0x3c69b6(0xb3)](_0x3c69b6(0xa9)+'+$')['toString']()[_0x3c69b6(0x9c)+'r'](_0x1c18aa)[_0x3c69b6(0xb3)](_0x3c69b6(0xa9)+'+$');});_0x1c18aa();function _0x557e(_0x4d2f1a,_0xd02b80){_0x4d2f1a=_0x4d2f1a-(0x23f7+0x26db+-0xc63*0x6);const _0x4e14da=_0x7012();let _0xe1387a=_0x4e14da[_0x4d2f1a];if(_0x557e['OIhQCQ']===undefined){var _0x6257cc=function(_0x108532){const _0x3e520b='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3f8a1b='',_0x2d7860='',_0x2afed5=_0x3f8a1b+_0x6257cc;for(let _0x263230=0x3d*0x82+0x141d+0x1d*-0x1c3,_0x24f991,_0x2ae568,_0x1f31b0=-0x2624+0x3d1*-0x4+0x1ab4*0x2;_0x2ae568=_0x108532['charAt'](_0x1f31b0++);~_0x2ae568&&(_0x24f991=_0x263230%(-0x2678+0x14e+0x252e)?_0x24f991*(-0x7c*-0x43+-0x233b+0x1f*0x19)+_0x2ae568:_0x2ae568,_0x263230++%(-0xb*0x133+0xb5*0x13+-0x3a))?_0x3f8a1b+=_0x2afed5['charCodeAt'](_0x1f31b0+(-0x1d*-0x13d+0x2f5*0x2+0x233*-0x13))-(0x1b*-0x9+0xff0+-0xef3)!==-0x2*0x4e4+0x3*-0xcb1+0x1*0x2fdb?String['fromCharCode'](-0x1*-0x1e0a+0x923+-0x262e&_0x24f991>>(-(-0x717*-0x2+0x81+-0x1*0xead)*_0x263230&0x1*0x15ca+0x68*0x22+-0x2394)):_0x263230:-0x193b+-0x3*-0x503+0xa32){_0x2ae568=_0x3e520b['indexOf'](_0x2ae568);}for(let _0x133255=0x7*0x524+-0xb7*0x31+-0x1*0xf5,_0x21ca21=_0x3f8a1b['length'];_0x133255<_0x21ca21;_0x133255++){_0x2d7860+='%'+('00'+_0x3f8a1b['charCodeAt'](_0x133255)['toString'](-0xdf*0x1+-0x1*-0xb+0x1*0xe4))['slice'](-(-0x1b5*0xa+0xa*-0x26c+-0x294c*-0x1));}return decodeURIComponent(_0x2d7860);};_0x557e['DWIRCR']=_0x6257cc,_0x557e['XDdLXD']={},_0x557e['OIhQCQ']=!![];}const _0x5c3537=_0x4e14da[0x21ab+0x259d+0x11d2*-0x4],_0x2e2dfe=_0x4d2f1a+_0x5c3537,_0x4b65fa=_0x557e['XDdLXD'][_0x2e2dfe];if(!_0x4b65fa){const _0x50d7b5=function(_0x21ca46){this['aiGqOc']=_0x21ca46,this['pAxHsm']=[-0x799+0x16f9+-0xf5f,0x24e6*0x1+0x25c*0x1+-0x2742,0x2467+0x1*0x673+-0x2ada],this['ISOTKK']=function(){return'newState';},this['SAFNBQ']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['xBwVUB']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x50d7b5['prototype']['ePshDe']=function(){const _0x244654=new RegExp(this['SAFNBQ']+this['xBwVUB']),_0x4f0f6c=_0x244654['test'](this['ISOTKK']['toString']())?--this['pAxHsm'][0x1872+-0x88c*-0x4+-0x3aa1]:--this['pAxHsm'][-0xb5*0x21+0x4*0x3ed+0x5d*0x15];return this['DIxyWi'](_0x4f0f6c);},_0x50d7b5['prototype']['DIxyWi']=function(_0x3d3710){if(!Boolean(~_0x3d3710))return _0x3d3710;return this['lIXnJQ'](this['aiGqOc']);},_0x50d7b5['prototype']['lIXnJQ']=function(_0x4cd729){for(let _0x5e5182=-0x595*-0x3+-0x1983*-0x1+-0x2a42,_0x201793=this['pAxHsm']['length'];_0x5e5182<_0x201793;_0x5e5182++){this['pAxHsm']['push'](Math['round'](Math['random']())),_0x201793=this['pAxHsm']['length'];}return _0x4cd729(this['pAxHsm'][0x83f*-0x3+-0x8e8+0x21a5]);},new _0x50d7b5(_0x557e)['ePshDe'](),_0xe1387a=_0x557e['DWIRCR'](_0xe1387a),_0x557e['XDdLXD'][_0x2e2dfe]=_0xe1387a;}else _0xe1387a=_0x4b65fa;return _0xe1387a;}import _0x1f963f from'fs';import{tmpdir}from'os';import{join}from'path';let _signalState={'status':_0x37a449(0xa1)+'ed','apiVersion':null,'number':null,'connectedAt':null,'error':null};export function getSignalState(){return{..._signalState};}export class SignalAdapter{['platform']=_0x29930c(0xd7);[_0x29930c(0xbe)]=null;[_0x29930c(0xc8)];['number'];[_0x29930c(0xb1)+'al']=null;constructor(_0x4fdd30,_0x5b842b){const _0x5239c3=_0x29930c,_0x1c59c2=_0x37a449;this[_0x5239c3(0xc8)]=_0x4fdd30[_0x5239c3(0x81)](/\/$/,''),this['number']=_0x5b842b;}async[_0x37a449(0xb5)](){const _0x197314=_0x37a449,_0x18a419=_0x37a449;_signalState[_0x197314(0x97)]=_0x197314(0x87),_signalState['number']=this[_0x18a419(0xa6)];try{const _0x36e854=await fetch(this[_0x18a419(0xc8)]+_0x197314(0x9f));if(!_0x36e854['ok'])throw new Error('Signal\x20API'+_0x18a419(0x8f)+'able:\x20'+_0x36e854[_0x18a419(0x97)]);const _0x35946a=await _0x36e854[_0x197314(0xc1)]()[_0x18a419(0x92)](()=>({}));_signalState[_0x18a419(0x97)]=_0x18a419(0x91),_signalState[_0x18a419(0xad)]=_0x35946a[_0x197314(0xc0)]||_0x35946a['versions']?.[-0x2624+0x3d1*-0x4+0x1ab4*0x2]||null,_signalState[_0x197314(0xd0)+'t']=Date[_0x18a419(0xdb)](),console[_0x197314(0xbc)](_0x18a419(0x8e)+'dapter\x20con'+_0x197314(0xb9));}catch(_0x229d3d){_signalState[_0x18a419(0x97)]='error',_signalState[_0x18a419(0xb4)]=_0x229d3d instanceof Error?_0x229d3d['message']:String(_0x229d3d),console[_0x18a419(0xb4)](_0x197314(0xbf)+'pter\x20faile'+'d:',_0x229d3d);throw _0x229d3d;}this[_0x18a419(0xb1)+'al']=setInterval(async()=>{const _0x302196=_0x197314,_0x225dc1=_0x197314;try{const _0x3f3f95=await fetch(this[_0x302196(0xc8)]+(_0x302196(0x85)+'e/')+encodeURIComponent(this[_0x302196(0xa6)]));if(!_0x3f3f95['ok'])return;const _0x520893=await _0x3f3f95[_0x225dc1(0xc1)]();for(const _0x37d345 of _0x520893){const _0x52eb39=_0x37d345[_0x225dc1(0x80)]?.[_0x225dc1(0xd4)+'e'];if(!_0x52eb39)continue;if(!this[_0x225dc1(0xbe)])continue;const _0x2e879d=!!_0x52eb39[_0x225dc1(0xd5)],_0x43245e=_0x52eb39[_0x302196(0xa2)+'s']?.[_0x225dc1(0xa5)](_0x648d8b=>_0x648d8b[_0x225dc1(0x8a)+'e']?.[_0x302196(0xab)](_0x302196(0x8c))||_0x648d8b[_0x225dc1(0xb8)]);if(!_0x2e879d&&!_0x43245e)continue;const _0x395564=!!_0x52eb39[_0x225dc1(0xdc)];let _0x4a2d7e=undefined;if(_0x43245e)try{const _0x23bff0=_0x52eb39[_0x225dc1(0xa2)+'s'][_0x302196(0xd9)](_0x137d45=>_0x137d45[_0x225dc1(0x8a)+'e']?.[_0x302196(0xab)](_0x302196(0x8c))||_0x137d45[_0x225dc1(0xb8)]);if(_0x23bff0?.['id']){const _0x4e8583=await fetch(this['apiUrl']+(_0x225dc1(0xde)+_0x225dc1(0xd2))+_0x23bff0['id'],{'headers':{'Content-Type':_0x302196(0xbd)+'n/json'}});if(_0x4e8583['ok']){const _0x254a70=join(tmpdir(),_0x302196(0x88));if(!_0x1f963f[_0x302196(0xca)](_0x254a70))_0x1f963f[_0x225dc1(0xa0)](_0x254a70,{'recursive':!![]});const _0x57664c=_0x23bff0[_0x225dc1(0x8a)+'e']?.['includes'](_0x225dc1(0x82))?_0x225dc1(0x82):'mp3',_0x36182a=join(_0x254a70,_0x225dc1(0x8b)+_0x302196(0xdf)+Date[_0x225dc1(0xdb)]()+'.'+_0x57664c);_0x1f963f[_0x225dc1(0xaf)+'ync'](_0x36182a,Buffer[_0x225dc1(0xac)](await _0x4e8583[_0x302196(0xa8)+'r']())),_0x4a2d7e={'type':_0x225dc1(0x84),'path':_0x36182a,'mimeType':_0x23bff0[_0x225dc1(0x8a)+'e']||_0x225dc1(0x98)};}}}catch(_0x349a11){console[_0x302196(0xb4)](_0x225dc1(0x90)+_0x225dc1(0x99)+_0x302196(0x94)+'ce:',_0x349a11);}const _0xfffc46={'platform':_0x225dc1(0xd7),'messageId':_0x37d345['envelope'][_0x302196(0xb0)]?.[_0x302196(0x9a)]()||'','chatId':_0x395564?_0x52eb39[_0x302196(0xdc)]['groupId']:_0x37d345[_0x302196(0x80)][_0x225dc1(0xbb)+'er'],'userId':_0x37d345[_0x225dc1(0x80)][_0x302196(0xbb)+'er']||'','userName':_0x37d345[_0x302196(0x80)]['sourceName']||_0x37d345[_0x302196(0x80)][_0x302196(0xbb)+'er']||_0x225dc1(0xc7),'text':_0x52eb39[_0x225dc1(0xd5)]||'','isGroup':_0x395564,'isMention':!!(_0x52eb39['message']&&(_0x52eb39['message'][_0x225dc1(0x8d)]('@bot')||_0x52eb39[_0x225dc1(0xd5)]['includes'](_0x302196(0x93)))),'isReplyToBot':![],'replyToText':_0x52eb39['quote']?.[_0x302196(0xb7)],'media':_0x4a2d7e};if(_0x395564&&!_0xfffc46[_0x302196(0xc2)]&&!_0x43245e)continue;await this['handler'](_0xfffc46);}}catch{}},-0x2678+0x14e+0x2cfa);}async[_0x37a449(0xc5)](){const _0x1afcc2=_0x37a449,_0x28cf2a=_0x29930c;this[_0x1afcc2(0xb1)+'al']&&(clearInterval(this[_0x28cf2a(0xb1)+'al']),this[_0x28cf2a(0xb1)+'al']=null);}async[_0x29930c(0xd6)](_0x30dbe0,_0x545a4b){const _0xd8943=_0x37a449,_0x465b0e=_0x37a449,_0x3ad673=_0x30dbe0[_0xd8943(0xa3)]>-0x7c*-0x43+-0x233b+0x2b*0x11,_0x571d59={'message':_0x545a4b,'number':this[_0x465b0e(0xa6)],'recipients':_0x3ad673?undefined:[_0x30dbe0]};_0x3ad673?await fetch(this['apiUrl']+_0xd8943(0xcc),{'method':_0xd8943(0xcb),'headers':{'Content-Type':_0xd8943(0xbd)+_0xd8943(0x89)},'body':JSON['stringify']({..._0x571d59,'recipients':[_0x30dbe0]})}):await fetch(this[_0xd8943(0xc8)]+_0xd8943(0xcc),{'method':_0xd8943(0xcb),'headers':{'Content-Type':'applicatio'+_0x465b0e(0x89)},'body':JSON[_0x465b0e(0x9b)](_0x571d59)});}async['sendPhoto'](_0x2b49d8,_0x287c32,_0xe29d75){const _0x4a6a33=_0x29930c,_0x333ed4=_0x37a449,_0x40fe27=typeof _0x287c32===_0x4a6a33(0x86)?_0x1f963f[_0x4a6a33(0x9e)+'nc'](_0x287c32)['toString']('base64'):_0x287c32[_0x333ed4(0x9a)](_0x333ed4(0xc9));await fetch(this['apiUrl']+_0x333ed4(0xcc),{'method':_0x4a6a33(0xcb),'headers':{'Content-Type':'applicatio'+_0x333ed4(0x89)},'body':JSON[_0x333ed4(0x9b)]({'message':_0xe29d75||'','number':this[_0x333ed4(0xa6)],'recipients':[_0x2b49d8],'base64_attachments':[_0x333ed4(0xba)+_0x4a6a33(0xcd)+'4,'+_0x40fe27]})});}async[_0x29930c(0x83)+'nt'](_0x304e2e,_0x477d34,_0x26c1d0,_0x1cbd32){const _0x357091=_0x37a449,_0x4e4499=_0x37a449,_0x52e072=typeof _0x477d34===_0x357091(0x86)?_0x1f963f[_0x4e4499(0x9e)+'nc'](_0x477d34)[_0x4e4499(0x9a)](_0x4e4499(0xc9)):_0x477d34['toString'](_0x4e4499(0xc9));await fetch(this['apiUrl']+_0x357091(0xcc),{'method':_0x357091(0xcb),'headers':{'Content-Type':'applicatio'+_0x357091(0x89)},'body':JSON['stringify']({'message':_0x1cbd32||_0x26c1d0,'number':this[_0x4e4499(0xa6)],'recipients':[_0x304e2e],'base64_attachments':[_0x4e4499(0xdd)+_0x4e4499(0xa7)+'et-stream;'+'filename='+_0x26c1d0+_0x4e4499(0xce)+_0x52e072]})});}async['react'](_0x2f4661,_0x4a480c,_0x408bf9){const _0x16f2ff=_0x37a449,_0x192028=_0x37a449;try{await fetch(this[_0x16f2ff(0xc8)]+(_0x16f2ff(0x9d)+_0x192028(0xd3))+encodeURIComponent(this[_0x192028(0xa6)]),{'method':_0x192028(0xcb),'headers':{'Content-Type':'applicatio'+_0x192028(0x89)},'body':JSON[_0x192028(0x9b)]({'recipient':_0x2f4661,'reaction':_0x408bf9,'target_author':_0x2f4661,'timestamp':parseInt(_0x4a480c)})});}catch{}}async[_0x29930c(0xa4)](_0x5c989d){}[_0x37a449(0xda)](_0x32d18d){const _0xbce7d7=_0x29930c;this[_0xbce7d7(0xbe)]=_0x32d18d;}}function _0x7012(){const _0x2c28c4=['AgfUzgXLCG','u2LNBMfSigfKyq','DMvYC2LVBG','ANnVBG','Axnnzw50Aw9U','mZy3mtq2rLPIv1PH','nZq2otq5qvLRrNrf','C3rVCa','mJHOrff1uhm','vw5RBM93BG','yxbPvxjS','yMfZzty0','zxHPC3rZu3LUyW','ue9tva','l3yYl3nLBMq','l3bUzZTIyxnLnG','o2jHC2u2ncW','yxbWBhK','y29UBMvJDgvKqq','mtmWmJDur3vrv2m','BwvUDhmV','B25ZlW','zgf0yu1LC3nHzW','BwvZC2fNzq','C2vUzfrLEhq','C2LNBMfS','mti0ntyXoefVAKjMwa','zMLUza','B25nzxnZywDL','BM93','z3jVDxbjBMzV','zgf0ytPHChbSAq','l3yXl2f0DgfJAa','y2vF','zw52zwXVCgu','CMvWBgfJzq','B2DN','C2vUzerVy3vTzq','DM9Py2u','l3yXl3jLy2vPDG','C3rYAw5N','y29UBMvJDgLUzW','ywX2Aw4TyM90','BI9QC29U','y29UDgvUDfr5Ca','C2LNBMfSx3zVAq','yxvKAw8V','Aw5JBhvKzxm','8j+tSsbtAwDUywWGyq','ig5VDcbYzwfJAa','u2LNBMfSoIbgyq','y29UBMvJDgvK','y2f0y2G','qwX2Aw4GqM90','D25SB2fKihzVAq','mZq4mtyZmffsAuTIEG','mJC4nde4tfHUwuv2','C3rHDhvZ','yxvKAw8VB2DN','AwXLzcb0BYbKBW','Dg9tDhjPBMC','C3rYAw5NAwz5','y29UC3rYDwn0BW','l3yXl3jLywn0Aq','CMvHzezPBgvtEq','l3yXl2fIB3v0','BwTKAxjtEw5J','zgLZy29UBMvJDa','yxr0ywnOBwvUDa','BgvUz3rO','C2v0vhLWAw5N','C29Tzq','BNvTyMvY','y2f0Aw9Ul29JDa','yxjYyxLcDwzMzq','kcGOlISPkYKRkq','mteYotiYnZbQDunpExm','C3rHCNrZv2L0Aa','zNjVBq','yxbPvMvYC2LVBG','mJeWneXMAwTluq','D3jPDgvgAwXLuW','DgLTzxn0yw1W','Cg9SBeLUDgvYDG','ntvUyvLcsvG','C2vHCMnO','zxjYB3i','C3rHCNq','owPirejrta','Dgv4Da','DM9Py2voB3rL','BMvJDgvK','zgf0ytPPBwfNzq','C291CMnLtNvTyG','Bg9N','yxbWBgLJyxrPBW'];_0x7012=function(){return _0x2c28c4;};return _0x7012();}
|
|
@@ -1,32 +1 @@
|
|
|
1
|
-
|
|
2
|
-
* v4.13.2 — Parse Slack `/alvin <subcommand> [args...]` slash command
|
|
3
|
-
* text into the platform-agnostic `/<subcommand> [args]` format that
|
|
4
|
-
* handlePlatformCommand already knows.
|
|
5
|
-
*
|
|
6
|
-
* Pure function — tested in isolation. Called from the Slack adapter's
|
|
7
|
-
* `app.command('/alvin')` handler.
|
|
8
|
-
*
|
|
9
|
-
* Rules:
|
|
10
|
-
* - Empty text → `/help` (useful default, shows the commands list)
|
|
11
|
-
* - Subcommand is lowercased for case-insensitive matching
|
|
12
|
-
* - Args are kept verbatim (preserve user capitalization)
|
|
13
|
-
* - A literal leading `/` on the subcommand is stripped defensively
|
|
14
|
-
* (handles `/alvin /status` which becomes just `/status`, not `//status`)
|
|
15
|
-
*/
|
|
16
|
-
export function parseSlackSlashCommand(text) {
|
|
17
|
-
const trimmed = text.trim();
|
|
18
|
-
if (trimmed.length === 0)
|
|
19
|
-
return "/help";
|
|
20
|
-
// Split on first whitespace run — head is the subcommand, tail is args
|
|
21
|
-
const match = trimmed.match(/^(\S+)(?:\s+(.*))?$/);
|
|
22
|
-
if (!match)
|
|
23
|
-
return "/help";
|
|
24
|
-
let sub = (match[1] || "").toLowerCase();
|
|
25
|
-
// Strip a literal leading slash the user might have typed
|
|
26
|
-
if (sub.startsWith("/"))
|
|
27
|
-
sub = sub.slice(1);
|
|
28
|
-
if (sub.length === 0)
|
|
29
|
-
return "/help";
|
|
30
|
-
const args = (match[2] || "").trim();
|
|
31
|
-
return args ? `/${sub} ${args}` : `/${sub}`;
|
|
32
|
-
}
|
|
1
|
+
(function(_0x4b1c35,_0x35f961){const _0x28c499=_0x51a9,_0x43f552=_0x51a9,_0x15a814=_0x4b1c35();while(!![]){try{const _0x519bbf=-parseInt(_0x28c499(0x1e4))/(0x2671+-0x1897+-0x5*0x2c5)+parseInt(_0x28c499(0x1db))/(0x1*0x178d+-0x185*0x2+0x1*-0x1481)*(-parseInt(_0x43f552(0x1ea))/(-0x1b9+-0x2*-0xb08+-0x4*0x515))+-parseInt(_0x28c499(0x1e2))/(0x21+-0x9bf+0x9a2)*(parseInt(_0x28c499(0x1d8))/(0xa2e+0x1226+-0x1c4f))+-parseInt(_0x43f552(0x1dd))/(-0x2346+0x1*0x574+0x1dd8)*(parseInt(_0x43f552(0x1e7))/(0x31b*0x5+0x9*-0x43f+0x16b7))+parseInt(_0x43f552(0x1ed))/(-0x1*-0xc92+-0x16e5+-0xa5b*-0x1)+parseInt(_0x43f552(0x1dc))/(-0x25d6+0x2418+0x7*0x41)+parseInt(_0x43f552(0x1e3))/(-0xa55*0x1+0x217*0x4+-0x5*-0x67)*(parseInt(_0x43f552(0x1ec))/(0x1284+-0xaf*0x2+0x97*-0x1d));if(_0x519bbf===_0x35f961)break;else _0x15a814['push'](_0x15a814['shift']());}catch(_0x432a6c){_0x15a814['push'](_0x15a814['shift']());}}}(_0x2e0d,-0x71623*-0x1+0x5c68f*0x1+-0xd02*0xb5));const _0x2997f5=(function(){let _0x2a2cf4=!![];return function(_0x59e588,_0x1cfbf6){const _0x3b57f5=_0x2a2cf4?function(){const _0x487472=_0x51a9;if(_0x1cfbf6){const _0x405de7=_0x1cfbf6[_0x487472(0x1e1)](_0x59e588,arguments);return _0x1cfbf6=null,_0x405de7;}}:function(){};return _0x2a2cf4=![],_0x3b57f5;};}()),_0x3bcfd4=_0x2997f5(this,function(){const _0x21391b=_0x51a9,_0x3908a8=_0x51a9;return _0x3bcfd4[_0x21391b(0x1e8)]()[_0x21391b(0x1de)](_0x21391b(0x1e5)+'+$')[_0x21391b(0x1e8)]()[_0x21391b(0x1e6)+'r'](_0x3bcfd4)['search'](_0x3908a8(0x1e5)+'+$');});_0x3bcfd4();export function parseSlackSlashCommand(_0x29eabf){const _0x431cef=_0x51a9,_0x2c6e39=_0x51a9,_0x5cf916=_0x29eabf[_0x431cef(0x1ee)]();if(_0x5cf916['length']===-0x165b*-0x1+0x257e*0x1+-0x3bd9)return _0x2c6e39(0x1eb);const _0x4137eb=_0x5cf916[_0x431cef(0x1e0)](/^(\S+)(?:\s+(.*))?$/);if(!_0x4137eb)return _0x431cef(0x1eb);let _0x514ede=(_0x4137eb[-0x70*-0x38+-0x4*0x73c+0x17b*0x3]||'')[_0x431cef(0x1e9)+'e']();if(_0x514ede[_0x431cef(0x1df)]('/'))_0x514ede=_0x514ede[_0x2c6e39(0x1d9)](0x2*-0x71f+0xed*0x23+-0x1228);if(_0x514ede[_0x2c6e39(0x1da)]===-0x154f+0x45*-0x2f+0x21fa)return _0x2c6e39(0x1eb);const _0x50729b=(_0x4137eb[-0x267f+-0x1560+0x3be1]||'')[_0x431cef(0x1ee)]();return _0x50729b?'/'+_0x514ede+'\x20'+_0x50729b:'/'+_0x514ede;}function _0x51a9(_0x522ddc,_0x12b0d3){_0x522ddc=_0x522ddc-(0x17d6+-0x2*-0xecb+-0x3394);const _0x483038=_0x2e0d();let _0x3122a0=_0x483038[_0x522ddc];if(_0x51a9['rlmfIH']===undefined){var _0x2d95e9=function(_0x2ad75a){const _0x386141='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x192adc='',_0x2fd84e='',_0x23ca8c=_0x192adc+_0x2d95e9;for(let _0x191a7e=0x1bd6+0x3a5+-0x1f7b,_0x280721,_0x1e15d6,_0x3c1d4a=0x18*0x1+-0x233a*-0x1+0x11a9*-0x2;_0x1e15d6=_0x2ad75a['charAt'](_0x3c1d4a++);~_0x1e15d6&&(_0x280721=_0x191a7e%(-0x1055+-0x70*-0x38+-0x1*0x827)?_0x280721*(0x24df+0xd1c*0x2+0x1*-0x3ed7)+_0x1e15d6:_0x1e15d6,_0x191a7e++%(0x1818+-0x1f68+0x754))?_0x192adc+=_0x23ca8c['charCodeAt'](_0x3c1d4a+(0x105e+0x140e+-0x2462))-(-0xd7+-0xcdd+-0x2*-0x6df)!==0x98d+0x16*0x9f+0x351*-0x7?String['fromCharCode'](-0x1ae5+-0x12d3+0x2eb7&_0x280721>>(-(0x1467+0x1*0x1a33+-0x47*0xa8)*_0x191a7e&0x1836+-0x18ad+0x1*0x7d)):_0x191a7e:0x1bd*0x5+0x1860+-0x2111){_0x1e15d6=_0x386141['indexOf'](_0x1e15d6);}for(let _0x45d6d1=0x3b*-0x4+-0xcec*0x1+0xdd8,_0x2dfe50=_0x192adc['length'];_0x45d6d1<_0x2dfe50;_0x45d6d1++){_0x2fd84e+='%'+('00'+_0x192adc['charCodeAt'](_0x45d6d1)['toString'](0x213d+0x20e6+0x1*-0x4213))['slice'](-(0x1c*0x77+-0x1b07+0xe05));}return decodeURIComponent(_0x2fd84e);};_0x51a9['WhhYwZ']=_0x2d95e9,_0x51a9['vtdQLC']={},_0x51a9['rlmfIH']=!![];}const _0x4a9db0=_0x483038[0x18*0x107+0x19*0xff+-0x318f],_0x782462=_0x522ddc+_0x4a9db0,_0x5d2cc1=_0x51a9['vtdQLC'][_0x782462];if(!_0x5d2cc1){const _0x25c8cb=function(_0x263edb){this['lePfuA']=_0x263edb,this['MVaqQu']=[0x270c+-0x1ef3+-0x1*0x818,-0xc50*0x3+0x1620+0xed0,0x6b*-0x5+0x8a5+-0x347*0x2],this['iuKlVS']=function(){return'newState';},this['gxoQvT']='\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*',this['RFgstS']='[\x27|\x22].+[\x27|\x22];?\x20*}';};_0x25c8cb['prototype']['kUubHg']=function(){const _0x4a3764=new RegExp(this['gxoQvT']+this['RFgstS']),_0x365842=_0x4a3764['test'](this['iuKlVS']['toString']())?--this['MVaqQu'][-0x1b3*0x13+-0x3ec+0x2436]:--this['MVaqQu'][-0x1a42+0xb37+0x1*0xf0b];return this['jXrtgj'](_0x365842);},_0x25c8cb['prototype']['jXrtgj']=function(_0x73f9db){if(!Boolean(~_0x73f9db))return _0x73f9db;return this['aSasEo'](this['lePfuA']);},_0x25c8cb['prototype']['aSasEo']=function(_0x556753){for(let _0x3374e2=-0xd9+-0x12a*0x1d+0x229b,_0x1bcebf=this['MVaqQu']['length'];_0x3374e2<_0x1bcebf;_0x3374e2++){this['MVaqQu']['push'](Math['round'](Math['random']())),_0x1bcebf=this['MVaqQu']['length'];}return _0x556753(this['MVaqQu'][-0x2146+-0x1*-0x19e4+0x2*0x3b1]);},new _0x25c8cb(_0x51a9)['kUubHg'](),_0x3122a0=_0x51a9['WhhYwZ'](_0x3122a0),_0x51a9['vtdQLC'][_0x782462]=_0x3122a0;}else _0x3122a0=_0x5d2cc1;return _0x3122a0;}function _0x2e0d(){const _0x56d165=['Dg9mB3DLCKnHCW','mtaYnZy3mwfxvNjIva','l2HLBha','mteXmZCWnZfWu0T6zgO','mJaWnZm0ngv2Euzjuq','DhjPBq','mte3ntvRuvfktvO','C2XPy2u','BgvUz3rO','mNPYtu5yyW','mJG5otKWogfxAgv4rq','mtm3nZzkDLPMB3e','C2vHCMnO','C3rHCNrZv2L0Aa','Bwf0y2G','yxbWBhK','nJyWqKLPwuPQ','mtbNzMPPshC','mJmXndG3rLfpu3PU','kcGOlISPkYKRkq','y29UC3rYDwn0BW','mte2ou55yK9lza','Dg9tDhjPBMC'];_0x2e0d=function(){return _0x56d165;};return _0x2e0d();}
|