@openclaw/whatsapp 2026.5.16-beta.3 → 2026.5.16-beta.4

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 (31) hide show
  1. package/dist/action-runtime-api.js +1 -1
  2. package/dist/{action-runtime-Dig47HuK.js → action-runtime-fgfdJlPZ.js} +2 -2
  3. package/dist/action-runtime.runtime.js +1 -1
  4. package/dist/api.js +9 -9
  5. package/dist/{channel-BG0Lv4c9.js → channel-DBm3MwQ7.js} +9 -9
  6. package/dist/channel-plugin-api.js +1 -1
  7. package/dist/{channel-react-action-Q1STHXmW.js → channel-react-action-SxUVHy5Q.js} +3 -3
  8. package/dist/{channel.runtime-ChxB8Ns0.js → channel.runtime-BrKncUJI.js} +2 -2
  9. package/dist/{channel.setup-BiyPwedi.js → channel.setup-JfQ9Dv9K.js} +1 -1
  10. package/dist/contract-api.js +2 -2
  11. package/dist/{directory-config-ClsMAYen.js → directory-config-BLFmeNGN.js} +2 -2
  12. package/dist/directory-contract-api.js +1 -1
  13. package/dist/{monitor-BVvWWOfi.js → monitor-D4UnxxWO.js} +4 -4
  14. package/dist/normalize-BZBRXai6.js +2 -0
  15. package/dist/{normalize-target-ePanEpfY.js → normalize-target-MB6Z_4Bn.js} +10 -6
  16. package/dist/{outbound-adapter-QDdZXpZB.js → outbound-adapter-C0p1kFXz.js} +4 -4
  17. package/dist/{outbound-base-Cs2ntgBb.js → outbound-base-BMgWLjp4.js} +3 -2
  18. package/dist/{outbound-media-contract-DwACmTqZ.js → outbound-media-contract-BW560jdu.js} +1 -1
  19. package/dist/outbound-payload-test-api.js +1 -1
  20. package/dist/{resolve-outbound-target-BKcv4ofn.js → resolve-outbound-target-Ba7sH80H.js} +1 -1
  21. package/dist/runtime-api.js +4 -4
  22. package/dist/{send-DG5fpuQZ.js → send-CByjzdb_.js} +18 -6
  23. package/dist/{send-api-DYiQpIng.js → send-api-BNbwVO4e.js} +12 -3
  24. package/dist/{setup-core-B5F7F8bE.js → setup-core-BFErZldJ.js} +3 -3
  25. package/dist/{setup-finalize-B62sUNjU.js → setup-finalize-CnTB-PeX.js} +2 -2
  26. package/dist/setup-plugin-api.js +1 -1
  27. package/dist/{setup-surface-7163OZHk.js → setup-surface-B5pabs1e.js} +1 -1
  28. package/dist/targets.js +1 -1
  29. package/dist/test-api.js +1 -1
  30. package/package.json +4 -4
  31. package/dist/normalize-f31evwm8.js +0 -2
@@ -1,2 +1,2 @@
1
- import { t as handleWhatsAppAction } from "./action-runtime-Dig47HuK.js";
1
+ import { t as handleWhatsAppAction } from "./action-runtime-fgfdJlPZ.js";
2
2
  export { handleWhatsAppAction };
@@ -1,7 +1,7 @@
1
1
  import { a as resolveWhatsAppAccount } from "./accounts-B4oR6Dhx.js";
2
- import { t as resolveWhatsAppOutboundTarget } from "./resolve-outbound-target-BKcv4ofn.js";
2
+ import { t as resolveWhatsAppOutboundTarget } from "./resolve-outbound-target-Ba7sH80H.js";
3
3
  import { t as resolveWhatsAppReactionLevel } from "./reaction-level-2m9sWGCw.js";
4
- import { r as sendReactionWhatsApp } from "./send-DG5fpuQZ.js";
4
+ import { r as sendReactionWhatsApp } from "./send-CByjzdb_.js";
5
5
  import { ToolAuthorizationError, createActionGate, jsonResult, readReactionParams, readStringParam } from "openclaw/plugin-sdk/channel-actions";
6
6
  //#region extensions/whatsapp/src/action-runtime-target-auth.ts
7
7
  function resolveAuthorizedWhatsAppOutboundTarget(params) {
@@ -1,2 +1,2 @@
1
- import { t as handleWhatsAppAction } from "./action-runtime-Dig47HuK.js";
1
+ import { t as handleWhatsAppAction } from "./action-runtime-fgfdJlPZ.js";
2
2
  export { handleWhatsAppAction };
package/dist/api.js CHANGED
@@ -1,20 +1,20 @@
1
1
  import { r as resolveDefaultWhatsAppAccountId, t as listAccountIds } from "./account-ids-DG18xddX.js";
2
2
  import { a as resolveWhatsAppAccount, i as listWhatsAppAuthDirs, n as hasAnyWhatsAppAuth, o as resolveWhatsAppAuthDir, r as listEnabledWhatsAppAccounts, s as resolveWhatsAppMediaMaxBytes, t as DEFAULT_WHATSAPP_MEDIA_MAX_MB } from "./accounts-B4oR6Dhx.js";
3
- import { a as normalizeWhatsAppAllowFromEntries, c as normalizeWhatsAppTarget, i as looksLikeWhatsAppTargetId, r as isWhatsAppUserTarget, s as normalizeWhatsAppMessagingTarget, t as isWhatsAppGroupJid } from "./normalize-target-ePanEpfY.js";
4
- import { t as resolveWhatsAppOutboundTarget } from "./resolve-outbound-target-BKcv4ofn.js";
3
+ import { a as normalizeWhatsAppAllowFromEntries, c as normalizeWhatsAppTarget, i as looksLikeWhatsAppTargetId, r as isWhatsAppUserTarget, s as normalizeWhatsAppMessagingTarget, t as isWhatsAppGroupJid } from "./normalize-target-MB6Z_4Bn.js";
4
+ import { t as resolveWhatsAppOutboundTarget } from "./resolve-outbound-target-Ba7sH80H.js";
5
5
  import "./reaction-level-2m9sWGCw.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-CMxQczvs.js";
7
- import "./send-DG5fpuQZ.js";
8
- import { t as whatsappPlugin } from "./channel-BG0Lv4c9.js";
9
- import { n as WHATSAPP_LEGACY_OUTBOUND_SEND_DEP_KEYS } from "./outbound-base-Cs2ntgBb.js";
7
+ import "./send-CByjzdb_.js";
8
+ import { t as whatsappPlugin } from "./channel-DBm3MwQ7.js";
9
+ import { n as WHATSAPP_LEGACY_OUTBOUND_SEND_DEP_KEYS } from "./outbound-base-BMgWLjp4.js";
10
10
  import { t as whatsappCommandPolicy } from "./command-policy-O8sRnqUV.js";
11
- import { a as resolveWhatsAppGroupRequireMention, o as resolveWhatsAppGroupToolPolicy, s as resolveWhatsAppGroupIntroHint } from "./setup-core-B5F7F8bE.js";
11
+ import { a as resolveWhatsAppGroupRequireMention, o as resolveWhatsAppGroupToolPolicy, s as resolveWhatsAppGroupIntroHint } from "./setup-core-BFErZldJ.js";
12
12
  import "./config-schema-Dmo66Ubb.js";
13
- import { t as whatsappSetupPlugin } from "./channel.setup-BiyPwedi.js";
13
+ import { t as whatsappSetupPlugin } from "./channel.setup-JfQ9Dv9K.js";
14
14
  import { t as DEFAULT_WEB_MEDIA_BYTES } from "./constants-yKXGCGU9.js";
15
- import { n as listWhatsAppDirectoryGroupsFromConfig, r as listWhatsAppDirectoryPeersFromConfig } from "./directory-config-ClsMAYen.js";
15
+ import { n as listWhatsAppDirectoryGroupsFromConfig, r as listWhatsAppDirectoryPeersFromConfig } from "./directory-config-BLFmeNGN.js";
16
16
  import { t as __testing } from "./access-control-Di_o41dj.js";
17
- import { p as extractText, t as createWebSendApi } from "./send-api-DYiQpIng.js";
17
+ import { p as extractText, t as createWebSendApi } from "./send-api-BNbwVO4e.js";
18
18
  import { r as waitForWaConnection, t as createWaSocket } from "./session-B4Rnsd-V.js";
19
19
  import "openclaw/plugin-sdk/channel-actions";
20
20
  import "openclaw/plugin-sdk/account-resolution";
@@ -1,16 +1,16 @@
1
1
  import { t as listAccountIds } from "./account-ids-DG18xddX.js";
2
2
  import { a as resolveWhatsAppAccount } from "./accounts-B4oR6Dhx.js";
3
- import { c as normalizeWhatsAppTarget, i as looksLikeWhatsAppTargetId, n as isWhatsAppNewsletterJid, o as normalizeWhatsAppAllowFromEntry, s as normalizeWhatsAppMessagingTarget, t as isWhatsAppGroupJid } from "./normalize-target-ePanEpfY.js";
4
- import { t as resolveWhatsAppOutboundTarget } from "./resolve-outbound-target-BKcv4ofn.js";
3
+ import { c as normalizeWhatsAppTarget, i as looksLikeWhatsAppTargetId, n as isWhatsAppNewsletterJid, o as normalizeWhatsAppAllowFromEntry, s as normalizeWhatsAppMessagingTarget, t as isWhatsAppGroupJid } from "./normalize-target-MB6Z_4Bn.js";
4
+ import { t as resolveWhatsAppOutboundTarget } from "./resolve-outbound-target-Ba7sH80H.js";
5
5
  import { t as resolveWhatsAppReactionLevel } from "./reaction-level-2m9sWGCw.js";
6
- import "./normalize-f31evwm8.js";
7
- import { r as normalizeWhatsAppPayloadTextPreservingIndentation } from "./outbound-media-contract-DwACmTqZ.js";
8
- import { i as sendTypingWhatsApp, n as sendPollWhatsApp, t as sendMessageWhatsApp } from "./send-DG5fpuQZ.js";
6
+ import "./normalize-BZBRXai6.js";
7
+ import { r as normalizeWhatsAppPayloadTextPreservingIndentation } from "./outbound-media-contract-BW560jdu.js";
8
+ import { i as sendTypingWhatsApp, n as sendPollWhatsApp, t as sendMessageWhatsApp } from "./send-CByjzdb_.js";
9
9
  import { t as createWhatsAppLoginTool } from "./agent-tools-login-DpRxLNRB.js";
10
- import { t as createWhatsAppOutboundBase } from "./outbound-base-Cs2ntgBb.js";
10
+ import { t as createWhatsAppOutboundBase } from "./outbound-base-BMgWLjp4.js";
11
11
  import { t as getWhatsAppRuntime } from "./runtime-6fZ67abR.js";
12
12
  import { t as whatsappCommandPolicy } from "./command-policy-O8sRnqUV.js";
13
- 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-B5F7F8bE.js";
13
+ 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-BFErZldJ.js";
14
14
  import { d as readWebAuthExistsForDecision, n as WHATSAPP_AUTH_UNSTABLE_CODE } from "./auth-store-Cr3tg0Jm.js";
15
15
  import { t as detectWhatsAppLegacyStateMigrations } from "./state-migrations-CtdIArlK.js";
16
16
  import { createActionGate as createActionGate$1 } from "openclaw/plugin-sdk/channel-actions";
@@ -321,8 +321,8 @@ function collectWhatsAppStatusIssues(accounts) {
321
321
  }
322
322
  //#endregion
323
323
  //#region extensions/whatsapp/src/channel.ts
324
- const loadWhatsAppDirectoryConfig = createLazyRuntimeModule(() => import("./directory-config-ClsMAYen.js").then((n) => n.t));
325
- const loadWhatsAppChannelReactAction = createLazyRuntimeModule(() => import("./channel-react-action-Q1STHXmW.js"));
324
+ const loadWhatsAppDirectoryConfig = createLazyRuntimeModule(() => import("./directory-config-BLFmeNGN.js").then((n) => n.t));
325
+ const loadWhatsAppChannelReactAction = createLazyRuntimeModule(() => import("./channel-react-action-SxUVHy5Q.js"));
326
326
  function parseWhatsAppExplicitTarget(raw) {
327
327
  const normalized = normalizeWhatsAppTarget(raw);
328
328
  if (!normalized) return null;
@@ -1,2 +1,2 @@
1
- import { t as whatsappPlugin } from "./channel-BG0Lv4c9.js";
1
+ import { t as whatsappPlugin } from "./channel-DBm3MwQ7.js";
2
2
  export { whatsappPlugin };
@@ -1,6 +1,6 @@
1
- import { c as normalizeWhatsAppTarget, t as isWhatsAppGroupJid } from "./normalize-target-ePanEpfY.js";
2
- import { t as handleWhatsAppAction } from "./action-runtime-Dig47HuK.js";
3
- import "./normalize-f31evwm8.js";
1
+ import { c as normalizeWhatsAppTarget, t as isWhatsAppGroupJid } from "./normalize-target-MB6Z_4Bn.js";
2
+ import { t as handleWhatsAppAction } from "./action-runtime-fgfdJlPZ.js";
3
+ import "./normalize-BZBRXai6.js";
4
4
  import { readStringOrNumberParam, readStringParam as readStringParam$1, resolveReactionMessageId } from "openclaw/plugin-sdk/channel-actions";
5
5
  //#region extensions/whatsapp/src/channel-react-action.ts
6
6
  const WHATSAPP_CHANNEL = "whatsapp";
@@ -1,9 +1,9 @@
1
1
  import { startWebLoginWithQr as startWebLoginWithQr$1, waitForWebLogin as waitForWebLogin$1 } from "./login-qr-runtime.js";
2
2
  import { a as getWebAuthAgeMs$1, b as webAuthExists$1, d as readWebAuthExistsForDecision$1, f as readWebAuthSnapshot$1, h as readWebSelfId$1, m as readWebAuthState$1, o as logWebSelfId$1, p as readWebAuthSnapshotBestEffort$1, s as logoutWeb$1, u as readWebAuthExistsBestEffort$1 } from "./auth-store-Cr3tg0Jm.js";
3
3
  import { t as getActiveWebListener$1 } from "./active-listener-D2NHQ5Og.js";
4
- import { t as monitorWebChannel$1 } from "./monitor-BVvWWOfi.js";
4
+ import { t as monitorWebChannel$1 } from "./monitor-D4UnxxWO.js";
5
5
  import { t as loginWeb$1 } from "./login-CxQb0cqz.js";
6
- import { whatsappSetupWizard as whatsappSetupWizard$1 } from "./setup-surface-7163OZHk.js";
6
+ import { whatsappSetupWizard as whatsappSetupWizard$1 } from "./setup-surface-B5pabs1e.js";
7
7
  //#region extensions/whatsapp/src/channel.runtime.ts
8
8
  function getActiveWebListener(...args) {
9
9
  return getActiveWebListener$1(...args);
@@ -1,4 +1,4 @@
1
- import { a as resolveWhatsAppGroupRequireMention, i as whatsappSetupWizardProxy, n as createWhatsAppPluginBase, o as resolveWhatsAppGroupToolPolicy, s as resolveWhatsAppGroupIntroHint, t as whatsappSetupAdapter } from "./setup-core-B5F7F8bE.js";
1
+ import { a as resolveWhatsAppGroupRequireMention, i as whatsappSetupWizardProxy, n as createWhatsAppPluginBase, o as resolveWhatsAppGroupToolPolicy, s as resolveWhatsAppGroupIntroHint, t as whatsappSetupAdapter } from "./setup-core-BFErZldJ.js";
2
2
  import { m as readWebAuthState } from "./auth-store-Cr3tg0Jm.js";
3
3
  import { t as detectWhatsAppLegacyStateMigrations } from "./state-migrations-CtdIArlK.js";
4
4
  //#region extensions/whatsapp/src/channel.setup.ts
@@ -1,9 +1,9 @@
1
- import { c as normalizeWhatsAppTarget$1, t as isWhatsAppGroupJid$1 } from "./normalize-target-ePanEpfY.js";
1
+ import { c as normalizeWhatsAppTarget$1, t as isWhatsAppGroupJid$1 } from "./normalize-target-MB6Z_4Bn.js";
2
2
  import { t as whatsappCommandPolicy$1 } from "./command-policy-O8sRnqUV.js";
3
3
  import { t as resolveLegacyGroupSessionKey$1 } from "./group-session-contract-DdqigLJl.js";
4
4
  import { n as unsupportedSecretRefSurfacePatterns, t as collectUnsupportedSecretRefConfigCandidates } from "./security-contract-CvfWex9e.js";
5
5
  import { r as isLegacyGroupSessionKey$1, t as canonicalizeLegacySessionKey$1 } from "./session-contract-B0efQf9P.js";
6
- import { n as listWhatsAppDirectoryGroupsFromConfig, r as listWhatsAppDirectoryPeersFromConfig } from "./directory-config-ClsMAYen.js";
6
+ import { n as listWhatsAppDirectoryGroupsFromConfig, r as listWhatsAppDirectoryPeersFromConfig } from "./directory-config-BLFmeNGN.js";
7
7
  import { t as resolveWhatsAppRuntimeGroupPolicy$1 } from "./runtime-group-policy-BH_U23qp.js";
8
8
  import { t as __testing } from "./access-control-Di_o41dj.js";
9
9
  //#region extensions/whatsapp/contract-api.ts
@@ -1,7 +1,7 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-CiIaOW0V.js";
2
2
  import { t as resolveMergedWhatsAppAccountConfig } from "./account-config-CNQ33oav.js";
3
- import { c as normalizeWhatsAppTarget, t as isWhatsAppGroupJid } from "./normalize-target-ePanEpfY.js";
4
- import "./normalize-f31evwm8.js";
3
+ import { c as normalizeWhatsAppTarget, t as isWhatsAppGroupJid } from "./normalize-target-MB6Z_4Bn.js";
4
+ import "./normalize-BZBRXai6.js";
5
5
  import { listResolvedDirectoryGroupEntriesFromMapKeys, listResolvedDirectoryUserEntriesFromAllowFrom } from "openclaw/plugin-sdk/directory-config-runtime";
6
6
  //#region extensions/whatsapp/src/directory-config.ts
7
7
  var directory_config_exports = /* @__PURE__ */ __exportAll({
@@ -1,2 +1,2 @@
1
- import { n as listWhatsAppDirectoryGroupsFromConfig, r as listWhatsAppDirectoryPeersFromConfig } from "./directory-config-ClsMAYen.js";
1
+ import { n as listWhatsAppDirectoryGroupsFromConfig, r as listWhatsAppDirectoryPeersFromConfig } from "./directory-config-BLFmeNGN.js";
2
2
  export { listWhatsAppDirectoryGroupsFromConfig, listWhatsAppDirectoryPeersFromConfig };
@@ -1,15 +1,15 @@
1
1
  import { a as resolveWhatsAppAccount, s as resolveWhatsAppMediaMaxBytes } from "./accounts-B4oR6Dhx.js";
2
- import { t as isWhatsAppGroupJid } from "./normalize-target-ePanEpfY.js";
2
+ import { t as isWhatsAppGroupJid } from "./normalize-target-MB6Z_4Bn.js";
3
3
  import { t as resolveWhatsAppReactionLevel } from "./reaction-level-2m9sWGCw.js";
4
4
  import { n as getStatusCode, t as formatError } from "./session-errors-CSuKZPub.js";
5
5
  import { d as markdownToWhatsApp, f as resolveJidToE164, l as isSelfChatMode, n as normalizeE164, t as convertMarkdownTables$1, u as jidToE164 } from "./text-runtime-CMxQczvs.js";
6
- import { i as prepareWhatsAppOutboundMedia, o as sendWhatsAppOutboundWithRetry, r as normalizeWhatsAppPayloadTextPreservingIndentation, t as normalizeWhatsAppOutboundPayload } from "./outbound-media-contract-DwACmTqZ.js";
7
- import { r as sendReactionWhatsApp } from "./send-DG5fpuQZ.js";
6
+ import { i as prepareWhatsAppOutboundMedia, o as sendWhatsAppOutboundWithRetry, r as normalizeWhatsAppPayloadTextPreservingIndentation, t as normalizeWhatsAppOutboundPayload } from "./outbound-media-contract-BW560jdu.js";
7
+ import { r as sendReactionWhatsApp } from "./send-CByjzdb_.js";
8
8
  import { n as cacheInboundMessageMeta, r as lookupInboundMessageMeta, t as buildQuotedMessageOptions } from "./quoted-message-BQsRXnac.js";
9
9
  import { _ as readWebSelfIdentityForDecision, a as getWebAuthAgeMs, h as readWebSelfId, r as WhatsAppAuthUnstableError, s as logoutWeb } from "./auth-store-Cr3tg0Jm.js";
10
10
  import { a as getSelfIdentity, c as resolveComparableIdentity, i as getReplyContext, n as getMentionIdentities, o as getSenderIdentity, r as getPrimaryIdentityId, s as identitiesOverlap, t as getComparableIdentityValues } from "./identity-BNDkpR8N.js";
11
11
  import { i as resolveWhatsAppInboundPolicy, n as checkInboundAccessControl, r as resolveWhatsAppCommandAuthorized } from "./access-control-Di_o41dj.js";
12
- import { a as mayContainWhatsAppOutboundMention, c as extractContactContext, d as extractMediaPlaceholder, f as extractMentionedJids, i as addWhatsAppOutboundMentionsToContent, l as extractContextInfo, m as hasInboundUserContent, n as listWhatsAppSendResultMessageIds, o as resolveWhatsAppOutboundMentions, p as extractText, r as normalizeWhatsAppSendResult, s as describeReplyContext, t as createWebSendApi, u as extractLocationData } from "./send-api-DYiQpIng.js";
12
+ import { a as mayContainWhatsAppOutboundMention, c as extractContactContext, d as extractMediaPlaceholder, f as extractMentionedJids, i as addWhatsAppOutboundMentionsToContent, l as extractContextInfo, m as hasInboundUserContent, n as listWhatsAppSendResultMessageIds, o as resolveWhatsAppOutboundMentions, p as extractText, r as normalizeWhatsAppSendResult, s as describeReplyContext, t as createWebSendApi, u as extractLocationData } from "./send-api-BNbwVO4e.js";
13
13
  import { i as resolveWhatsAppSocketTiming, r as waitForWaConnection, t as createWaSocket } from "./session-B4Rnsd-V.js";
14
14
  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-YqKi6Ekq.js";
15
15
  import { resolveAccountEntry } from "openclaw/plugin-sdk/account-core";
@@ -0,0 +1,2 @@
1
+ import "./normalize-target-MB6Z_4Bn.js";
2
+ export {};
@@ -14,12 +14,15 @@ function stripWhatsAppTargetPrefixes(value) {
14
14
  if (candidate === before) return candidate;
15
15
  }
16
16
  }
17
- function isWhatsAppGroupJid(value) {
18
- const candidate = stripWhatsAppTargetPrefixes(value);
19
- if (!normalizeLowercaseStringOrEmpty(candidate).endsWith("@g.us")) return false;
17
+ function normalizeWhatsAppGroupJid(value) {
18
+ const candidate = stripWhatsAppTargetPrefixes(value).replace(/^group:/i, "").trim();
19
+ if (!normalizeLowercaseStringOrEmpty(candidate).endsWith("@g.us")) return null;
20
20
  const localPart = candidate.slice(0, candidate.length - 5);
21
- if (!localPart || localPart.includes("@")) return false;
22
- return /^[0-9]+(-[0-9]+)*$/.test(localPart);
21
+ if (!localPart || localPart.includes("@")) return null;
22
+ return /^[0-9]+(-[0-9]+)*$/.test(localPart) ? `${localPart}@g.us` : null;
23
+ }
24
+ function isWhatsAppGroupJid(value) {
25
+ return normalizeWhatsAppGroupJid(value) !== null;
23
26
  }
24
27
  function isWhatsAppNewsletterJid(value) {
25
28
  const candidate = stripWhatsAppTargetPrefixes(value);
@@ -41,7 +44,8 @@ function extractUserJidPhone(jid) {
41
44
  function normalizeWhatsAppTarget(value) {
42
45
  const candidate = stripWhatsAppTargetPrefixes(value);
43
46
  if (!candidate) return null;
44
- if (isWhatsAppGroupJid(candidate)) return `${candidate.slice(0, candidate.length - 5)}@g.us`;
47
+ const groupJid = normalizeWhatsAppGroupJid(candidate);
48
+ if (groupJid) return groupJid;
45
49
  if (isWhatsAppNewsletterJid(candidate)) {
46
50
  const match = candidate.match(WHATSAPP_NEWSLETTER_JID_RE);
47
51
  return match ? `${match[1]}@newsletter` : null;
@@ -1,12 +1,12 @@
1
- import { t as resolveWhatsAppOutboundTarget } from "./resolve-outbound-target-BKcv4ofn.js";
2
- import { n as normalizeWhatsAppPayloadText } from "./outbound-media-contract-DwACmTqZ.js";
3
- import { t as createWhatsAppOutboundBase } from "./outbound-base-Cs2ntgBb.js";
1
+ import { t as resolveWhatsAppOutboundTarget } from "./resolve-outbound-target-Ba7sH80H.js";
2
+ import { n as normalizeWhatsAppPayloadText } from "./outbound-media-contract-BW560jdu.js";
3
+ import { t as createWhatsAppOutboundBase } from "./outbound-base-BMgWLjp4.js";
4
4
  import { shouldLogVerbose } from "openclaw/plugin-sdk/runtime-env";
5
5
  import { chunkText } from "openclaw/plugin-sdk/reply-chunking";
6
6
  //#region extensions/whatsapp/src/outbound-adapter.ts
7
7
  let whatsAppSendModulePromise;
8
8
  function loadWhatsAppSendModule() {
9
- whatsAppSendModulePromise ??= import("./send-DG5fpuQZ.js").then((n) => n.a);
9
+ whatsAppSendModulePromise ??= import("./send-CByjzdb_.js").then((n) => n.a);
10
10
  return whatsAppSendModulePromise;
11
11
  }
12
12
  function normalizeOutboundText(text) {
@@ -1,5 +1,5 @@
1
1
  import { p as toWhatsappJid } from "./text-runtime-CMxQczvs.js";
2
- import { n as normalizeWhatsAppPayloadText, t as normalizeWhatsAppOutboundPayload } from "./outbound-media-contract-DwACmTqZ.js";
2
+ import { n as normalizeWhatsAppPayloadText, t as normalizeWhatsAppOutboundPayload } from "./outbound-media-contract-BW560jdu.js";
3
3
  import { i as lookupInboundMessageMetaForTarget } from "./quoted-message-BQsRXnac.js";
4
4
  import { DEFAULT_ACCOUNT_ID, listCombinedAccountIds, normalizeOptionalAccountId, resolveListedDefaultAccountId } from "openclaw/plugin-sdk/account-core";
5
5
  import { createAttachedChannelResultAdapter } from "openclaw/plugin-sdk/channel-send-result";
@@ -67,7 +67,7 @@ function createWhatsAppOutboundBase({ chunker, sendMessageWhatsApp, sendPollWhat
67
67
  quotedMessageKey
68
68
  });
69
69
  },
70
- sendMedia: async ({ cfg, to, text, mediaUrl, mediaAccess, mediaLocalRoots, mediaReadFile, audioAsVoice, accountId, deps, gifPlayback, replyToId }) => {
70
+ sendMedia: async ({ cfg, to, text, mediaUrl, mediaAccess, mediaLocalRoots, mediaReadFile, audioAsVoice, accountId, deps, gifPlayback, forceDocument, replyToId }) => {
71
71
  const send = resolveOutboundSendDep(deps, "whatsapp", { legacyKeys: WHATSAPP_LEGACY_OUTBOUND_SEND_DEP_KEYS }) ?? sendMessageWhatsApp;
72
72
  const quotedMessageKey = resolveQuotedMessageKey({
73
73
  accountId: resolveQuoteLookupAccountId(cfg, accountId),
@@ -84,6 +84,7 @@ function createWhatsAppOutboundBase({ chunker, sendMessageWhatsApp, sendPollWhat
84
84
  ...audioAsVoice === void 0 ? {} : { audioAsVoice },
85
85
  accountId: accountId ?? void 0,
86
86
  gifPlayback,
87
+ forceDocument,
87
88
  quotedMessageKey
88
89
  });
89
90
  },
@@ -46,7 +46,7 @@ function normalizeWhatsAppLoadedMedia(media, mediaUrl) {
46
46
  contentType: media.contentType,
47
47
  mediaUrl
48
48
  }) ? WHATSAPP_VOICE_MIMETYPE : media.contentType ?? "application/octet-stream";
49
- const fileName = kind === "document" ? media.fileName ?? deriveWhatsAppDocumentFileName(mediaUrl) ?? "file" : void 0;
49
+ const fileName = kind === "document" ? media.fileName ?? deriveWhatsAppDocumentFileName(mediaUrl) ?? "file" : media.fileName;
50
50
  return {
51
51
  buffer: media.buffer,
52
52
  kind,
@@ -1,2 +1,2 @@
1
- import { t as whatsappOutbound } from "./outbound-adapter-QDdZXpZB.js";
1
+ import { t as whatsappOutbound } from "./outbound-adapter-C0p1kFXz.js";
2
2
  export { whatsappOutbound };
@@ -1,4 +1,4 @@
1
- import { c as normalizeWhatsAppTarget, n as isWhatsAppNewsletterJid, t as isWhatsAppGroupJid } from "./normalize-target-ePanEpfY.js";
1
+ import { c as normalizeWhatsAppTarget, n as isWhatsAppNewsletterJid, t as isWhatsAppGroupJid } from "./normalize-target-MB6Z_4Bn.js";
2
2
  import { missingTargetError } from "openclaw/plugin-sdk/channel-feedback";
3
3
  //#region extensions/whatsapp/src/resolve-outbound-target.ts
4
4
  function whatsappAllowFromPolicyError(target) {
@@ -1,16 +1,16 @@
1
1
  import { n as resolveWebCredsBackupPath, r as resolveWebCredsPath, t as hasWebCredsSync } from "./creds-files-_2V8jzQa.js";
2
- import { n as whatsAppActionRuntime, t as handleWhatsAppAction } from "./action-runtime-Dig47HuK.js";
2
+ import { n as whatsAppActionRuntime, t as handleWhatsAppAction } from "./action-runtime-fgfdJlPZ.js";
3
3
  import { n as getStatusCode, t as formatError } from "./session-errors-CSuKZPub.js";
4
- import { i as sendTypingWhatsApp, n as sendPollWhatsApp, r as sendReactionWhatsApp, t as sendMessageWhatsApp } from "./send-DG5fpuQZ.js";
4
+ import { i as sendTypingWhatsApp, n as sendPollWhatsApp, r as sendReactionWhatsApp, t as sendMessageWhatsApp } from "./send-CByjzdb_.js";
5
5
  import { startWebLoginWithQr, waitForWebLogin } from "./login-qr-runtime.js";
6
6
  import { t as createWhatsAppLoginTool } from "./agent-tools-login-DpRxLNRB.js";
7
7
  import { n as setWhatsAppRuntime } from "./runtime-6fZ67abR.js";
8
8
  import { C as waitForCredsSaveQueueWithTimeout, S as waitForCredsSaveQueue, _ as readWebSelfIdentityForDecision, a as getWebAuthAgeMs, b as webAuthExists, c as pickWebChannel, d as readWebAuthExistsForDecision, f as readWebAuthSnapshot, g as readWebSelfIdentity, h as readWebSelfId, i as formatWhatsAppWebAuthStatusState, l as readCredsJsonRaw, m as readWebAuthState, n as WHATSAPP_AUTH_UNSTABLE_CODE, o as logWebSelfId, p as readWebAuthSnapshotBestEffort, r as WhatsAppAuthUnstableError, s as logoutWeb, t as WA_WEB_AUTH_DIR, u as readWebAuthExistsBestEffort, v as resolveDefaultWebAuthDir, w as writeCredsJsonAtomically, y as restoreCredsFromBackupIfNeeded } from "./auth-store-Cr3tg0Jm.js";
9
9
  import { t as DEFAULT_WEB_MEDIA_BYTES } from "./constants-yKXGCGU9.js";
10
- import { c as extractContactContext, d as extractMediaPlaceholder, p as extractText, u as extractLocationData } from "./send-api-DYiQpIng.js";
10
+ import { c as extractContactContext, d as extractMediaPlaceholder, p as extractText, u as extractLocationData } from "./send-api-BNbwVO4e.js";
11
11
  import { n as newConnectionId, r as waitForWaConnection, t as createWaSocket } from "./session-B4Rnsd-V.js";
12
12
  import { n as resolveWebAccountId, t as getActiveWebListener } from "./active-listener-D2NHQ5Og.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-BVvWWOfi.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-D4UnxxWO.js";
14
14
  import { t as loginWeb } from "./login-CxQb0cqz.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 };
@@ -1,11 +1,11 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-CiIaOW0V.js";
2
2
  import { r as resolveDefaultWhatsAppAccountId } from "./account-ids-DG18xddX.js";
3
3
  import { a as resolveWhatsAppAccount, s as resolveWhatsAppMediaMaxBytes } from "./accounts-B4oR6Dhx.js";
4
- import { n as isWhatsAppNewsletterJid } from "./normalize-target-ePanEpfY.js";
4
+ import { n as isWhatsAppNewsletterJid } from "./normalize-target-MB6Z_4Bn.js";
5
5
  import { t as getRegisteredWhatsAppConnectionController } from "./connection-controller-registry-D_iIGz5m.js";
6
- import "./normalize-f31evwm8.js";
6
+ import "./normalize-BZBRXai6.js";
7
7
  import { d as markdownToWhatsApp, p as toWhatsappJid } from "./text-runtime-CMxQczvs.js";
8
- import { a as resolveWhatsAppOutboundMediaUrls, i as prepareWhatsAppOutboundMedia, n as normalizeWhatsAppPayloadText } from "./outbound-media-contract-DwACmTqZ.js";
8
+ import { a as resolveWhatsAppOutboundMediaUrls, i as prepareWhatsAppOutboundMedia, n as normalizeWhatsAppPayloadText } from "./outbound-media-contract-BW560jdu.js";
9
9
  import { formatCliCommand } from "openclaw/plugin-sdk/cli-runtime";
10
10
  import { generateSecureUuid } from "openclaw/plugin-sdk/core";
11
11
  import { redactIdentifier } from "openclaw/plugin-sdk/logging-core";
@@ -18,13 +18,17 @@ import { loadWebMedia } from "openclaw/plugin-sdk/web-media";
18
18
  async function loadOutboundMediaFromUrl(mediaUrl, options = {}) {
19
19
  const readFile = options.mediaAccess?.readFile ?? options.mediaReadFile;
20
20
  const localRoots = options.mediaAccess?.localRoots?.length && options.mediaAccess.localRoots.length > 0 ? options.mediaAccess.localRoots : options.mediaLocalRoots && options.mediaLocalRoots.length > 0 ? options.mediaLocalRoots : void 0;
21
- return await loadWebMedia(mediaUrl, readFile ? {
21
+ const sharedOptions = {
22
22
  ...options.maxBytes !== void 0 ? { maxBytes: options.maxBytes } : {},
23
+ ...options.optimizeImages !== void 0 ? { optimizeImages: options.optimizeImages } : {}
24
+ };
25
+ return await loadWebMedia(mediaUrl, readFile ? {
26
+ ...sharedOptions,
23
27
  localRoots: "any",
24
28
  readFile,
25
29
  hostReadCapability: true
26
30
  } : {
27
- ...options.maxBytes !== void 0 ? { maxBytes: options.maxBytes } : {},
31
+ ...sharedOptions,
28
32
  ...localRoots ? { localRoots } : {}
29
33
  });
30
34
  }
@@ -37,6 +41,9 @@ var send_exports = /* @__PURE__ */ __exportAll({
37
41
  sendTypingWhatsApp: () => sendTypingWhatsApp
38
42
  });
39
43
  const outboundLog = createSubsystemLogger("gateway/channels/whatsapp").child("outbound");
44
+ function supportsForcedDocumentDelivery(kind) {
45
+ return kind === "image" || kind === "video";
46
+ }
40
47
  function resolveOutboundWhatsAppAccountId(params) {
41
48
  const explicitAccountId = params.accountId?.trim();
42
49
  if (explicitAccountId) return explicitAccountId;
@@ -89,9 +96,11 @@ async function sendMessageWhatsApp(to, body, options) {
89
96
  let mediaType;
90
97
  let documentFileName;
91
98
  let visibleTextAfterVoice;
99
+ let forceDocumentDelivery = false;
92
100
  if (primaryMediaUrl) {
93
101
  const media = await prepareWhatsAppOutboundMedia(await loadOutboundMediaFromUrl(primaryMediaUrl, {
94
102
  maxBytes: resolveWhatsAppMediaMaxBytes(account),
103
+ optimizeImages: options.forceDocument ? false : void 0,
95
104
  mediaAccess: options.mediaAccess,
96
105
  mediaLocalRoots: options.mediaLocalRoots,
97
106
  mediaReadFile: options.mediaReadFile
@@ -99,6 +108,7 @@ async function sendMessageWhatsApp(to, body, options) {
99
108
  const caption = text || void 0;
100
109
  mediaBuffer = media.buffer;
101
110
  mediaType = media.mimetype;
111
+ forceDocumentDelivery = Boolean(options.forceDocument && supportsForcedDocumentDelivery(media.kind));
102
112
  if (media.kind === "audio" && caption) {
103
113
  visibleTextAfterVoice = caption;
104
114
  text = "";
@@ -106,6 +116,7 @@ async function sendMessageWhatsApp(to, body, options) {
106
116
  text = caption ?? "";
107
117
  documentFileName = media.fileName;
108
118
  } else text = caption ?? "";
119
+ if (forceDocumentDelivery) documentFileName ??= media.fileName ?? "file";
109
120
  }
110
121
  outboundLog.info(`Sending message -> ${redactedJid}${primaryMediaUrl ? " (media)" : ""}`);
111
122
  logger.info({
@@ -114,8 +125,9 @@ async function sendMessageWhatsApp(to, body, options) {
114
125
  }, "sending message");
115
126
  if (!isWhatsAppNewsletterJid(jid)) await active.sendComposingTo(to);
116
127
  const accountId = Boolean(options.accountId?.trim()) ? resolvedAccountId : void 0;
117
- const sendOptions = options.gifPlayback || accountId || documentFileName || options.quotedMessageKey ? {
128
+ const sendOptions = options.gifPlayback || forceDocumentDelivery || accountId || documentFileName || options.quotedMessageKey ? {
118
129
  ...options.gifPlayback ? { gifPlayback: true } : {},
130
+ ...forceDocumentDelivery ? { asDocument: true } : {},
119
131
  ...documentFileName ? { fileName: documentFileName } : {},
120
132
  ...options.quotedMessageKey ? { quotedMessageKey: options.quotedMessageKey } : {},
121
133
  accountId
@@ -1,5 +1,5 @@
1
- import { n as isWhatsAppNewsletterJid } from "./normalize-target-ePanEpfY.js";
2
- import "./normalize-f31evwm8.js";
1
+ import { n as isWhatsAppNewsletterJid } from "./normalize-target-MB6Z_4Bn.js";
2
+ import "./normalize-BZBRXai6.js";
3
3
  import { m as toWhatsappJidWithLid, p as toWhatsappJid, u as jidToE164 } from "./text-runtime-CMxQczvs.js";
4
4
  import { t as buildQuotedMessageOptions } from "./quoted-message-BQsRXnac.js";
5
5
  import { c as resolveComparableIdentity } from "./identity-BNDkpR8N.js";
@@ -602,6 +602,9 @@ function recordWhatsAppOutbound(accountId) {
602
602
  direction: "outbound"
603
603
  });
604
604
  }
605
+ function supportsForcedDocumentMediaType(mediaType) {
606
+ return mediaType.startsWith("image/") || mediaType.startsWith("video/");
607
+ }
605
608
  function createWebSendApi(params) {
606
609
  const resolveOutboundJid = (recipient) => params.authDir ? toWhatsappJidWithLid(recipient, { authDir: params.authDir }) : toWhatsappJid(recipient);
607
610
  const resolveMentions = async (jid, text) => params.resolveOutboundMentions ? await params.resolveOutboundMentions({
@@ -621,7 +624,13 @@ function createWebSendApi(params) {
621
624
  text,
622
625
  mentionedJids: []
623
626
  } : await resolveMentions(jid, text);
624
- if (mediaBuffer && mediaType) if (mediaType.startsWith("image/")) payload = {
627
+ if (mediaBuffer && mediaType) if (sendOptions?.asDocument === true && supportsForcedDocumentMediaType(mediaType)) payload = {
628
+ document: mediaBuffer,
629
+ fileName: sendOptions?.fileName?.trim() || "file",
630
+ caption: resolvedPayloadText.text || void 0,
631
+ mimetype: mediaType
632
+ };
633
+ else if (mediaType.startsWith("image/")) payload = {
625
634
  image: mediaBuffer,
626
635
  caption: resolvedPayloadText.text || void 0,
627
636
  mimetype: mediaType
@@ -1,6 +1,6 @@
1
1
  import { r as resolveDefaultWhatsAppAccountId, t as listAccountIds } from "./account-ids-DG18xddX.js";
2
2
  import { a as resolveWhatsAppAccount, n as hasAnyWhatsAppAuth } from "./accounts-B4oR6Dhx.js";
3
- import { a as normalizeWhatsAppAllowFromEntries } from "./normalize-target-ePanEpfY.js";
3
+ import { a as normalizeWhatsAppAllowFromEntries } from "./normalize-target-MB6Z_4Bn.js";
4
4
  import { t as WhatsAppChannelConfigSchema } from "./config-schema-Dmo66Ubb.js";
5
5
  import { n as whatsappDoctor } from "./doctor-A9tXm9Om.js";
6
6
  import { t as resolveLegacyGroupSessionKey } from "./group-session-contract-DdqigLJl.js";
@@ -125,10 +125,10 @@ function resolveWhatsAppConfigPath(params) {
125
125
  return `${resolveWhatsAppGroupScopeBasePath(params)}.${params.field}`;
126
126
  }
127
127
  async function loadWhatsAppChannelRuntime() {
128
- return await import("./channel.runtime-ChxB8Ns0.js");
128
+ return await import("./channel.runtime-BrKncUJI.js");
129
129
  }
130
130
  async function loadWhatsAppSetupSurface() {
131
- return await import("./setup-surface-7163OZHk.js");
131
+ return await import("./setup-surface-B5pabs1e.js");
132
132
  }
133
133
  const whatsappSetupWizardProxy = createWhatsAppSetupWizardProxy(async () => (await loadWhatsAppSetupSurface()).whatsappSetupWizard);
134
134
  const whatsappConfigAdapter = createScopedChannelConfigAdapter({
@@ -1,7 +1,7 @@
1
1
  import { r as resolveDefaultWhatsAppAccountId } from "./account-ids-DG18xddX.js";
2
2
  import { a as resolveWhatsAppAccount, o as resolveWhatsAppAuthDir } from "./accounts-B4oR6Dhx.js";
3
- import { a as normalizeWhatsAppAllowFromEntries, o as normalizeWhatsAppAllowFromEntry } from "./normalize-target-ePanEpfY.js";
4
- import { t as whatsappSetupAdapter } from "./setup-core-B5F7F8bE.js";
3
+ import { a as normalizeWhatsAppAllowFromEntries, o as normalizeWhatsAppAllowFromEntry } from "./normalize-target-MB6Z_4Bn.js";
4
+ import { t as whatsappSetupAdapter } from "./setup-core-BFErZldJ.js";
5
5
  import path from "node:path";
6
6
  import { DEFAULT_ACCOUNT_ID, createSetupTranslator, pathExists, splitSetupEntries } from "openclaw/plugin-sdk/setup";
7
7
  import { formatCliCommand, formatDocsLink } from "openclaw/plugin-sdk/setup-tools";
@@ -1,2 +1,2 @@
1
- import { t as whatsappSetupPlugin } from "./channel.setup-BiyPwedi.js";
1
+ import { t as whatsappSetupPlugin } from "./channel.setup-JfQ9Dv9K.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-B62sUNjU.js")).finalizeWhatsAppSetup(params),
39
+ finalize: async (params) => await (await import("./setup-finalize-CnTB-PeX.js")).finalizeWhatsAppSetup(params),
40
40
  disable: (cfg) => setSetupChannelEnabled(cfg, channel, false),
41
41
  onAccountRecorded: (accountId, options) => {
42
42
  options?.onAccountId?.(channel, accountId);
package/dist/targets.js CHANGED
@@ -1,2 +1,2 @@
1
- import { c as normalizeWhatsAppTarget, r as isWhatsAppUserTarget, t as isWhatsAppGroupJid } from "./normalize-target-ePanEpfY.js";
1
+ import { c as normalizeWhatsAppTarget, r as isWhatsAppUserTarget, t as isWhatsAppGroupJid } from "./normalize-target-MB6Z_4Bn.js";
2
2
  export { isWhatsAppGroupJid, isWhatsAppUserTarget, normalizeWhatsAppTarget };
package/dist/test-api.js CHANGED
@@ -1,3 +1,3 @@
1
1
  import { t as resolveWhatsAppRuntimeGroupPolicy } from "./runtime-group-policy-BH_U23qp.js";
2
- import { t as whatsappOutbound } from "./outbound-adapter-QDdZXpZB.js";
2
+ import { t as whatsappOutbound } from "./outbound-adapter-C0p1kFXz.js";
3
3
  export { resolveWhatsAppRuntimeGroupPolicy, whatsappOutbound };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/whatsapp",
3
- "version": "2026.5.16-beta.3",
3
+ "version": "2026.5.16-beta.4",
4
4
  "description": "OpenClaw WhatsApp channel plugin",
5
5
  "repository": {
6
6
  "type": "git",
@@ -20,7 +20,7 @@
20
20
  "openclaw": "workspace:*"
21
21
  },
22
22
  "peerDependencies": {
23
- "openclaw": ">=2026.5.16-beta.3"
23
+ "openclaw": ">=2026.5.16-beta.4"
24
24
  },
25
25
  "peerDependenciesMeta": {
26
26
  "openclaw": {
@@ -63,10 +63,10 @@
63
63
  "minHostVersion": ">=2026.4.25"
64
64
  },
65
65
  "compat": {
66
- "pluginApi": ">=2026.5.16-beta.3"
66
+ "pluginApi": ">=2026.5.16-beta.4"
67
67
  },
68
68
  "build": {
69
- "openclawVersion": "2026.5.16-beta.3"
69
+ "openclawVersion": "2026.5.16-beta.4"
70
70
  },
71
71
  "release": {
72
72
  "publishToClawHub": true,
@@ -1,2 +0,0 @@
1
- import "./normalize-target-ePanEpfY.js";
2
- export {};