@openclaw/whatsapp 2026.5.28-beta.3 → 2026.5.28

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/dist/api.js CHANGED
@@ -4,11 +4,11 @@ import { a as normalizeWhatsAppAllowFromEntries, c as normalizeWhatsAppTarget, i
4
4
  import { t as resolveWhatsAppOutboundTarget } from "./resolve-outbound-target-CcdugbDf.js";
5
5
  import "./send-C4LG-Cl6.js";
6
6
  import { c as assertWebChannel, d as markdownToWhatsApp, f as resolveJidToE164, l as isSelfChatMode, m as toWhatsappJidWithLid, n as normalizeE164, p as toWhatsappJid, r as resolveUserPath, u as jidToE164 } from "./text-runtime-Dk37KYHj.js";
7
- import { n as WHATSAPP_LEGACY_OUTBOUND_SEND_DEP_KEYS, t as whatsappPlugin } from "./channel-CeSu_mqS.js";
7
+ import { n as WHATSAPP_LEGACY_OUTBOUND_SEND_DEP_KEYS, t as whatsappPlugin } from "./channel-D3y4A5Dd.js";
8
8
  import { t as whatsappCommandPolicy } from "./command-policy-BIOSHySD.js";
9
- import { a as resolveWhatsAppGroupRequireMention, o as resolveWhatsAppGroupToolPolicy, s as resolveWhatsAppGroupIntroHint } from "./setup-core-C2os03mR.js";
9
+ import { a as resolveWhatsAppGroupRequireMention, o as resolveWhatsAppGroupToolPolicy, s as resolveWhatsAppGroupIntroHint } from "./setup-core-DpfT4K-2.js";
10
10
  import "./config-schema-CsNDlDpL.js";
11
- import { t as whatsappSetupPlugin } from "./channel.setup-BNqtW-u1.js";
11
+ import { t as whatsappSetupPlugin } from "./channel.setup-BJQyTUUP.js";
12
12
  import { t as DEFAULT_WEB_MEDIA_BYTES } from "./constants-HU41RHGI.js";
13
13
  import { n as listWhatsAppDirectoryGroupsFromConfig, r as listWhatsAppDirectoryPeersFromConfig } from "./directory-config-Dijefxc3.js";
14
14
  import { n as testing } from "./access-control-Z0fYaWrx.js";
@@ -9,7 +9,7 @@ import { p as toWhatsappJid } from "./text-runtime-Dk37KYHj.js";
9
9
  import { t as createWhatsAppLoginTool } from "./agent-tools-login-BX7eHgDm.js";
10
10
  import { i as lookupInboundMessageMetaForTarget } from "./quoted-message-CveINB35.js";
11
11
  import { t as whatsappCommandPolicy } from "./command-policy-BIOSHySD.js";
12
- import { a as resolveWhatsAppGroupRequireMention, c as resolveWhatsAppMentionStripRegexes, i as whatsappSetupWizardProxy, l as formatWhatsAppConfigAllowFromEntries, n as createWhatsAppPluginBase, o as resolveWhatsAppGroupToolPolicy, r as loadWhatsAppChannelRuntime, s as resolveWhatsAppGroupIntroHint, t as whatsappSetupAdapter } from "./setup-core-C2os03mR.js";
12
+ import { a as resolveWhatsAppGroupRequireMention, c as resolveWhatsAppMentionStripRegexes, i as whatsappSetupWizardProxy, l as formatWhatsAppConfigAllowFromEntries, n as createWhatsAppPluginBase, o as resolveWhatsAppGroupToolPolicy, r as loadWhatsAppChannelRuntime, s as resolveWhatsAppGroupIntroHint, t as whatsappSetupAdapter } from "./setup-core-DpfT4K-2.js";
13
13
  import { f as readWebAuthExistsForDecision, n as WHATSAPP_AUTH_UNSTABLE_CODE } from "./auth-store-BrKb0mwT.js";
14
14
  import { t as detectWhatsAppLegacyStateMigrations } from "./state-migrations-D_BmQUR9.js";
15
15
  import { createActionGate as createActionGate$1 } from "openclaw/plugin-sdk/channel-actions";
@@ -1,2 +1,2 @@
1
- import { t as whatsappPlugin } from "./channel-CeSu_mqS.js";
1
+ import { t as whatsappPlugin } from "./channel-D3y4A5Dd.js";
2
2
  export { whatsappPlugin };
@@ -1,9 +1,9 @@
1
1
  import { startWebLoginWithQr as startWebLoginWithQr$1, waitForWebLogin as waitForWebLogin$1 } from "./login-qr-runtime.js";
2
2
  import { c as logoutWeb$1, d as readWebAuthExistsBestEffort$1, f as readWebAuthExistsForDecision$1, g as readWebSelfId$1, h as readWebAuthState$1, m as readWebAuthSnapshotBestEffort$1, o as getWebAuthAgeMs$1, p as readWebAuthSnapshot$1, s as logWebSelfId$1, x as webAuthExists$1 } from "./auth-store-BrKb0mwT.js";
3
3
  import { t as getActiveWebListener$1 } from "./active-listener-CFwkn3ho.js";
4
- import { t as monitorWebChannel$1 } from "./monitor-CzL4sZSN.js";
5
- import { t as loginWeb$1 } from "./login-1yyBrXTL.js";
6
- import { whatsappSetupWizard as whatsappSetupWizard$1 } from "./setup-surface-BOhQVZqy.js";
4
+ import { t as monitorWebChannel$1 } from "./monitor-Ccph7Y8M.js";
5
+ import { t as loginWeb$1 } from "./login-CE4UYnyO.js";
6
+ import { whatsappSetupWizard as whatsappSetupWizard$1 } from "./setup-surface-DRsmp0ZS.js";
7
7
  //#region extensions/whatsapp/src/channel.runtime.ts
8
8
  function getActiveWebListener(...args) {
9
9
  return getActiveWebListener$1(...args);
@@ -1,5 +1,5 @@
1
1
  import "./accounts-BMGM1RtF.js";
2
- import { a as resolveWhatsAppGroupRequireMention, i as whatsappSetupWizardProxy, n as createWhatsAppPluginBase, o as resolveWhatsAppGroupToolPolicy, s as resolveWhatsAppGroupIntroHint, t as whatsappSetupAdapter } from "./setup-core-C2os03mR.js";
2
+ import { a as resolveWhatsAppGroupRequireMention, i as whatsappSetupWizardProxy, n as createWhatsAppPluginBase, o as resolveWhatsAppGroupToolPolicy, s as resolveWhatsAppGroupIntroHint, t as whatsappSetupAdapter } from "./setup-core-DpfT4K-2.js";
3
3
  import { t as detectWhatsAppLegacyStateMigrations } from "./state-migrations-D_BmQUR9.js";
4
4
  //#region extensions/whatsapp/src/channel.setup.ts
5
5
  async function isWhatsAppAuthConfigured(account) {
@@ -38,13 +38,24 @@ function newConnectionId() {
38
38
  //#endregion
39
39
  //#region extensions/whatsapp/src/connection-controller.ts
40
40
  const LOGGED_OUT_STATUS = DisconnectReason?.loggedOut ?? 401;
41
+ const POST_PAIRING_RESTART_STATUS = 515;
42
+ const TIMED_OUT_STATUS = DisconnectReason?.timedOut ?? 408;
41
43
  const WHATSAPP_LOGIN_RESTART_MESSAGE = "WhatsApp asked for a restart after pairing (code 515); waiting for creds to save…";
44
+ const WHATSAPP_LOGIN_TIMEOUT_RESTART_MESSAGE = "WhatsApp connection timed out before login; retrying with a fresh socket…";
42
45
  const WHATSAPP_LOGGED_OUT_RELINK_MESSAGE = "WhatsApp reported the session is logged out. Cleared cached web session; please rerun openclaw channels login and scan the QR again.";
43
46
  const WHATSAPP_LOGGED_OUT_QR_MESSAGE = "WhatsApp reported the session is logged out. Cleared cached web session; please scan a new QR.";
44
47
  const WHATSAPP_WATCHDOG_TIMEOUT_ERROR = "watchdog-timeout";
45
48
  function createNeverResolvePromise() {
46
49
  return new Promise(() => {});
47
50
  }
51
+ function getLoginSocketRestartKind(statusCode) {
52
+ if (statusCode === POST_PAIRING_RESTART_STATUS) return "post-pairing";
53
+ if (statusCode === TIMED_OUT_STATUS) return "timeout";
54
+ return null;
55
+ }
56
+ function getLoginSocketRestartMessage(kind) {
57
+ return kind === "timeout" ? WHATSAPP_LOGIN_TIMEOUT_RESTART_MESSAGE : WHATSAPP_LOGIN_RESTART_MESSAGE;
58
+ }
48
59
  function createLiveConnection(params) {
49
60
  let closeResolved = false;
50
61
  let resolveClosePromise = (_reason) => {};
@@ -91,19 +102,22 @@ async function waitForWhatsAppLoginResult(params) {
91
102
  const wait = params.waitForConnection ?? waitForWaConnection;
92
103
  const createSocket = params.createSocket ?? createWaSocket;
93
104
  let currentSock = params.sock;
94
- let restarted = false;
105
+ let postPairingRestarted = false;
106
+ let timeoutRestarted = false;
95
107
  while (true) try {
96
108
  await wait(currentSock);
97
109
  return {
98
110
  outcome: "connected",
99
- restarted,
111
+ restarted: postPairingRestarted || timeoutRestarted,
100
112
  sock: currentSock
101
113
  };
102
114
  } catch (err) {
103
115
  const statusCode = getStatusCode(err);
104
- if (statusCode === 515 && !restarted) {
105
- restarted = true;
106
- params.runtime.log(info(WHATSAPP_LOGIN_RESTART_MESSAGE));
116
+ const restartKind = getLoginSocketRestartKind(statusCode);
117
+ if (restartKind && (restartKind === "post-pairing" && !postPairingRestarted || restartKind === "timeout" && !timeoutRestarted)) {
118
+ if (restartKind === "post-pairing") postPairingRestarted = true;
119
+ else timeoutRestarted = true;
120
+ params.runtime.log(info(getLoginSocketRestartMessage(restartKind)));
107
121
  closeWaSocket(currentSock);
108
122
  try {
109
123
  currentSock = await createSocket(false, params.verbose, {
@@ -2,7 +2,7 @@ import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.js";
2
2
  import { a as resolveWhatsAppAccount } from "./accounts-BMGM1RtF.js";
3
3
  import { b as restoreCredsFromBackupIfNeeded } from "./auth-store-BrKb0mwT.js";
4
4
  import { a as renderQrTerminal, i as resolveWhatsAppSocketTiming, t as createWaSocket } from "./session-D8UW2Vbn.js";
5
- import { a as closeWaSocketSoon, o as waitForWhatsAppLoginResult } from "./connection-controller-BZuzYCGM.js";
5
+ import { a as closeWaSocketSoon, o as waitForWhatsAppLoginResult } from "./connection-controller-mpPGmqGq.js";
6
6
  import { formatCliCommand } from "openclaw/plugin-sdk/cli-runtime";
7
7
  import { logInfo } from "openclaw/plugin-sdk/logging-core";
8
8
  import { danger, defaultRuntime, success } from "openclaw/plugin-sdk/runtime-env";
@@ -1,7 +1,7 @@
1
1
  import { a as resolveWhatsAppAccount } from "./accounts-BMGM1RtF.js";
2
2
  import { f as readWebAuthExistsForDecision, g as readWebSelfId, n as WHATSAPP_AUTH_UNSTABLE_CODE } from "./auth-store-BrKb0mwT.js";
3
3
  import { i as resolveWhatsAppSocketTiming, t as createWaSocket } from "./session-D8UW2Vbn.js";
4
- import { i as closeWaSocket, o as waitForWhatsAppLoginResult, t as WHATSAPP_LOGGED_OUT_QR_MESSAGE } from "./connection-controller-BZuzYCGM.js";
4
+ import { i as closeWaSocket, o as waitForWhatsAppLoginResult, t as WHATSAPP_LOGGED_OUT_QR_MESSAGE } from "./connection-controller-mpPGmqGq.js";
5
5
  import { logInfo } from "openclaw/plugin-sdk/logging-core";
6
6
  import { danger, defaultRuntime, info, success } from "openclaw/plugin-sdk/runtime-env";
7
7
  import { renderQrPngDataUrl } from "openclaw/plugin-sdk/media-runtime";
@@ -90,6 +90,7 @@ function attachLoginWaiter(accountId, login) {
90
90
  const current = activeLogins.get(accountId);
91
91
  if (!current || current.id !== login.id) return;
92
92
  const qrVersion = updateLoginQrState(current, qr);
93
+ notifyQrUpdate(current);
93
94
  renderLatestQrDataUrlInBackground({
94
95
  accountId,
95
96
  loginId: login.id,
@@ -152,7 +153,27 @@ async function waitForQrOrRecoveredLogin(params) {
152
153
  message: latest.error ? `WhatsApp login failed: ${latest.error}` : "WhatsApp login failed."
153
154
  };
154
155
  });
155
- return await Promise.race([qrResult, loginResult]);
156
+ const qrUpdateResult = params.login.qrUpdatePromise.then(() => {
157
+ const current = activeLogins.get(params.accountId);
158
+ if (current?.id !== params.login.id) return {
159
+ outcome: "failed",
160
+ message: "WhatsApp login was replaced by a newer request."
161
+ };
162
+ if (current.qr) return {
163
+ outcome: "qr",
164
+ qr: current.qr
165
+ };
166
+ if (current.connected) return { outcome: "connected" };
167
+ return {
168
+ outcome: "failed",
169
+ message: current.error ? `WhatsApp login failed: ${current.error}` : "WhatsApp QR update ended without an active QR."
170
+ };
171
+ });
172
+ return await Promise.race([
173
+ qrResult,
174
+ loginResult,
175
+ qrUpdateResult
176
+ ]);
156
177
  }
157
178
  async function startWebLoginWithQr(opts = {}) {
158
179
  const runtime = opts.runtime ?? defaultRuntime;
@@ -1,7 +1,7 @@
1
1
  //#region extensions/whatsapp/login-qr-runtime.ts
2
2
  let loginQrModulePromise = null;
3
3
  function loadLoginQrModule() {
4
- loginQrModulePromise ??= import("./login-qr-6DdwGlkz.js");
4
+ loginQrModulePromise ??= import("./login-qr-LBvhEes5.js");
5
5
  return loginQrModulePromise;
6
6
  }
7
7
  async function startWebLoginWithQr(...args) {
@@ -12,7 +12,7 @@ import { i as resolveWhatsAppInboundPolicy, r as resolveWhatsAppCommandAuthorize
12
12
  import { a as mayContainWhatsAppOutboundMention, c as describeReplyContext, d as extractLocationData, f as extractMediaPlaceholder, h as hasInboundUserContent, i as addWhatsAppOutboundMentionsToContent, l as extractContactContext, m as extractText, n as listWhatsAppSendResultMessageIds, o as resolveWhatsAppOutboundMentions, p as extractMentionedJids, r as normalizeWhatsAppSendResult, s as addWhatsAppImagePreviewFields, t as createWebSendApi, u as extractContextInfo } from "./send-api-C66vkRl9.js";
13
13
  import { i as resolveWhatsAppSocketTiming, r as waitForWaConnection, t as createWaSocket } from "./session-D8UW2Vbn.js";
14
14
  import { t as BufferJSON } from "./session.runtime-LZFdq3yb.js";
15
- import { c as computeBackoff, d as resolveReconnectPolicy, f as sleepWithAbort, l as newConnectionId, n as WHATSAPP_WATCHDOG_TIMEOUT_ERROR, r as WhatsAppConnectionController, s as DEFAULT_RECONNECT_POLICY, u as resolveHeartbeatSeconds } from "./connection-controller-BZuzYCGM.js";
15
+ import { c as computeBackoff, d as resolveReconnectPolicy, f as sleepWithAbort, l as newConnectionId, n as WHATSAPP_WATCHDOG_TIMEOUT_ERROR, r as WhatsAppConnectionController, s as DEFAULT_RECONNECT_POLICY, u as resolveHeartbeatSeconds } from "./connection-controller-mpPGmqGq.js";
16
16
  import { resolveAccountEntry } from "openclaw/plugin-sdk/account-core";
17
17
  import { normalizeLowercaseStringOrEmpty, normalizeStringEntries, uniqueStrings } from "openclaw/plugin-sdk/string-coerce-runtime";
18
18
  import { createChannelMessageReplyPipeline, createDurableInboundReceiveJournal, createMessageReceiptFromOutboundResults, deliverInboundReplyWithMessageSendContext, resolveChannelMessageSourceReplyDeliveryMode } from "openclaw/plugin-sdk/channel-outbound";
@@ -41,6 +41,7 @@ import { hasControlCommand, isControlCommandMessage, isControlCommandMessage as
41
41
  import { drainPendingDeliveries } from "openclaw/plugin-sdk/delivery-queue-runtime";
42
42
  import { DEFAULT_GROUP_HISTORY_LIMIT, buildHistoryContextFromEntries, buildInboundHistoryFromEntries, createChannelHistoryWindow } from "openclaw/plugin-sdk/reply-history";
43
43
  import { enqueueSystemEvent } from "openclaw/plugin-sdk/system-event-runtime";
44
+ import { parseStrictFiniteNumber } from "openclaw/plugin-sdk/number-runtime";
44
45
  import { createClaimableDedupe } from "openclaw/plugin-sdk/persistent-dedupe";
45
46
  import { saveMediaStream } from "openclaw/plugin-sdk/media-store";
46
47
  import { getRuntimeConfig as getRuntimeConfig$1, getRuntimeConfigSourceSnapshot } from "openclaw/plugin-sdk/runtime-config-snapshot";
@@ -262,6 +263,12 @@ const LOGGED_OUT_STATUS = DisconnectReason$1?.loggedOut ?? 401;
262
263
  const RECONNECT_IN_PROGRESS_ERROR = "no active socket - reconnection in progress";
263
264
  const GROUP_META_TTL_MS = 300 * 1e3;
264
265
  const INBOUND_CLOSE_DRAIN_TIMEOUT_MS = 5e3;
266
+ function parseWhatsAppTimestampSeconds(value) {
267
+ if (value == null) return;
268
+ if (typeof value === "string") return parseStrictFiniteNumber(value);
269
+ const parsed = Number(value);
270
+ return Number.isFinite(parsed) ? parsed : void 0;
271
+ }
265
272
  function rememberGroupMetadataCacheEntry(cache, jid, entry) {
266
273
  if (cache.has(jid)) cache.delete(jid);
267
274
  cache.set(jid, entry);
@@ -554,7 +561,8 @@ async function attachWebInboxToSocket(options) {
554
561
  groupSubject = meta.subject;
555
562
  groupParticipants = meta.participants;
556
563
  }
557
- const messageTimestampMs = msg.messageTimestamp ? Number(msg.messageTimestamp) * 1e3 : void 0;
564
+ const messageTimestampSeconds = parseWhatsAppTimestampSeconds(msg.messageTimestamp);
565
+ const messageTimestampMs = messageTimestampSeconds !== void 0 ? messageTimestampSeconds * 1e3 : void 0;
558
566
  const access = await checkInboundAccessControl({
559
567
  cfg: options.loadConfig?.() ?? options.cfg,
560
568
  accountId: options.accountId,
@@ -634,9 +642,8 @@ async function attachWebInboxToSocket(options) {
634
642
  const shouldSkipStaleAppend = (msg, upsertType) => {
635
643
  if (upsertType !== "append") return false;
636
644
  const APPEND_RECENT_GRACE_MS = 6e4;
637
- const msgTsRaw = msg.messageTimestamp;
638
- const msgTsNum = msgTsRaw != null ? Number(msgTsRaw) : NaN;
639
- return (Number.isFinite(msgTsNum) ? msgTsNum * 1e3 : 0) < connectedAtMs - APPEND_RECENT_GRACE_MS;
645
+ const msgTsSeconds = parseWhatsAppTimestampSeconds(msg.messageTimestamp);
646
+ return (msgTsSeconds !== void 0 ? msgTsSeconds * 1e3 : 0) < connectedAtMs - APPEND_RECENT_GRACE_MS;
640
647
  };
641
648
  const processDurableInboundMessage = async (msg, upsertType, receiveOrder, stored) => {
642
649
  const inbound = await normalizeInboundMessage(msg);
@@ -10,7 +10,7 @@ import { t as DEFAULT_WEB_MEDIA_BYTES } from "./constants-HU41RHGI.js";
10
10
  import { d as extractLocationData, f as extractMediaPlaceholder, l as extractContactContext, m as extractText } from "./send-api-C66vkRl9.js";
11
11
  import { n as newConnectionId, r as waitForWaConnection, t as createWaSocket } from "./session-D8UW2Vbn.js";
12
12
  import { n as resolveWebAccountId, t as getActiveWebListener } from "./active-listener-CFwkn3ho.js";
13
- import { a as loadWebMediaRaw, c as monitorWebInbox, i as loadWebMedia, l as resetWebInboundDedupe, n as LocalMediaAccessError, o as optimizeImageToJpeg, r as getDefaultLocalRoots, s as optimizeImageToPng, t as monitorWebChannel } from "./monitor-CzL4sZSN.js";
14
- import { t as loginWeb } from "./login-1yyBrXTL.js";
13
+ import { a as loadWebMediaRaw, c as monitorWebInbox, i as loadWebMedia, l as resetWebInboundDedupe, n as LocalMediaAccessError, o as optimizeImageToJpeg, r as getDefaultLocalRoots, s as optimizeImageToPng, t as monitorWebChannel } from "./monitor-Ccph7Y8M.js";
14
+ import { t as loginWeb } from "./login-CE4UYnyO.js";
15
15
  import { HEARTBEAT_PROMPT, HEARTBEAT_TOKEN, SILENT_REPLY_TOKEN, stripHeartbeatToken } from "openclaw/plugin-sdk/reply-runtime";
16
16
  export { DEFAULT_WEB_MEDIA_BYTES, HEARTBEAT_PROMPT, HEARTBEAT_TOKEN, LocalMediaAccessError, SILENT_REPLY_TOKEN, WA_WEB_AUTH_DIR, WHATSAPP_AUTH_UNSTABLE_CODE, WhatsAppAuthUnstableError, createWaSocket, createWhatsAppLoginTool, extractContactContext, extractLocationData, extractMediaPlaceholder, extractText, formatError, formatWhatsAppWebAuthStatusState, getActiveWebListener, getDefaultLocalRoots, getStatusCode, getWebAuthAgeMs, handleWhatsAppAction, hasWebCredsSync, loadWebMedia, loadWebMediaRaw, logWebSelfId, loginWeb, logoutWeb, monitorWebChannel, monitorWebInbox, newConnectionId, optimizeImageToJpeg, optimizeImageToPng, pickWebChannel, readCredsJsonRaw, readWebAuthExistsBestEffort, readWebAuthExistsForDecision, readWebAuthSnapshot, readWebAuthSnapshotBestEffort, readWebAuthState, readWebSelfId, readWebSelfIdentity, readWebSelfIdentityForDecision, resetWebInboundDedupe, resolveDefaultWebAuthDir, resolveWebAccountId, resolveWebCredsBackupPath, resolveWebCredsPath, restoreCredsFromBackupIfNeeded, sendMessageWhatsApp, sendPollWhatsApp, sendReactionWhatsApp, sendTypingWhatsApp, setWhatsAppRuntime, startWebLoginWithQr, stripHeartbeatToken, waitForCredsSaveQueue, waitForCredsSaveQueueWithTimeout, waitForWaConnection, waitForWebLogin, webAuthExists, whatsAppActionRuntime, writeCredsJsonAtomically };
@@ -99,10 +99,10 @@ async function applyWhatsAppSecurityConfigFixes(params) {
99
99
  //#region extensions/whatsapp/src/shared.ts
100
100
  const WHATSAPP_CHANNEL = "whatsapp";
101
101
  async function loadWhatsAppChannelRuntime() {
102
- return await import("./channel.runtime-S9MB6sub.js");
102
+ return await import("./channel.runtime-C228XUjs.js");
103
103
  }
104
104
  async function loadWhatsAppSetupSurface() {
105
- return await import("./setup-surface-BOhQVZqy.js");
105
+ return await import("./setup-surface-DRsmp0ZS.js");
106
106
  }
107
107
  const whatsappSetupWizardProxy = createWhatsAppSetupWizardProxy(async () => (await loadWhatsAppSetupSurface()).whatsappSetupWizard);
108
108
  const whatsappConfigAdapter = createScopedChannelConfigAdapter({
@@ -2,7 +2,7 @@ import { r as resolveDefaultWhatsAppAccountId } from "./account-ids-CB5SOWjc.js"
2
2
  import { r as hasWebCredsSync } from "./creds-files-B1kSWtBg.js";
3
3
  import { a as resolveWhatsAppAccount, o as resolveWhatsAppAuthDir } from "./accounts-BMGM1RtF.js";
4
4
  import { a as normalizeWhatsAppAllowFromEntries, o as normalizeWhatsAppAllowFromEntry } from "./normalize-target-bVWjgftN.js";
5
- import { t as whatsappSetupAdapter } from "./setup-core-C2os03mR.js";
5
+ import { t as whatsappSetupAdapter } from "./setup-core-DpfT4K-2.js";
6
6
  import { DEFAULT_ACCOUNT_ID, createSetupTranslator, splitSetupEntries } from "openclaw/plugin-sdk/setup";
7
7
  import { formatCliCommand, formatDocsLink } from "openclaw/plugin-sdk/setup-tools";
8
8
  //#region extensions/whatsapp/src/setup-finalize.ts
@@ -280,7 +280,7 @@ async function finalizeWhatsAppSetup(params) {
280
280
  message: linked ? t("wizard.whatsapp.relinkPrompt") : t("wizard.whatsapp.linkNowPrompt"),
281
281
  initialValue: !linked
282
282
  })) try {
283
- const { loginWeb } = await import("./login-1yyBrXTL.js").then((n) => n.n);
283
+ const { loginWeb } = await import("./login-CE4UYnyO.js").then((n) => n.n);
284
284
  await loginWeb(false, void 0, params.runtime, accountId);
285
285
  } catch (error) {
286
286
  params.runtime.error(`WhatsApp login failed: ${String(error)}`);
@@ -1,2 +1,2 @@
1
- import { t as whatsappSetupPlugin } from "./channel.setup-BNqtW-u1.js";
1
+ import { t as whatsappSetupPlugin } from "./channel.setup-BJQyTUUP.js";
2
2
  export { whatsappSetupPlugin };
@@ -36,7 +36,7 @@ const whatsappSetupWizard = {
36
36
  },
37
37
  resolveShouldPromptAccountIds: ({ shouldPromptAccountIds }) => shouldPromptAccountIds,
38
38
  credentials: [],
39
- finalize: async (params) => await (await import("./setup-finalize-IDTrWXtX.js")).finalizeWhatsAppSetup(params),
39
+ finalize: async (params) => await (await import("./setup-finalize-CFnxX7la.js")).finalizeWhatsAppSetup(params),
40
40
  disable: (cfg) => setSetupChannelEnabled(cfg, channel, false),
41
41
  onAccountRecorded: (accountId, options) => {
42
42
  options?.onAccountId?.(channel, accountId);
@@ -1,19 +1,19 @@
1
1
  {
2
2
  "name": "@openclaw/whatsapp",
3
- "version": "2026.5.28-beta.3",
3
+ "version": "2026.5.28",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@openclaw/whatsapp",
9
- "version": "2026.5.28-beta.3",
9
+ "version": "2026.5.28",
10
10
  "dependencies": {
11
11
  "audio-decode": "2.2.3",
12
12
  "baileys": "7.0.0-rc13",
13
13
  "typebox": "1.1.38"
14
14
  },
15
15
  "peerDependencies": {
16
- "openclaw": ">=2026.5.28-beta.3"
16
+ "openclaw": ">=2026.5.28"
17
17
  },
18
18
  "peerDependenciesMeta": {
19
19
  "openclaw": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/whatsapp",
3
- "version": "2026.5.28-beta.3",
3
+ "version": "2026.5.28",
4
4
  "description": "OpenClaw WhatsApp channel plugin for WhatsApp Web chats.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -13,7 +13,7 @@
13
13
  "typebox": "1.1.38"
14
14
  },
15
15
  "peerDependencies": {
16
- "openclaw": ">=2026.5.28-beta.3"
16
+ "openclaw": ">=2026.5.28"
17
17
  },
18
18
  "peerDependenciesMeta": {
19
19
  "openclaw": {
@@ -56,10 +56,10 @@
56
56
  "minHostVersion": ">=2026.4.25"
57
57
  },
58
58
  "compat": {
59
- "pluginApi": ">=2026.5.28-beta.3"
59
+ "pluginApi": ">=2026.5.28"
60
60
  },
61
61
  "build": {
62
- "openclawVersion": "2026.5.28-beta.3"
62
+ "openclawVersion": "2026.5.28"
63
63
  },
64
64
  "release": {
65
65
  "publishToClawHub": true,