@openclaw/whatsapp 2026.5.27 → 2026.5.28-beta.2

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 (62) hide show
  1. package/dist/{access-control-tKMSybhe.js → access-control-Z0fYaWrx.js} +11 -3
  2. package/dist/{action-runtime-ClWX76J7.js → action-runtime-BdhkGtaP.js} +1 -2
  3. package/dist/action-runtime-api.js +1 -1
  4. package/dist/action-runtime.runtime.js +1 -1
  5. package/dist/{active-listener-B4SDebQ6.js → active-listener-CFwkn3ho.js} +1 -1
  6. package/dist/{agent-tools-login-BDzvb3ee.js → agent-tools-login-BX7eHgDm.js} +5 -3
  7. package/dist/api.js +7 -9
  8. package/dist/{approval-handler.runtime-CnM8rqpB.js → approval-handler.runtime-C25wPeBf.js} +6 -23
  9. package/dist/{channel-DeRnX7Dx.js → channel-CeSu_mqS.js} +149 -108
  10. package/dist/channel-plugin-api.js +1 -1
  11. package/dist/{channel-react-action-Bo_hIjzN.js → channel-react-action-Cd2qkLqp.js} +2 -2
  12. package/dist/{channel.runtime-C08TFa-d.js → channel.runtime-S9MB6sub.js} +4 -4
  13. package/dist/{channel.setup-CtTHpu8o.js → channel.setup-BNqtW-u1.js} +1 -1
  14. package/dist/{connection-controller-ja6z4F_k.js → connection-controller-BZuzYCGM.js} +2 -3
  15. package/dist/contract-api.js +1 -2
  16. package/dist/light-runtime-api.js +5 -5
  17. package/dist/{login-1rs_uPW-.js → login-1yyBrXTL.js} +3 -3
  18. package/dist/{login-qr-CdhkC9Ij.js → login-qr-6DdwGlkz.js} +2 -2
  19. package/dist/login-qr-runtime.js +1 -1
  20. package/dist/{monitor-BdKlBuaK.js → monitor-CzL4sZSN.js} +9 -9
  21. package/dist/runtime-api.js +9 -9
  22. package/dist/{send-D0iPQBMX.js → send-C4LG-Cl6.js} +199 -11
  23. package/dist/{send-api-3hUuzYv1.js → send-api-C66vkRl9.js} +1 -1
  24. package/dist/{session-CDgpDc0l.js → session-D8UW2Vbn.js} +13 -10
  25. package/dist/{session-errors-BAj9D2La.js → session-errors-CbsoQqoy.js} +22 -1
  26. package/dist/{setup-core-cgB2JDjU.js → setup-core-C2os03mR.js} +2 -2
  27. package/dist/{setup-finalize-CCZdGnko.js → setup-finalize-IDTrWXtX.js} +2 -2
  28. package/dist/setup-plugin-api.js +1 -1
  29. package/dist/{setup-surface-BouY1WI8.js → setup-surface-BOhQVZqy.js} +1 -1
  30. package/npm-shrinkwrap.json +3 -26
  31. package/openclaw.plugin.json +18 -0
  32. package/package.json +4 -6
  33. package/dist/connection-controller-registry-TSX_udJp.js +0 -22
  34. package/dist/outbound-adapter-CcNeZvD_.js +0 -30
  35. package/dist/outbound-base-MHdfVWvv.js +0 -125
  36. package/dist/outbound-media-contract-B3Y-9slb.js +0 -184
  37. package/dist/outbound-payload-test-api.js +0 -2
  38. package/dist/reaction-level-BF3d5IgO.js +0 -16
  39. package/dist/runtime-group-policy-DeSRFXEV.js +0 -11
  40. package/dist/test-api.js +0 -3
  41. package/node_modules/agent-base/LICENSE +0 -22
  42. package/node_modules/agent-base/README.md +0 -69
  43. package/node_modules/agent-base/dist/helpers.d.ts +0 -10
  44. package/node_modules/agent-base/dist/helpers.d.ts.map +0 -1
  45. package/node_modules/agent-base/dist/helpers.js +0 -37
  46. package/node_modules/agent-base/dist/helpers.js.map +0 -1
  47. package/node_modules/agent-base/dist/index.d.ts +0 -37
  48. package/node_modules/agent-base/dist/index.d.ts.map +0 -1
  49. package/node_modules/agent-base/dist/index.js +0 -146
  50. package/node_modules/agent-base/dist/index.js.map +0 -1
  51. package/node_modules/agent-base/package.json +0 -46
  52. package/node_modules/https-proxy-agent/LICENSE +0 -22
  53. package/node_modules/https-proxy-agent/README.md +0 -70
  54. package/node_modules/https-proxy-agent/dist/index.d.ts +0 -43
  55. package/node_modules/https-proxy-agent/dist/index.d.ts.map +0 -1
  56. package/node_modules/https-proxy-agent/dist/index.js +0 -150
  57. package/node_modules/https-proxy-agent/dist/index.js.map +0 -1
  58. package/node_modules/https-proxy-agent/dist/parse-proxy-response.d.ts +0 -12
  59. package/node_modules/https-proxy-agent/dist/parse-proxy-response.d.ts.map +0 -1
  60. package/node_modules/https-proxy-agent/dist/parse-proxy-response.js +0 -94
  61. package/node_modules/https-proxy-agent/dist/parse-proxy-response.js.map +0 -1
  62. package/node_modules/https-proxy-agent/package.json +0 -50
@@ -1,14 +1,22 @@
1
1
  import { a as resolveWhatsAppAccount } from "./accounts-BMGM1RtF.js";
2
2
  import { l as isSelfChatMode, n as normalizeE164 } from "./text-runtime-Dk37KYHj.js";
3
3
  import { a as getSelfIdentity, o as getSenderIdentity } from "./identity-xoLLdqEv.js";
4
- import { t as resolveWhatsAppRuntimeGroupPolicy } from "./runtime-group-policy-DeSRFXEV.js";
5
4
  import { defaultRuntime } from "openclaw/plugin-sdk/runtime-env";
6
5
  import { resolveChannelGroupPolicy, resolveChannelGroupRequireMention } from "openclaw/plugin-sdk/channel-policy";
7
6
  import { createChannelPairingChallengeIssuer } from "openclaw/plugin-sdk/channel-pairing";
8
7
  import { upsertChannelPairingRequest } from "openclaw/plugin-sdk/conversation-runtime";
9
- import { resolveDefaultGroupPolicy, warnMissingProviderGroupPolicyFallbackOnce } from "openclaw/plugin-sdk/runtime-group-policy";
8
+ import { resolveDefaultGroupPolicy, resolveOpenProviderRuntimeGroupPolicy, warnMissingProviderGroupPolicyFallbackOnce } from "openclaw/plugin-sdk/runtime-group-policy";
10
9
  import { resolveStableChannelMessageIngress } from "openclaw/plugin-sdk/channel-ingress-runtime";
11
10
  import { resolveGroupSessionKey } from "openclaw/plugin-sdk/session-store-runtime";
11
+ //#region extensions/whatsapp/src/runtime-group-policy.ts
12
+ function resolveWhatsAppRuntimeGroupPolicy(params) {
13
+ return resolveOpenProviderRuntimeGroupPolicy({
14
+ providerConfigPresent: params.providerConfigPresent,
15
+ groupPolicy: params.groupPolicy,
16
+ defaultGroupPolicy: params.defaultGroupPolicy
17
+ });
18
+ }
19
+ //#endregion
12
20
  //#region extensions/whatsapp/src/inbound-policy.ts
13
21
  function normalizeWhatsAppIngressPhone(value) {
14
22
  const trimmed = value.trim();
@@ -240,4 +248,4 @@ async function checkInboundAccessControl(params) {
240
248
  }
241
249
  const testing = { resolveWhatsAppInboundPolicy };
242
250
  //#endregion
243
- export { resolveWhatsAppInboundPolicy as i, testing as n, resolveWhatsAppCommandAuthorized as r, checkInboundAccessControl as t };
251
+ export { resolveWhatsAppRuntimeGroupPolicy as a, resolveWhatsAppInboundPolicy as i, testing as n, resolveWhatsAppCommandAuthorized as r, checkInboundAccessControl as t };
@@ -1,7 +1,6 @@
1
1
  import { a as resolveWhatsAppAccount } from "./accounts-BMGM1RtF.js";
2
2
  import { t as resolveWhatsAppOutboundTarget } from "./resolve-outbound-target-CcdugbDf.js";
3
- import { t as resolveWhatsAppReactionLevel } from "./reaction-level-BF3d5IgO.js";
4
- import { r as sendReactionWhatsApp } from "./send-D0iPQBMX.js";
3
+ import { g as resolveWhatsAppReactionLevel, r as sendReactionWhatsApp } from "./send-C4LG-Cl6.js";
5
4
  import { ToolAuthorizationError, createActionGate, jsonResult, readReactionParams, readStringParam } from "openclaw/plugin-sdk/channel-actions";
6
5
  //#region extensions/whatsapp/src/action-runtime-target-auth.ts
7
6
  function resolveAuthorizedWhatsAppOutboundTarget(params) {
@@ -1,2 +1,2 @@
1
- import { t as handleWhatsAppAction } from "./action-runtime-ClWX76J7.js";
1
+ import { t as handleWhatsAppAction } from "./action-runtime-BdhkGtaP.js";
2
2
  export { handleWhatsAppAction };
@@ -1,2 +1,2 @@
1
- import { t as handleWhatsAppAction } from "./action-runtime-ClWX76J7.js";
1
+ import { t as handleWhatsAppAction } from "./action-runtime-BdhkGtaP.js";
2
2
  export { handleWhatsAppAction };
@@ -1,5 +1,5 @@
1
1
  import { r as resolveDefaultWhatsAppAccountId } from "./account-ids-CB5SOWjc.js";
2
- import { t as getRegisteredWhatsAppConnectionController } from "./connection-controller-registry-TSX_udJp.js";
2
+ import { r as getRegisteredWhatsAppConnectionController } from "./session-errors-CbsoQqoy.js";
3
3
  //#region extensions/whatsapp/src/active-listener.ts
4
4
  function resolveWebAccountId(params) {
5
5
  return (params.accountId ?? "").trim() || resolveDefaultWhatsAppAccountId(params.cfg);
@@ -1,5 +1,6 @@
1
1
  import { startWebLoginWithQr, waitForWebLogin } from "./login-qr-runtime.js";
2
2
  import "./login-qr-api.js";
3
+ import { optionalPositiveIntegerSchema, readPositiveIntegerParam } from "openclaw/plugin-sdk/channel-actions";
3
4
  import { Type } from "typebox";
4
5
  //#region extensions/whatsapp/src/agent-tools-login.ts
5
6
  const QR_DATA_URL_MAX_LENGTH = 16384;
@@ -16,7 +17,7 @@ function createWhatsAppLoginTool() {
16
17
  type: "string",
17
18
  enum: ["start", "wait"]
18
19
  }),
19
- timeoutMs: Type.Optional(Type.Number()),
20
+ timeoutMs: optionalPositiveIntegerSchema(),
20
21
  force: Type.Optional(Type.Boolean()),
21
22
  accountId: Type.Optional(Type.String()),
22
23
  currentQrDataUrl: Type.Optional(Type.String({
@@ -45,10 +46,11 @@ function createWhatsAppLoginTool() {
45
46
  };
46
47
  const action = args?.action ?? "start";
47
48
  const accountId = readOptionalString(args.accountId);
49
+ const timeoutMs = readPositiveIntegerParam(args, "timeoutMs");
48
50
  if (action === "wait") {
49
51
  const result = await waitForWebLogin({
50
52
  accountId,
51
- timeoutMs: typeof args.timeoutMs === "number" ? args.timeoutMs : void 0,
53
+ timeoutMs,
52
54
  currentQrDataUrl: readOptionalString(args.currentQrDataUrl)
53
55
  });
54
56
  if (result.qrDataUrl) return renderQrReply({
@@ -66,7 +68,7 @@ function createWhatsAppLoginTool() {
66
68
  }
67
69
  const result = await startWebLoginWithQr({
68
70
  accountId,
69
- timeoutMs: typeof args.timeoutMs === "number" ? args.timeoutMs : void 0,
71
+ timeoutMs,
70
72
  force: typeof args.force === "boolean" ? args.force : false
71
73
  });
72
74
  if (!result.qrDataUrl) return {
package/dist/api.js CHANGED
@@ -2,20 +2,18 @@ import { r as resolveDefaultWhatsAppAccountId, t as listAccountIds } from "./acc
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-BMGM1RtF.js";
3
3
  import { a as normalizeWhatsAppAllowFromEntries, c as normalizeWhatsAppTarget, i as looksLikeWhatsAppTargetId, r as isWhatsAppUserTarget, s as normalizeWhatsAppMessagingTarget, t as isWhatsAppGroupJid } from "./normalize-target-bVWjgftN.js";
4
4
  import { t as resolveWhatsAppOutboundTarget } from "./resolve-outbound-target-CcdugbDf.js";
5
- import "./reaction-level-BF3d5IgO.js";
6
- import "./send-D0iPQBMX.js";
5
+ import "./send-C4LG-Cl6.js";
7
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";
8
- import { t as whatsappPlugin } from "./channel-DeRnX7Dx.js";
9
- import { n as WHATSAPP_LEGACY_OUTBOUND_SEND_DEP_KEYS } from "./outbound-base-MHdfVWvv.js";
7
+ import { n as WHATSAPP_LEGACY_OUTBOUND_SEND_DEP_KEYS, t as whatsappPlugin } from "./channel-CeSu_mqS.js";
10
8
  import { t as whatsappCommandPolicy } from "./command-policy-BIOSHySD.js";
11
- import { a as resolveWhatsAppGroupRequireMention, o as resolveWhatsAppGroupToolPolicy, s as resolveWhatsAppGroupIntroHint } from "./setup-core-cgB2JDjU.js";
9
+ import { a as resolveWhatsAppGroupRequireMention, o as resolveWhatsAppGroupToolPolicy, s as resolveWhatsAppGroupIntroHint } from "./setup-core-C2os03mR.js";
12
10
  import "./config-schema-CsNDlDpL.js";
13
- import { t as whatsappSetupPlugin } from "./channel.setup-CtTHpu8o.js";
11
+ import { t as whatsappSetupPlugin } from "./channel.setup-BNqtW-u1.js";
14
12
  import { t as DEFAULT_WEB_MEDIA_BYTES } from "./constants-HU41RHGI.js";
15
13
  import { n as listWhatsAppDirectoryGroupsFromConfig, r as listWhatsAppDirectoryPeersFromConfig } from "./directory-config-Dijefxc3.js";
16
- import { n as testing } from "./access-control-tKMSybhe.js";
17
- import { m as extractText, t as createWebSendApi } from "./send-api-3hUuzYv1.js";
18
- import { r as waitForWaConnection, t as createWaSocket } from "./session-CDgpDc0l.js";
14
+ import { n as testing } from "./access-control-Z0fYaWrx.js";
15
+ import { m as extractText, t as createWebSendApi } from "./send-api-C66vkRl9.js";
16
+ import { r as waitForWaConnection, t as createWaSocket } from "./session-D8UW2Vbn.js";
19
17
  import "openclaw/plugin-sdk/channel-actions";
20
18
  import "openclaw/plugin-sdk/account-resolution";
21
19
  import "openclaw/plugin-sdk/core";
@@ -1,34 +1,17 @@
1
1
  import { s as normalizeWhatsAppMessagingTarget } from "./normalize-target-bVWjgftN.js";
2
+ import { f as registerWhatsAppApprovalReactionTarget, i as sendTypingWhatsApp, p as unregisterWhatsAppApprovalReactionTarget, t as sendMessageWhatsApp } from "./send-C4LG-Cl6.js";
2
3
  import "./normalize-Bxwqo-bW.js";
3
- import { c as unregisterWhatsAppApprovalReactionTarget, i as sendTypingWhatsApp, s as registerWhatsAppApprovalReactionTarget, t as sendMessageWhatsApp } from "./send-D0iPQBMX.js";
4
4
  import { n as getWhatsAppRuntime } from "./runtime-BfAdAEYT.js";
5
- import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
6
5
  import { createSubsystemLogger } from "openclaw/plugin-sdk/runtime-env";
7
6
  import { buildApprovalReactionPendingContent } from "openclaw/plugin-sdk/approval-reaction-runtime";
8
7
  import { buildChannelApprovalNativeTargetKey } from "openclaw/plugin-sdk/approval-native-runtime";
9
- import { createChannelApprovalNativeRuntimeAdapter } from "openclaw/plugin-sdk/approval-handler-runtime";
10
- import { buildApprovalResolvedReplyPayload, buildPluginApprovalExpiredMessage, buildPluginApprovalResolvedMessage } from "openclaw/plugin-sdk/approval-runtime";
8
+ import { buildChannelApprovalExpiredText, buildChannelApprovalResolvedText, createChannelApprovalNativeRuntimeAdapter, resolvePreparedApprovalAccountId } from "openclaw/plugin-sdk/approval-handler-runtime";
9
+ import "openclaw/plugin-sdk/approval-runtime";
11
10
  //#region extensions/whatsapp/src/approval-handler.runtime.ts
12
11
  const log = createSubsystemLogger("whatsapp/approvals");
13
12
  function buildPendingPayload(params) {
14
13
  return buildApprovalReactionPendingContent(params);
15
14
  }
16
- function buildResolvedText(params) {
17
- if (params.view.approvalKind === "plugin") return buildPluginApprovalResolvedMessage(params.resolved);
18
- const resolvedByText = params.resolved.resolvedBy ? ` Resolved by ${params.resolved.resolvedBy}.` : "";
19
- return buildApprovalResolvedReplyPayload({
20
- approvalId: params.request.id,
21
- approvalSlug: params.request.id.slice(0, 8),
22
- text: `✅ Exec approval ${params.resolved.decision}.${resolvedByText} ID: ${params.request.id}`
23
- }).text ?? "";
24
- }
25
- function buildExpiredText(params) {
26
- if (params.view.approvalKind === "plugin") return buildPluginApprovalExpiredMessage(params.request);
27
- return `⏱️ Exec approval expired. ID: ${params.request.id}`;
28
- }
29
- function resolvePreparedAccountId(params) {
30
- return normalizeOptionalString(params.plannedAccountId) ?? normalizeOptionalString(params.contextAccountId);
31
- }
32
15
  const whatsappApprovalNativeRuntime = createChannelApprovalNativeRuntimeAdapter({
33
16
  eventKinds: ["exec", "plugin"],
34
17
  availability: {
@@ -43,7 +26,7 @@ const whatsappApprovalNativeRuntime = createChannelApprovalNativeRuntimeAdapter(
43
26
  }),
44
27
  buildResolvedResult: ({ request, resolved, view }) => ({
45
28
  kind: "update",
46
- payload: { text: buildResolvedText({
29
+ payload: { text: buildChannelApprovalResolvedText({
47
30
  request,
48
31
  resolved,
49
32
  view
@@ -51,7 +34,7 @@ const whatsappApprovalNativeRuntime = createChannelApprovalNativeRuntimeAdapter(
51
34
  }),
52
35
  buildExpiredResult: ({ request, view }) => ({
53
36
  kind: "update",
54
- payload: { text: buildExpiredText({
37
+ payload: { text: buildChannelApprovalExpiredText({
55
38
  request,
56
39
  view
57
40
  }) }
@@ -63,7 +46,7 @@ const whatsappApprovalNativeRuntime = createChannelApprovalNativeRuntimeAdapter(
63
46
  if (!to) return null;
64
47
  const prepared = {
65
48
  to,
66
- accountId: resolvePreparedAccountId({
49
+ accountId: resolvePreparedApprovalAccountId({
67
50
  plannedAccountId: plannedTarget.target.accountId,
68
51
  contextAccountId: accountId
69
52
  })
@@ -2,77 +2,53 @@ import { r as resolveDefaultWhatsAppAccountId, t as listAccountIds } from "./acc
2
2
  import { a as resolveWhatsAppAccount } from "./accounts-BMGM1RtF.js";
3
3
  import { c as normalizeWhatsAppTarget, i as looksLikeWhatsAppTargetId, n as isWhatsAppNewsletterJid, o as normalizeWhatsAppAllowFromEntry, s as normalizeWhatsAppMessagingTarget, t as isWhatsAppGroupJid } from "./normalize-target-bVWjgftN.js";
4
4
  import { t as resolveWhatsAppOutboundTarget } from "./resolve-outbound-target-CcdugbDf.js";
5
- import { t as resolveWhatsAppReactionLevel } from "./reaction-level-BF3d5IgO.js";
5
+ import { a as normalizeWhatsAppOutboundPayload, g as resolveWhatsAppReactionLevel, h as whatsappApprovalAuth, i as sendTypingWhatsApp, m as getWhatsAppApprovalApprovers, n as sendPollWhatsApp, o as normalizeWhatsAppPayloadText, s as normalizeWhatsAppPayloadTextPreservingIndentation, t as sendMessageWhatsApp } from "./send-C4LG-Cl6.js";
6
6
  import "./normalize-Bxwqo-bW.js";
7
- import { i as sendTypingWhatsApp, l as getWhatsAppApprovalApprovers, n as sendPollWhatsApp, t as sendMessageWhatsApp, u as whatsappApprovalAuth } from "./send-D0iPQBMX.js";
8
7
  import { n as getWhatsAppRuntime } from "./runtime-BfAdAEYT.js";
9
- import { r as normalizeWhatsAppPayloadTextPreservingIndentation } from "./outbound-media-contract-B3Y-9slb.js";
10
- import { t as createWhatsAppLoginTool } from "./agent-tools-login-BDzvb3ee.js";
11
- import { t as createWhatsAppOutboundBase } from "./outbound-base-MHdfVWvv.js";
8
+ import { p as toWhatsappJid } from "./text-runtime-Dk37KYHj.js";
9
+ import { t as createWhatsAppLoginTool } from "./agent-tools-login-BX7eHgDm.js";
10
+ import { i as lookupInboundMessageMetaForTarget } from "./quoted-message-CveINB35.js";
12
11
  import { t as whatsappCommandPolicy } from "./command-policy-BIOSHySD.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-cgB2JDjU.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";
14
13
  import { f as readWebAuthExistsForDecision, n as WHATSAPP_AUTH_UNSTABLE_CODE } from "./auth-store-BrKb0mwT.js";
15
14
  import { t as detectWhatsAppLegacyStateMigrations } from "./state-migrations-D_BmQUR9.js";
16
15
  import { createActionGate as createActionGate$1 } from "openclaw/plugin-sdk/channel-actions";
16
+ import { DEFAULT_ACCOUNT_ID, listCombinedAccountIds, normalizeOptionalAccountId, resolveListedDefaultAccountId } from "openclaw/plugin-sdk/account-core";
17
17
  import { normalizeLowercaseStringOrEmpty, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
18
- import { createMessageReceiptFromOutboundResults, defineChannelMessageAdapter } from "openclaw/plugin-sdk/channel-outbound";
18
+ import { createMessageReceiptFromOutboundResults, defineChannelMessageAdapter, resolveOutboundSendDep } from "openclaw/plugin-sdk/channel-outbound";
19
19
  import { asString, collectIssuesForEnabledAccounts, createAsyncComputedAccountStatusAdapter, createDefaultChannelRuntimeState, isRecord as isRecord$1 } from "openclaw/plugin-sdk/status-helpers";
20
20
  import { formatCliCommand } from "openclaw/plugin-sdk/cli-runtime";
21
21
  import { buildChannelOutboundSessionRoute } from "openclaw/plugin-sdk/core";
22
22
  import { buildApprovalReactionPromptPayloadForRequest } from "openclaw/plugin-sdk/approval-reaction-runtime";
23
- import { DEFAULT_ACCOUNT_ID } from "openclaw/plugin-sdk/account-id";
23
+ import { DEFAULT_ACCOUNT_ID as DEFAULT_ACCOUNT_ID$1 } from "openclaw/plugin-sdk/account-id";
24
24
  import { buildDmGroupAccountAllowlistAdapter } from "openclaw/plugin-sdk/allowlist-config-edit";
25
25
  import { createChatChannelPlugin } from "openclaw/plugin-sdk/channel-core";
26
26
  import { createLazyRuntimeModule } from "openclaw/plugin-sdk/lazy-runtime";
27
- import { matchesApprovalRequestFilters } from "openclaw/plugin-sdk/approval-client-runtime";
28
27
  import { createChannelApprovalCapability, splitChannelApprovalCapability } from "openclaw/plugin-sdk/approval-delivery-runtime";
29
28
  import { createLazyChannelApprovalNativeRuntimeAdapter } from "openclaw/plugin-sdk/approval-handler-adapter-runtime";
30
- import { createChannelApproverDmTargetResolver, createChannelNativeOriginTargetResolver, createNativeApprovalForwardingFallbackSuppressor, doesApprovalRequestMatchChannelAccount, nativeApprovalTargetsMatch, resolveApprovalRequestSessionTarget } from "openclaw/plugin-sdk/approval-native-runtime";
31
- import { normalizeAccountId as normalizeAccountId$1 } from "openclaw/plugin-sdk/routing";
29
+ import { createChannelApprovalForwardingEvaluator, createChannelApproverDmTargetResolver, createChannelNativeOriginTargetResolver, createNativeApprovalForwardingFallbackSuppressor, nativeApprovalTargetsMatch, resolveApprovalRequestSessionTarget } from "openclaw/plugin-sdk/approval-native-runtime";
30
+ import { normalizeAccountId as normalizeAccountId$2 } from "openclaw/plugin-sdk/routing";
32
31
  import { chunkText } from "openclaw/plugin-sdk/reply-chunking";
32
+ import { createAttachedChannelResultAdapter } from "openclaw/plugin-sdk/channel-send-result";
33
+ import { sendTextMediaPayload } from "openclaw/plugin-sdk/reply-payload";
33
34
  //#region extensions/whatsapp/src/approval-native.ts
34
- const DEFAULT_APPROVAL_FORWARDING_MODE = "session";
35
35
  function isWhatsAppApprovalTransportEnabled(params) {
36
36
  return resolveWhatsAppAccount({
37
37
  cfg: params.cfg,
38
38
  accountId: params.accountId
39
39
  }).enabled;
40
40
  }
41
- function resolveApprovalKind(request, approvalKind) {
42
- if (approvalKind) return approvalKind;
43
- return "command" in request.request ? "exec" : "plugin";
44
- }
45
- function resolveApprovalForwardingConfig(params) {
46
- return params.approvalKind === "plugin" ? params.cfg.approvals?.plugin : params.cfg.approvals?.exec;
47
- }
48
- function normalizeApprovalForwardingMode(mode) {
49
- return mode ?? DEFAULT_APPROVAL_FORWARDING_MODE;
50
- }
51
- function approvalModeIncludesSession(mode) {
52
- return mode === "session" || mode === "both";
53
- }
54
- function approvalModeIncludesTargets(mode) {
55
- return mode === "targets" || mode === "both";
56
- }
57
- function matchesForwardingFilters(params) {
58
- return matchesApprovalRequestFilters({
59
- request: params.request.request,
60
- agentFilter: params.config.agentFilter,
61
- sessionFilter: params.config.sessionFilter,
62
- fallbackAgentIdFromSessionKey: true
63
- });
64
- }
65
41
  function targetAccountMatchesWhatsAppAccount(params) {
66
42
  const targetAccountId = normalizeOptionalString(params.targetAccountId);
67
43
  const accountId = normalizeOptionalString(params.accountId);
68
- if (targetAccountId) return !accountId || normalizeAccountId$1(targetAccountId) === normalizeAccountId$1(accountId);
44
+ if (targetAccountId) return !accountId || normalizeAccountId$2(targetAccountId) === normalizeAccountId$2(accountId);
69
45
  if (!accountId) return true;
70
- const normalizedAccountId = normalizeAccountId$1(accountId);
71
- if (normalizedAccountId === normalizeAccountId$1(resolveDefaultWhatsAppAccountId(params.cfg))) return true;
46
+ const normalizedAccountId = normalizeAccountId$2(accountId);
47
+ if (normalizedAccountId === normalizeAccountId$2(resolveDefaultWhatsAppAccountId(params.cfg))) return true;
72
48
  const enabledAccountIds = listAccountIds(params.cfg).filter((candidateAccountId) => isWhatsAppApprovalTransportEnabled({
73
49
  cfg: params.cfg,
74
50
  accountId: candidateAccountId
75
- })).map((candidateAccountId) => normalizeAccountId$1(candidateAccountId));
51
+ })).map((candidateAccountId) => normalizeAccountId$2(candidateAccountId));
76
52
  return enabledAccountIds.length === 1 && enabledAccountIds[0] === normalizedAccountId;
77
53
  }
78
54
  function normalizeWhatsAppForwardTarget(target) {
@@ -115,65 +91,16 @@ function hasWhatsAppOriginOrSessionTarget(params) {
115
91
  accountId: params.accountId
116
92
  });
117
93
  }
118
- function canApprovalPotentiallyRouteToWhatsApp(params) {
119
- if (!isWhatsAppApprovalTransportEnabled(params)) return false;
120
- const config = resolveApprovalForwardingConfig(params);
121
- if (!config?.enabled) return false;
122
- const mode = normalizeApprovalForwardingMode(config.mode);
123
- if (approvalModeIncludesSession(mode)) return true;
124
- if (params.nativeSessionOnly) return false;
125
- return approvalModeIncludesTargets(mode) && hasMatchingWhatsAppTarget({
126
- cfg: params.cfg,
127
- config,
128
- accountId: params.accountId
129
- });
130
- }
131
- function canAnyApprovalPotentiallyRouteToWhatsApp(params) {
132
- return canApprovalPotentiallyRouteToWhatsApp({
133
- ...params,
134
- approvalKind: "exec"
135
- }) || canApprovalPotentiallyRouteToWhatsApp({
136
- ...params,
137
- approvalKind: "plugin"
138
- });
139
- }
140
- function isWhatsAppSessionApprovalEligible(params) {
141
- if (!isWhatsAppApprovalTransportEnabled(params)) return false;
142
- const config = resolveApprovalForwardingConfig(params);
143
- if (!config?.enabled) return false;
144
- if (!approvalModeIncludesSession(normalizeApprovalForwardingMode(config.mode))) return false;
145
- if (!matchesForwardingFilters({
146
- config,
147
- request: params.request
148
- })) return false;
149
- if (!doesApprovalRequestMatchChannelAccount({
150
- cfg: params.cfg,
151
- request: params.request,
152
- channel: "whatsapp",
153
- accountId: params.accountId
154
- })) return false;
155
- return hasWhatsAppOriginOrSessionTarget({
156
- cfg: params.cfg,
157
- accountId: params.accountId,
158
- request: params.request
159
- });
160
- }
161
- function isWhatsAppExplicitTargetEligible(params) {
162
- if (!isWhatsAppApprovalTransportEnabled(params)) return false;
163
- const config = resolveApprovalForwardingConfig(params);
164
- if (!config?.enabled) return false;
165
- if (!approvalModeIncludesTargets(normalizeApprovalForwardingMode(config.mode))) return false;
166
- if (!matchesForwardingFilters({
167
- config,
168
- request: params.request
169
- })) return false;
170
- return hasMatchingWhatsAppTarget({
171
- cfg: params.cfg,
172
- config,
173
- accountId: params.accountId,
174
- target: params.target
175
- });
176
- }
94
+ const whatsappApprovalForwarding = createChannelApprovalForwardingEvaluator({
95
+ channel: "whatsapp",
96
+ isTransportEnabled: isWhatsAppApprovalTransportEnabled,
97
+ hasMatchingTarget: hasMatchingWhatsAppTarget,
98
+ hasOriginOrSessionTarget: hasWhatsAppOriginOrSessionTarget
99
+ });
100
+ const canApprovalPotentiallyRouteToWhatsApp = whatsappApprovalForwarding.isPotentialRoute;
101
+ const canAnyApprovalPotentiallyRouteToWhatsApp = whatsappApprovalForwarding.canAnyPotentiallyRoute;
102
+ const isWhatsAppSessionApprovalEligible = whatsappApprovalForwarding.isSessionEligible;
103
+ const isWhatsAppExplicitTargetEligible = whatsappApprovalForwarding.isExplicitTargetEligible;
177
104
  function resolveTurnSourceWhatsAppOriginTarget(request) {
178
105
  if (normalizeLowercaseStringOrEmpty(request.request.turnSourceChannel) !== "whatsapp") return null;
179
106
  const to = normalizeWhatsAppMessagingTarget(request.request.turnSourceTo ?? "");
@@ -191,10 +118,7 @@ function resolveSessionWhatsAppOriginTarget(sessionTarget) {
191
118
  } : null;
192
119
  }
193
120
  function shouldHandleWhatsAppApprovalRequest(params) {
194
- return isWhatsAppSessionApprovalEligible({
195
- ...params,
196
- approvalKind: resolveApprovalKind(params.request, params.approvalKind)
197
- });
121
+ return whatsappApprovalForwarding.shouldHandleRequest(params);
198
122
  }
199
123
  const resolveWhatsAppOriginTargetBase = createChannelNativeOriginTargetResolver({
200
124
  channel: "whatsapp",
@@ -328,7 +252,7 @@ const whatsappApprovalCapability = createChannelApprovalCapability({
328
252
  accountId,
329
253
  request
330
254
  }),
331
- load: async () => (await import("./approval-handler.runtime-CnM8rqpB.js")).whatsappApprovalNativeRuntime
255
+ load: async () => (await import("./approval-handler.runtime-C25wPeBf.js")).whatsappApprovalNativeRuntime
332
256
  })
333
257
  });
334
258
  splitChannelApprovalCapability(whatsappApprovalCapability);
@@ -378,6 +302,123 @@ function describeWhatsAppMessageActions(params) {
378
302
  return { actions: Array.from(actions) };
379
303
  }
380
304
  //#endregion
305
+ //#region extensions/whatsapp/src/outbound-send-deps.ts
306
+ const WHATSAPP_LEGACY_OUTBOUND_SEND_DEP_KEYS = ["sendWhatsApp"];
307
+ //#endregion
308
+ //#region extensions/whatsapp/src/outbound-base.ts
309
+ function resolveQuoteLookupAccountId(cfg, accountId) {
310
+ const explicitAccountId = normalizeOptionalAccountId(accountId);
311
+ if (explicitAccountId) return explicitAccountId;
312
+ const channelCfg = cfg?.channels?.whatsapp;
313
+ return resolveListedDefaultAccountId({
314
+ accountIds: listCombinedAccountIds({
315
+ configuredAccountIds: channelCfg?.accounts && typeof channelCfg.accounts === "object" ? Object.keys(channelCfg.accounts).filter(Boolean) : [],
316
+ fallbackAccountIdWhenEmpty: DEFAULT_ACCOUNT_ID
317
+ }),
318
+ configuredDefaultAccountId: normalizeOptionalAccountId(channelCfg?.defaultAccount)
319
+ });
320
+ }
321
+ function createWhatsAppOutboundBase({ chunker, sendMessageWhatsApp, sendPollWhatsApp, shouldLogVerbose, resolveTarget, normalizeText = normalizeWhatsAppPayloadText, skipEmptyText = true }) {
322
+ const resolveQuotedMessageKey = (params) => {
323
+ const replyToId = params.replyToId?.trim();
324
+ if (!replyToId) return;
325
+ const targetJid = toWhatsappJid(params.to);
326
+ const cachedMeta = lookupInboundMessageMetaForTarget(params.accountId, targetJid, replyToId);
327
+ return {
328
+ id: replyToId,
329
+ remoteJid: cachedMeta?.remoteJid ?? targetJid,
330
+ fromMe: cachedMeta?.fromMe ?? false,
331
+ participant: cachedMeta?.participant,
332
+ messageText: cachedMeta?.body
333
+ };
334
+ };
335
+ const outbound = {
336
+ deliveryMode: "gateway",
337
+ chunker,
338
+ chunkerMode: "text",
339
+ textChunkLimit: 4e3,
340
+ sanitizeText: ({ text }) => normalizeText(text),
341
+ deliveryCapabilities: { durableFinal: {
342
+ text: true,
343
+ replyTo: true,
344
+ messageSendingHooks: true
345
+ } },
346
+ pollMaxOptions: 12,
347
+ resolveTarget,
348
+ ...createAttachedChannelResultAdapter({
349
+ channel: "whatsapp",
350
+ sendText: async ({ cfg, to, text, accountId, deps, gifPlayback, replyToId }) => {
351
+ const normalizedText = normalizeText(text);
352
+ if (skipEmptyText && !normalizedText) return { messageId: "" };
353
+ const send = resolveOutboundSendDep(deps, "whatsapp", { legacyKeys: WHATSAPP_LEGACY_OUTBOUND_SEND_DEP_KEYS }) ?? sendMessageWhatsApp;
354
+ const quotedMessageKey = resolveQuotedMessageKey({
355
+ accountId: resolveQuoteLookupAccountId(cfg, accountId),
356
+ to,
357
+ replyToId
358
+ });
359
+ return await send(to, normalizedText, {
360
+ verbose: false,
361
+ cfg,
362
+ accountId: accountId ?? void 0,
363
+ gifPlayback,
364
+ quotedMessageKey
365
+ });
366
+ },
367
+ sendMedia: async ({ cfg, to, text, mediaUrl, mediaAccess, mediaLocalRoots, mediaReadFile, audioAsVoice, accountId, deps, gifPlayback, forceDocument, replyToId }) => {
368
+ const send = resolveOutboundSendDep(deps, "whatsapp", { legacyKeys: WHATSAPP_LEGACY_OUTBOUND_SEND_DEP_KEYS }) ?? sendMessageWhatsApp;
369
+ const quotedMessageKey = resolveQuotedMessageKey({
370
+ accountId: resolveQuoteLookupAccountId(cfg, accountId),
371
+ to,
372
+ replyToId
373
+ });
374
+ return await send(to, normalizeText(text), {
375
+ verbose: false,
376
+ cfg,
377
+ mediaUrl,
378
+ mediaAccess,
379
+ mediaLocalRoots,
380
+ mediaReadFile,
381
+ ...audioAsVoice === void 0 ? {} : { audioAsVoice },
382
+ accountId: accountId ?? void 0,
383
+ gifPlayback,
384
+ forceDocument,
385
+ quotedMessageKey
386
+ });
387
+ },
388
+ sendPoll: async ({ cfg, to, poll, accountId }) => await sendPollWhatsApp(to, poll, {
389
+ verbose: shouldLogVerbose(),
390
+ accountId: accountId ?? void 0,
391
+ cfg
392
+ })
393
+ })
394
+ };
395
+ return {
396
+ ...outbound,
397
+ sendPayload: async (ctx) => {
398
+ if (ctx.payload.isError === true) return {
399
+ channel: "whatsapp",
400
+ messageId: ""
401
+ };
402
+ const payload = normalizeWhatsAppOutboundPayload(ctx.payload, { normalizeText });
403
+ if (!payload.text && !(payload.mediaUrl || payload.mediaUrls?.length)) {
404
+ if (ctx.payload.interactive || ctx.payload.presentation || ctx.payload.channelData) throw new Error("WhatsApp sendPayload does not support structured-only payloads without text or media.");
405
+ return {
406
+ channel: "whatsapp",
407
+ messageId: ""
408
+ };
409
+ }
410
+ return await sendTextMediaPayload({
411
+ channel: "whatsapp",
412
+ ctx: {
413
+ ...ctx,
414
+ payload
415
+ },
416
+ adapter: outbound
417
+ });
418
+ }
419
+ };
420
+ }
421
+ //#endregion
381
422
  //#region extensions/whatsapp/src/channel-outbound.ts
382
423
  function normalizeWhatsAppChannelPayloadText(text) {
383
424
  return normalizeWhatsAppPayloadTextPreservingIndentation(text);
@@ -610,7 +651,7 @@ function collectWhatsAppStatusIssues(accounts) {
610
651
  //#endregion
611
652
  //#region extensions/whatsapp/src/channel.ts
612
653
  const loadWhatsAppDirectoryConfig = createLazyRuntimeModule(() => import("./directory-config-Dijefxc3.js").then((n) => n.t));
613
- const loadWhatsAppChannelReactAction = createLazyRuntimeModule(() => import("./channel-react-action-Bo_hIjzN.js"));
654
+ const loadWhatsAppChannelReactAction = createLazyRuntimeModule(() => import("./channel-react-action-Cd2qkLqp.js"));
614
655
  function resolveWhatsAppTargetInfo(raw) {
615
656
  const normalized = normalizeWhatsAppTarget(raw);
616
657
  if (!normalized) return null;
@@ -721,7 +762,7 @@ const whatsappPlugin = createChatChannelPlugin({
721
762
  },
722
763
  approvalCapability: whatsappApprovalCapability,
723
764
  auth: { login: async ({ cfg, accountId, runtime, verbose }) => {
724
- const resolvedAccountId = accountId?.trim() || whatsappPlugin.config.defaultAccountId?.(cfg) || DEFAULT_ACCOUNT_ID;
765
+ const resolvedAccountId = accountId?.trim() || whatsappPlugin.config.defaultAccountId?.(cfg) || DEFAULT_ACCOUNT_ID$1;
725
766
  await (await loadWhatsAppChannelRuntime()).loginWeb(Boolean(verbose), void 0, runtime, resolvedAccountId);
726
767
  } },
727
768
  lifecycle: { detectLegacyStateMigrations: ({ oauthDir }) => detectWhatsAppLegacyStateMigrations({ oauthDir }) },
@@ -739,7 +780,7 @@ const whatsappPlugin = createChatChannelPlugin({
739
780
  }
740
781
  },
741
782
  status: createAsyncComputedAccountStatusAdapter({
742
- defaultRuntime: createDefaultChannelRuntimeState(DEFAULT_ACCOUNT_ID, {
783
+ defaultRuntime: createDefaultChannelRuntimeState(DEFAULT_ACCOUNT_ID$1, {
743
784
  connected: false,
744
785
  reconnectAttempts: 0,
745
786
  lastConnectedAt: null,
@@ -859,4 +900,4 @@ const whatsappPlugin = createChatChannelPlugin({
859
900
  }
860
901
  });
861
902
  //#endregion
862
- export { whatsappPlugin as t };
903
+ export { WHATSAPP_LEGACY_OUTBOUND_SEND_DEP_KEYS as n, whatsappPlugin as t };
@@ -1,2 +1,2 @@
1
- import { t as whatsappPlugin } from "./channel-DeRnX7Dx.js";
1
+ import { t as whatsappPlugin } from "./channel-CeSu_mqS.js";
2
2
  export { whatsappPlugin };
@@ -1,8 +1,8 @@
1
1
  import { a as resolveWhatsAppAccount, s as resolveWhatsAppMediaMaxBytes } from "./accounts-BMGM1RtF.js";
2
2
  import { c as normalizeWhatsAppTarget, t as isWhatsAppGroupJid } from "./normalize-target-bVWjgftN.js";
3
- import { r as resolveAuthorizedWhatsAppOutboundTarget, t as handleWhatsAppAction } from "./action-runtime-ClWX76J7.js";
3
+ import { r as resolveAuthorizedWhatsAppOutboundTarget, t as handleWhatsAppAction } from "./action-runtime-BdhkGtaP.js";
4
+ import { t as sendMessageWhatsApp } from "./send-C4LG-Cl6.js";
4
5
  import "./normalize-Bxwqo-bW.js";
5
- import { t as sendMessageWhatsApp } from "./send-D0iPQBMX.js";
6
6
  import { jsonResult, readStringOrNumberParam, readStringParam as readStringParam$1, resolveReactionMessageId } from "openclaw/plugin-sdk/channel-actions";
7
7
  //#region extensions/whatsapp/src/channel-react-action.ts
8
8
  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 { 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
- import { t as getActiveWebListener$1 } from "./active-listener-B4SDebQ6.js";
4
- import { t as monitorWebChannel$1 } from "./monitor-BdKlBuaK.js";
5
- import { t as loginWeb$1 } from "./login-1rs_uPW-.js";
6
- import { whatsappSetupWizard as whatsappSetupWizard$1 } from "./setup-surface-BouY1WI8.js";
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";
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-cgB2JDjU.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";
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) {
@@ -1,7 +1,6 @@
1
- import { n as registerWhatsAppConnectionController, r as unregisterWhatsAppConnectionController } from "./connection-controller-registry-TSX_udJp.js";
2
- import { n as getStatusCode, t as formatError } from "./session-errors-BAj9D2La.js";
1
+ import { a as unregisterWhatsAppConnectionController, i as registerWhatsAppConnectionController, n as getStatusCode, t as formatError } from "./session-errors-CbsoQqoy.js";
3
2
  import { c as logoutWeb } from "./auth-store-BrKb0mwT.js";
4
- import { r as waitForWaConnection, t as createWaSocket } from "./session-CDgpDc0l.js";
3
+ import { r as waitForWaConnection, t as createWaSocket } from "./session-D8UW2Vbn.js";
5
4
  import { computeBackoff, info, sleepWithAbort } from "openclaw/plugin-sdk/runtime-env";
6
5
  import { clamp } from "openclaw/plugin-sdk/text-utility-runtime";
7
6
  import { DisconnectReason } from "baileys";
@@ -4,8 +4,7 @@ import { t as resolveLegacyGroupSessionKey$1 } from "./group-session-contract-DD
4
4
  import { n as unsupportedSecretRefSurfacePatterns, t as collectUnsupportedSecretRefConfigCandidates } from "./security-contract-nAzD945y.js";
5
5
  import { r as isLegacyGroupSessionKey$1, t as canonicalizeLegacySessionKey$1 } from "./session-contract-DMTm6Q_L.js";
6
6
  import { n as listWhatsAppDirectoryGroupsFromConfig, r as listWhatsAppDirectoryPeersFromConfig } from "./directory-config-Dijefxc3.js";
7
- import { t as resolveWhatsAppRuntimeGroupPolicy$1 } from "./runtime-group-policy-DeSRFXEV.js";
8
- import { n as testing } from "./access-control-tKMSybhe.js";
7
+ import { a as resolveWhatsAppRuntimeGroupPolicy$1, n as testing } from "./access-control-Z0fYaWrx.js";
9
8
  //#region extensions/whatsapp/contract-api.ts
10
9
  const canonicalizeLegacySessionKey = canonicalizeLegacySessionKey$1;
11
10
  const isLegacyGroupSessionKey = isLegacyGroupSessionKey$1;
@@ -1,5 +1,5 @@
1
- import { n as getStatusCode, t as formatError } from "./session-errors-BAj9D2La.js";
2
- import { t as createWhatsAppLoginTool } from "./agent-tools-login-BDzvb3ee.js";
3
- import { c as logoutWeb, g as readWebSelfId, l as pickWebChannel, o as getWebAuthAgeMs, s as logWebSelfId, t as WA_WEB_AUTH_DIR, x as webAuthExists } from "./auth-store-BrKb0mwT.js";
4
- import { t as getActiveWebListener } from "./active-listener-B4SDebQ6.js";
5
- export { WA_WEB_AUTH_DIR, createWhatsAppLoginTool, formatError, getActiveWebListener, getStatusCode, getWebAuthAgeMs, logWebSelfId, logoutWeb, pickWebChannel, readWebSelfId, webAuthExists };
1
+ import { n as getStatusCode, t as formatError } from "./session-errors-CbsoQqoy.js";
2
+ import { t as createWhatsAppLoginTool } from "./agent-tools-login-BX7eHgDm.js";
3
+ import { c as logoutWeb, g as readWebSelfId, l as pickWebChannel, o as getWebAuthAgeMs, s as logWebSelfId, t as WA_WEB_AUTH_DIR, x as webAuthExists, y as resolveDefaultWebAuthDir } from "./auth-store-BrKb0mwT.js";
4
+ import { t as getActiveWebListener } from "./active-listener-CFwkn3ho.js";
5
+ export { WA_WEB_AUTH_DIR, createWhatsAppLoginTool, formatError, getActiveWebListener, getStatusCode, getWebAuthAgeMs, logWebSelfId, logoutWeb, pickWebChannel, readWebSelfId, resolveDefaultWebAuthDir, webAuthExists };
@@ -1,8 +1,8 @@
1
1
  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
- import { a as renderQrTerminal, i as resolveWhatsAppSocketTiming, t as createWaSocket } from "./session-CDgpDc0l.js";
5
- import { a as closeWaSocketSoon, o as waitForWhatsAppLoginResult } from "./connection-controller-ja6z4F_k.js";
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";
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";
@@ -19,7 +19,7 @@ async function loginWeb(verbose, waitForConnection, runtime = defaultRuntime, ac
19
19
  const restoredFromBackup = await restoreCredsFromBackupIfNeeded(account.authDir);
20
20
  const onQr = (qr) => {
21
21
  runtime.log("Open the WhatsApp app, go to Linked Devices, then scan this QR:");
22
- renderQrTerminal(qr).then((output) => {
22
+ renderQrTerminal(qr, { small: true }).then((output) => {
23
23
  runtime.log(output.endsWith("\n") ? output.slice(0, -1) : output);
24
24
  }).catch((err) => {
25
25
  runtime.error(`failed rendering WhatsApp QR: ${String(err)}`);