@openclaw/whatsapp 2026.6.8 → 2026.6.9

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 (302) hide show
  1. package/dist/{access-control-BKaMOvIk.js → access-control-BnFVCHHH.js} +161 -50
  2. package/dist/{action-runtime-Cyp5GNIT.js → action-runtime-ClQLHIwf.js} +1 -1
  3. package/dist/action-runtime-api.js +1 -1
  4. package/dist/action-runtime.runtime.js +1 -1
  5. package/dist/api.js +10 -9
  6. package/dist/{approval-handler.runtime-BVmOu6x1.js → approval-handler.runtime-DLjPf_Mx.js} +1 -1
  7. package/dist/{auth-store-e9VzLZ-S.js → auth-store-RyuCPHE0.js} +3 -3
  8. package/dist/{channel-DyUm8hqs.js → channel-CNA0E9wp.js} +8 -9
  9. package/dist/channel-plugin-api.js +1 -1
  10. package/dist/{channel-react-action-zvbaCnGe.js → channel-react-action-CdYJKJWb.js} +3 -4
  11. package/dist/{channel.runtime-BXkzo0j1.js → channel.runtime-ZKS2C0Cw.js} +4 -4
  12. package/dist/{channel.setup-CpyAie9O.js → channel.setup-BfcLCLNn.js} +2 -2
  13. package/dist/{connection-controller-BWBoVQr4.js → connection-controller-BDuM0Kc7.js} +52 -27
  14. package/dist/contract-api.js +1 -1
  15. package/dist/{identity-Bupuq9vF.js → identity-Cm6bKAtk.js} +1 -1
  16. package/dist/light-runtime-api.js +1 -1
  17. package/dist/{login-Xv3ujrl0.js → login-B503Fwb8.js} +4 -3
  18. package/dist/{login-qr-CaJziL93.js → login-qr-AgwdQyj_.js} +16 -4
  19. package/dist/login-qr-runtime.js +1 -1
  20. package/dist/{monitor-Ggwn3FDi.js → monitor-C5_QBO1-.js} +338 -263
  21. package/dist/{quoted-message-CveINB35.js → quoted-message-DVOfpEja.js} +1 -1
  22. package/dist/runtime-api.js +7 -7
  23. package/dist/{send-DSlVXKL_.js → send-A9EqsNyz.js} +3 -1
  24. package/dist/{send-api-Cp9CUH5P.js → send-api-89SE5WKV.js} +19 -6
  25. package/dist/{session-BCKUPRkN.js → session-BW8RcCcb.js} +3 -20
  26. package/dist/{setup-core-Cp0NMO89.js → setup-core-DVEkfMVh.js} +7 -3
  27. package/dist/{setup-finalize-DnV-KlkQ.js → setup-finalize-DJepnx7S.js} +2 -2
  28. package/dist/setup-plugin-api.js +1 -1
  29. package/dist/{setup-surface-BmPcAhIF.js → setup-surface-ByAUWXyq.js} +2 -2
  30. package/dist/socket-timing-DvMNkIge.js +65 -0
  31. package/dist/{text-runtime-Dk37KYHj.js → text-runtime-BBSmIBHN.js} +6 -4
  32. package/node_modules/@protobufjs/aspromise/LICENSE +26 -0
  33. package/node_modules/@protobufjs/aspromise/README.md +13 -0
  34. package/node_modules/{protobufjs/src/util/aspromise.d.ts → @protobufjs/aspromise/index.d.ts} +13 -13
  35. package/node_modules/{protobufjs/src/util/aspromise.js → @protobufjs/aspromise/index.js} +52 -52
  36. package/node_modules/@protobufjs/aspromise/package.json +21 -0
  37. package/node_modules/@protobufjs/aspromise/tests/index.js +130 -0
  38. package/node_modules/@protobufjs/base64/LICENSE +26 -0
  39. package/node_modules/@protobufjs/base64/README.md +19 -0
  40. package/node_modules/{protobufjs/src/util/base64.d.ts → @protobufjs/base64/index.d.ts} +32 -32
  41. package/node_modules/{protobufjs/src/util/base64.js → @protobufjs/base64/index.js} +139 -146
  42. package/node_modules/@protobufjs/base64/package.json +21 -0
  43. package/node_modules/@protobufjs/base64/tests/index.js +46 -0
  44. package/node_modules/@protobufjs/codegen/LICENSE +26 -0
  45. package/node_modules/@protobufjs/codegen/README.md +49 -0
  46. package/node_modules/{protobufjs/src/util/codegen.d.ts → @protobufjs/codegen/index.d.ts} +31 -31
  47. package/node_modules/{protobufjs/src/util/codegen.js → @protobufjs/codegen/index.js} +112 -113
  48. package/node_modules/@protobufjs/codegen/package.json +13 -0
  49. package/node_modules/@protobufjs/codegen/tests/index.js +13 -0
  50. package/node_modules/@protobufjs/eventemitter/CHANGELOG.md +8 -0
  51. package/node_modules/@protobufjs/eventemitter/LICENSE +26 -0
  52. package/node_modules/@protobufjs/eventemitter/README.md +22 -0
  53. package/node_modules/{protobufjs/src/util/eventemitter.d.ts → @protobufjs/eventemitter/index.d.ts} +45 -45
  54. package/node_modules/{protobufjs/src/util/eventemitter.js → @protobufjs/eventemitter/index.js} +86 -86
  55. package/node_modules/@protobufjs/eventemitter/package.json +21 -0
  56. package/node_modules/@protobufjs/eventemitter/tests/index.js +83 -0
  57. package/node_modules/@protobufjs/fetch/CHANGELOG.md +8 -0
  58. package/node_modules/@protobufjs/fetch/LICENSE +26 -0
  59. package/node_modules/@protobufjs/fetch/README.md +13 -0
  60. package/node_modules/{protobufjs/src/util/fetch.d.ts → @protobufjs/fetch/index.d.ts} +56 -56
  61. package/node_modules/{protobufjs/src/util/fetch.js → @protobufjs/fetch/index.js} +112 -112
  62. package/node_modules/@protobufjs/fetch/package.json +27 -0
  63. package/node_modules/@protobufjs/fetch/tests/data/file.txt +1 -0
  64. package/node_modules/@protobufjs/fetch/tests/index.js +158 -0
  65. package/node_modules/@protobufjs/fetch/util/fs.js +11 -0
  66. package/node_modules/@protobufjs/float/LICENSE +26 -0
  67. package/node_modules/@protobufjs/float/README.md +102 -0
  68. package/node_modules/@protobufjs/float/bench/index.js +87 -0
  69. package/node_modules/@protobufjs/float/bench/suite.js +46 -0
  70. package/node_modules/{protobufjs/src/util/float.js → @protobufjs/float/index.js} +335 -335
  71. package/node_modules/@protobufjs/float/package.json +26 -0
  72. package/node_modules/@protobufjs/float/tests/index.js +100 -0
  73. package/node_modules/@protobufjs/inquire/CHANGELOG.md +8 -0
  74. package/node_modules/@protobufjs/inquire/LICENSE +26 -0
  75. package/node_modules/@protobufjs/inquire/README.md +13 -0
  76. package/node_modules/{protobufjs/src/util/inquire.d.ts → @protobufjs/inquire/index.d.ts} +10 -10
  77. package/node_modules/{protobufjs/src/util/inquire.js → @protobufjs/inquire/index.js} +38 -38
  78. package/node_modules/@protobufjs/inquire/package.json +21 -0
  79. package/node_modules/@protobufjs/inquire/tests/data/array.js +1 -0
  80. package/node_modules/@protobufjs/inquire/tests/data/emptyArray.js +1 -0
  81. package/node_modules/@protobufjs/inquire/tests/data/emptyObject.js +1 -0
  82. package/node_modules/@protobufjs/inquire/tests/data/object.js +1 -0
  83. package/node_modules/@protobufjs/inquire/tests/index.js +20 -0
  84. package/node_modules/@protobufjs/path/LICENSE +26 -0
  85. package/node_modules/@protobufjs/path/README.md +19 -0
  86. package/node_modules/{protobufjs/src/util/path.d.ts → @protobufjs/path/index.d.ts} +22 -22
  87. package/node_modules/{protobufjs/src/util/path.js → @protobufjs/path/index.js} +65 -72
  88. package/node_modules/@protobufjs/path/package.json +21 -0
  89. package/node_modules/@protobufjs/path/tests/index.js +60 -0
  90. package/node_modules/@protobufjs/pool/.npmignore +3 -0
  91. package/node_modules/@protobufjs/pool/LICENSE +26 -0
  92. package/node_modules/@protobufjs/pool/README.md +13 -0
  93. package/node_modules/{protobufjs/src/util/pool.d.ts → @protobufjs/pool/index.d.ts} +32 -32
  94. package/node_modules/{protobufjs/src/util/pool.js → @protobufjs/pool/index.js} +48 -48
  95. package/node_modules/@protobufjs/pool/package.json +21 -0
  96. package/node_modules/@protobufjs/pool/tests/index.js +33 -0
  97. package/node_modules/@protobufjs/utf8/LICENSE +26 -0
  98. package/node_modules/@protobufjs/utf8/README.md +20 -0
  99. package/node_modules/{protobufjs/src/util/utf8.d.ts → @protobufjs/utf8/index.d.ts} +24 -24
  100. package/node_modules/{protobufjs/src/util/utf8.js → @protobufjs/utf8/index.js} +104 -130
  101. package/node_modules/@protobufjs/utf8/package.json +21 -0
  102. package/node_modules/@protobufjs/utf8/tests/data/surrogate_pair_bug.txt +207 -0
  103. package/node_modules/@protobufjs/utf8/tests/data/utf8.txt +216 -0
  104. package/node_modules/@protobufjs/utf8/tests/index.js +74 -0
  105. package/node_modules/@types/node/LICENSE +21 -0
  106. package/node_modules/@types/node/README.md +15 -0
  107. package/node_modules/@types/node/assert/strict.d.ts +59 -0
  108. package/node_modules/@types/node/assert.d.ts +950 -0
  109. package/node_modules/@types/node/async_hooks.d.ts +711 -0
  110. package/node_modules/@types/node/buffer.buffer.d.ts +466 -0
  111. package/node_modules/@types/node/buffer.d.ts +1765 -0
  112. package/node_modules/@types/node/child_process.d.ts +1366 -0
  113. package/node_modules/@types/node/cluster.d.ts +432 -0
  114. package/node_modules/@types/node/compatibility/iterators.d.ts +21 -0
  115. package/node_modules/@types/node/console.d.ts +93 -0
  116. package/node_modules/@types/node/constants.d.ts +14 -0
  117. package/node_modules/@types/node/crypto.d.ts +4058 -0
  118. package/node_modules/@types/node/dgram.d.ts +537 -0
  119. package/node_modules/@types/node/diagnostics_channel.d.ts +552 -0
  120. package/node_modules/@types/node/dns/promises.d.ts +497 -0
  121. package/node_modules/@types/node/dns.d.ts +876 -0
  122. package/node_modules/@types/node/domain.d.ts +150 -0
  123. package/node_modules/@types/node/events.d.ts +1008 -0
  124. package/node_modules/@types/node/fs/promises.d.ts +1468 -0
  125. package/node_modules/@types/node/fs.d.ts +4780 -0
  126. package/node_modules/@types/node/globals.d.ts +150 -0
  127. package/node_modules/@types/node/globals.typedarray.d.ts +101 -0
  128. package/node_modules/@types/node/http.d.ts +2147 -0
  129. package/node_modules/@types/node/http2.d.ts +2485 -0
  130. package/node_modules/@types/node/https.d.ts +400 -0
  131. package/node_modules/@types/node/index.d.ts +117 -0
  132. package/node_modules/@types/node/inspector/promises.d.ts +35 -0
  133. package/node_modules/@types/node/inspector.d.ts +264 -0
  134. package/node_modules/@types/node/inspector.generated.d.ts +4406 -0
  135. package/node_modules/@types/node/module.d.ts +755 -0
  136. package/node_modules/@types/node/net.d.ts +970 -0
  137. package/node_modules/@types/node/os.d.ts +498 -0
  138. package/node_modules/@types/node/package.json +155 -0
  139. package/node_modules/@types/node/path/posix.d.ts +8 -0
  140. package/node_modules/@types/node/path/win32.d.ts +8 -0
  141. package/node_modules/@types/node/path.d.ts +178 -0
  142. package/node_modules/@types/node/perf_hooks.d.ts +612 -0
  143. package/node_modules/@types/node/process.d.ts +2204 -0
  144. package/node_modules/@types/node/punycode.d.ts +89 -0
  145. package/node_modules/@types/node/querystring.d.ts +139 -0
  146. package/node_modules/@types/node/quic.d.ts +897 -0
  147. package/node_modules/@types/node/readline/promises.d.ts +158 -0
  148. package/node_modules/@types/node/readline.d.ts +507 -0
  149. package/node_modules/@types/node/repl.d.ts +420 -0
  150. package/node_modules/@types/node/sea.d.ts +47 -0
  151. package/node_modules/@types/node/sqlite.d.ts +1068 -0
  152. package/node_modules/@types/node/stream/consumers.d.ts +114 -0
  153. package/node_modules/@types/node/stream/iter.d.ts +301 -0
  154. package/node_modules/@types/node/stream/promises.d.ts +211 -0
  155. package/node_modules/@types/node/stream/web.d.ts +300 -0
  156. package/node_modules/@types/node/stream.d.ts +1774 -0
  157. package/node_modules/@types/node/string_decoder.d.ts +27 -0
  158. package/node_modules/@types/node/test/reporters.d.ts +59 -0
  159. package/node_modules/@types/node/test.d.ts +2279 -0
  160. package/node_modules/@types/node/timers/promises.d.ts +93 -0
  161. package/node_modules/@types/node/timers.d.ts +149 -0
  162. package/node_modules/@types/node/tls.d.ts +1193 -0
  163. package/node_modules/@types/node/trace_events.d.ts +103 -0
  164. package/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +462 -0
  165. package/node_modules/@types/node/ts5.6/compatibility/float16array.d.ts +71 -0
  166. package/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +36 -0
  167. package/node_modules/@types/node/ts5.6/index.d.ts +119 -0
  168. package/node_modules/@types/node/ts5.7/compatibility/float16array.d.ts +72 -0
  169. package/node_modules/@types/node/ts5.7/index.d.ts +119 -0
  170. package/node_modules/@types/node/tty.d.ts +225 -0
  171. package/node_modules/@types/node/url.d.ts +556 -0
  172. package/node_modules/@types/node/util/types.d.ts +558 -0
  173. package/node_modules/@types/node/util.d.ts +1677 -0
  174. package/node_modules/@types/node/v8.d.ts +980 -0
  175. package/node_modules/@types/node/vm.d.ts +1136 -0
  176. package/node_modules/@types/node/wasi.d.ts +131 -0
  177. package/node_modules/@types/node/web-globals/abortcontroller.d.ts +59 -0
  178. package/node_modules/@types/node/web-globals/blob.d.ts +23 -0
  179. package/node_modules/@types/node/web-globals/console.d.ts +9 -0
  180. package/node_modules/@types/node/web-globals/crypto.d.ts +39 -0
  181. package/node_modules/@types/node/web-globals/domexception.d.ts +68 -0
  182. package/node_modules/@types/node/web-globals/encoding.d.ts +11 -0
  183. package/node_modules/@types/node/web-globals/events.d.ts +106 -0
  184. package/node_modules/@types/node/web-globals/fetch.d.ts +69 -0
  185. package/node_modules/@types/node/web-globals/importmeta.d.ts +13 -0
  186. package/node_modules/@types/node/web-globals/messaging.d.ts +23 -0
  187. package/node_modules/@types/node/web-globals/navigator.d.ts +25 -0
  188. package/node_modules/@types/node/web-globals/performance.d.ts +45 -0
  189. package/node_modules/@types/node/web-globals/storage.d.ts +24 -0
  190. package/node_modules/@types/node/web-globals/streams.d.ts +115 -0
  191. package/node_modules/@types/node/web-globals/timers.d.ts +44 -0
  192. package/node_modules/@types/node/web-globals/url.d.ts +24 -0
  193. package/node_modules/@types/node/worker_threads.d.ts +671 -0
  194. package/node_modules/@types/node/zlib/iter.d.ts +131 -0
  195. package/node_modules/@types/node/zlib.d.ts +589 -0
  196. package/node_modules/protobufjs/README.md +556 -263
  197. package/node_modules/protobufjs/dist/light/protobuf.js +1569 -1919
  198. package/node_modules/protobufjs/dist/light/protobuf.js.map +1 -1
  199. package/node_modules/protobufjs/dist/light/protobuf.min.js +3 -3
  200. package/node_modules/protobufjs/dist/light/protobuf.min.js.map +1 -1
  201. package/node_modules/protobufjs/dist/minimal/protobuf.js +906 -1132
  202. package/node_modules/protobufjs/dist/minimal/protobuf.js.map +1 -1
  203. package/node_modules/protobufjs/dist/minimal/protobuf.min.js +3 -3
  204. package/node_modules/protobufjs/dist/minimal/protobuf.min.js.map +1 -1
  205. package/node_modules/protobufjs/dist/protobuf.js +1576 -1993
  206. package/node_modules/protobufjs/dist/protobuf.js.map +1 -1
  207. package/node_modules/protobufjs/dist/protobuf.min.js +3 -3
  208. package/node_modules/protobufjs/dist/protobuf.min.js.map +1 -1
  209. package/node_modules/protobufjs/ext/descriptor/README.md +70 -3
  210. package/node_modules/protobufjs/ext/descriptor/index.d.ts +193 -0
  211. package/node_modules/protobufjs/ext/descriptor/index.js +1185 -1
  212. package/node_modules/protobufjs/ext/descriptor/test.js +54 -0
  213. package/node_modules/protobufjs/index.d.ts +720 -834
  214. package/node_modules/protobufjs/package.json +44 -20
  215. package/node_modules/protobufjs/src/converter.js +36 -60
  216. package/node_modules/protobufjs/src/decoder.js +53 -124
  217. package/node_modules/protobufjs/src/encoder.js +2 -10
  218. package/node_modules/protobufjs/src/enum.js +3 -8
  219. package/node_modules/protobufjs/src/field.js +11 -13
  220. package/node_modules/protobufjs/src/index-light.js +1 -1
  221. package/node_modules/protobufjs/src/mapfield.js +0 -1
  222. package/node_modules/protobufjs/src/message.js +11 -5
  223. package/node_modules/protobufjs/src/method.js +4 -5
  224. package/node_modules/protobufjs/src/namespace.js +3 -10
  225. package/node_modules/protobufjs/src/object.js +20 -20
  226. package/node_modules/protobufjs/src/oneof.js +0 -3
  227. package/node_modules/protobufjs/src/parse.js +16 -78
  228. package/node_modules/protobufjs/src/reader.js +31 -136
  229. package/node_modules/protobufjs/src/reader_buffer.js +3 -24
  230. package/node_modules/protobufjs/src/root.js +3 -7
  231. package/node_modules/protobufjs/src/roots.js +1 -1
  232. package/node_modules/protobufjs/src/service.js +6 -13
  233. package/node_modules/protobufjs/src/tokenize.js +1 -6
  234. package/node_modules/protobufjs/src/type.js +30 -44
  235. package/node_modules/protobufjs/src/typescript.jsdoc +15 -0
  236. package/node_modules/protobufjs/src/util/minimal.js +12 -36
  237. package/node_modules/protobufjs/src/util.js +17 -6
  238. package/node_modules/protobufjs/src/verifier.js +6 -6
  239. package/node_modules/protobufjs/src/wrappers.js +1 -0
  240. package/node_modules/protobufjs/src/writer.js +16 -42
  241. package/node_modules/protobufjs/src/writer_buffer.js +1 -18
  242. package/node_modules/protobufjs/tsconfig.json +5 -3
  243. package/node_modules/undici-types/LICENSE +21 -0
  244. package/node_modules/undici-types/README.md +6 -0
  245. package/node_modules/undici-types/agent.d.ts +32 -0
  246. package/node_modules/undici-types/api.d.ts +43 -0
  247. package/node_modules/undici-types/balanced-pool.d.ts +30 -0
  248. package/node_modules/undici-types/cache-interceptor.d.ts +179 -0
  249. package/node_modules/undici-types/cache.d.ts +36 -0
  250. package/node_modules/undici-types/client-stats.d.ts +15 -0
  251. package/node_modules/undici-types/client.d.ts +123 -0
  252. package/node_modules/undici-types/connector.d.ts +36 -0
  253. package/node_modules/undici-types/content-type.d.ts +21 -0
  254. package/node_modules/undici-types/cookies.d.ts +30 -0
  255. package/node_modules/undici-types/diagnostics-channel.d.ts +74 -0
  256. package/node_modules/undici-types/dispatcher.d.ts +279 -0
  257. package/node_modules/undici-types/env-http-proxy-agent.d.ts +22 -0
  258. package/node_modules/undici-types/errors.d.ts +177 -0
  259. package/node_modules/undici-types/eventsource.d.ts +66 -0
  260. package/node_modules/undici-types/fetch.d.ts +211 -0
  261. package/node_modules/undici-types/formdata.d.ts +108 -0
  262. package/node_modules/undici-types/global-dispatcher.d.ts +9 -0
  263. package/node_modules/undici-types/global-origin.d.ts +7 -0
  264. package/node_modules/undici-types/h2c-client.d.ts +73 -0
  265. package/node_modules/undici-types/handlers.d.ts +15 -0
  266. package/node_modules/undici-types/header.d.ts +160 -0
  267. package/node_modules/undici-types/index.d.ts +91 -0
  268. package/node_modules/undici-types/interceptors.d.ts +80 -0
  269. package/node_modules/undici-types/mock-agent.d.ts +68 -0
  270. package/node_modules/undici-types/mock-call-history.d.ts +111 -0
  271. package/node_modules/undici-types/mock-client.d.ts +27 -0
  272. package/node_modules/undici-types/mock-errors.d.ts +12 -0
  273. package/node_modules/undici-types/mock-interceptor.d.ts +94 -0
  274. package/node_modules/undici-types/mock-pool.d.ts +27 -0
  275. package/node_modules/undici-types/package.json +55 -0
  276. package/node_modules/undici-types/patch.d.ts +29 -0
  277. package/node_modules/undici-types/pool-stats.d.ts +19 -0
  278. package/node_modules/undici-types/pool.d.ts +41 -0
  279. package/node_modules/undici-types/proxy-agent.d.ts +29 -0
  280. package/node_modules/undici-types/readable.d.ts +68 -0
  281. package/node_modules/undici-types/retry-agent.d.ts +8 -0
  282. package/node_modules/undici-types/retry-handler.d.ts +125 -0
  283. package/node_modules/undici-types/round-robin-pool.d.ts +41 -0
  284. package/node_modules/undici-types/snapshot-agent.d.ts +109 -0
  285. package/node_modules/undici-types/socks5-proxy-agent.d.ts +25 -0
  286. package/node_modules/undici-types/util.d.ts +18 -0
  287. package/node_modules/undici-types/utility.d.ts +7 -0
  288. package/node_modules/undici-types/webidl.d.ts +347 -0
  289. package/node_modules/undici-types/websocket.d.ts +188 -0
  290. package/npm-shrinkwrap.json +95 -6
  291. package/package.json +4 -4
  292. package/node_modules/protobufjs/ext/README.md +0 -81
  293. package/node_modules/protobufjs/ext/descriptor.d.ts +0 -86
  294. package/node_modules/protobufjs/ext/descriptor.generated.d.ts +0 -409
  295. package/node_modules/protobufjs/ext/descriptor.js +0 -1266
  296. package/node_modules/protobufjs/ext/textformat.d.ts +0 -19
  297. package/node_modules/protobufjs/ext/textformat.generated.d.ts +0 -11
  298. package/node_modules/protobufjs/ext/textformat.js +0 -1235
  299. package/node_modules/protobufjs/google/protobuf/compiler/plugin.json +0 -126
  300. package/node_modules/protobufjs/google/protobuf/compiler/plugin.proto +0 -47
  301. package/node_modules/protobufjs/src/typescript.js +0 -25
  302. /package/node_modules/{protobufjs/src/util/float.d.ts → @protobufjs/float/index.d.ts} +0 -0
@@ -1,6 +1,6 @@
1
1
  import { a as resolveWhatsAppAccount } from "./accounts-DgViSyJx.js";
2
- import { l as isSelfChatMode, n as normalizeE164 } from "./text-runtime-Dk37KYHj.js";
3
- import { a as getSelfIdentity, o as getSenderIdentity } from "./identity-Bupuq9vF.js";
2
+ import { l as isSelfChatMode, n as normalizeE164 } from "./text-runtime-BBSmIBHN.js";
3
+ import { a as getSelfIdentity, o as getSenderIdentity } from "./identity-Cm6bKAtk.js";
4
4
  import { defaultRuntime } from "openclaw/plugin-sdk/runtime-env";
5
5
  import { resolveChannelGroupPolicy, resolveChannelGroupRequireMention } from "openclaw/plugin-sdk/channel-policy";
6
6
  import { createChannelPairingChallengeIssuer } from "openclaw/plugin-sdk/channel-pairing";
@@ -8,6 +8,128 @@ import { upsertChannelPairingRequest } from "openclaw/plugin-sdk/conversation-ru
8
8
  import { resolveDefaultGroupPolicy, resolveOpenProviderRuntimeGroupPolicy, warnMissingProviderGroupPolicyFallbackOnce } from "openclaw/plugin-sdk/runtime-group-policy";
9
9
  import { resolveStableChannelMessageIngress } from "openclaw/plugin-sdk/channel-ingress-runtime";
10
10
  import { resolveGroupSessionKey } from "openclaw/plugin-sdk/session-store-runtime";
11
+ //#region extensions/whatsapp/src/inbound/group-conversation.ts
12
+ function resolveWhatsAppGroupConversationId(conversationId) {
13
+ return resolveGroupSessionKey({
14
+ From: conversationId,
15
+ ChatType: "group",
16
+ Provider: "whatsapp"
17
+ })?.id ?? conversationId;
18
+ }
19
+ //#endregion
20
+ //#region extensions/whatsapp/src/inbound/admission.ts
21
+ function copyAccount(account) {
22
+ const copied = {
23
+ accountId: account.accountId,
24
+ enabled: account.enabled,
25
+ sendReadReceipts: account.sendReadReceipts
26
+ };
27
+ if (account.name) copied.name = account.name;
28
+ if (typeof account.selfChatMode === "boolean") copied.selfChatMode = account.selfChatMode;
29
+ if (account.replyToMode) copied.replyToMode = account.replyToMode;
30
+ return copied;
31
+ }
32
+ function buildWhatsAppInboundAdmission(params) {
33
+ return {
34
+ accountId: params.policy.account.accountId,
35
+ isSelfChat: params.policy.isSelfChat,
36
+ account: copyAccount(params.policy.account),
37
+ conversation: {
38
+ kind: params.isGroup ? "group" : "direct",
39
+ id: params.conversationId,
40
+ groupSessionId: resolveWhatsAppGroupConversationId(params.conversationId)
41
+ },
42
+ sender: {
43
+ id: params.senderId,
44
+ isSamePhone: params.policy.isSamePhone(params.senderId)
45
+ },
46
+ ingress: {
47
+ admission: params.access.ingress.admission,
48
+ decision: params.access.ingress.decision,
49
+ decisiveGateId: params.access.ingress.decisiveGateId,
50
+ reasonCode: params.access.ingress.reasonCode
51
+ },
52
+ senderAccess: {
53
+ allowed: params.access.senderAccess.allowed,
54
+ decision: params.access.senderAccess.decision,
55
+ reasonCode: params.access.senderAccess.reasonCode,
56
+ providerMissingFallbackApplied: params.access.senderAccess.providerMissingFallbackApplied
57
+ },
58
+ commandAccess: {
59
+ requested: params.access.commandAccess.requested,
60
+ authorized: params.access.commandAccess.authorized,
61
+ shouldBlockControlCommand: params.access.commandAccess.shouldBlockControlCommand,
62
+ reasonCode: params.access.commandAccess.reasonCode
63
+ },
64
+ activationAccess: {
65
+ ran: params.access.activationAccess.ran,
66
+ allowed: params.access.activationAccess.allowed,
67
+ shouldSkip: params.access.activationAccess.shouldSkip,
68
+ reasonCode: params.access.activationAccess.reasonCode
69
+ }
70
+ };
71
+ }
72
+ function buildDeprecatedFlatWhatsAppInboundAdmission(msg) {
73
+ const conversationId = msg.conversationId || msg.from;
74
+ if (!conversationId || !msg.accountId || !msg.chatType) throw new Error("WhatsApp legacy flat inbound messages must include deprecated top-level admission fields.");
75
+ const accountId = msg.accountId;
76
+ const admitted = msg.accessControlPassed !== false;
77
+ const platformSender = msg.platform?.sender;
78
+ const senderE164 = platformSender?.e164 ?? msg.platform?.senderE164 ?? msg.senderE164;
79
+ const senderJid = platformSender?.jid ?? msg.platform?.senderJid ?? msg.senderJid;
80
+ const senderName = platformSender?.name ?? msg.platform?.senderName ?? msg.senderName;
81
+ const senderId = msg.chatType === "group" ? senderE164 ?? senderJid ?? senderName ?? conversationId : senderE164 ?? conversationId;
82
+ const reasonCode = admitted ? msg.chatType === "group" ? "group_policy_allowed" : "dm_policy_allowlisted" : "no_policy_match";
83
+ return buildWhatsAppInboundAdmission({
84
+ policy: {
85
+ account: {
86
+ accountId,
87
+ enabled: true,
88
+ sendReadReceipts: true
89
+ },
90
+ isSelfChat: false,
91
+ isSamePhone: () => false
92
+ },
93
+ access: {
94
+ ingress: {
95
+ admission: admitted ? "dispatch" : "drop",
96
+ decision: admitted ? "allow" : "block",
97
+ decisiveGateId: "legacy-flat-compat",
98
+ reasonCode
99
+ },
100
+ senderAccess: {
101
+ allowed: admitted,
102
+ decision: admitted ? "allow" : "block",
103
+ reasonCode,
104
+ providerMissingFallbackApplied: false
105
+ },
106
+ commandAccess: {
107
+ requested: false,
108
+ authorized: false,
109
+ shouldBlockControlCommand: false,
110
+ reasonCode: "command_authorized"
111
+ },
112
+ activationAccess: {
113
+ ran: false,
114
+ allowed: admitted,
115
+ shouldSkip: !admitted,
116
+ reasonCode: admitted ? "activation_allowed" : "activation_skipped"
117
+ }
118
+ },
119
+ isGroup: msg.chatType === "group",
120
+ conversationId,
121
+ senderId
122
+ });
123
+ }
124
+ function requireWhatsAppInboundAdmission(params) {
125
+ if (!params.admission) throw new Error("WhatsApp inbound message is missing admission facts");
126
+ return params.admission;
127
+ }
128
+ function requireAdmittedWhatsAppInboundMessage(msg) {
129
+ requireWhatsAppInboundAdmission(msg);
130
+ return msg;
131
+ }
132
+ //#endregion
11
133
  //#region extensions/whatsapp/src/runtime-group-policy.ts
12
134
  function resolveWhatsAppRuntimeGroupPolicy(params) {
13
135
  return resolveOpenProviderRuntimeGroupPolicy({
@@ -23,13 +145,6 @@ function normalizeWhatsAppIngressPhone(value) {
23
145
  if (!trimmed) return null;
24
146
  return normalizeE164(trimmed);
25
147
  }
26
- function resolveGroupConversationId(conversationId) {
27
- return resolveGroupSessionKey({
28
- From: conversationId,
29
- ChatType: "group",
30
- Provider: "whatsapp"
31
- })?.id ?? conversationId;
32
- }
33
148
  function maybeSamePhoneDmAllowFrom(params) {
34
149
  if (params.isGroup || !params.dmSenderId || !params.policy.isSamePhone(params.dmSenderId)) return [];
35
150
  return [params.dmSenderId];
@@ -73,13 +188,13 @@ function resolveWhatsAppInboundPolicy(params) {
73
188
  resolveConversationGroupPolicy: (conversationId) => resolveChannelGroupPolicy({
74
189
  cfg: resolvedGroupCfg,
75
190
  channel: "whatsapp",
76
- groupId: resolveGroupConversationId(conversationId),
191
+ groupId: resolveWhatsAppGroupConversationId(conversationId),
77
192
  hasGroupAllowFrom: groupAllowFrom.length > 0
78
193
  }),
79
194
  resolveConversationRequireMention: (conversationId) => resolveChannelGroupRequireMention({
80
195
  cfg: resolvedGroupCfg,
81
196
  channel: "whatsapp",
82
- groupId: resolveGroupConversationId(conversationId)
197
+ groupId: resolveWhatsAppGroupConversationId(conversationId)
83
198
  })
84
199
  };
85
200
  }
@@ -110,6 +225,7 @@ async function resolveWhatsAppIngressAccess(params) {
110
225
  dmPolicy: params.policy.dmPolicy,
111
226
  groupPolicy: params.policy.groupPolicy,
112
227
  policy: { groupAllowFromFallbackToAllowFrom: false },
228
+ providerMissingFallbackApplied: params.policy.providerMissingFallbackApplied,
113
229
  allowFrom: dmAllowFrom,
114
230
  groupAllowFrom: params.policy.groupAllowFrom,
115
231
  command: params.includeCommand === true ? {} : void 0
@@ -118,21 +234,22 @@ async function resolveWhatsAppIngressAccess(params) {
118
234
  async function resolveWhatsAppCommandAuthorized(params) {
119
235
  if (!(params.cfg.commands?.useAccessGroups !== false)) return true;
120
236
  const self = getSelfIdentity(params.msg);
237
+ const admission = requireWhatsAppInboundAdmission(params.msg);
121
238
  const policy = params.policy ?? resolveWhatsAppInboundPolicy({
122
239
  cfg: params.cfg,
123
- accountId: params.msg.accountId,
240
+ accountId: admission.accountId,
124
241
  selfE164: self.e164 ?? null
125
242
  });
126
- const isGroup = params.msg.chatType === "group";
243
+ const isGroup = admission.conversation.kind === "group";
127
244
  const sender = getSenderIdentity(params.msg);
128
- const dmSender = sender.e164 ?? params.msg.from ?? "";
245
+ const dmSender = sender.e164 ?? admission.conversation.id;
129
246
  const groupSender = sender.e164 ?? "";
130
247
  if (!normalizeE164(isGroup ? groupSender : dmSender)) return false;
131
248
  return (await resolveWhatsAppIngressAccess({
132
249
  cfg: params.cfg,
133
250
  policy,
134
251
  isGroup,
135
- conversationId: params.msg.conversationId ?? params.msg.platform.chatJid ?? params.msg.from,
252
+ conversationId: admission.conversation.id,
136
253
  senderId: isGroup ? groupSender : dmSender,
137
254
  dmSenderId: dmSender,
138
255
  includeCommand: true
@@ -145,6 +262,14 @@ function logWhatsAppVerbose(enabled, message) {
145
262
  if (!enabled) return;
146
263
  defaultRuntime.log(message);
147
264
  }
265
+ function blockedInboundAccess(policy) {
266
+ return {
267
+ allowed: false,
268
+ shouldMarkRead: false,
269
+ isSelfChat: policy.isSelfChat,
270
+ resolvedAccountId: policy.account.accountId
271
+ };
272
+ }
148
273
  async function checkInboundAccessControl(params) {
149
274
  const policy = resolveWhatsAppInboundPolicy({
150
275
  cfg: params.cfg,
@@ -159,43 +284,32 @@ async function checkInboundAccessControl(params) {
159
284
  accountId: policy.account.accountId,
160
285
  log: (message) => logWhatsAppVerbose(params.verbose, message)
161
286
  });
162
- const { senderAccess } = await resolveWhatsAppIngressAccess({
287
+ const conversationId = params.group ? params.remoteJid : params.from;
288
+ const accessSenderId = params.group ? params.senderE164 : params.from;
289
+ const admissionSenderId = params.group ? params.senderE164 ?? params.senderJid ?? params.from : params.from;
290
+ const access = await resolveWhatsAppIngressAccess({
163
291
  cfg: params.cfg,
164
292
  policy,
165
293
  isGroup: params.group,
166
- conversationId: params.remoteJid,
167
- senderId: params.group ? params.senderE164 : params.from,
294
+ conversationId,
295
+ senderId: accessSenderId,
168
296
  dmSenderId: params.from
169
297
  });
298
+ const { senderAccess } = access;
170
299
  if (params.group && senderAccess.decision !== "allow") {
171
300
  if (senderAccess.reasonCode === "group_policy_disabled") logWhatsAppVerbose(params.verbose, "Blocked group message (groupPolicy: disabled)");
172
301
  else if (senderAccess.reasonCode === "group_policy_empty_allowlist") logWhatsAppVerbose(params.verbose, "Blocked group message (groupPolicy: allowlist, no groupAllowFrom)");
173
302
  else logWhatsAppVerbose(params.verbose, `Blocked group message from ${params.senderE164 ?? "unknown sender"} (groupPolicy: allowlist)`);
174
- return {
175
- allowed: false,
176
- shouldMarkRead: false,
177
- isSelfChat: policy.isSelfChat,
178
- resolvedAccountId: policy.account.accountId
179
- };
303
+ return blockedInboundAccess(policy);
180
304
  }
181
305
  if (!params.group) {
182
306
  if (params.isFromMe && !policy.isSamePhone(params.from)) {
183
307
  logWhatsAppVerbose(params.verbose, "Skipping outbound DM (fromMe); no pairing reply needed.");
184
- return {
185
- allowed: false,
186
- shouldMarkRead: false,
187
- isSelfChat: policy.isSelfChat,
188
- resolvedAccountId: policy.account.accountId
189
- };
308
+ return blockedInboundAccess(policy);
190
309
  }
191
310
  if (senderAccess.decision === "block" && senderAccess.reasonCode === "dm_policy_disabled") {
192
311
  logWhatsAppVerbose(params.verbose, "Blocked dm (dmPolicy: disabled)");
193
- return {
194
- allowed: false,
195
- shouldMarkRead: false,
196
- isSelfChat: policy.isSelfChat,
197
- resolvedAccountId: policy.account.accountId
198
- };
312
+ return blockedInboundAccess(policy);
199
313
  }
200
314
  if (senderAccess.decision === "pairing" && !policy.isSamePhone(params.from)) {
201
315
  const candidate = params.from;
@@ -222,30 +336,27 @@ async function checkInboundAccessControl(params) {
222
336
  logWhatsAppVerbose(params.verbose, `whatsapp pairing reply failed for ${candidate}: ${String(err)}`);
223
337
  }
224
338
  });
225
- return {
226
- allowed: false,
227
- shouldMarkRead: false,
228
- isSelfChat: policy.isSelfChat,
229
- resolvedAccountId: policy.account.accountId
230
- };
339
+ return blockedInboundAccess(policy);
231
340
  }
232
341
  if (senderAccess.decision !== "allow") {
233
342
  logWhatsAppVerbose(params.verbose, `Blocked unauthorized sender ${params.from} (dmPolicy=${policy.dmPolicy})`);
234
- return {
235
- allowed: false,
236
- shouldMarkRead: false,
237
- isSelfChat: policy.isSelfChat,
238
- resolvedAccountId: policy.account.accountId
239
- };
343
+ return blockedInboundAccess(policy);
240
344
  }
241
345
  }
242
346
  return {
243
347
  allowed: true,
244
348
  shouldMarkRead: true,
245
349
  isSelfChat: policy.isSelfChat,
246
- resolvedAccountId: policy.account.accountId
350
+ resolvedAccountId: policy.account.accountId,
351
+ admission: buildWhatsAppInboundAdmission({
352
+ policy,
353
+ access,
354
+ isGroup: params.group,
355
+ conversationId,
356
+ senderId: admissionSenderId
357
+ })
247
358
  };
248
359
  }
249
360
  const testing = { resolveWhatsAppInboundPolicy };
250
361
  //#endregion
251
- export { resolveWhatsAppRuntimeGroupPolicy as a, resolveWhatsAppInboundPolicy as i, testing as n, resolveWhatsAppCommandAuthorized as r, checkInboundAccessControl as t };
362
+ export { resolveWhatsAppRuntimeGroupPolicy as a, requireWhatsAppInboundAdmission as c, resolveWhatsAppInboundPolicy as i, resolveWhatsAppGroupConversationId as l, testing as n, buildDeprecatedFlatWhatsAppInboundAdmission as o, resolveWhatsAppCommandAuthorized as r, requireAdmittedWhatsAppInboundMessage as s, checkInboundAccessControl as t };
@@ -1,6 +1,6 @@
1
1
  import { a as resolveWhatsAppAccount } from "./accounts-DgViSyJx.js";
2
2
  import { t as resolveWhatsAppOutboundTarget } from "./resolve-outbound-target-CcdugbDf.js";
3
- import { g as resolveWhatsAppReactionLevel, r as sendReactionWhatsApp } from "./send-DSlVXKL_.js";
3
+ import { g as resolveWhatsAppReactionLevel, r as sendReactionWhatsApp } from "./send-A9EqsNyz.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-Cyp5GNIT.js";
1
+ import { t as handleWhatsAppAction } from "./action-runtime-ClQLHIwf.js";
2
2
  export { handleWhatsAppAction };
@@ -1,2 +1,2 @@
1
- import { t as handleWhatsAppAction } from "./action-runtime-Cyp5GNIT.js";
1
+ import { t as handleWhatsAppAction } from "./action-runtime-ClQLHIwf.js";
2
2
  export { handleWhatsAppAction };
package/dist/api.js CHANGED
@@ -2,19 +2,20 @@ 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-DgViSyJx.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 "./send-DSlVXKL_.js";
5
+ import "./send-A9EqsNyz.js";
6
6
  import { n as getStatusCode, t as formatError } from "./session-errors-CbsoQqoy.js";
7
- 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 { n as WHATSAPP_LEGACY_OUTBOUND_SEND_DEP_KEYS, t as whatsappPlugin } from "./channel-DyUm8hqs.js";
7
+ import { n as createWhatsAppSocketOperationTimeoutAdapter, t as DEFAULT_WHATSAPP_SOCKET_TIMING } from "./socket-timing-DvMNkIge.js";
8
+ 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-BBSmIBHN.js";
9
+ import { n as WHATSAPP_LEGACY_OUTBOUND_SEND_DEP_KEYS, t as whatsappPlugin } from "./channel-CNA0E9wp.js";
9
10
  import { t as whatsappCommandPolicy } from "./command-policy-BIOSHySD.js";
10
- import { a as resolveWhatsAppGroupRequireMention, o as resolveWhatsAppGroupToolPolicy, s as resolveWhatsAppGroupIntroHint } from "./setup-core-Cp0NMO89.js";
11
+ import { a as resolveWhatsAppGroupRequireMention, o as resolveWhatsAppGroupToolPolicy, s as resolveWhatsAppGroupIntroHint } from "./setup-core-DVEkfMVh.js";
11
12
  import "./config-schema-CROZuhT-.js";
12
- import { t as whatsappSetupPlugin } from "./channel.setup-CpyAie9O.js";
13
+ import { t as whatsappSetupPlugin } from "./channel.setup-BfcLCLNn.js";
13
14
  import { t as DEFAULT_WEB_MEDIA_BYTES } from "./constants-HU41RHGI.js";
14
15
  import { n as listWhatsAppDirectoryGroupsFromConfig, r as listWhatsAppDirectoryPeersFromConfig } from "./directory-config-Dijefxc3.js";
15
- import { n as testing } from "./access-control-BKaMOvIk.js";
16
- import { d as normalizeMessageContent, f as resolveInboundMediaMimetype, g as extractLocationData, h as extractContextInfo, p as describeReplyContext, t as createWebSendApi, y as extractText } from "./send-api-Cp9CUH5P.js";
17
- import { r as waitForWaConnection, t as createWaSocket } from "./session-BCKUPRkN.js";
16
+ import { n as testing } from "./access-control-BnFVCHHH.js";
17
+ import { _ as extractLocationData, b as extractText, d as normalizeMessageContent, f as resolveInboundMediaMimetype, h as extractContextInfo, p as describeReplyContext, t as createWebSendApi } from "./send-api-89SE5WKV.js";
18
+ import { r as waitForWaConnection, t as createWaSocket } from "./session-BW8RcCcb.js";
18
19
  import "openclaw/plugin-sdk/channel-actions";
19
20
  import "openclaw/plugin-sdk/account-resolution";
20
21
  import "openclaw/plugin-sdk/core";
@@ -252,7 +253,7 @@ async function startWhatsAppQaDriverSession(params) {
252
253
  throw error;
253
254
  }
254
255
  const sendApi = createWebSendApi({
255
- sock,
256
+ sock: createWhatsAppSocketOperationTimeoutAdapter(sock, DEFAULT_WHATSAPP_SOCKET_TIMING.defaultQueryTimeoutMs),
256
257
  defaultAccountId: "qa-driver",
257
258
  authDir: params.authDir
258
259
  });
@@ -1,5 +1,5 @@
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-DSlVXKL_.js";
2
+ import { f as registerWhatsAppApprovalReactionTarget, i as sendTypingWhatsApp, p as unregisterWhatsAppApprovalReactionTarget, t as sendMessageWhatsApp } from "./send-A9EqsNyz.js";
3
3
  import "./normalize-Bxwqo-bW.js";
4
4
  import { n as getWhatsAppRuntime } from "./runtime-BfAdAEYT.js";
5
5
  import { createSubsystemLogger } from "openclaw/plugin-sdk/runtime-env";
@@ -1,15 +1,15 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.js";
2
2
  import { a as readWebCredsJsonRawSync, c as statWebCredsFileSync, i as readWebCredsJsonRaw, o as resolveWebCredsBackupPath, s as resolveWebCredsPath, t as assertWebCredsPathRegularFileOrMissing } from "./creds-files-B1kSWtBg.js";
3
- import { r as resolveUserPath } from "./text-runtime-Dk37KYHj.js";
4
- import { c as resolveComparableIdentity } from "./identity-Bupuq9vF.js";
3
+ import { r as resolveUserPath } from "./text-runtime-BBSmIBHN.js";
4
+ import { c as resolveComparableIdentity } from "./identity-Cm6bKAtk.js";
5
5
  import path from "node:path";
6
6
  import { resolveOAuthDir as resolveOAuthDir$1 } from "openclaw/plugin-sdk/state-paths";
7
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
+ import { resolveTimerTimeoutMs } from "openclaw/plugin-sdk/number-runtime";
10
11
  import fs from "node:fs/promises";
11
12
  import { DEFAULT_ACCOUNT_ID } from "openclaw/plugin-sdk/routing";
12
- import { resolveTimerTimeoutMs } from "openclaw/plugin-sdk/number-runtime";
13
13
  //#region extensions/whatsapp/src/creds-persistence.ts
14
14
  const CREDS_FILE_MODE = 384;
15
15
  const CREDS_SAVE_FLUSH_TIMEOUT_MS = 15e3;
@@ -2,15 +2,15 @@ import { r as resolveDefaultWhatsAppAccountId, t as listAccountIds } from "./acc
2
2
  import { a as resolveWhatsAppAccount } from "./accounts-DgViSyJx.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 { 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-DSlVXKL_.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-A9EqsNyz.js";
6
6
  import "./normalize-Bxwqo-bW.js";
7
7
  import { n as getWhatsAppRuntime } from "./runtime-BfAdAEYT.js";
8
- import { p as toWhatsappJid } from "./text-runtime-Dk37KYHj.js";
8
+ import { p as toWhatsappJid } from "./text-runtime-BBSmIBHN.js";
9
9
  import { t as createWhatsAppLoginTool } from "./agent-tools-login-BX7eHgDm.js";
10
- import { i as lookupInboundMessageMetaForTarget } from "./quoted-message-CveINB35.js";
10
+ import { i as lookupInboundMessageMetaForTarget } from "./quoted-message-DVOfpEja.js";
11
11
  import { t as whatsappCommandPolicy } from "./command-policy-BIOSHySD.js";
12
- import { a as resolveWhatsAppGroupRequireMention, c as resolveWhatsAppMentionStripRegexes, i as whatsappSetupWizardProxy, l as formatWhatsAppConfigAllowFromEntries, n as createWhatsAppPluginBase, o as resolveWhatsAppGroupToolPolicy, r as loadWhatsAppChannelRuntime, s as resolveWhatsAppGroupIntroHint, t as whatsappSetupAdapter } from "./setup-core-Cp0NMO89.js";
13
- import { f as readWebAuthExistsForDecision, n as WHATSAPP_AUTH_UNSTABLE_CODE } from "./auth-store-e9VzLZ-S.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-DVEkfMVh.js";
13
+ import { f as readWebAuthExistsForDecision, n as WHATSAPP_AUTH_UNSTABLE_CODE } from "./auth-store-RyuCPHE0.js";
14
14
  import { t as detectWhatsAppLegacyStateMigrations } from "./state-migrations-D_BmQUR9.js";
15
15
  import { createActionGate as createActionGate$1 } from "openclaw/plugin-sdk/channel-actions";
16
16
  import { DEFAULT_ACCOUNT_ID, listCombinedAccountIds, normalizeOptionalAccountId, resolveListedDefaultAccountId } from "openclaw/plugin-sdk/account-core";
@@ -24,7 +24,7 @@ import { DEFAULT_ACCOUNT_ID as DEFAULT_ACCOUNT_ID$1 } from "openclaw/plugin-sdk/
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 { createChannelApprovalCapability, splitChannelApprovalCapability } from "openclaw/plugin-sdk/approval-delivery-runtime";
27
+ import { createChannelApprovalCapability } from "openclaw/plugin-sdk/approval-delivery-runtime";
28
28
  import { createLazyChannelApprovalNativeRuntimeAdapter } from "openclaw/plugin-sdk/approval-handler-adapter-runtime";
29
29
  import { createChannelApproverDmTargetResolver, createChannelNativeOriginTargetResolver, createNativeApprovalChannelRouteGates, createNativeApprovalForwardingFallbackSuppressor } from "openclaw/plugin-sdk/approval-native-runtime";
30
30
  import { chunkText } from "openclaw/plugin-sdk/reply-chunking";
@@ -205,10 +205,9 @@ const whatsappApprovalCapability = createChannelApprovalCapability({
205
205
  accountId,
206
206
  request
207
207
  }),
208
- load: async () => (await import("./approval-handler.runtime-BVmOu6x1.js")).whatsappApprovalNativeRuntime
208
+ load: async () => (await import("./approval-handler.runtime-DLjPf_Mx.js")).whatsappApprovalNativeRuntime
209
209
  })
210
210
  });
211
- splitChannelApprovalCapability(whatsappApprovalCapability);
212
211
  //#endregion
213
212
  //#region extensions/whatsapp/src/channel-actions.ts
214
213
  function areWhatsAppAgentReactionsEnabled(params) {
@@ -604,7 +603,7 @@ function collectWhatsAppStatusIssues(accounts) {
604
603
  //#endregion
605
604
  //#region extensions/whatsapp/src/channel.ts
606
605
  const loadWhatsAppDirectoryConfig = createLazyRuntimeModule(() => import("./directory-config-Dijefxc3.js").then((n) => n.t));
607
- const loadWhatsAppChannelReactAction = createLazyRuntimeModule(() => import("./channel-react-action-zvbaCnGe.js"));
606
+ const loadWhatsAppChannelReactAction = createLazyRuntimeModule(() => import("./channel-react-action-CdYJKJWb.js"));
608
607
  function resolveWhatsAppTargetInfo(raw) {
609
608
  const normalized = normalizeWhatsAppTarget(raw);
610
609
  if (!normalized) return null;
@@ -1,2 +1,2 @@
1
- import { t as whatsappPlugin } from "./channel-DyUm8hqs.js";
1
+ import { t as whatsappPlugin } from "./channel-CNA0E9wp.js";
2
2
  export { whatsappPlugin };
@@ -1,7 +1,7 @@
1
1
  import { a as resolveWhatsAppAccount, s as resolveWhatsAppMediaMaxBytes } from "./accounts-DgViSyJx.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-Cyp5GNIT.js";
4
- import { t as sendMessageWhatsApp } from "./send-DSlVXKL_.js";
3
+ import { r as resolveAuthorizedWhatsAppOutboundTarget, t as handleWhatsAppAction } from "./action-runtime-ClQLHIwf.js";
4
+ import { t as sendMessageWhatsApp } from "./send-A9EqsNyz.js";
5
5
  import "./normalize-Bxwqo-bW.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
@@ -124,6 +124,5 @@ async function handleWhatsAppMessageAction(params) {
124
124
  fromMe: typeof params.params.fromMe === "boolean" ? params.params.fromMe : void 0
125
125
  }, params.cfg);
126
126
  }
127
- const handleWhatsAppReactAction = handleWhatsAppMessageAction;
128
127
  //#endregion
129
- export { handleWhatsAppMessageAction, handleWhatsAppReactAction };
128
+ export { handleWhatsAppMessageAction };
@@ -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-e9VzLZ-S.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-RyuCPHE0.js";
3
3
  import { t as getActiveWebListener$1 } from "./active-listener-CFwkn3ho.js";
4
- import { t as monitorWebChannel$1 } from "./monitor-Ggwn3FDi.js";
5
- import { t as loginWeb$1 } from "./login-Xv3ujrl0.js";
6
- import { whatsappSetupWizard as whatsappSetupWizard$1 } from "./setup-surface-BmPcAhIF.js";
4
+ import { t as monitorWebChannel$1 } from "./monitor-C5_QBO1-.js";
5
+ import { t as loginWeb$1 } from "./login-B503Fwb8.js";
6
+ import { whatsappSetupWizard as whatsappSetupWizard$1 } from "./setup-surface-ByAUWXyq.js";
7
7
  //#region extensions/whatsapp/src/channel.runtime.ts
8
8
  function getActiveWebListener(...args) {
9
9
  return getActiveWebListener$1(...args);
@@ -1,8 +1,8 @@
1
- import { a as resolveWhatsAppGroupRequireMention, i as whatsappSetupWizardProxy, n as createWhatsAppPluginBase, o as resolveWhatsAppGroupToolPolicy, s as resolveWhatsAppGroupIntroHint, t as whatsappSetupAdapter } from "./setup-core-Cp0NMO89.js";
1
+ import { a as resolveWhatsAppGroupRequireMention, i as whatsappSetupWizardProxy, n as createWhatsAppPluginBase, o as resolveWhatsAppGroupToolPolicy, s as resolveWhatsAppGroupIntroHint, t as whatsappSetupAdapter } from "./setup-core-DVEkfMVh.js";
2
2
  import { t as detectWhatsAppLegacyStateMigrations } from "./state-migrations-D_BmQUR9.js";
3
3
  //#region extensions/whatsapp/src/channel.setup.ts
4
4
  async function isWhatsAppAuthConfigured(account) {
5
- const { readWebAuthState } = await import("./auth-store-e9VzLZ-S.js").then((n) => n.i);
5
+ const { readWebAuthState } = await import("./auth-store-RyuCPHE0.js").then((n) => n.i);
6
6
  return await readWebAuthState(account.authDir) === "linked";
7
7
  }
8
8
  const whatsappSetupPlugin = {
@@ -1,7 +1,8 @@
1
1
  import { a as unregisterWhatsAppConnectionController, i as registerWhatsAppConnectionController, n as getStatusCode, t as formatError } from "./session-errors-CbsoQqoy.js";
2
- import { c as logoutWeb, f as readWebAuthExistsForDecision, r as WhatsAppAuthUnstableError } from "./auth-store-e9VzLZ-S.js";
3
- import { c as resolveComparableIdentity } from "./identity-Bupuq9vF.js";
4
- import { i as DEFAULT_WHATSAPP_SOCKET_TIMING, r as waitForWaConnection, t as createWaSocket } from "./session-BCKUPRkN.js";
2
+ import { t as DEFAULT_WHATSAPP_SOCKET_TIMING } from "./socket-timing-DvMNkIge.js";
3
+ import { c as logoutWeb, f as readWebAuthExistsForDecision, r as WhatsAppAuthUnstableError } from "./auth-store-RyuCPHE0.js";
4
+ import { c as resolveComparableIdentity } from "./identity-Cm6bKAtk.js";
5
+ import { r as waitForWaConnection, t as createWaSocket } from "./session-BW8RcCcb.js";
5
6
  import { computeBackoff, info, sleepWithAbort } from "openclaw/plugin-sdk/runtime-env";
6
7
  import { clamp } from "openclaw/plugin-sdk/text-utility-runtime";
7
8
  import { randomUUID } from "node:crypto";
@@ -45,6 +46,7 @@ const WHATSAPP_LOGIN_TIMEOUT_RESTART_MESSAGE = "WhatsApp connection timed out be
45
46
  const WHATSAPP_LOGGED_OUT_RELINK_MESSAGE = "WhatsApp reported the session is logged out. Cleared cached web session; please rerun openclaw channels login and scan the QR again.";
46
47
  const WHATSAPP_LOGIN_AUTH_UNSTABLE_MESSAGE = "WhatsApp connected, but saving the linked credentials has not settled on disk yet. Retry login in a moment.";
47
48
  const WHATSAPP_LOGIN_AUTH_NOT_PERSISTED_MESSAGE = "WhatsApp connected, but the linked credentials were not found on disk. Retry login in a moment.";
49
+ const WHATSAPP_LOGIN_AUTH_NOT_CLEARED_MESSAGE = "existing auth could not be cleared. Remove or fix the configured WhatsApp auth directory, then retry login.";
48
50
  const WHATSAPP_LOGGED_OUT_QR_MESSAGE = "WhatsApp reported the session is logged out. Cleared cached web session; please scan a new QR.";
49
51
  const WHATSAPP_WATCHDOG_TIMEOUT_ERROR = "watchdog-timeout";
50
52
  function createNeverResolvePromise() {
@@ -106,6 +108,26 @@ async function waitForWhatsAppLoginResult(params) {
106
108
  let currentSock = params.sock;
107
109
  let postPairingRestarted = false;
108
110
  let timeoutRestarted = false;
111
+ let loggedOutRestarted = false;
112
+ const replaceLoginSocket = async (opts = {}) => {
113
+ if (opts.closeCurrent ?? true) closeWaSocket(currentSock);
114
+ try {
115
+ currentSock = await createSocket(false, params.verbose, {
116
+ authDir: params.authDir,
117
+ ...params.socketTiming,
118
+ onQr: params.onQr
119
+ });
120
+ params.onSocketReplaced?.(currentSock);
121
+ return null;
122
+ } catch (createErr) {
123
+ return {
124
+ outcome: "failed",
125
+ message: formatError(createErr),
126
+ statusCode: getStatusCode(createErr),
127
+ error: createErr
128
+ };
129
+ }
130
+ };
109
131
  while (true) try {
110
132
  await wait(currentSock, { timeout: "none" });
111
133
  const persistedAuth = await readWebAuthExistsForDecision(params.authDir);
@@ -121,7 +143,7 @@ async function waitForWhatsAppLoginResult(params) {
121
143
  };
122
144
  return {
123
145
  outcome: "connected",
124
- restarted: postPairingRestarted || timeoutRestarted,
146
+ restarted: postPairingRestarted || timeoutRestarted || loggedOutRestarted,
125
147
  sock: currentSock
126
148
  };
127
149
  } catch (err) {
@@ -131,36 +153,39 @@ async function waitForWhatsAppLoginResult(params) {
131
153
  if (restartKind === "post-pairing") postPairingRestarted = true;
132
154
  else timeoutRestarted = true;
133
155
  params.runtime.log(info(getLoginSocketRestartMessage(restartKind)));
134
- closeWaSocket(currentSock);
135
- try {
136
- currentSock = await createSocket(false, params.verbose, {
137
- authDir: params.authDir,
138
- ...params.socketTiming,
139
- onQr: params.onQr
140
- });
141
- params.onSocketReplaced?.(currentSock);
142
- continue;
143
- } catch (createErr) {
144
- return {
145
- outcome: "failed",
146
- message: formatError(createErr),
147
- statusCode: getStatusCode(createErr),
148
- error: createErr
149
- };
150
- }
156
+ const replacementFailure = await replaceLoginSocket();
157
+ if (replacementFailure) return replacementFailure;
158
+ continue;
151
159
  }
152
160
  if (statusCode === LOGGED_OUT_STATUS) {
153
- await logoutWeb({
154
- authDir: params.authDir,
155
- isLegacyAuthDir: params.isLegacyAuthDir,
156
- runtime: params.runtime
157
- });
158
- return {
161
+ if (loggedOutRestarted) return {
159
162
  outcome: "logged-out",
160
163
  message: WHATSAPP_LOGGED_OUT_RELINK_MESSAGE,
161
164
  statusCode: LOGGED_OUT_STATUS,
162
165
  error: err
163
166
  };
167
+ closeWaSocket(currentSock);
168
+ if (!await logoutWeb({
169
+ authDir: params.authDir,
170
+ isLegacyAuthDir: params.isLegacyAuthDir,
171
+ runtime: params.runtime
172
+ })) {
173
+ const existingAuth = await readWebAuthExistsForDecision(params.authDir);
174
+ if (existingAuth.outcome === "unstable") return {
175
+ outcome: "failed",
176
+ message: WHATSAPP_LOGIN_AUTH_UNSTABLE_MESSAGE,
177
+ error: new WhatsAppAuthUnstableError(WHATSAPP_LOGIN_AUTH_UNSTABLE_MESSAGE)
178
+ };
179
+ if (existingAuth.exists) return {
180
+ outcome: "failed",
181
+ message: WHATSAPP_LOGIN_AUTH_NOT_CLEARED_MESSAGE,
182
+ error: err
183
+ };
184
+ }
185
+ loggedOutRestarted = true;
186
+ const replacementFailure = await replaceLoginSocket({ closeCurrent: false });
187
+ if (replacementFailure) return replacementFailure;
188
+ continue;
164
189
  }
165
190
  return {
166
191
  outcome: "failed",
@@ -2,7 +2,7 @@ import { c as normalizeWhatsAppTarget$1, t as isWhatsAppGroupJid$1 } from "./nor
2
2
  import { t as whatsappCommandPolicy$1 } from "./command-policy-BIOSHySD.js";
3
3
  import { t as resolveLegacyGroupSessionKey$1 } from "./group-session-contract-DDnZSsJ1.js";
4
4
  import { r as isLegacyGroupSessionKey$1, t as canonicalizeLegacySessionKey$1 } from "./session-contract-DMTm6Q_L.js";
5
- import { a as resolveWhatsAppRuntimeGroupPolicy$1, n as testing } from "./access-control-BKaMOvIk.js";
5
+ import { a as resolveWhatsAppRuntimeGroupPolicy$1, n as testing } from "./access-control-BnFVCHHH.js";
6
6
  //#region extensions/whatsapp/contract-api.ts
7
7
  const canonicalizeLegacySessionKey = canonicalizeLegacySessionKey$1;
8
8
  const isLegacyGroupSessionKey = isLegacyGroupSessionKey$1;
@@ -1,4 +1,4 @@
1
- import { n as normalizeE164, u as jidToE164 } from "./text-runtime-Dk37KYHj.js";
1
+ import { n as normalizeE164, u as jidToE164 } from "./text-runtime-BBSmIBHN.js";
2
2
  //#region extensions/whatsapp/src/identity.ts
3
3
  const WHATSAPP_LID_RE = /@(lid|hosted\.lid)$/i;
4
4
  function normalizeDeviceScopedJid(jid) {