openclaw-multi-auto 1.5.4 → 1.5.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/dist/{audio-preflight-DDBLZBdb.js → audio-preflight-5FEeDooz.js} +4 -4
  2. package/dist/{audio-transcription-runner-DZbSWT9E.js → audio-transcription-runner-B-UvoDjZ.js} +1 -1
  3. package/dist/build-info.json +3 -3
  4. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  5. package/dist/{chrome-CMU2WVFh.js → chrome-D45SyhQL.js} +8 -8
  6. package/dist/{deliver-BXVcFIHL.js → deliver-B9cys0EZ.js} +1 -1
  7. package/dist/{deliver-runtime-DTaIS-1i.js → deliver-runtime-DhaQJ0pI.js} +3 -3
  8. package/dist/{deps-send-whatsapp.runtime-CIZqFAqb.js → deps-send-whatsapp.runtime-DvTL2tzN.js} +7 -7
  9. package/dist/extensionAPI.js +6 -6
  10. package/dist/{image-BCVLo0qw.js → image-DAOPwVXi.js} +1 -1
  11. package/dist/{image-runtime-DtCKpMPZ.js → image-runtime-wlCLVvVv.js} +3 -3
  12. package/dist/{pi-embedded-CgQ_W6Xs.js → pi-embedded-DYU79yGe.js} +24 -24
  13. package/dist/{pi-embedded-helpers-CwuBTKza.js → pi-embedded-helpers-uTRAmQ4n.js} +3 -3
  14. package/dist/plugin-sdk/index.js +50 -50
  15. package/dist/{pw-ai-CmphSzHx.js → pw-ai-GcYO6HPE.js} +1 -1
  16. package/dist/{slash-dispatch.runtime-131yup2e.js → slash-dispatch.runtime-Dh053pQK.js} +6 -6
  17. package/dist/{subagent-registry-runtime-DbSf_Je6.js → subagent-registry-runtime-DSi5mnCQ.js} +6 -6
  18. package/dist/{web-MR9d7KyB.js → web-1hWJDzNA.js} +6 -6
  19. package/package.json +1 -1
  20. package/scripts/create-instance.sh +74 -3
  21. package/scripts/npm_publish.sh +1 -0
  22. package/dist/plugin-sdk/accounts-CJWOBzwB.js +0 -35
  23. package/dist/plugin-sdk/accounts-DP1-L-QS.js +0 -288
  24. package/dist/plugin-sdk/accounts-DZhWlEg3.js +0 -46
  25. package/dist/plugin-sdk/active-listener-B_sLJTXM.js +0 -50
  26. package/dist/plugin-sdk/api-key-rotation-BRE4X2tf.js +0 -181
  27. package/dist/plugin-sdk/audio-preflight-DGEUDxxR.js +0 -69
  28. package/dist/plugin-sdk/audio-transcription-runner-DkoPNPYt.js +0 -2176
  29. package/dist/plugin-sdk/audit-membership-runtime-DSBHHw7o.js +0 -58
  30. package/dist/plugin-sdk/channel-activity-F3d0yUwy.js +0 -94
  31. package/dist/plugin-sdk/channel-web-QF7EpjeP.js +0 -2256
  32. package/dist/plugin-sdk/chrome-BXoCyCkY.js +0 -2415
  33. package/dist/plugin-sdk/commands-registry-t7cXBTfN.js +0 -1125
  34. package/dist/plugin-sdk/config-BkEnz2Po.js +0 -17913
  35. package/dist/plugin-sdk/deliver-B6AG_l67.js +0 -1694
  36. package/dist/plugin-sdk/deliver-runtime-D585kJZc.js +0 -32
  37. package/dist/plugin-sdk/deps-send-discord.runtime-a_OKY2js.js +0 -23
  38. package/dist/plugin-sdk/deps-send-imessage.runtime-Baxy9TD4.js +0 -22
  39. package/dist/plugin-sdk/deps-send-signal.runtime-BwXoCrFl.js +0 -21
  40. package/dist/plugin-sdk/deps-send-slack.runtime-CLmKjgso.js +0 -19
  41. package/dist/plugin-sdk/deps-send-telegram.runtime-BKfdBKnZ.js +0 -24
  42. package/dist/plugin-sdk/deps-send-whatsapp.runtime-BOTwkbx_.js +0 -57
  43. package/dist/plugin-sdk/diagnostic-CsP-lEkI.js +0 -319
  44. package/dist/plugin-sdk/errors-DaiAM-yU.js +0 -54
  45. package/dist/plugin-sdk/fetch-guard-DETCcJzQ.js +0 -156
  46. package/dist/plugin-sdk/fs-safe-B8y811FR.js +0 -352
  47. package/dist/plugin-sdk/image-DjTEkYZE.js +0 -2310
  48. package/dist/plugin-sdk/image-ops-BSiMpAw4.js +0 -584
  49. package/dist/plugin-sdk/image-runtime-6xPp8m5a.js +0 -25
  50. package/dist/plugin-sdk/ir-DQ7_HbvK.js +0 -1296
  51. package/dist/plugin-sdk/local-roots-BUP4YBmR.js +0 -186
  52. package/dist/plugin-sdk/logger-CZY9KIoY.js +0 -1163
  53. package/dist/plugin-sdk/login-BxEKLlCo.js +0 -57
  54. package/dist/plugin-sdk/login-qr-BQIpMPr9.js +0 -320
  55. package/dist/plugin-sdk/manager-I6KbPihW.js +0 -3917
  56. package/dist/plugin-sdk/manager-runtime-CFfYYWIQ.js +0 -15
  57. package/dist/plugin-sdk/outbound-NS6UHnB6.js +0 -212
  58. package/dist/plugin-sdk/outbound-attachment-Dy6fyf6H.js +0 -19
  59. package/dist/plugin-sdk/path-alias-guards-DBjLbIX_.js +0 -43
  60. package/dist/plugin-sdk/paths-vTM3Lh3X.js +0 -166
  61. package/dist/plugin-sdk/pi-embedded-helpers-1R1gu7eX.js +0 -9627
  62. package/dist/plugin-sdk/pi-model-discovery-runtime-Do9o-dUd.js +0 -8
  63. package/dist/plugin-sdk/pi-model-discovery-v-XPUOOf.js +0 -134
  64. package/dist/plugin-sdk/pi-tools.before-tool-call.runtime-D4sFsIks.js +0 -354
  65. package/dist/plugin-sdk/plugins-DeBZB9l_.js +0 -864
  66. package/dist/plugin-sdk/proxy-fetch-ChxOhWF4.js +0 -38
  67. package/dist/plugin-sdk/pw-ai-DEOmCSSC.js +0 -1938
  68. package/dist/plugin-sdk/qmd-manager-HyYKoEch.js +0 -1448
  69. package/dist/plugin-sdk/query-expansion-CeyKUeDW.js +0 -1011
  70. package/dist/plugin-sdk/redact-DjVX-1N3.js +0 -319
  71. package/dist/plugin-sdk/reply-DAo_Jt8K.js +0 -97916
  72. package/dist/plugin-sdk/resolve-outbound-target-B42qgQS9.js +0 -40
  73. package/dist/plugin-sdk/run-with-concurrency-Bt_ks0Qa.js +0 -1994
  74. package/dist/plugin-sdk/runtime-whatsapp-login.runtime-B6W989eF.js +0 -10
  75. package/dist/plugin-sdk/runtime-whatsapp-outbound.runtime-c_GDFy37.js +0 -19
  76. package/dist/plugin-sdk/send-CQpMudwO.js +0 -2587
  77. package/dist/plugin-sdk/send-DQHLzVyO.js +0 -414
  78. package/dist/plugin-sdk/send-DTB24bEF.js +0 -3135
  79. package/dist/plugin-sdk/send-DfHadjZ_.js +0 -503
  80. package/dist/plugin-sdk/send-XXlW2iny.js +0 -540
  81. package/dist/plugin-sdk/session-6TF6MyaC.js +0 -169
  82. package/dist/plugin-sdk/skill-commands-CkGeFUMl.js +0 -342
  83. package/dist/plugin-sdk/skills-CBkHBYPq.js +0 -1428
  84. package/dist/plugin-sdk/slash-commands.runtime-CxliuGaP.js +0 -13
  85. package/dist/plugin-sdk/slash-dispatch.runtime-DFaeYlJQ.js +0 -52
  86. package/dist/plugin-sdk/slash-skill-commands.runtime-0M0OLCxq.js +0 -16
  87. package/dist/plugin-sdk/ssrf-cFtplYtS.js +0 -202
  88. package/dist/plugin-sdk/store-5nyxY3WU.js +0 -81
  89. package/dist/plugin-sdk/subagent-registry-runtime-DCtmDwna.js +0 -52
  90. package/dist/plugin-sdk/tables-C47P4GTN.js +0 -55
  91. package/dist/plugin-sdk/target-errors-Blia4S69.js +0 -195
  92. package/dist/plugin-sdk/thinking-Bo2eosVa.js +0 -1206
  93. package/dist/plugin-sdk/tokens-DgNRBwIg.js +0 -52
  94. package/dist/plugin-sdk/tool-images-Gk_-0y2N.js +0 -274
  95. package/dist/plugin-sdk/web-CVxZbXyH.js +0 -56
  96. package/dist/plugin-sdk/whatsapp-actions-Bw0H9g-n.js +0 -80
@@ -1,57 +0,0 @@
1
- import { i as resolveWhatsAppAccount, l as logoutWeb } from "./accounts-DP1-L-QS.js";
2
- import { Pr as formatCliCommand, n as loadConfig } from "./config-BkEnz2Po.js";
3
- import { B as success, F as danger, I as info, c as defaultRuntime, r as logInfo } from "./logger-CZY9KIoY.js";
4
- import { i as waitForWaConnection, n as formatError, t as createWaSocket } from "./session-6TF6MyaC.js";
5
- import { DisconnectReason } from "@whiskeysockets/baileys";
6
-
7
- //#region src/web/login.ts
8
- async function loginWeb(verbose, waitForConnection, runtime = defaultRuntime, accountId) {
9
- const wait = waitForConnection ?? waitForWaConnection;
10
- const account = resolveWhatsAppAccount({
11
- cfg: loadConfig(),
12
- accountId
13
- });
14
- const sock = await createWaSocket(true, verbose, { authDir: account.authDir });
15
- logInfo("Waiting for WhatsApp connection...", runtime);
16
- try {
17
- await wait(sock);
18
- console.log(success("✅ Linked! Credentials saved for future sends."));
19
- } catch (err) {
20
- const code = err?.error?.output?.statusCode ?? err?.output?.statusCode;
21
- if (code === 515) {
22
- console.log(info("WhatsApp asked for a restart after pairing (code 515); creds are saved. Restarting connection once…"));
23
- try {
24
- sock.ws?.close();
25
- } catch {}
26
- const retry = await createWaSocket(false, verbose, { authDir: account.authDir });
27
- try {
28
- await wait(retry);
29
- console.log(success("✅ Linked after restart; web session ready."));
30
- return;
31
- } finally {
32
- setTimeout(() => retry.ws?.close(), 500);
33
- }
34
- }
35
- if (code === DisconnectReason.loggedOut) {
36
- await logoutWeb({
37
- authDir: account.authDir,
38
- isLegacyAuthDir: account.isLegacyAuthDir,
39
- runtime
40
- });
41
- console.error(danger(`WhatsApp reported the session is logged out. Cleared cached web session; please rerun ${formatCliCommand("openclaw channels login")} and scan the QR again.`));
42
- throw new Error("Session logged out; cache cleared. Re-run login.", { cause: err });
43
- }
44
- const formatted = formatError(err);
45
- console.error(danger(`WhatsApp Web connection ended before fully opening. ${formatted}`));
46
- throw new Error(formatted, { cause: err });
47
- } finally {
48
- setTimeout(() => {
49
- try {
50
- sock.ws?.close();
51
- } catch {}
52
- }, 500);
53
- }
54
- }
55
-
56
- //#endregion
57
- export { loginWeb as t };
@@ -1,320 +0,0 @@
1
- import "./run-with-concurrency-Bt_ks0Qa.js";
2
- import { _ as webAuthExists, i as resolveWhatsAppAccount, l as logoutWeb, p as readWebSelfId } from "./accounts-DP1-L-QS.js";
3
- import "./paths-MKyEVmEb.js";
4
- import "./github-copilot-token-D5fdS6xD.js";
5
- import { n as loadConfig } from "./config-BkEnz2Po.js";
6
- import { B as success, F as danger, I as info, c as defaultRuntime, r as logInfo } from "./logger-CZY9KIoY.js";
7
- import { i as waitForWaConnection, n as formatError, r as getStatusCode, t as createWaSocket } from "./session-6TF6MyaC.js";
8
- import { randomUUID } from "node:crypto";
9
- import { DisconnectReason } from "@whiskeysockets/baileys";
10
- import QRCodeModule from "qrcode-terminal/vendor/QRCode/index.js";
11
- import QRErrorCorrectLevelModule from "qrcode-terminal/vendor/QRCode/QRErrorCorrectLevel.js";
12
- import { deflateSync } from "node:zlib";
13
-
14
- //#region src/media/png-encode.ts
15
- /**
16
- * Minimal PNG encoder for generating simple RGBA images without native dependencies.
17
- * Used for QR codes, live probes, and other programmatic image generation.
18
- */
19
- const CRC_TABLE = (() => {
20
- const table = new Uint32Array(256);
21
- for (let i = 0; i < 256; i += 1) {
22
- let c = i;
23
- for (let k = 0; k < 8; k += 1) c = c & 1 ? 3988292384 ^ c >>> 1 : c >>> 1;
24
- table[i] = c >>> 0;
25
- }
26
- return table;
27
- })();
28
- /** Compute CRC32 checksum for a buffer (used in PNG chunk encoding). */
29
- function crc32(buf) {
30
- let crc = 4294967295;
31
- for (let i = 0; i < buf.length; i += 1) crc = CRC_TABLE[(crc ^ buf[i]) & 255] ^ crc >>> 8;
32
- return (crc ^ 4294967295) >>> 0;
33
- }
34
- /** Create a PNG chunk with type, data, and CRC. */
35
- function pngChunk(type, data) {
36
- const typeBuf = Buffer.from(type, "ascii");
37
- const len = Buffer.alloc(4);
38
- len.writeUInt32BE(data.length, 0);
39
- const crc = crc32(Buffer.concat([typeBuf, data]));
40
- const crcBuf = Buffer.alloc(4);
41
- crcBuf.writeUInt32BE(crc, 0);
42
- return Buffer.concat([
43
- len,
44
- typeBuf,
45
- data,
46
- crcBuf
47
- ]);
48
- }
49
- /** Write a pixel to an RGBA buffer. Ignores out-of-bounds writes. */
50
- function fillPixel(buf, x, y, width, r, g, b, a = 255) {
51
- if (x < 0 || y < 0 || x >= width) return;
52
- const idx = (y * width + x) * 4;
53
- if (idx < 0 || idx + 3 >= buf.length) return;
54
- buf[idx] = r;
55
- buf[idx + 1] = g;
56
- buf[idx + 2] = b;
57
- buf[idx + 3] = a;
58
- }
59
- /** Encode an RGBA buffer as a PNG image. */
60
- function encodePngRgba(buffer, width, height) {
61
- const stride = width * 4;
62
- const raw = Buffer.alloc((stride + 1) * height);
63
- for (let row = 0; row < height; row += 1) {
64
- const rawOffset = row * (stride + 1);
65
- raw[rawOffset] = 0;
66
- buffer.copy(raw, rawOffset + 1, row * stride, row * stride + stride);
67
- }
68
- const compressed = deflateSync(raw);
69
- const signature = Buffer.from([
70
- 137,
71
- 80,
72
- 78,
73
- 71,
74
- 13,
75
- 10,
76
- 26,
77
- 10
78
- ]);
79
- const ihdr = Buffer.alloc(13);
80
- ihdr.writeUInt32BE(width, 0);
81
- ihdr.writeUInt32BE(height, 4);
82
- ihdr[8] = 8;
83
- ihdr[9] = 6;
84
- ihdr[10] = 0;
85
- ihdr[11] = 0;
86
- ihdr[12] = 0;
87
- return Buffer.concat([
88
- signature,
89
- pngChunk("IHDR", ihdr),
90
- pngChunk("IDAT", compressed),
91
- pngChunk("IEND", Buffer.alloc(0))
92
- ]);
93
- }
94
-
95
- //#endregion
96
- //#region src/web/qr-image.ts
97
- const QRCode = QRCodeModule;
98
- const QRErrorCorrectLevel = QRErrorCorrectLevelModule;
99
- function createQrMatrix(input) {
100
- const qr = new QRCode(-1, QRErrorCorrectLevel.L);
101
- qr.addData(input);
102
- qr.make();
103
- return qr;
104
- }
105
- async function renderQrPngBase64(input, opts = {}) {
106
- const { scale = 6, marginModules = 4 } = opts;
107
- const qr = createQrMatrix(input);
108
- const modules = qr.getModuleCount();
109
- const size = (modules + marginModules * 2) * scale;
110
- const buf = Buffer.alloc(size * size * 4, 255);
111
- for (let row = 0; row < modules; row += 1) for (let col = 0; col < modules; col += 1) {
112
- if (!qr.isDark(row, col)) continue;
113
- const startX = (col + marginModules) * scale;
114
- const startY = (row + marginModules) * scale;
115
- for (let y = 0; y < scale; y += 1) {
116
- const pixelY = startY + y;
117
- for (let x = 0; x < scale; x += 1) fillPixel(buf, startX + x, pixelY, size, 0, 0, 0, 255);
118
- }
119
- }
120
- return encodePngRgba(buf, size, size).toString("base64");
121
- }
122
-
123
- //#endregion
124
- //#region src/web/login-qr.ts
125
- const ACTIVE_LOGIN_TTL_MS = 3 * 6e4;
126
- const activeLogins = /* @__PURE__ */ new Map();
127
- function closeSocket(sock) {
128
- try {
129
- sock.ws?.close();
130
- } catch {}
131
- }
132
- async function resetActiveLogin(accountId, reason) {
133
- const login = activeLogins.get(accountId);
134
- if (login) {
135
- closeSocket(login.sock);
136
- activeLogins.delete(accountId);
137
- }
138
- if (reason) logInfo(reason);
139
- }
140
- function isLoginFresh(login) {
141
- return Date.now() - login.startedAt < ACTIVE_LOGIN_TTL_MS;
142
- }
143
- function attachLoginWaiter(accountId, login) {
144
- login.waitPromise = waitForWaConnection(login.sock).then(() => {
145
- const current = activeLogins.get(accountId);
146
- if (current?.id === login.id) current.connected = true;
147
- }).catch((err) => {
148
- const current = activeLogins.get(accountId);
149
- if (current?.id !== login.id) return;
150
- current.error = formatError(err);
151
- current.errorStatus = getStatusCode(err);
152
- });
153
- }
154
- async function restartLoginSocket(login, runtime) {
155
- if (login.restartAttempted) return false;
156
- login.restartAttempted = true;
157
- runtime.log(info("WhatsApp asked for a restart after pairing (code 515); retrying connection once…"));
158
- closeSocket(login.sock);
159
- try {
160
- login.sock = await createWaSocket(false, login.verbose, { authDir: login.authDir });
161
- login.connected = false;
162
- login.error = void 0;
163
- login.errorStatus = void 0;
164
- attachLoginWaiter(login.accountId, login);
165
- return true;
166
- } catch (err) {
167
- login.error = formatError(err);
168
- login.errorStatus = getStatusCode(err);
169
- return false;
170
- }
171
- }
172
- async function startWebLoginWithQr(opts = {}) {
173
- const runtime = opts.runtime ?? defaultRuntime;
174
- const account = resolveWhatsAppAccount({
175
- cfg: loadConfig(),
176
- accountId: opts.accountId
177
- });
178
- const hasWeb = await webAuthExists(account.authDir);
179
- const selfId = readWebSelfId(account.authDir);
180
- if (hasWeb && !opts.force) return { message: `WhatsApp is already linked (${selfId.e164 ?? selfId.jid ?? "unknown"}). Say “relink” if you want a fresh QR.` };
181
- const existing = activeLogins.get(account.accountId);
182
- if (existing && isLoginFresh(existing) && existing.qrDataUrl) return {
183
- qrDataUrl: existing.qrDataUrl,
184
- message: "QR already active. Scan it in WhatsApp → Linked Devices."
185
- };
186
- await resetActiveLogin(account.accountId);
187
- let resolveQr = null;
188
- let rejectQr = null;
189
- const qrPromise = new Promise((resolve, reject) => {
190
- resolveQr = resolve;
191
- rejectQr = reject;
192
- });
193
- const qrTimer = setTimeout(() => {
194
- rejectQr?.(/* @__PURE__ */ new Error("Timed out waiting for WhatsApp QR"));
195
- }, Math.max(opts.timeoutMs ?? 3e4, 5e3));
196
- let sock;
197
- let pendingQr = null;
198
- try {
199
- sock = await createWaSocket(false, Boolean(opts.verbose), {
200
- authDir: account.authDir,
201
- onQr: (qr) => {
202
- if (pendingQr) return;
203
- pendingQr = qr;
204
- const current = activeLogins.get(account.accountId);
205
- if (current && !current.qr) current.qr = qr;
206
- clearTimeout(qrTimer);
207
- runtime.log(info("WhatsApp QR received."));
208
- resolveQr?.(qr);
209
- }
210
- });
211
- } catch (err) {
212
- clearTimeout(qrTimer);
213
- await resetActiveLogin(account.accountId);
214
- return { message: `Failed to start WhatsApp login: ${String(err)}` };
215
- }
216
- const login = {
217
- accountId: account.accountId,
218
- authDir: account.authDir,
219
- isLegacyAuthDir: account.isLegacyAuthDir,
220
- id: randomUUID(),
221
- sock,
222
- startedAt: Date.now(),
223
- connected: false,
224
- waitPromise: Promise.resolve(),
225
- restartAttempted: false,
226
- verbose: Boolean(opts.verbose)
227
- };
228
- activeLogins.set(account.accountId, login);
229
- if (pendingQr && !login.qr) login.qr = pendingQr;
230
- attachLoginWaiter(account.accountId, login);
231
- let qr;
232
- try {
233
- qr = await qrPromise;
234
- } catch (err) {
235
- clearTimeout(qrTimer);
236
- await resetActiveLogin(account.accountId);
237
- return { message: `Failed to get QR: ${String(err)}` };
238
- }
239
- login.qrDataUrl = `data:image/png;base64,${await renderQrPngBase64(qr)}`;
240
- return {
241
- qrDataUrl: login.qrDataUrl,
242
- message: "Scan this QR in WhatsApp → Linked Devices."
243
- };
244
- }
245
- async function waitForWebLogin(opts = {}) {
246
- const runtime = opts.runtime ?? defaultRuntime;
247
- const account = resolveWhatsAppAccount({
248
- cfg: loadConfig(),
249
- accountId: opts.accountId
250
- });
251
- const activeLogin = activeLogins.get(account.accountId);
252
- if (!activeLogin) return {
253
- connected: false,
254
- message: "No active WhatsApp login in progress."
255
- };
256
- const login = activeLogin;
257
- if (!isLoginFresh(login)) {
258
- await resetActiveLogin(account.accountId);
259
- return {
260
- connected: false,
261
- message: "The login QR expired. Ask me to generate a new one."
262
- };
263
- }
264
- const timeoutMs = Math.max(opts.timeoutMs ?? 12e4, 1e3);
265
- const deadline = Date.now() + timeoutMs;
266
- while (true) {
267
- const remaining = deadline - Date.now();
268
- if (remaining <= 0) return {
269
- connected: false,
270
- message: "Still waiting for the QR scan. Let me know when you’ve scanned it."
271
- };
272
- const timeout = new Promise((resolve) => setTimeout(() => resolve("timeout"), remaining));
273
- if (await Promise.race([login.waitPromise.then(() => "done"), timeout]) === "timeout") return {
274
- connected: false,
275
- message: "Still waiting for the QR scan. Let me know when you’ve scanned it."
276
- };
277
- if (login.error) {
278
- if (login.errorStatus === DisconnectReason.loggedOut) {
279
- await logoutWeb({
280
- authDir: login.authDir,
281
- isLegacyAuthDir: login.isLegacyAuthDir,
282
- runtime
283
- });
284
- const message = "WhatsApp reported the session is logged out. Cleared cached web session; please scan a new QR.";
285
- await resetActiveLogin(account.accountId, message);
286
- runtime.log(danger(message));
287
- return {
288
- connected: false,
289
- message
290
- };
291
- }
292
- if (login.errorStatus === 515) {
293
- if (await restartLoginSocket(login, runtime) && isLoginFresh(login)) continue;
294
- }
295
- const message = `WhatsApp login failed: ${login.error}`;
296
- await resetActiveLogin(account.accountId, message);
297
- runtime.log(danger(message));
298
- return {
299
- connected: false,
300
- message
301
- };
302
- }
303
- if (login.connected) {
304
- const message = "✅ Linked! WhatsApp is ready.";
305
- runtime.log(success(message));
306
- await resetActiveLogin(account.accountId);
307
- return {
308
- connected: true,
309
- message
310
- };
311
- }
312
- return {
313
- connected: false,
314
- message: "Login ended without a connection."
315
- };
316
- }
317
- }
318
-
319
- //#endregion
320
- export { startWebLoginWithQr, waitForWebLogin };