@openclaw/whatsapp 2026.8.1-beta.2 → 2026.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (242) hide show
  1. package/dist/{accounts-BX2fZUyR.js → accounts-CeKQbu_s.js} +9 -26
  2. package/dist/{action-runtime-B4e3XFOY.js → action-runtime-YA_Yvunu.js} +2 -2
  3. package/dist/action-runtime-api.js +1 -1
  4. package/dist/action-runtime.runtime.js +1 -1
  5. package/dist/{call-tool-api.js → agent-tools-api.js} +11 -4
  6. package/dist/{agent-tools-login-BjRpD-JQ.js → agent-tools-login-B-2qZPzc.js} +12 -3
  7. package/dist/api.js +7 -7
  8. package/dist/{approval-handler.runtime-fgGZhALv.js → approval-handler.runtime-C7jZ8rsD.js} +3 -3
  9. package/dist/{approval-reactions-CmtJCxe_.js → approval-reactions-rpaNVHzZ.js} +11 -15
  10. package/dist/{auth-store-B_DQIdzp.js → auth-store-CtpBqH5S.js} +3 -6
  11. package/dist/{channel-DJVQHz_V.js → channel-Dx09AAmX.js} +11 -13
  12. package/dist/channel-plugin-api.js +1 -1
  13. package/dist/{channel-react-action-d6OacTNj.js → channel-react-action-n9a8Hk5i.js} +14 -12
  14. package/dist/{channel.runtime-RxuNGZ7w.js → channel.runtime-D_PjmeMT.js} +4 -4
  15. package/dist/{channel.setup-Cmvd967u.js → channel.setup-CRJQiWbh.js} +1 -1
  16. package/dist/{connection-controller-CUyZgGpf.js → connection-controller-CIYuBJrs.js} +2 -2
  17. package/dist/{directory-config-Pc4f07wB.js → directory-config-Ci8Jjsw4.js} +3 -3
  18. package/dist/directory-contract-api.js +1 -1
  19. package/dist/{group-session-key-DmFc_Cqi.js → group-session-key-CH9jJIVQ.js} +1 -1
  20. package/dist/index.js +4 -4
  21. package/dist/light-runtime-api.js +2 -2
  22. package/dist/{login-D6_rfxTZ.js → login-1u5WcfTn.js} +4 -4
  23. package/dist/{login-qr-B0VyVSqQ.js → login-qr-B_1sr0hk.js} +38 -17
  24. package/dist/login-qr-runtime.js +1 -1
  25. package/dist/{monitor-BCe5Mm-1.js → monitor-CySzv38g.js} +156 -564
  26. package/dist/{question-reactions-D3eAeB0i.js → question-reactions-B9D6MHXZ.js} +1 -1
  27. package/dist/runtime-api.js +8 -8
  28. package/dist/{send-prK8F7Vj.js → send-C3S-NqyO.js} +24 -10
  29. package/dist/{send-api-DimZST3E.js → send-api-C-FFC1p_.js} +46 -36
  30. package/dist/{setup-finalize-D3n71Uyx.js → setup-finalize-CRzMpx84.js} +4 -4
  31. package/dist/setup-plugin-api.js +1 -1
  32. package/dist/{setup-surface-BCZszf3l.js → setup-surface-ym4doiv3.js} +3 -3
  33. package/dist/{shared-Dp9M3ZPX.js → shared-D3B14d45.js} +12 -6
  34. package/dist/{socket-close-09FojDO2.js → socket-close-2T0_jZTN.js} +1 -1
  35. package/node_modules/baileys/lib/Defaults/index.js +1 -1
  36. package/node_modules/baileys/lib/Socket/business.d.ts.map +1 -1
  37. package/node_modules/baileys/lib/Socket/chats.d.ts +1 -0
  38. package/node_modules/baileys/lib/Socket/chats.d.ts.map +1 -1
  39. package/node_modules/baileys/lib/Socket/chats.js +10 -5
  40. package/node_modules/baileys/lib/Socket/chats.js.map +1 -1
  41. package/node_modules/baileys/lib/Socket/communities.d.ts.map +1 -1
  42. package/node_modules/baileys/lib/Socket/groups.d.ts.map +1 -1
  43. package/node_modules/baileys/lib/Socket/index.d.ts.map +1 -1
  44. package/node_modules/baileys/lib/Socket/messages-recv.d.ts.map +1 -1
  45. package/node_modules/baileys/lib/Socket/messages-send.d.ts.map +1 -1
  46. package/node_modules/baileys/lib/Socket/newsletter.d.ts.map +1 -1
  47. package/node_modules/baileys/lib/Socket/socket.d.ts.map +1 -1
  48. package/node_modules/baileys/lib/Socket/socket.js +3 -0
  49. package/node_modules/baileys/lib/Socket/socket.js.map +1 -1
  50. package/node_modules/baileys/lib/Types/index.d.ts +1 -0
  51. package/node_modules/baileys/lib/Types/index.d.ts.map +1 -1
  52. package/node_modules/baileys/lib/Types/index.js.map +1 -1
  53. package/node_modules/baileys/lib/Utils/browser-utils.d.ts.map +1 -1
  54. package/node_modules/baileys/lib/Utils/browser-utils.js +1 -0
  55. package/node_modules/baileys/lib/Utils/browser-utils.js.map +1 -1
  56. package/node_modules/baileys/lib/Utils/generics.d.ts +1 -0
  57. package/node_modules/baileys/lib/Utils/generics.d.ts.map +1 -1
  58. package/node_modules/baileys/lib/Utils/generics.js +1 -1
  59. package/node_modules/baileys/lib/Utils/generics.js.map +1 -1
  60. package/node_modules/baileys/lib/Utils/tc-token-utils.d.ts.map +1 -1
  61. package/node_modules/baileys/lib/Utils/tc-token-utils.js +3 -2
  62. package/node_modules/baileys/lib/Utils/tc-token-utils.js.map +1 -1
  63. package/node_modules/baileys/lib/Utils/validate-connection.d.ts.map +1 -1
  64. package/node_modules/baileys/lib/Utils/validate-connection.js +9 -2
  65. package/node_modules/baileys/lib/Utils/validate-connection.js.map +1 -1
  66. package/node_modules/baileys/node_modules/content-type/README.md +2 -0
  67. package/node_modules/baileys/node_modules/content-type/dist/index.d.ts +20 -0
  68. package/node_modules/baileys/node_modules/content-type/dist/index.js +20 -14
  69. package/node_modules/baileys/node_modules/content-type/dist/index.js.map +1 -1
  70. package/node_modules/baileys/node_modules/content-type/package.json +1 -1
  71. package/node_modules/baileys/node_modules/file-type/package.json +1 -1
  72. package/node_modules/baileys/node_modules/file-type/readme.md +3 -0
  73. package/node_modules/baileys/node_modules/file-type/source/detectors/zip.js +6 -1
  74. package/node_modules/baileys/node_modules/file-type/source/index.d.ts +3 -0
  75. package/node_modules/baileys/node_modules/file-type/source/index.js +25 -13
  76. package/node_modules/baileys/node_modules/music-metadata/LICENSE.txt +9 -9
  77. package/node_modules/baileys/node_modules/music-metadata/README.md +878 -878
  78. package/node_modules/baileys/node_modules/music-metadata/lib/ParseError.d.ts +1 -1
  79. package/node_modules/baileys/node_modules/music-metadata/lib/ParseError.js +1 -1
  80. package/node_modules/baileys/node_modules/music-metadata/lib/asf/AsfObject.d.ts +1 -4
  81. package/node_modules/baileys/node_modules/music-metadata/lib/asf/AsfObject.js +66 -30
  82. package/node_modules/baileys/node_modules/music-metadata/lib/asf/AsfParser.d.ts +5 -1
  83. package/node_modules/baileys/node_modules/music-metadata/lib/asf/AsfParser.js +94 -25
  84. package/node_modules/baileys/node_modules/music-metadata/lib/dsf/DsfChunk.js +2 -2
  85. package/node_modules/baileys/node_modules/music-metadata/lib/dsf/DsfParser.js +38 -13
  86. package/node_modules/baileys/node_modules/music-metadata/lib/mp4/AtomToken.js +2 -1
  87. package/node_modules/baileys/node_modules/music-metadata/lib/mp4/MP4Parser.js +34 -7
  88. package/node_modules/baileys/node_modules/music-metadata/lib/ogg/speex/SpeexStream.d.ts +7 -0
  89. package/node_modules/baileys/node_modules/music-metadata/lib/ogg/speex/SpeexStream.js +13 -0
  90. package/node_modules/baileys/node_modules/music-metadata/lib/riff/RiffChunk.js +1 -1
  91. package/node_modules/baileys/node_modules/music-metadata/package.json +156 -156
  92. package/node_modules/baileys/node_modules/protobufjs/README.md +61 -84
  93. package/node_modules/baileys/node_modules/protobufjs/dist/light/protobuf.js +66 -45
  94. package/node_modules/baileys/node_modules/protobufjs/dist/light/protobuf.js.map +1 -1
  95. package/node_modules/baileys/node_modules/protobufjs/dist/light/protobuf.min.js +3 -3
  96. package/node_modules/baileys/node_modules/protobufjs/dist/light/protobuf.min.js.map +1 -1
  97. package/node_modules/baileys/node_modules/protobufjs/dist/minimal/protobuf.js +47 -40
  98. package/node_modules/baileys/node_modules/protobufjs/dist/minimal/protobuf.js.map +1 -1
  99. package/node_modules/baileys/node_modules/protobufjs/dist/minimal/protobuf.min.js +3 -3
  100. package/node_modules/baileys/node_modules/protobufjs/dist/minimal/protobuf.min.js.map +1 -1
  101. package/node_modules/baileys/node_modules/protobufjs/dist/protobuf.js +92 -68
  102. package/node_modules/baileys/node_modules/protobufjs/dist/protobuf.js.map +1 -1
  103. package/node_modules/baileys/node_modules/protobufjs/dist/protobuf.min.js +3 -3
  104. package/node_modules/baileys/node_modules/protobufjs/dist/protobuf.min.js.map +1 -1
  105. package/node_modules/baileys/node_modules/protobufjs/ext/descriptor.js +26 -10
  106. package/node_modules/baileys/node_modules/protobufjs/index.d.ts +3 -0
  107. package/node_modules/baileys/node_modules/protobufjs/package.json +1 -1
  108. package/node_modules/baileys/node_modules/protobufjs/src/converter.js +5 -1
  109. package/node_modules/baileys/node_modules/protobufjs/src/enum.js +5 -2
  110. package/node_modules/baileys/node_modules/protobufjs/src/field.js +6 -1
  111. package/node_modules/baileys/node_modules/protobufjs/src/parse.js +26 -23
  112. package/node_modules/baileys/node_modules/protobufjs/src/reader.js +36 -9
  113. package/node_modules/baileys/node_modules/protobufjs/src/util/codegen.js +3 -1
  114. package/node_modules/baileys/node_modules/protobufjs/src/util/utf8.js +2 -28
  115. package/node_modules/baileys/node_modules/protobufjs/src/writer.js +7 -1
  116. package/node_modules/baileys/package.json +1 -1
  117. package/node_modules/typebox/build/format/date.d.mts +1 -1
  118. package/node_modules/typebox/build/format/date.mjs +1 -1
  119. package/node_modules/typebox/build/format/date_time.d.mts +2 -2
  120. package/node_modules/typebox/build/format/date_time.mjs +3 -3
  121. package/node_modules/typebox/build/format/email.d.mts +1 -1
  122. package/node_modules/typebox/build/format/email.mjs +2 -2
  123. package/node_modules/typebox/build/format/hostname.mjs +2 -10
  124. package/node_modules/typebox/build/format/idn_email.d.mts +1 -1
  125. package/node_modules/typebox/build/format/idn_email.mjs +3 -3
  126. package/node_modules/typebox/build/format/idn_hostname.d.mts +1 -0
  127. package/node_modules/typebox/build/format/idn_hostname.mjs +3 -11
  128. package/node_modules/typebox/build/format/idna/format/bidi.d.mts +3 -0
  129. package/node_modules/typebox/build/format/idna/format/bidi.mjs +98 -0
  130. package/node_modules/typebox/build/format/idna/format/puny.d.mts +3 -0
  131. package/node_modules/typebox/build/format/idna/format/puny.mjs +144 -0
  132. package/node_modules/typebox/build/format/idna/hostname.d.mts +1 -0
  133. package/node_modules/typebox/build/format/idna/hostname.mjs +16 -0
  134. package/node_modules/typebox/build/format/idna/idn-hostname.d.mts +1 -0
  135. package/node_modules/typebox/build/format/idna/idn-hostname.mjs +23 -0
  136. package/node_modules/typebox/build/format/idna/index.d.mts +2 -0
  137. package/node_modules/typebox/build/format/idna/index.mjs +2 -0
  138. package/node_modules/typebox/build/format/idna/label/ascii.d.mts +1 -0
  139. package/node_modules/typebox/build/format/idna/label/ascii.mjs +9 -0
  140. package/node_modules/typebox/build/format/idna/label/puny.d.mts +1 -0
  141. package/node_modules/typebox/build/format/idna/label/puny.mjs +28 -0
  142. package/node_modules/typebox/build/format/idna/label/unicode.d.mts +1 -0
  143. package/node_modules/typebox/build/format/idna/label/unicode.mjs +106 -0
  144. package/node_modules/typebox/build/format/idna/pattern/pattern.d.mts +30 -0
  145. package/node_modules/typebox/build/format/idna/pattern/pattern.mjs +70 -0
  146. package/node_modules/typebox/build/format/ipv4.d.mts +0 -1
  147. package/node_modules/typebox/build/format/ipv4.mjs +2 -32
  148. package/node_modules/typebox/build/format/ipv6.mjs +2 -61
  149. package/node_modules/typebox/build/format/iri.d.mts +2 -2
  150. package/node_modules/typebox/build/format/iri.mjs +26 -8
  151. package/node_modules/typebox/build/format/iri_reference.d.mts +2 -2
  152. package/node_modules/typebox/build/format/iri_reference.mjs +9 -55
  153. package/node_modules/typebox/build/format/regex.d.mts +1 -2
  154. package/node_modules/typebox/build/format/regex.mjs +2 -6
  155. package/node_modules/typebox/build/format/time.d.mts +2 -2
  156. package/node_modules/typebox/build/format/time.mjs +19 -14
  157. package/node_modules/typebox/build/format/uri.d.mts +1 -1
  158. package/node_modules/typebox/build/format/uri.mjs +3 -130
  159. package/node_modules/typebox/build/format/uri_reference.d.mts +1 -1
  160. package/node_modules/typebox/build/format/uri_reference.mjs +2 -3
  161. package/node_modules/typebox/build/format/uri_template.d.mts +2 -3
  162. package/node_modules/typebox/build/format/uri_template.mjs +4 -5
  163. package/node_modules/typebox/build/format/url.d.mts +3 -3
  164. package/node_modules/typebox/build/format/url.mjs +4 -5
  165. package/node_modules/typebox/build/guard/emit.d.mts +3 -1
  166. package/node_modules/typebox/build/guard/emit.mjs +12 -5
  167. package/node_modules/typebox/build/guard/guard.d.mts +8 -2
  168. package/node_modules/typebox/build/guard/guard.mjs +25 -4
  169. package/node_modules/typebox/build/guard/string.d.mts +2 -2
  170. package/node_modules/typebox/build/guard/string.mjs +7 -7
  171. package/node_modules/typebox/build/schema/engine/_context.mjs +3 -3
  172. package/node_modules/typebox/build/schema/engine/_functions.mjs +1 -2
  173. package/node_modules/typebox/build/schema/engine/_regexp.d.mts +2 -0
  174. package/node_modules/typebox/build/schema/engine/_regexp.mjs +4 -0
  175. package/node_modules/typebox/build/schema/engine/_stack.mjs +12 -13
  176. package/node_modules/typebox/build/schema/engine/additionalItems.mjs +17 -7
  177. package/node_modules/typebox/build/schema/engine/additionalProperties.mjs +4 -3
  178. package/node_modules/typebox/build/schema/engine/contains.mjs +18 -6
  179. package/node_modules/typebox/build/schema/engine/enum.mjs +1 -1
  180. package/node_modules/typebox/build/schema/engine/items.mjs +26 -6
  181. package/node_modules/typebox/build/schema/engine/maxContains.mjs +3 -3
  182. package/node_modules/typebox/build/schema/engine/minContains.mjs +14 -4
  183. package/node_modules/typebox/build/schema/engine/not.mjs +4 -2
  184. package/node_modules/typebox/build/schema/engine/oneOf.mjs +7 -6
  185. package/node_modules/typebox/build/schema/engine/pattern.mjs +3 -2
  186. package/node_modules/typebox/build/schema/engine/patternProperties.mjs +4 -3
  187. package/node_modules/typebox/build/schema/engine/ref.mjs +1 -7
  188. package/node_modules/typebox/build/schema/engine/schema.mjs +13 -4
  189. package/node_modules/typebox/build/schema/engine/type.mjs +1 -1
  190. package/node_modules/typebox/build/schema/resolve/resolve.d.mts +4 -1
  191. package/node_modules/typebox/build/schema/resolve/resolve.mjs +202 -1
  192. package/node_modules/typebox/build/schema/static/propertyNames.d.mts +5 -0
  193. package/node_modules/typebox/build/schema/static/propertyNames.mjs +3 -0
  194. package/node_modules/typebox/build/schema/static/schema.d.mts +3 -0
  195. package/node_modules/typebox/build/schema/types/index.d.mts +0 -2
  196. package/node_modules/typebox/build/schema/types/index.mjs +0 -2
  197. package/node_modules/typebox/build/system/memory/clone.mjs +14 -11
  198. package/node_modules/typebox/build/system/memory/discard.mjs +6 -5
  199. package/node_modules/typebox/build/system/settings/settings.d.mts +9 -0
  200. package/node_modules/typebox/build/system/settings/settings.mjs +2 -0
  201. package/node_modules/typebox/build/type/engine/call/distribute_arguments.d.mts +6 -1
  202. package/node_modules/typebox/build/type/engine/call/distribute_arguments.mjs +16 -3
  203. package/node_modules/typebox/build/type/engine/call/instantiate.mjs +34 -4
  204. package/node_modules/typebox/build/type/engine/evaluate/broaden.d.mts +5 -5
  205. package/node_modules/typebox/build/type/engine/evaluate/broaden.mjs +20 -26
  206. package/node_modules/typebox/build/type/engine/evaluate/compare.d.mts +6 -10
  207. package/node_modules/typebox/build/type/engine/evaluate/compare.mjs +9 -13
  208. package/node_modules/typebox/build/type/engine/evaluate/composite.d.mts +7 -4
  209. package/node_modules/typebox/build/type/engine/evaluate/composite.mjs +12 -19
  210. package/node_modules/typebox/build/type/engine/evaluate/distribute.d.mts +4 -20
  211. package/node_modules/typebox/build/type/engine/evaluate/distribute.mjs +8 -20
  212. package/node_modules/typebox/build/type/engine/evaluate/evaluate.d.mts +4 -4
  213. package/node_modules/typebox/build/type/engine/evaluate/evaluate.mjs +11 -8
  214. package/node_modules/typebox/build/type/engine/evaluate/flatten.d.mts +1 -1
  215. package/node_modules/typebox/build/type/engine/evaluate/flatten.mjs +3 -4
  216. package/node_modules/typebox/build/type/engine/evaluate/narrow.d.mts +17 -2
  217. package/node_modules/typebox/build/type/engine/evaluate/narrow.mjs +26 -6
  218. package/node_modules/typebox/build/type/engine/exclude/operation.mjs +3 -4
  219. package/node_modules/typebox/build/type/engine/extract/operation.d.mts +1 -1
  220. package/node_modules/typebox/build/type/engine/extract/operation.mjs +3 -4
  221. package/node_modules/typebox/build/type/engine/priority/priority.d.mts +2 -2
  222. package/node_modules/typebox/build/type/engine/priority/priority.mjs +3 -4
  223. package/node_modules/typebox/build/type/script/mapping.d.mts +32 -29
  224. package/node_modules/typebox/build/type/script/mapping.mjs +18 -25
  225. package/node_modules/typebox/build/type/script/parser.d.mts +19 -25
  226. package/node_modules/typebox/build/type/script/parser.mjs +27 -23
  227. package/node_modules/typebox/build/value/errors/errors.d.mts +2 -2
  228. package/node_modules/typebox/build/value/errors/errors.mjs +1 -1
  229. package/node_modules/typebox/package.json +27 -27
  230. package/node_modules/typebox/readme.md +79 -82
  231. package/openclaw.plugin.json +2 -1
  232. package/package.json +6 -6
  233. package/node_modules/typebox/build/format/_idna.d.mts +0 -2
  234. package/node_modules/typebox/build/format/_idna.mjs +0 -246
  235. package/node_modules/typebox/build/format/_puny.d.mts +0 -1
  236. package/node_modules/typebox/build/format/_puny.mjs +0 -77
  237. package/node_modules/typebox/build/schema/resolve/ref.d.mts +0 -3
  238. package/node_modules/typebox/build/schema/resolve/ref.mjs +0 -146
  239. package/node_modules/typebox/build/schema/types/contentEncoding.d.mts +0 -9
  240. package/node_modules/typebox/build/schema/types/contentEncoding.mjs +0 -13
  241. package/node_modules/typebox/build/schema/types/contentMediaType.d.mts +0 -9
  242. package/node_modules/typebox/build/schema/types/contentMediaType.mjs +0 -13
@@ -2,7 +2,7 @@ import { n as listConfiguredAccountIds, r as resolveDefaultWhatsAppAccountId, t
2
2
  import { n as hasWebCredsRegularFileSync, r as hasWebCredsSync } from "./creds-files-W6B3EMZ8.js";
3
3
  import fs from "node:fs";
4
4
  import path from "node:path";
5
- import { DEFAULT_ACCOUNT_ID, mergeAccountConfig, normalizeAccountId, resolveAccountEntry, resolveMergedAccountConfig, resolveUserPath } from "openclaw/plugin-sdk/account-core";
5
+ import { DEFAULT_ACCOUNT_ID, normalizeAccountId, resolveAccountEntry, resolveMergedAccountConfig, resolveUserPath } from "openclaw/plugin-sdk/account-core";
6
6
  import { resolveOAuthDir } from "openclaw/plugin-sdk/state-paths";
7
7
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
8
8
  //#region extensions/whatsapp/src/account-config.ts
@@ -12,36 +12,19 @@ function resolveWhatsAppDefaultAccountSharedConfig(cfg) {
12
12
  const { enabled: _ignoredEnabled, name: _ignoredName, authDir: _ignoredAuthDir, selfChatMode: _ignoredSelfChatMode, ...sharedDefaults } = defaultAccount;
13
13
  return sharedDefaults;
14
14
  }
15
- function resolveWhatsAppAccountConfigForTest(cfg, accountId) {
16
- return resolveAccountEntry(cfg.channels?.whatsapp?.accounts, accountId);
17
- }
18
- function resolveMergedNamedWhatsAppAccountConfig(params) {
19
- const rootCfg = params.cfg.channels?.whatsapp;
20
- const accountConfig = resolveWhatsAppAccountConfigForTest(params.cfg, params.accountId);
21
- return {
22
- ...mergeAccountConfig({
23
- channelConfig: rootCfg,
24
- accountConfig: void 0,
25
- omitKeys: ["defaultAccount"]
26
- }),
27
- ...resolveWhatsAppDefaultAccountSharedConfig(params.cfg),
28
- ...accountConfig
29
- };
30
- }
31
15
  function resolveMergedWhatsAppAccountConfig(params) {
32
16
  const rootCfg = params.cfg.channels?.whatsapp;
33
17
  const accountId = params.accountId?.trim() || rootCfg?.defaultAccount || DEFAULT_ACCOUNT_ID;
34
- const base = resolveMergedAccountConfig({
35
- channelConfig: rootCfg,
36
- accounts: rootCfg?.accounts,
37
- accountId,
38
- omitKeys: ["defaultAccount"]
39
- });
40
18
  return {
41
19
  accountId,
42
- ...accountId === DEFAULT_ACCOUNT_ID ? base : resolveMergedNamedWhatsAppAccountConfig({
43
- cfg: params.cfg,
44
- accountId
20
+ ...resolveMergedAccountConfig({
21
+ channelConfig: {
22
+ ...rootCfg,
23
+ ...accountId === DEFAULT_ACCOUNT_ID ? void 0 : resolveWhatsAppDefaultAccountSharedConfig(params.cfg)
24
+ },
25
+ accounts: rootCfg?.accounts,
26
+ accountId,
27
+ omitKeys: ["defaultAccount"]
45
28
  })
46
29
  };
47
30
  }
@@ -1,6 +1,6 @@
1
- import { a as resolveWhatsAppAccount } from "./accounts-BX2fZUyR.js";
1
+ import { a as resolveWhatsAppAccount } from "./accounts-CeKQbu_s.js";
2
2
  import { t as resolveWhatsAppOutboundTarget } from "./resolve-outbound-target-1GqbT1uX.js";
3
- import { _ as resolveWhatsAppReactionLevel, r as sendReactionWhatsApp } from "./send-prK8F7Vj.js";
3
+ import { r as sendReactionWhatsApp, v as resolveWhatsAppReactionLevel } from "./send-C3S-NqyO.js";
4
4
  import { ToolAuthorizationError, createActionGate, jsonResult, readReactionParams, readStringParam } from "openclaw/plugin-sdk/channel-actions";
5
5
  //#region extensions/whatsapp/src/action-runtime-target-auth.ts
6
6
  function resolveAuthorizedWhatsAppOutboundTarget(params) {
@@ -1,2 +1,2 @@
1
- import { t as handleWhatsAppAction } from "./action-runtime-B4e3XFOY.js";
1
+ import { t as handleWhatsAppAction } from "./action-runtime-YA_Yvunu.js";
2
2
  export { handleWhatsAppAction };
@@ -1,2 +1,2 @@
1
- import { t as handleWhatsAppAction } from "./action-runtime-B4e3XFOY.js";
1
+ import { t as handleWhatsAppAction } from "./action-runtime-YA_Yvunu.js";
2
2
  export { handleWhatsAppAction };
@@ -1,17 +1,18 @@
1
- import { a as resolveWhatsAppAccount } from "./accounts-BX2fZUyR.js";
1
+ import { a as resolveWhatsAppAccount } from "./accounts-CeKQbu_s.js";
2
2
  import { r as getWhatsAppConnectionController } from "./connection-controller-runtime-context-DG0tuYuw.js";
3
3
  import { s as resolveJidToE164 } from "./targets-runtime-TMk0lGuy.js";
4
+ import { n as registerWhatsAppLoginTool } from "./agent-tools-login-B-2qZPzc.js";
4
5
  import { createActionGate, stringEnum } from "openclaw/plugin-sdk/channel-actions";
5
6
  import path from "node:path";
6
7
  import { resolveOAuthDir } from "openclaw/plugin-sdk/state-paths";
7
8
  import { normalizeE164 } from "openclaw/plugin-sdk/account-resolution";
8
- import { normalizeAccountId } from "openclaw/plugin-sdk/account-id";
9
- import { Type } from "typebox";
10
9
  import fs from "node:fs/promises";
10
+ import { normalizeAccountId } from "openclaw/plugin-sdk/account-id";
11
11
  import { mulawToPcm } from "openclaw/plugin-sdk/realtime-voice";
12
12
  import { detectBinary } from "openclaw/plugin-sdk/setup-tools";
13
13
  import { resolvePreferredOpenClawTmpDir } from "openclaw/plugin-sdk/temp-path";
14
14
  import { jsonResult as jsonResult$1 } from "openclaw/plugin-sdk/tool-results";
15
+ import { Type } from "typebox";
15
16
  //#region extensions/whatsapp/src/agent-tools-call.ts
16
17
  const MEOWCALLER_COMMAND = "meowcaller";
17
18
  const SESSION_DATABASE = "wa-voip.db";
@@ -222,4 +223,10 @@ function registerWhatsAppCallTool(api) {
222
223
  api.registerTool((context) => createWhatsAppCallTool(api, context), { name: "whatsapp_call" });
223
224
  }
224
225
  //#endregion
225
- export { registerWhatsAppCallTool };
226
+ //#region extensions/whatsapp/agent-tools-api.ts
227
+ function registerWhatsAppAgentTools(api) {
228
+ registerWhatsAppCallTool(api);
229
+ registerWhatsAppLoginTool(api);
230
+ }
231
+ //#endregion
232
+ export { registerWhatsAppAgentTools };
@@ -8,7 +8,8 @@ const QR_DATA_URL_MAX_LENGTH = 16384;
8
8
  function readLoginStringPreservingWhitespace(value) {
9
9
  return hasNonEmptyString(value) ? value : void 0;
10
10
  }
11
- function createWhatsAppLoginTool() {
11
+ function createWhatsAppLoginTool(context) {
12
+ if (context.senderIsOwner !== true) return null;
12
13
  return {
13
14
  label: "WhatsApp Login",
14
15
  name: "whatsapp_login",
@@ -23,7 +24,10 @@ function createWhatsAppLoginTool() {
23
24
  pattern: "^data:image/png;base64,.+$"
24
25
  }))
25
26
  }),
26
- execute: async (_toolCallId, args) => {
27
+ execute: async (_toolCallId, args, signal) => {
28
+ const beforeCredentialPersistence = async () => {
29
+ if (!signal || signal.aborted) throw new Error("WhatsApp login authority is no longer active.");
30
+ };
27
31
  const renderQrReply = (params) => {
28
32
  return {
29
33
  content: [{
@@ -64,9 +68,11 @@ function createWhatsAppLoginTool() {
64
68
  details: { connected: result.connected }
65
69
  };
66
70
  }
71
+ await beforeCredentialPersistence();
67
72
  const result = await startWebLoginWithQr({
68
73
  accountId,
69
74
  timeoutMs,
75
+ beforeCredentialPersistence,
70
76
  force: typeof args.force === "boolean" ? args.force : false
71
77
  });
72
78
  if (!result.qrDataUrl) return {
@@ -84,5 +90,8 @@ function createWhatsAppLoginTool() {
84
90
  }
85
91
  };
86
92
  }
93
+ function registerWhatsAppLoginTool(api) {
94
+ api.registerTool((context) => createWhatsAppLoginTool(context), { name: "whatsapp_login" });
95
+ }
87
96
  //#endregion
88
- export { createWhatsAppLoginTool as t };
97
+ export { registerWhatsAppLoginTool as n, createWhatsAppLoginTool as t };
package/dist/api.js CHANGED
@@ -1,18 +1,18 @@
1
- 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-BX2fZUyR.js";
1
+ 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-CeKQbu_s.js";
2
2
  import { r as resolveDefaultWhatsAppAccountId, t as listAccountIds } from "./account-ids-CB5SOWjc.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-CugRyONv.js";
4
4
  import { t as resolveWhatsAppOutboundTarget } from "./resolve-outbound-target-1GqbT1uX.js";
5
5
  import { c as toWhatsappJid, i as markdownToWhatsApp, l as toWhatsappJidWithLid, n as isSelfChatMode, r as jidToE164, s as resolveJidToE164, t as assertWebChannel } from "./targets-runtime-TMk0lGuy.js";
6
6
  import { n as resolveUserPath, t as normalizeE164 } from "./text-runtime-CaKLhowd.js";
7
- import { n as WHATSAPP_LEGACY_OUTBOUND_SEND_DEP_KEYS, t as whatsappPlugin } from "./channel-DJVQHz_V.js";
8
- import { a as resolveWhatsAppGroupRequireMention, o as resolveWhatsAppGroupToolPolicy } from "./shared-Dp9M3ZPX.js";
7
+ import { n as WHATSAPP_LEGACY_OUTBOUND_SEND_DEP_KEYS, t as whatsappPlugin } from "./channel-Dx09AAmX.js";
8
+ import { a as resolveWhatsAppGroupRequireMention, o as resolveWhatsAppGroupToolPolicy } from "./shared-D3B14d45.js";
9
9
  import { t as whatsappCommandPolicy } from "./command-policy-BIOSHySD.js";
10
- import { t as whatsappSetupPlugin } from "./channel.setup-Cmvd967u.js";
10
+ import { t as whatsappSetupPlugin } from "./channel.setup-CRJQiWbh.js";
11
11
  import { t as DEFAULT_WEB_MEDIA_BYTES } from "./constants-HU41RHGI.js";
12
- import { a as waitForWaConnection, o as DEFAULT_WHATSAPP_SOCKET_TIMING, r as createWaSocket, s as createWhatsAppSocketOperationTimeoutAdapter } from "./socket-close-09FojDO2.js";
12
+ import { a as waitForWaConnection, o as DEFAULT_WHATSAPP_SOCKET_TIMING, r as createWaSocket, s as createWhatsAppSocketOperationTimeoutAdapter } from "./socket-close-2T0_jZTN.js";
13
13
  import { n as getStatusCode, t as formatError } from "./session-errors-JuazczrA.js";
14
- import { n as listWhatsAppDirectoryGroupsFromConfig, r as listWhatsAppDirectoryPeersFromConfig } from "./directory-config-Pc4f07wB.js";
15
- import { c as extractContextInfo, g as resolveInboundMediaMimetype, m as findMessageSection, o as describeReplyContext, p as extractText, t as createWebSendApi, u as extractLocationData } from "./send-api-DimZST3E.js";
14
+ import { n as listWhatsAppDirectoryGroupsFromConfig, r as listWhatsAppDirectoryPeersFromConfig } from "./directory-config-Ci8Jjsw4.js";
15
+ import { _ as resolveInboundMediaMimetype, c as extractContextInfo, m as findMessageSection, o as describeReplyContext, p as extractText, t as createWebSendApi, u as extractLocationData } from "./send-api-C-FFC1p_.js";
16
16
  import { asBoolean, isRecord, normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
17
17
  import { formatLocationText } from "openclaw/plugin-sdk/channel-inbound";
18
18
  //#region extensions/whatsapp/src/qa-driver.runtime.ts
@@ -1,10 +1,10 @@
1
- import "./accounts-BX2fZUyR.js";
1
+ import "./accounts-CeKQbu_s.js";
2
2
  import { r as resolveDefaultWhatsAppAccountId } from "./account-ids-CB5SOWjc.js";
3
3
  import { s as normalizeWhatsAppMessagingTarget } from "./normalize-target-CugRyONv.js";
4
- import { i as sendTypingWhatsApp, t as sendMessageWhatsApp } from "./send-prK8F7Vj.js";
4
+ import { i as sendTypingWhatsApp, t as sendMessageWhatsApp } from "./send-C3S-NqyO.js";
5
5
  import { i as getWhatsAppRuntime } from "./runtime-BLlToOi6.js";
6
6
  import "./normalize-C7Hkc_vE.js";
7
- import { i as unregisterWhatsAppApprovalReactionTarget, r as registerWhatsAppApprovalReactionTarget } from "./approval-reactions-CmtJCxe_.js";
7
+ import { i as unregisterWhatsAppApprovalReactionTarget, r as registerWhatsAppApprovalReactionTarget } from "./approval-reactions-rpaNVHzZ.js";
8
8
  import { createSubsystemLogger } from "openclaw/plugin-sdk/runtime-env";
9
9
  import { DEFAULT_ACCOUNT_ID } from "openclaw/plugin-sdk/account-id";
10
10
  import { buildApprovalReactionPendingContent } from "openclaw/plugin-sdk/approval-reaction-runtime";
@@ -1,10 +1,10 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.js";
2
- import { a as resolveWhatsAppAccount } from "./accounts-BX2fZUyR.js";
2
+ import { a as resolveWhatsAppAccount } from "./accounts-CeKQbu_s.js";
3
3
  import { n as getOptionalWhatsAppRuntime } from "./runtime-BLlToOi6.js";
4
- import { c as getWhatsAppApprovalApprovers, l as whatsappApprovalAuth } from "./group-session-key-DmFc_Cqi.js";
4
+ import { c as getWhatsAppApprovalApprovers, l as whatsappApprovalAuth } from "./group-session-key-CH9jJIVQ.js";
5
5
  import { isApprovalNotFoundError } from "openclaw/plugin-sdk/error-runtime";
6
6
  import { createLazyRuntimeSurface } from "openclaw/plugin-sdk/lazy-runtime";
7
- import { approvalReactionDecisionSetsMatch, createApprovalReactionTargetStore, listApprovalReactionBindings, readApprovalReactionDecisionList, readApprovalReactionDeliveredBinding, readApprovalReactionPresentationBinding, resolveTypedApprovalReactionTarget } from "openclaw/plugin-sdk/approval-reaction-runtime";
7
+ import { approvalReactionDecisionSetsMatch, buildApprovalReactionDeliveredBindingMarker, createApprovalReactionTargetStore, listApprovalReactionBindings, readApprovalReactionDecisionList, readApprovalReactionDeliveredBinding, readApprovalReactionPresentationBinding, resolveTypedApprovalReactionTarget } from "openclaw/plugin-sdk/approval-reaction-runtime";
8
8
  import { createPluginStateErrorReporter } from "openclaw/plugin-sdk/plugin-state-runtime";
9
9
  //#region extensions/whatsapp/src/approval-reactions.ts
10
10
  var approval_reactions_exports = /* @__PURE__ */ __exportAll({
@@ -53,16 +53,15 @@ function reportApprovalBindingCorrelationMismatch(binding) {
53
53
  }
54
54
  function readPersistedTarget(target) {
55
55
  const value = target;
56
- if (!value || typeof value.approvalId !== "string" || !Array.isArray(value.allowedDecisions) || value.approvalKind !== "exec" && value.approvalKind !== "plugin") return null;
56
+ if (!value || typeof value.approvalId !== "string" || value.approvalKind !== "exec" && value.approvalKind !== "plugin") return null;
57
+ const allowedDecisions = readApprovalReactionDecisionList(value.allowedDecisions);
58
+ if (!allowedDecisions) return null;
57
59
  return {
58
60
  approvalId: value.approvalId,
59
61
  approvalKind: value.approvalKind,
60
- allowedDecisions: value.allowedDecisions
62
+ allowedDecisions
61
63
  };
62
64
  }
63
- function listWhatsAppApprovalReactionBindings(allowedDecisions) {
64
- return listApprovalReactionBindings({ allowedDecisions });
65
- }
66
65
  const APPROVAL_ID_LINE_RE = /^\s*ID:\s*(\S(?:.*\S)?)\s*$/i;
67
66
  const APPROVAL_KIND_LINE_RE = /^\s*(?:\S+\s+)?(Exec|Plugin) approval required\s*$/i;
68
67
  function visibleApprovalBindingMatches(text, binding) {
@@ -84,11 +83,11 @@ function visibleApprovalBindingMatches(text, binding) {
84
83
  decisionLines.push(decisionLine);
85
84
  cursor += 1;
86
85
  }
87
- const knownBindings = listWhatsAppApprovalReactionBindings([
86
+ const knownBindings = listApprovalReactionBindings({ allowedDecisions: [
88
87
  "allow-once",
89
88
  "allow-always",
90
89
  "deny"
91
- ]);
90
+ ] });
92
91
  const decisions = readApprovalReactionDecisionList(decisionLines.map((line) => knownBindings.find((entry) => `${entry.emoji} ${entry.label}` === line)?.decision));
93
92
  if (!decisions) return false;
94
93
  return approvalReactionDecisionSetsMatch(binding.allowedDecisions, decisions);
@@ -105,17 +104,14 @@ function prepareWhatsAppApprovalPayloadForDelivery(params) {
105
104
  ...params.payload,
106
105
  channelData: {
107
106
  ...params.payload.channelData,
108
- [DELIVERY_BINDING_CHANNEL_DATA_KEY]: {
109
- version: 1,
110
- ...binding
111
- }
107
+ [DELIVERY_BINDING_CHANNEL_DATA_KEY]: buildApprovalReactionDeliveredBindingMarker(binding)
112
108
  }
113
109
  };
114
110
  }
115
111
  function registerWhatsAppApprovalReactionTarget(params) {
116
112
  const key = buildReactionTargetKey(params);
117
113
  const approvalId = params.approvalId.trim();
118
- const allowedDecisions = listWhatsAppApprovalReactionBindings(params.allowedDecisions).map((binding) => binding.decision);
114
+ const allowedDecisions = listApprovalReactionBindings({ allowedDecisions: params.allowedDecisions }).map((binding) => binding.decision);
119
115
  if (!key || !approvalId || params.approvalKind !== "exec" && params.approvalKind !== "plugin" || allowedDecisions.length === 0) return null;
120
116
  const target = {
121
117
  approvalId,
@@ -8,6 +8,7 @@ import { replaceFileAtomic } from "openclaw/plugin-sdk/security-runtime";
8
8
  import { formatCliCommand } from "openclaw/plugin-sdk/cli-runtime";
9
9
  import { defaultRuntime, getChildLogger, info, success } from "openclaw/plugin-sdk/runtime-env";
10
10
  import fs from "node:fs/promises";
11
+ import { isPathStrictlyInside } from "openclaw/plugin-sdk/file-access-runtime";
11
12
  import { DEFAULT_ACCOUNT_ID } from "openclaw/plugin-sdk/routing";
12
13
  import { enqueueKeyedTask } from "openclaw/plugin-sdk/keyed-async-queue";
13
14
  import { resolveTimerTimeoutMs } from "openclaw/plugin-sdk/number-runtime";
@@ -333,10 +334,6 @@ async function shouldClearOnLogout(authDir, isLegacyAuthDir) {
333
334
  return (typeof codeValue === "string" ? codeValue : "") !== "ENOENT";
334
335
  }
335
336
  }
336
- function isPathInsideDirectory(baseDir, targetPath) {
337
- const relativePath = path.relative(baseDir, targetPath);
338
- return relativePath !== "" && !relativePath.startsWith("..") && !path.isAbsolute(relativePath);
339
- }
340
337
  async function pathHasSymlinkComponent(baseDir, targetPath) {
341
338
  const relativePath = path.relative(baseDir, targetPath);
342
339
  let currentPath = baseDir;
@@ -357,10 +354,10 @@ async function isLegacyWebAuthDir(authDir) {
357
354
  async function classifyWebAuthDirOwnership(authDir) {
358
355
  const whatsappAuthBase = path.resolve(resolveOAuthDir$1(), "whatsapp");
359
356
  const resolvedAuthDir = path.resolve(authDir);
360
- if (!isPathInsideDirectory(whatsappAuthBase, resolvedAuthDir)) return { kind: "external" };
357
+ if (!isPathStrictlyInside(whatsappAuthBase, resolvedAuthDir)) return { kind: "external" };
361
358
  const [baseRealPath, authDirRealPath] = await Promise.all([fs.realpath(whatsappAuthBase).catch(() => null), fs.realpath(resolvedAuthDir).catch(() => null)]);
362
359
  if (!baseRealPath || !authDirRealPath) return { kind: "unsafe-owned" };
363
- if (!isPathInsideDirectory(baseRealPath, authDirRealPath)) return { kind: "unsafe-owned" };
360
+ if (!isPathStrictlyInside(baseRealPath, authDirRealPath)) return { kind: "unsafe-owned" };
364
361
  if (await pathHasSymlinkComponent(whatsappAuthBase, resolvedAuthDir)) return { kind: "unsafe-owned" };
365
362
  return {
366
363
  kind: "owned",
@@ -1,17 +1,16 @@
1
- import { a as resolveWhatsAppAccount } from "./accounts-BX2fZUyR.js";
1
+ import { a as resolveWhatsAppAccount } from "./accounts-CeKQbu_s.js";
2
2
  import { r as resolveDefaultWhatsAppAccountId, t as listAccountIds } from "./account-ids-CB5SOWjc.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-CugRyONv.js";
4
4
  import { t as resolveWhatsAppOutboundTarget } from "./resolve-outbound-target-1GqbT1uX.js";
5
- import { _ as resolveWhatsAppReactionLevel, a as normalizeWhatsAppOutboundPayload, i as sendTypingWhatsApp, n as sendPollWhatsApp, o as normalizeWhatsAppPayloadText, s as normalizeWhatsAppPayloadTextPreservingIndentation, t as sendMessageWhatsApp } from "./send-prK8F7Vj.js";
5
+ import { c as normalizeWhatsAppPayloadTextPreservingIndentation, i as sendTypingWhatsApp, n as sendPollWhatsApp, o as normalizeWhatsAppOutboundPayload, s as normalizeWhatsAppPayloadText, t as sendMessageWhatsApp, v as resolveWhatsAppReactionLevel } from "./send-C3S-NqyO.js";
6
6
  import { i as getWhatsAppRuntime } from "./runtime-BLlToOi6.js";
7
7
  import "./normalize-C7Hkc_vE.js";
8
8
  import { c as toWhatsappJid } from "./targets-runtime-TMk0lGuy.js";
9
9
  import "./text-runtime-CaKLhowd.js";
10
- import { t as createWhatsAppLoginTool } from "./agent-tools-login-BjRpD-JQ.js";
11
- import { c as getWhatsAppApprovalApprovers, l as whatsappApprovalAuth, s as lookupInboundMessageMetaForTarget, t as resolveWhatsAppGroupSessionKey } from "./group-session-key-DmFc_Cqi.js";
12
- import { a as resolveWhatsAppGroupRequireMention, c as loadWhatsAppChannelRuntime, i as whatsappSetupContract, l as readWhatsAppAccountLinkState, n as whatsappSetupWizardProxy, o as resolveWhatsAppGroupToolPolicy, s as formatWhatsAppConfigAllowFromEntries, t as createWhatsAppPluginBase } from "./shared-Dp9M3ZPX.js";
10
+ import { c as getWhatsAppApprovalApprovers, l as whatsappApprovalAuth, s as lookupInboundMessageMetaForTarget, t as resolveWhatsAppGroupSessionKey } from "./group-session-key-CH9jJIVQ.js";
11
+ import { a as resolveWhatsAppGroupRequireMention, c as loadWhatsAppChannelRuntime, i as whatsappSetupContract, l as readWhatsAppAccountLinkState, n as whatsappSetupWizardProxy, o as resolveWhatsAppGroupToolPolicy, s as formatWhatsAppConfigAllowFromEntries, t as createWhatsAppPluginBase } from "./shared-D3B14d45.js";
13
12
  import { t as whatsappCommandPolicy } from "./command-policy-BIOSHySD.js";
14
- import { f as readWebAuthExistsForDecision, n as WHATSAPP_AUTH_UNSTABLE_CODE } from "./auth-store-B_DQIdzp.js";
13
+ import { f as readWebAuthExistsForDecision, n as WHATSAPP_AUTH_UNSTABLE_CODE } from "./auth-store-CtpBqH5S.js";
15
14
  import { createActionGate as createActionGate$1 } from "openclaw/plugin-sdk/channel-actions";
16
15
  import { normalizeOptionalAccountId } from "openclaw/plugin-sdk/account-core";
17
16
  import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
@@ -22,9 +21,9 @@ import { chunkText } from "openclaw/plugin-sdk/reply-chunking";
22
21
  import { createMessageReceiptFromOutboundResults, defineChannelMessageAdapter, resolveOutboundSendDep } from "openclaw/plugin-sdk/channel-outbound";
23
22
  import { sendTextMediaPayload } from "openclaw/plugin-sdk/reply-payload";
24
23
  import { DEFAULT_ACCOUNT_ID as DEFAULT_ACCOUNT_ID$1 } from "openclaw/plugin-sdk/account-id";
24
+ import { createLazyRuntimeModule } from "openclaw/plugin-sdk/lazy-runtime";
25
25
  import { buildDmGroupAccountAllowlistAdapter } from "openclaw/plugin-sdk/allowlist-config-edit";
26
26
  import { createChatChannelPlugin } from "openclaw/plugin-sdk/channel-core";
27
- import { createLazyRuntimeModule } from "openclaw/plugin-sdk/lazy-runtime";
28
27
  import { createApproverRestrictedNativeApprovalCapabilityFromForwardingRoutes } from "openclaw/plugin-sdk/approval-delivery-runtime";
29
28
  import { createLazyChannelApprovalNativeRuntimeAdapter } from "openclaw/plugin-sdk/approval-handler-adapter-runtime";
30
29
  import { buildApprovalReactionPromptPayloadForRequest } from "openclaw/plugin-sdk/approval-reaction-runtime";
@@ -80,7 +79,7 @@ const whatsappApproval = createApproverRestrictedNativeApprovalCapabilityFromFor
80
79
  approvalKind,
81
80
  request
82
81
  }),
83
- load: async () => (await import("./approval-handler.runtime-fgGZhALv.js")).whatsappApprovalNativeRuntime
82
+ load: async () => (await import("./approval-handler.runtime-C7jZ8rsD.js")).whatsappApprovalNativeRuntime
84
83
  })
85
84
  });
86
85
  function buildWhatsAppPendingPayload(params, approvalKind) {
@@ -260,8 +259,8 @@ function createWhatsAppOutboundBase({ chunker, sendMessageWhatsApp, sendPollWhat
260
259
  }
261
260
  //#endregion
262
261
  //#region extensions/whatsapp/src/channel-outbound.ts
263
- const loadWhatsAppApprovalReactionsModule = createLazyRuntimeModule(() => import("./approval-reactions-CmtJCxe_.js").then((n) => n.t));
264
- const loadWhatsAppQuestionReactionsModule = createLazyRuntimeModule(() => import("./question-reactions-D3eAeB0i.js").then((n) => n.n));
262
+ const loadWhatsAppApprovalReactionsModule = createLazyRuntimeModule(() => import("./approval-reactions-rpaNVHzZ.js").then((n) => n.t));
263
+ const loadWhatsAppQuestionReactionsModule = createLazyRuntimeModule(() => import("./question-reactions-B9D6MHXZ.js").then((n) => n.n));
265
264
  function normalizeWhatsAppChannelPayloadText(text) {
266
265
  return normalizeWhatsAppPayloadTextPreservingIndentation(text);
267
266
  }
@@ -525,8 +524,8 @@ function collectWhatsAppStatusIssues(accounts) {
525
524
  }
526
525
  //#endregion
527
526
  //#region extensions/whatsapp/src/channel.ts
528
- const loadWhatsAppDirectoryConfig = createLazyRuntimeModule(() => import("./directory-config-Pc4f07wB.js").then((n) => n.t));
529
- const loadWhatsAppChannelReactAction = createLazyRuntimeModule(() => import("./channel-react-action-d6OacTNj.js"));
527
+ const loadWhatsAppDirectoryConfig = createLazyRuntimeModule(() => import("./directory-config-Ci8Jjsw4.js").then((n) => n.t));
528
+ const loadWhatsAppChannelReactAction = createLazyRuntimeModule(() => import("./channel-react-action-n9a8Hk5i.js"));
530
529
  function resolveWhatsAppTargetInfo(raw) {
531
530
  const normalized = normalizeWhatsAppTarget(raw);
532
531
  if (!normalized) return null;
@@ -563,7 +562,6 @@ const whatsappPlugin = createChatChannelPlugin({
563
562
  isConfigured: (account) => Boolean(account.authDir),
564
563
  isLinked: async (account) => await readWhatsAppAccountLinkState(account.authDir)
565
564
  }),
566
- agentTools: () => [createWhatsAppLoginTool()],
567
565
  allowlist: buildDmGroupAccountAllowlistAdapter({
568
566
  channelId: "whatsapp",
569
567
  resolveAccount: resolveWhatsAppAccount,
@@ -1,2 +1,2 @@
1
- import { t as whatsappPlugin } from "./channel-DJVQHz_V.js";
1
+ import { t as whatsappPlugin } from "./channel-Dx09AAmX.js";
2
2
  export { whatsappPlugin };
@@ -1,7 +1,7 @@
1
- import { a as resolveWhatsAppAccount, s as resolveWhatsAppMediaMaxBytes } from "./accounts-BX2fZUyR.js";
1
+ import { a as resolveWhatsAppAccount, s as resolveWhatsAppMediaMaxBytes } from "./accounts-CeKQbu_s.js";
2
2
  import { c as normalizeWhatsAppTarget, t as isWhatsAppGroupJid } from "./normalize-target-CugRyONv.js";
3
- import { r as resolveAuthorizedWhatsAppOutboundTarget, t as handleWhatsAppAction } from "./action-runtime-B4e3XFOY.js";
4
- import { t as sendMessageWhatsApp } from "./send-prK8F7Vj.js";
3
+ import { r as resolveAuthorizedWhatsAppOutboundTarget, t as handleWhatsAppAction } from "./action-runtime-YA_Yvunu.js";
4
+ import { a as sendWhatsAppUploadFile } from "./send-C3S-NqyO.js";
5
5
  import "./normalize-C7Hkc_vE.js";
6
6
  import { jsonResult, readStringOrNumberParam, readStringParam as readStringParam$1, resolveReactionMessageId } from "openclaw/plugin-sdk/channel-actions";
7
7
  import { canonicalizeBase64, estimateBase64DecodedBytes } from "openclaw/plugin-sdk/media-runtime";
@@ -23,17 +23,14 @@ function readWhatsAppActionChatJid(params) {
23
23
  if (params.toolContext?.currentChannelProvider !== WHATSAPP_CHANNEL || !params.toolContext.currentChannelId) return;
24
24
  return normalizeWhatsAppTarget(params.toolContext.currentChannelId) ?? void 0;
25
25
  }
26
- function extractBase64Payload(encoded) {
27
- return /^data:[^;]+;base64,(.*)$/is.exec(encoded.trim())?.[1] ?? encoded;
28
- }
29
26
  function decodeUploadFileMediaPayload(params) {
30
- const payload = extractBase64Payload(params.encoded);
27
+ const dataUrl = /^data:([^;]+);base64,(.*)$/is.exec(params.encoded.trim());
28
+ const payload = dataUrl?.[2] ?? params.encoded;
31
29
  if (params.maxBytes !== void 0) {
32
30
  const estimatedBytes = estimateBase64DecodedBytes(payload);
33
31
  if (estimatedBytes > params.maxBytes) throw new Error(`WhatsApp upload-file buffer exceeds configured media limit (${estimatedBytes} bytes > ${params.maxBytes} bytes).`);
34
32
  }
35
- const contentType = readStringParam$1(params.args, "contentType") ?? readStringParam$1(params.args, "mimeType");
36
- const fileName = readStringParam$1(params.args, "filename") ?? readStringParam$1(params.args, "fileName");
33
+ const contentType = params.contentType ?? dataUrl?.[1];
37
34
  const canonicalPayload = canonicalizeBase64(payload);
38
35
  if (!canonicalPayload) throw new Error("WhatsApp upload-file buffer must be valid base64 or a base64 data URL.");
39
36
  const buffer = Buffer.from(canonicalPayload, "base64");
@@ -41,12 +38,14 @@ function decodeUploadFileMediaPayload(params) {
41
38
  return {
42
39
  buffer,
43
40
  ...contentType ? { contentType } : {},
44
- ...fileName ? { fileName } : {}
41
+ ...params.fileName ? { fileName: params.fileName } : {}
45
42
  };
46
43
  }
47
44
  async function handleWhatsAppUploadFileAction(params) {
48
45
  const mediaUrl = readUploadFileMediaSource(params.params);
49
46
  const encodedPayload = readStringParam$1(params.params, "buffer", { trim: false });
47
+ const contentType = readStringParam$1(params.params, "contentType") ?? readStringParam$1(params.params, "mimeType");
48
+ const fileName = readStringParam$1(params.params, "filename") ?? readStringParam$1(params.params, "fileName");
50
49
  if (!mediaUrl && !hasUploadFileBufferPayload(params.params)) throw new Error("WhatsApp upload-file requires media, mediaUrl, filePath, path, fileUrl, or buffer.");
51
50
  const to = readWhatsAppActionChatJid(params) ?? readStringParam$1(params.params, "to", { required: true });
52
51
  const resolved = resolveAuthorizedWhatsAppOutboundTarget({
@@ -60,15 +59,18 @@ async function handleWhatsAppUploadFileAction(params) {
60
59
  accountId: resolved.accountId
61
60
  });
62
61
  const mediaPayload = encodedPayload ? decodeUploadFileMediaPayload({
63
- args: params.params,
64
62
  encoded: encodedPayload,
63
+ contentType,
64
+ fileName,
65
65
  maxBytes: resolveWhatsAppMediaMaxBytes(account)
66
66
  }) : void 0;
67
- const result = await sendMessageWhatsApp(resolved.to, readUploadFileCaptionText(params.params), {
67
+ const result = await sendWhatsAppUploadFile(resolved.to, readUploadFileCaptionText(params.params), {
68
68
  verbose: false,
69
69
  cfg: params.cfg,
70
70
  ...mediaUrl && !mediaPayload ? { mediaUrl } : {},
71
71
  ...mediaPayload ? { mediaPayload } : {},
72
+ ...mediaUrl && !mediaPayload && fileName ? { fileName } : {},
73
+ ...mediaUrl && !mediaPayload && contentType ? { contentType } : {},
72
74
  mediaAccess: params.mediaAccess,
73
75
  mediaLocalRoots: params.mediaLocalRoots,
74
76
  mediaReadFile: params.mediaReadFile,
@@ -1,9 +1,9 @@
1
1
  import { startWebLoginWithQr as startWebLoginWithQr$1, waitForWebLogin as waitForWebLogin$1 } from "./login-qr-runtime.js";
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-B_DQIdzp.js";
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-CtpBqH5S.js";
3
3
  import { t as getActiveWebListener$1 } from "./active-listener-BEjWsCNM.js";
4
- import { t as monitorWebChannel$1 } from "./monitor-BCe5Mm-1.js";
5
- import { t as loginWeb$1 } from "./login-D6_rfxTZ.js";
6
- import { whatsappSetupWizard as whatsappSetupWizard$1 } from "./setup-surface-BCZszf3l.js";
4
+ import { t as monitorWebChannel$1 } from "./monitor-CySzv38g.js";
5
+ import { t as loginWeb$1 } from "./login-1u5WcfTn.js";
6
+ import { whatsappSetupWizard as whatsappSetupWizard$1 } from "./setup-surface-ym4doiv3.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 whatsappSetupContract, l as readWhatsAppAccountLinkState, n as whatsappSetupWizardProxy, o as resolveWhatsAppGroupToolPolicy, t as createWhatsAppPluginBase } from "./shared-Dp9M3ZPX.js";
1
+ import { a as resolveWhatsAppGroupRequireMention, i as whatsappSetupContract, l as readWhatsAppAccountLinkState, n as whatsappSetupWizardProxy, o as resolveWhatsAppGroupToolPolicy, t as createWhatsAppPluginBase } from "./shared-D3B14d45.js";
2
2
  //#region extensions/whatsapp/src/channel.setup.ts
3
3
  const whatsappSetupPlugin = { ...createWhatsAppPluginBase({
4
4
  groups: {
@@ -1,7 +1,7 @@
1
1
  import { r as getWhatsAppChannelRuntime } from "./runtime-BLlToOi6.js";
2
2
  import { n as WHATSAPP_CONNECTION_OWNER_PENDING_CAPABILITY, t as WHATSAPP_CONNECTION_CONTROLLER_CAPABILITY } from "./connection-controller-runtime-context-DG0tuYuw.js";
3
- import { M as waitForCredsSaveQueueWithTimeout, c as logoutWeb, f as readWebAuthExistsForDecision, k as resolveComparableIdentity, r as WhatsAppAuthUnstableError } from "./auth-store-B_DQIdzp.js";
4
- import { a as waitForWaConnection, m as acquireWhatsAppGatewayConnectionOwner, o as DEFAULT_WHATSAPP_SOCKET_TIMING, r as createWaSocket, t as closeWhatsAppSocketAndWait } from "./socket-close-09FojDO2.js";
3
+ import { M as waitForCredsSaveQueueWithTimeout, c as logoutWeb, f as readWebAuthExistsForDecision, k as resolveComparableIdentity, r as WhatsAppAuthUnstableError } from "./auth-store-CtpBqH5S.js";
4
+ import { a as waitForWaConnection, m as acquireWhatsAppGatewayConnectionOwner, o as DEFAULT_WHATSAPP_SOCKET_TIMING, r as createWaSocket, t as closeWhatsAppSocketAndWait } from "./socket-close-2T0_jZTN.js";
5
5
  import { n as getStatusCode, t as formatError } from "./session-errors-JuazczrA.js";
6
6
  import { computeBackoff, info, sleepWithAbort } from "openclaw/plugin-sdk/runtime-env";
7
7
  import { registerChannelRuntimeContext } from "openclaw/plugin-sdk/channel-runtime-context";
@@ -1,11 +1,11 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.js";
2
- import { c as resolveMergedWhatsAppAccountConfig, o as resolveWhatsAppAuthDir } from "./accounts-BX2fZUyR.js";
2
+ import { c as resolveMergedWhatsAppAccountConfig, o as resolveWhatsAppAuthDir } from "./accounts-CeKQbu_s.js";
3
3
  import { c as normalizeWhatsAppTarget, t as isWhatsAppGroupJid } from "./normalize-target-CugRyONv.js";
4
4
  import { i as hasPendingWhatsAppConnectionOwner, r as getWhatsAppConnectionController } from "./connection-controller-runtime-context-DG0tuYuw.js";
5
5
  import "./normalize-C7Hkc_vE.js";
6
- import { M as waitForCredsSaveQueueWithTimeout, f as readWebAuthExistsForDecision } from "./auth-store-B_DQIdzp.js";
6
+ import { M as waitForCredsSaveQueueWithTimeout, f as readWebAuthExistsForDecision } from "./auth-store-CtpBqH5S.js";
7
7
  import { n as resolveWebAccountId } from "./active-listener-BEjWsCNM.js";
8
- import { a as waitForWaConnection, h as acquireWhatsAppStandaloneConnectionOwner, n as createWaDirectorySocket, p as WhatsAppConnectionOwnerBusyError, t as closeWhatsAppSocketAndWait } from "./socket-close-09FojDO2.js";
8
+ import { a as waitForWaConnection, h as acquireWhatsAppStandaloneConnectionOwner, n as createWaDirectorySocket, p as WhatsAppConnectionOwnerBusyError, t as closeWhatsAppSocketAndWait } from "./socket-close-2T0_jZTN.js";
9
9
  import { listResolvedDirectoryGroupEntriesFromMapKeys, listResolvedDirectoryUserEntriesFromAllowFrom } from "openclaw/plugin-sdk/directory-config-runtime";
10
10
  //#region extensions/whatsapp/src/directory-config.ts
11
11
  var directory_config_exports = /* @__PURE__ */ __exportAll({
@@ -1,4 +1,4 @@
1
- import { n as listWhatsAppDirectoryGroupsFromConfig, r as listWhatsAppDirectoryPeersFromConfig } from "./directory-config-Pc4f07wB.js";
1
+ import { n as listWhatsAppDirectoryGroupsFromConfig, r as listWhatsAppDirectoryPeersFromConfig } from "./directory-config-Ci8Jjsw4.js";
2
2
  //#region extensions/whatsapp/directory-contract-api.ts
3
3
  const whatsappDirectoryContractPlugin = {
4
4
  id: "whatsapp",
@@ -1,4 +1,4 @@
1
- import { a as resolveWhatsAppAccount } from "./accounts-BX2fZUyR.js";
1
+ import { a as resolveWhatsAppAccount } from "./accounts-CeKQbu_s.js";
2
2
  import { c as normalizeWhatsAppTarget } from "./normalize-target-CugRyONv.js";
3
3
  import "./normalize-C7Hkc_vE.js";
4
4
  import { r as jidToE164 } from "./targets-runtime-TMk0lGuy.js";
package/dist/index.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import { defineBundledChannelEntry, loadBundledEntryExportSync } from "openclaw/plugin-sdk/channel-entry-contract";
2
2
  //#region extensions/whatsapp/index.ts
3
- function registerWhatsAppCallTool(api) {
3
+ function registerWhatsAppAgentTools(api) {
4
4
  loadBundledEntryExportSync(import.meta.url, {
5
- specifier: "./call-tool-api.js",
6
- exportName: "registerWhatsAppCallTool"
5
+ specifier: "./agent-tools-api.js",
6
+ exportName: "registerWhatsAppAgentTools"
7
7
  })(api);
8
8
  }
9
9
  var whatsapp_default = defineBundledChannelEntry({
@@ -19,7 +19,7 @@ var whatsapp_default = defineBundledChannelEntry({
19
19
  specifier: "./runtime-setter-api.js",
20
20
  exportName: "setWhatsAppRuntime"
21
21
  },
22
- registerFull: registerWhatsAppCallTool
22
+ registerFull: registerWhatsAppAgentTools
23
23
  });
24
24
  //#endregion
25
25
  export { whatsapp_default as default };
@@ -1,5 +1,5 @@
1
- import { t as createWhatsAppLoginTool } from "./agent-tools-login-BjRpD-JQ.js";
2
- 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-B_DQIdzp.js";
1
+ import { t as createWhatsAppLoginTool } from "./agent-tools-login-B-2qZPzc.js";
2
+ 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-CtpBqH5S.js";
3
3
  import { t as getActiveWebListener } from "./active-listener-BEjWsCNM.js";
4
4
  import { n as getStatusCode, t as formatError } from "./session-errors-JuazczrA.js";
5
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
- import { a as resolveWhatsAppAccount } from "./accounts-BX2fZUyR.js";
3
- import { b as restoreCredsFromBackupIfNeeded } from "./auth-store-B_DQIdzp.js";
4
- import { f as renderQrTerminal, r as createWaSocket, u as resolveWhatsAppSocketTiming } from "./socket-close-09FojDO2.js";
5
- import { a as closeWaSocketSoon, o as waitForWhatsAppLoginResult } from "./connection-controller-CUyZgGpf.js";
2
+ import { a as resolveWhatsAppAccount } from "./accounts-CeKQbu_s.js";
3
+ import { b as restoreCredsFromBackupIfNeeded } from "./auth-store-CtpBqH5S.js";
4
+ import { f as renderQrTerminal, r as createWaSocket, u as resolveWhatsAppSocketTiming } from "./socket-close-2T0_jZTN.js";
5
+ import { a as closeWaSocketSoon, o as waitForWhatsAppLoginResult } from "./connection-controller-CIYuBJrs.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";