@openclaw/whatsapp 2026.9.6 → 2026.9.8

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 (354) hide show
  1. package/assets/icon.png +0 -0
  2. package/dist/.setup/{accounts-D_NGDjCx.mjs → accounts-CtRPAQCL.mjs} +3 -9
  3. package/dist/.setup/{action-runtime-DZZFamfl.mjs → action-runtime-DeVk5V7r.mjs} +2 -2
  4. package/dist/.setup/{approval-handler.runtime-C0hzmMSj.mjs → approval-handler.runtime-CjqMlPOX.mjs} +6 -26
  5. package/dist/.setup/{approval-reactions-BnXw-UZI.mjs → approval-reactions-DiOFvb1s.mjs} +8 -14
  6. package/dist/.setup/{auth-store-Dh8a3cba.mjs → auth-store-BBonwKks.mjs} +9 -33
  7. package/dist/.setup/{channel-Bg_fS2iF.mjs → channel-CJFE0kD_.mjs} +82 -154
  8. package/dist/.setup/{channel-react-action-1iBiEnq7.mjs → channel-react-action-2r_hjLZV.mjs} +4 -8
  9. package/dist/.setup/{channel.runtime-rurG-kbr.mjs → channel.runtime-C94goLw9.mjs} +4 -4
  10. package/dist/.setup/{channel.setup-C8P5q8uD.mjs → channel.setup-CfN1UfdY.mjs} +1 -1
  11. package/dist/.setup/{connection-controller-C60mU7j7.mjs → connection-controller-CHo1oRJA.mjs} +13 -63
  12. package/dist/.setup/{creds-files-Drg3usj1.mjs → creds-files-CDATZWWM.mjs} +5 -11
  13. package/dist/.setup/{directory-config-BHPoBklt.mjs → directory-config-DUiJ5d8I.mjs} +13 -14
  14. package/dist/.setup/doctor-iMwg0Vhr.mjs +222 -0
  15. package/dist/.setup/group-config-path-DZr3ucUO.mjs +40 -0
  16. package/dist/.setup/{group-session-key-D22hYMdE.mjs → group-session-key-2-mja4OF.mjs} +3 -9
  17. package/dist/.setup/{login-2dmd1TfE.mjs → login-BFlvSh9h.mjs} +9 -11
  18. package/dist/.setup/{login-qr-CgKtO_ef.mjs → login-qr-Ayb8i25J.mjs} +29 -77
  19. package/dist/.setup/{monitor-By82ehLA.mjs → monitor-CGpV2VNN.mjs} +376 -504
  20. package/dist/.setup/{question-reactions-D3Zq9Gbn.mjs → question-reactions-CPyyi5AY.mjs} +2 -2
  21. package/dist/.setup/rolldown-runtime-BBjsoOtd.mjs +27 -0
  22. package/dist/.setup/{send-C6jDmcL9.mjs → send-BGdvf5cC.mjs} +31 -80
  23. package/dist/.setup/{send-api-B4DOt2RJ.mjs → send-api-H4AkQJjT.mjs} +45 -109
  24. package/dist/.setup/{session-errors-JuazczrA.mjs → session-errors-B8UcAnZN.mjs} +1 -4
  25. package/dist/.setup/{session.runtime-DcJuO42v.mjs → session.runtime-st1konFI.mjs} +1 -1
  26. package/dist/.setup/{setup-finalize-pGqWOiFX.mjs → setup-finalize-DmPX4EaW.mjs} +32 -70
  27. package/dist/.setup/setup-plugin-api-vJlxKzca.mjs +3 -0
  28. package/dist/.setup/{setup-surface-B9CYwDPZ.mjs → setup-surface-43fj197P.mjs} +3 -3
  29. package/dist/.setup/{shared-DVgQ8kRG.mjs → shared-DgOG5Iqr.mjs} +26 -37
  30. package/dist/.setup/{socket-close-CCVSFufF.mjs → socket-close-CT__V2fz.mjs} +80 -92
  31. package/dist/.setup/{targets-runtime-RBjx3pg_.mjs → targets-runtime-DmiqXIXO.mjs} +2 -7
  32. package/dist/action-runtime-api.js +1 -1
  33. package/dist/action-runtime.runtime.js +1 -1
  34. package/dist/agent-tools-api.js +5 -12
  35. package/dist/api.js +10 -10
  36. package/dist/auth-presence.js +1 -1
  37. package/dist/channel-plugin-api.js +1 -1
  38. package/dist/contract-api.js +2 -2
  39. package/dist/directory-contract-api.js +1 -1
  40. package/dist/doctor-contract-api.js +9 -10
  41. package/dist/light-runtime-api.js +2 -2
  42. package/dist/login-qr-runtime.js +1 -1
  43. package/dist/runtime-api.js +9 -9
  44. package/dist/setup-entry.js +1 -1
  45. package/dist/setup-plugin-api.js +1 -1
  46. package/node_modules/audio-decode/LICENSE +9 -10
  47. package/node_modules/audio-decode/README.md +16 -0
  48. package/node_modules/audio-decode/audio-decode.d.ts +2 -14
  49. package/node_modules/audio-decode/audio-decode.js +4 -92
  50. package/node_modules/audio-decode/meta.js +1 -0
  51. package/node_modules/audio-decode/node_modules/{audio-buffer → @audio/decode}/LICENSE +1 -1
  52. package/node_modules/audio-decode/node_modules/@audio/decode/audio-decode.d.ts +52 -0
  53. package/node_modules/audio-decode/node_modules/@audio/decode/audio-decode.js +242 -0
  54. package/node_modules/audio-decode/node_modules/@audio/decode/meta.js +14 -0
  55. package/node_modules/audio-decode/node_modules/@audio/decode/package.json +114 -0
  56. package/node_modules/audio-decode/node_modules/@audio/decode/readme.md +191 -0
  57. package/node_modules/audio-decode/node_modules/@audio/decode/stream.d.ts +12 -0
  58. package/node_modules/audio-decode/node_modules/@audio/decode/stream.js +1 -0
  59. package/node_modules/audio-decode/node_modules/@audio/decode/test.html +52 -0
  60. package/node_modules/audio-decode/node_modules/@audio/decode-aac/LICENSE +9 -0
  61. package/node_modules/audio-decode/node_modules/@audio/decode-aac/README.md +80 -0
  62. package/node_modules/audio-decode/node_modules/@audio/decode-aac/alac.js +326 -0
  63. package/node_modules/audio-decode/node_modules/@audio/decode-aac/audio.d.ts +15 -0
  64. package/node_modules/audio-decode/node_modules/@audio/decode-aac/audio.js +10 -0
  65. package/node_modules/audio-decode/node_modules/@audio/decode-aac/decode-aac.d.ts +24 -0
  66. package/node_modules/audio-decode/node_modules/@audio/decode-aac/decode-aac.js +452 -0
  67. package/node_modules/audio-decode/node_modules/@audio/decode-aac/meta.js +81 -0
  68. package/node_modules/audio-decode/node_modules/@audio/decode-aac/package.json +63 -0
  69. package/node_modules/audio-decode/node_modules/@audio/decode-aac/src/aac.wasm.js +0 -0
  70. package/node_modules/audio-decode/node_modules/@audio/decode-ac3/LICENSE +12 -0
  71. package/node_modules/audio-decode/node_modules/@audio/decode-ac3/LICENSE.liba52 +340 -0
  72. package/node_modules/audio-decode/node_modules/@audio/decode-ac3/README.md +41 -0
  73. package/node_modules/audio-decode/node_modules/@audio/decode-ac3/audio.d.ts +15 -0
  74. package/node_modules/audio-decode/node_modules/@audio/decode-ac3/audio.js +9 -0
  75. package/node_modules/audio-decode/node_modules/@audio/decode-ac3/decode-ac3.d.ts +20 -0
  76. package/node_modules/audio-decode/node_modules/@audio/decode-ac3/decode-ac3.js +131 -0
  77. package/node_modules/audio-decode/node_modules/@audio/decode-ac3/package.json +64 -0
  78. package/node_modules/audio-decode/node_modules/@audio/decode-ac3/src/ac3.wasm.js +0 -0
  79. package/node_modules/audio-decode/node_modules/@audio/decode-aiff/LICENSE +21 -0
  80. package/node_modules/audio-decode/node_modules/@audio/decode-aiff/README.md +46 -0
  81. package/node_modules/audio-decode/node_modules/@audio/decode-aiff/audio.d.ts +15 -0
  82. package/node_modules/audio-decode/node_modules/@audio/decode-aiff/audio.js +10 -0
  83. package/node_modules/audio-decode/node_modules/@audio/decode-aiff/decode-aiff.d.ts +16 -0
  84. package/node_modules/audio-decode/node_modules/@audio/decode-aiff/decode-aiff.js +583 -0
  85. package/node_modules/audio-decode/node_modules/@audio/decode-aiff/package.json +52 -0
  86. package/node_modules/audio-decode/node_modules/@audio/decode-amr/LICENSE +191 -0
  87. package/node_modules/audio-decode/node_modules/@audio/decode-amr/README.md +65 -0
  88. package/node_modules/audio-decode/node_modules/@audio/decode-amr/audio.d.ts +15 -0
  89. package/node_modules/audio-decode/node_modules/@audio/decode-amr/audio.js +10 -0
  90. package/node_modules/audio-decode/node_modules/@audio/decode-amr/decode-amr.d.ts +16 -0
  91. package/node_modules/audio-decode/node_modules/@audio/decode-amr/decode-amr.js +150 -0
  92. package/node_modules/audio-decode/node_modules/@audio/decode-amr/package.json +58 -0
  93. package/node_modules/audio-decode/node_modules/@audio/decode-amr/src/amr.wasm.js +0 -0
  94. package/node_modules/audio-decode/node_modules/@audio/decode-avi/LICENSE +21 -0
  95. package/node_modules/audio-decode/node_modules/@audio/decode-avi/README.md +53 -0
  96. package/node_modules/audio-decode/node_modules/@audio/decode-avi/audio.d.ts +15 -0
  97. package/node_modules/audio-decode/node_modules/@audio/decode-avi/audio.js +9 -0
  98. package/node_modules/audio-decode/node_modules/@audio/decode-avi/decode-avi.d.ts +21 -0
  99. package/node_modules/audio-decode/node_modules/@audio/decode-avi/decode-avi.js +241 -0
  100. package/node_modules/audio-decode/node_modules/@audio/decode-avi/package.json +66 -0
  101. package/node_modules/audio-decode/node_modules/@audio/decode-caf/LICENSE +21 -0
  102. package/node_modules/audio-decode/node_modules/@audio/decode-caf/README.md +48 -0
  103. package/node_modules/audio-decode/node_modules/@audio/decode-caf/audio.d.ts +15 -0
  104. package/node_modules/audio-decode/node_modules/@audio/decode-caf/audio.js +10 -0
  105. package/node_modules/audio-decode/node_modules/@audio/decode-caf/decode-caf.d.ts +16 -0
  106. package/node_modules/audio-decode/node_modules/@audio/decode-caf/decode-caf.js +238 -0
  107. package/node_modules/audio-decode/node_modules/@audio/decode-caf/package.json +53 -0
  108. package/node_modules/audio-decode/node_modules/@audio/decode-dsd/LICENSE +21 -0
  109. package/node_modules/audio-decode/node_modules/@audio/decode-dsd/README.md +73 -0
  110. package/node_modules/audio-decode/node_modules/@audio/decode-dsd/audio.d.ts +21 -0
  111. package/node_modules/audio-decode/node_modules/@audio/decode-dsd/audio.js +15 -0
  112. package/node_modules/audio-decode/node_modules/@audio/decode-dsd/decode-dsd.d.ts +29 -0
  113. package/node_modules/audio-decode/node_modules/@audio/decode-dsd/decode-dsd.js +423 -0
  114. package/node_modules/audio-decode/node_modules/@audio/decode-dsd/meta.js +40 -0
  115. package/node_modules/audio-decode/node_modules/@audio/decode-dsd/package.json +64 -0
  116. package/node_modules/audio-decode/node_modules/@audio/decode-dts/LICENSE +12 -0
  117. package/node_modules/audio-decode/node_modules/@audio/decode-dts/LICENSE.libdca +339 -0
  118. package/node_modules/audio-decode/node_modules/@audio/decode-dts/README.md +41 -0
  119. package/node_modules/audio-decode/node_modules/@audio/decode-dts/audio.d.ts +15 -0
  120. package/node_modules/audio-decode/node_modules/@audio/decode-dts/audio.js +9 -0
  121. package/node_modules/audio-decode/node_modules/@audio/decode-dts/decode-dts.d.ts +20 -0
  122. package/node_modules/audio-decode/node_modules/@audio/decode-dts/decode-dts.js +139 -0
  123. package/node_modules/audio-decode/node_modules/@audio/decode-dts/package.json +64 -0
  124. package/node_modules/audio-decode/node_modules/@audio/decode-dts/src/dts.wasm.js +0 -0
  125. package/node_modules/audio-decode/node_modules/@audio/decode-eac3/LICENSE +12 -0
  126. package/node_modules/audio-decode/node_modules/@audio/decode-eac3/LICENSE.ffmpeg +502 -0
  127. package/node_modules/audio-decode/node_modules/@audio/decode-eac3/README.md +45 -0
  128. package/node_modules/audio-decode/node_modules/@audio/decode-eac3/audio.d.ts +15 -0
  129. package/node_modules/audio-decode/node_modules/@audio/decode-eac3/audio.js +9 -0
  130. package/node_modules/audio-decode/node_modules/@audio/decode-eac3/decode-eac3.d.ts +20 -0
  131. package/node_modules/audio-decode/node_modules/@audio/decode-eac3/decode-eac3.js +124 -0
  132. package/node_modules/audio-decode/node_modules/@audio/decode-eac3/package.json +68 -0
  133. package/node_modules/audio-decode/node_modules/@audio/decode-eac3/src/eac3.wasm.js +0 -0
  134. package/node_modules/audio-decode/node_modules/@audio/decode-flac/LICENSE +25 -0
  135. package/node_modules/audio-decode/node_modules/@audio/decode-flac/README.md +23 -0
  136. package/node_modules/audio-decode/node_modules/@audio/decode-flac/audio.d.ts +15 -0
  137. package/node_modules/audio-decode/node_modules/@audio/decode-flac/audio.js +10 -0
  138. package/node_modules/audio-decode/node_modules/@audio/decode-flac/decode-flac.d.ts +18 -0
  139. package/node_modules/audio-decode/node_modules/@audio/decode-flac/decode-flac.js +3172 -0
  140. package/node_modules/audio-decode/node_modules/@audio/decode-flac/meta.js +115 -0
  141. package/node_modules/audio-decode/node_modules/@audio/decode-flac/package.json +60 -0
  142. package/node_modules/audio-decode/node_modules/@audio/decode-mod/LICENSE +23 -0
  143. package/node_modules/audio-decode/node_modules/@audio/decode-mod/LICENSE.libopenmpt +25 -0
  144. package/node_modules/audio-decode/node_modules/@audio/decode-mod/README.md +86 -0
  145. package/node_modules/audio-decode/node_modules/@audio/decode-mod/audio.d.ts +20 -0
  146. package/node_modules/audio-decode/node_modules/@audio/decode-mod/audio.js +12 -0
  147. package/node_modules/audio-decode/node_modules/@audio/decode-mod/decode-mod.d.ts +58 -0
  148. package/node_modules/audio-decode/node_modules/@audio/decode-mod/decode-mod.js +148 -0
  149. package/node_modules/audio-decode/node_modules/@audio/decode-mod/package.json +68 -0
  150. package/node_modules/audio-decode/node_modules/@audio/decode-mod/src/mod.wasm.js +0 -0
  151. package/node_modules/audio-decode/node_modules/@audio/decode-mp3/LICENSE +25 -0
  152. package/node_modules/audio-decode/node_modules/@audio/decode-mp3/README.md +20 -0
  153. package/node_modules/audio-decode/node_modules/@audio/decode-mp3/audio.d.ts +15 -0
  154. package/node_modules/audio-decode/node_modules/@audio/decode-mp3/audio.js +10 -0
  155. package/node_modules/audio-decode/node_modules/@audio/decode-mp3/decode-mp3.d.ts +16 -0
  156. package/node_modules/audio-decode/node_modules/@audio/decode-mp3/decode-mp3.js +793 -0
  157. package/node_modules/audio-decode/node_modules/@audio/decode-mp3/meta.js +143 -0
  158. package/node_modules/audio-decode/node_modules/@audio/decode-mp3/package.json +60 -0
  159. package/node_modules/audio-decode/node_modules/@audio/decode-mp4/LICENSE +21 -0
  160. package/node_modules/audio-decode/node_modules/@audio/decode-mp4/README.md +58 -0
  161. package/node_modules/audio-decode/node_modules/@audio/decode-mp4/audio.d.ts +15 -0
  162. package/node_modules/audio-decode/node_modules/@audio/decode-mp4/audio.js +9 -0
  163. package/node_modules/audio-decode/node_modules/@audio/decode-mp4/decode-mp4.d.ts +21 -0
  164. package/node_modules/audio-decode/node_modules/@audio/decode-mp4/decode-mp4.js +455 -0
  165. package/node_modules/audio-decode/node_modules/@audio/decode-mp4/package.json +74 -0
  166. package/node_modules/audio-decode/node_modules/@audio/decode-mpc/LICENSE +31 -0
  167. package/node_modules/audio-decode/node_modules/@audio/decode-mpc/LICENSE.libmpcdec +31 -0
  168. package/node_modules/audio-decode/node_modules/@audio/decode-mpc/README.md +60 -0
  169. package/node_modules/audio-decode/node_modules/@audio/decode-mpc/audio.d.ts +15 -0
  170. package/node_modules/audio-decode/node_modules/@audio/decode-mpc/audio.js +9 -0
  171. package/node_modules/audio-decode/node_modules/@audio/decode-mpc/decode-mpc.d.ts +20 -0
  172. package/node_modules/audio-decode/node_modules/@audio/decode-mpc/decode-mpc.js +158 -0
  173. package/node_modules/audio-decode/node_modules/@audio/decode-mpc/package.json +64 -0
  174. package/node_modules/audio-decode/node_modules/@audio/decode-mpc/src/mpc.wasm.js +0 -0
  175. package/node_modules/audio-decode/node_modules/@audio/decode-opus/LICENSE +25 -0
  176. package/node_modules/audio-decode/node_modules/@audio/decode-opus/LICENSE.libopus +44 -0
  177. package/node_modules/audio-decode/node_modules/@audio/decode-opus/README.md +32 -0
  178. package/node_modules/audio-decode/node_modules/@audio/decode-opus/audio.d.ts +15 -0
  179. package/node_modules/audio-decode/node_modules/@audio/decode-opus/audio.js +10 -0
  180. package/node_modules/audio-decode/node_modules/@audio/decode-opus/core.d.ts +33 -0
  181. package/node_modules/audio-decode/node_modules/@audio/decode-opus/core.js +147 -0
  182. package/node_modules/audio-decode/node_modules/@audio/decode-opus/decode-opus.d.ts +18 -0
  183. package/node_modules/audio-decode/node_modules/@audio/decode-opus/decode-opus.js +1 -0
  184. package/node_modules/audio-decode/node_modules/@audio/decode-opus/meta.js +103 -0
  185. package/node_modules/audio-decode/node_modules/@audio/decode-opus/package.json +68 -0
  186. package/node_modules/audio-decode/node_modules/@audio/decode-opus/src/decode-opus.js +2 -0
  187. package/node_modules/audio-decode/node_modules/@audio/decode-opus/src/opus.wasm.js +0 -0
  188. package/node_modules/audio-decode/node_modules/@audio/decode-qoa/LICENSE +25 -0
  189. package/node_modules/audio-decode/node_modules/@audio/decode-qoa/README.md +19 -0
  190. package/node_modules/audio-decode/node_modules/@audio/decode-qoa/audio.d.ts +15 -0
  191. package/node_modules/audio-decode/node_modules/@audio/decode-qoa/audio.js +10 -0
  192. package/node_modules/audio-decode/node_modules/@audio/decode-qoa/decode-qoa.d.ts +16 -0
  193. package/node_modules/audio-decode/node_modules/@audio/decode-qoa/decode-qoa.js +275 -0
  194. package/node_modules/audio-decode/node_modules/@audio/decode-qoa/package.json +56 -0
  195. package/node_modules/audio-decode/node_modules/@audio/decode-tta/LICENSE +21 -0
  196. package/node_modules/audio-decode/node_modules/@audio/decode-tta/LICENSE.ttadec +39 -0
  197. package/node_modules/audio-decode/node_modules/@audio/decode-tta/README.md +58 -0
  198. package/node_modules/audio-decode/node_modules/@audio/decode-tta/audio.d.ts +15 -0
  199. package/node_modules/audio-decode/node_modules/@audio/decode-tta/audio.js +9 -0
  200. package/node_modules/audio-decode/node_modules/@audio/decode-tta/decode-tta.d.ts +17 -0
  201. package/node_modules/audio-decode/node_modules/@audio/decode-tta/decode-tta.js +302 -0
  202. package/node_modules/audio-decode/node_modules/@audio/decode-tta/package.json +58 -0
  203. package/node_modules/audio-decode/node_modules/@audio/decode-vorbis/LICENSE +25 -0
  204. package/node_modules/audio-decode/node_modules/@audio/decode-vorbis/README.md +33 -0
  205. package/node_modules/audio-decode/node_modules/@audio/decode-vorbis/audio.d.ts +15 -0
  206. package/node_modules/audio-decode/node_modules/@audio/decode-vorbis/audio.js +10 -0
  207. package/node_modules/audio-decode/node_modules/@audio/decode-vorbis/decode-vorbis.d.ts +18 -0
  208. package/node_modules/audio-decode/node_modules/@audio/decode-vorbis/decode-vorbis.js +2984 -0
  209. package/node_modules/audio-decode/node_modules/@audio/decode-vorbis/meta.js +102 -0
  210. package/node_modules/audio-decode/node_modules/@audio/decode-vorbis/package.json +60 -0
  211. package/node_modules/audio-decode/node_modules/@audio/decode-wav/LICENSE +21 -0
  212. package/node_modules/audio-decode/node_modules/@audio/decode-wav/README.md +23 -0
  213. package/node_modules/audio-decode/node_modules/@audio/decode-wav/audio.d.ts +15 -0
  214. package/node_modules/audio-decode/node_modules/@audio/decode-wav/audio.js +10 -0
  215. package/node_modules/audio-decode/node_modules/@audio/decode-wav/decode-wav.d.ts +8 -0
  216. package/node_modules/audio-decode/node_modules/@audio/decode-wav/decode-wav.js +256 -0
  217. package/node_modules/audio-decode/node_modules/@audio/decode-wav/meta.js +114 -0
  218. package/node_modules/audio-decode/node_modules/@audio/decode-wav/package.json +52 -0
  219. package/node_modules/audio-decode/node_modules/@audio/decode-wavpack/LICENSE +29 -0
  220. package/node_modules/audio-decode/node_modules/@audio/decode-wavpack/LICENSE.wavpack +25 -0
  221. package/node_modules/audio-decode/node_modules/@audio/decode-wavpack/README.md +41 -0
  222. package/node_modules/audio-decode/node_modules/@audio/decode-wavpack/audio.d.ts +15 -0
  223. package/node_modules/audio-decode/node_modules/@audio/decode-wavpack/audio.js +9 -0
  224. package/node_modules/audio-decode/node_modules/@audio/decode-wavpack/decode-wavpack.d.ts +18 -0
  225. package/node_modules/audio-decode/node_modules/@audio/decode-wavpack/decode-wavpack.js +140 -0
  226. package/node_modules/audio-decode/node_modules/@audio/decode-wavpack/package.json +62 -0
  227. package/node_modules/audio-decode/node_modules/@audio/decode-wavpack/src/wavpack.wasm.js +0 -0
  228. package/node_modules/audio-decode/node_modules/@audio/decode-webm/LICENSE +21 -0
  229. package/node_modules/audio-decode/node_modules/@audio/decode-webm/LICENSE.libopus +44 -0
  230. package/node_modules/audio-decode/node_modules/@audio/decode-webm/README.md +59 -0
  231. package/node_modules/audio-decode/node_modules/@audio/decode-webm/audio.d.ts +15 -0
  232. package/node_modules/audio-decode/node_modules/@audio/decode-webm/audio.js +10 -0
  233. package/node_modules/audio-decode/node_modules/@audio/decode-webm/decode-webm.d.ts +18 -0
  234. package/node_modules/audio-decode/node_modules/@audio/decode-webm/decode-webm.js +141 -0
  235. package/node_modules/audio-decode/node_modules/@audio/decode-webm/package.json +76 -0
  236. package/node_modules/audio-decode/node_modules/@audio/decode-webm/src/opus.wasm.js +0 -0
  237. package/node_modules/audio-decode/node_modules/@audio/decode-wma/LICENSE +12 -0
  238. package/node_modules/audio-decode/node_modules/@audio/decode-wma/README.md +74 -0
  239. package/node_modules/audio-decode/node_modules/@audio/decode-wma/audio.d.ts +15 -0
  240. package/node_modules/audio-decode/node_modules/@audio/decode-wma/audio.js +10 -0
  241. package/node_modules/audio-decode/node_modules/@audio/decode-wma/decode-wma.d.ts +33 -0
  242. package/node_modules/audio-decode/node_modules/@audio/decode-wma/decode-wma.js +516 -0
  243. package/node_modules/audio-decode/node_modules/@audio/decode-wma/package.json +57 -0
  244. package/node_modules/audio-decode/node_modules/@audio/decode-wma/src/wma.wasm.js +0 -0
  245. package/node_modules/audio-decode/package.json +37 -39
  246. package/node_modules/audio-decode/stream.d.ts +2 -0
  247. package/node_modules/audio-decode/stream.js +2 -0
  248. package/node_modules/baileys/lib/Utils/messages-media.js +1 -1
  249. package/node_modules/baileys/node_modules/file-type/package.json +1 -1
  250. package/node_modules/baileys/node_modules/file-type/readme.md +2 -0
  251. package/node_modules/baileys/node_modules/file-type/source/detectors/zip.js +9 -4
  252. package/node_modules/baileys/package.json +1 -1
  253. package/node_modules/typebox/build/compile/code.mjs +1 -2
  254. package/node_modules/typebox/build/compile/validator.mjs +5 -1
  255. package/node_modules/typebox/build/format/iri.mjs +16 -9
  256. package/node_modules/typebox/build/guard/emit.mjs +2 -2
  257. package/node_modules/typebox/build/guard/guard.d.mts +7 -5
  258. package/node_modules/typebox/build/guard/guard.mjs +14 -9
  259. package/node_modules/typebox/build/guard/index.mjs +6 -0
  260. package/node_modules/typebox/build/guard/unicode/unicode.d.mts +6 -0
  261. package/node_modules/typebox/build/guard/unicode/unicode.mjs +35 -0
  262. package/node_modules/typebox/build/guard/{string.mjs → unicode/unicode_segment.mjs} +16 -19
  263. package/node_modules/typebox/build/schema/build.mjs +2 -3
  264. package/node_modules/typebox/build/schema/engine/_pathing.d.mts +1 -0
  265. package/node_modules/typebox/build/schema/engine/_pathing.mjs +11 -0
  266. package/node_modules/typebox/build/schema/engine/_refine.mjs +13 -5
  267. package/node_modules/typebox/build/schema/engine/additionalProperties.mjs +2 -1
  268. package/node_modules/typebox/build/schema/engine/dependencies.mjs +2 -1
  269. package/node_modules/typebox/build/schema/engine/dependentSchemas.mjs +2 -1
  270. package/node_modules/typebox/build/schema/engine/dynamicRef.d.mts +1 -1
  271. package/node_modules/typebox/build/schema/engine/dynamicRef.mjs +2 -2
  272. package/node_modules/typebox/build/schema/engine/format.mjs +9 -2
  273. package/node_modules/typebox/build/schema/engine/patternProperties.mjs +3 -2
  274. package/node_modules/typebox/build/schema/engine/properties.mjs +3 -2
  275. package/node_modules/typebox/build/schema/engine/propertyNames.mjs +2 -1
  276. package/node_modules/typebox/build/schema/engine/recursiveRef.d.mts +1 -1
  277. package/node_modules/typebox/build/schema/engine/recursiveRef.mjs +2 -2
  278. package/node_modules/typebox/build/schema/engine/ref.d.mts +1 -1
  279. package/node_modules/typebox/build/schema/engine/ref.mjs +2 -2
  280. package/node_modules/typebox/build/schema/engine/schema.mjs +24 -24
  281. package/node_modules/typebox/build/schema/parse.mjs +3 -0
  282. package/node_modules/typebox/build/schema/pointer/pointer.d.mts +1 -6
  283. package/node_modules/typebox/build/schema/pointer/pointer.mjs +47 -64
  284. package/node_modules/typebox/build/system/settings/internal.d.mts +2 -0
  285. package/node_modules/typebox/build/system/settings/internal.mjs +20 -0
  286. package/node_modules/typebox/build/system/settings/settings.d.mts +11 -0
  287. package/node_modules/typebox/build/system/settings/settings.mjs +14 -0
  288. package/node_modules/typebox/build/type/extends/inference.d.mts +1 -1
  289. package/node_modules/typebox/build/type/extends/inference.mjs +15 -2
  290. package/node_modules/typebox/build/type/extends/tuple.d.mts +2 -1
  291. package/node_modules/typebox/build/type/extends/tuple.mjs +21 -1
  292. package/node_modules/typebox/build/value/parse/parse.mjs +10 -4
  293. package/node_modules/typebox/package.json +1 -1
  294. package/node_modules/typebox/readme.md +3 -1
  295. package/package.json +6 -6
  296. package/dist/.setup/doctor-BPb-SjdE.mjs +0 -65
  297. package/dist/.setup/group-config-path-BGyzT9Lg.mjs +0 -54
  298. package/dist/.setup/normalize-DdsROMMa.mjs +0 -2
  299. package/dist/.setup/rolldown-runtime-D7D4PA-g.mjs +0 -13
  300. package/dist/.setup/runtime-group-policy-DeSRFXEV.mjs +0 -11
  301. package/dist/.setup/setup-plugin-api-2wUapweU.mjs +0 -3
  302. package/dist/.setup/text-runtime-CHl0iPYe.mjs +0 -4
  303. package/node_modules/audio-decode/.eslintrc.json +0 -43
  304. package/node_modules/audio-decode/.github/workflows/test.js.yml +0 -31
  305. package/node_modules/audio-decode/.travis.yml +0 -13
  306. package/node_modules/audio-decode/node_modules/@wasm-audio-decoders/opus-ml/README.md +0 -293
  307. package/node_modules/audio-decode/node_modules/@wasm-audio-decoders/opus-ml/dist/opus-ml-decoder.min.js +0 -11646
  308. package/node_modules/audio-decode/node_modules/@wasm-audio-decoders/opus-ml/dist/opus-ml-decoder.min.js.map +0 -1
  309. package/node_modules/audio-decode/node_modules/@wasm-audio-decoders/opus-ml/index.js +0 -8
  310. package/node_modules/audio-decode/node_modules/@wasm-audio-decoders/opus-ml/package.json +0 -58
  311. package/node_modules/audio-decode/node_modules/@wasm-audio-decoders/opus-ml/src/EmscriptenWasm.js +0 -0
  312. package/node_modules/audio-decode/node_modules/@wasm-audio-decoders/opus-ml/src/OpusMLDecoder.js +0 -253
  313. package/node_modules/audio-decode/node_modules/@wasm-audio-decoders/opus-ml/src/OpusMLDecoderWebWorker.js +0 -17
  314. package/node_modules/audio-decode/node_modules/@wasm-audio-decoders/opus-ml/types.d.ts +0 -77
  315. package/node_modules/audio-decode/node_modules/audio-buffer/.eslintrc.json +0 -44
  316. package/node_modules/audio-decode/node_modules/audio-buffer/.github/workflows/node.js.yml +0 -31
  317. package/node_modules/audio-decode/node_modules/audio-buffer/.travis.yml +0 -7
  318. package/node_modules/audio-decode/node_modules/audio-buffer/index.js +0 -76
  319. package/node_modules/audio-decode/node_modules/audio-buffer/package.json +0 -37
  320. package/node_modules/audio-decode/node_modules/audio-buffer/readme.md +0 -56
  321. package/node_modules/audio-decode/node_modules/node-wav/README.md +0 -35
  322. package/node_modules/audio-decode/node_modules/node-wav/file.wav +0 -0
  323. package/node_modules/audio-decode/node_modules/node-wav/index.js +0 -291
  324. package/node_modules/audio-decode/node_modules/node-wav/package.json +0 -29
  325. package/node_modules/audio-decode/node_modules/node-wav/tests/file1.wav +0 -0
  326. package/node_modules/audio-decode/node_modules/node-wav/tests/test.js +0 -66
  327. package/node_modules/audio-decode/node_modules/node-wav/x.js +0 -12
  328. package/node_modules/audio-decode/node_modules/node-wav/x.json +0 -86702
  329. package/node_modules/audio-decode/node_modules/node-wav/x.js~ +0 -13
  330. package/node_modules/audio-decode/node_modules/ogg-opus-decoder/README.md +0 -320
  331. package/node_modules/audio-decode/node_modules/ogg-opus-decoder/dist/ogg-opus-decoder.min.js +0 -232
  332. package/node_modules/audio-decode/node_modules/ogg-opus-decoder/dist/ogg-opus-decoder.min.js.map +0 -1
  333. package/node_modules/audio-decode/node_modules/ogg-opus-decoder/dist/ogg-opus-decoder.opus-ml.min.js +0 -0
  334. package/node_modules/audio-decode/node_modules/ogg-opus-decoder/dist/ogg-opus-decoder.opus-ml.min.js.map +0 -1
  335. package/node_modules/audio-decode/node_modules/ogg-opus-decoder/index.js +0 -8
  336. package/node_modules/audio-decode/node_modules/ogg-opus-decoder/package.json +0 -74
  337. package/node_modules/audio-decode/node_modules/ogg-opus-decoder/src/OggOpusDecoder.js +0 -226
  338. package/node_modules/audio-decode/node_modules/ogg-opus-decoder/src/OggOpusDecoderWebWorker.js +0 -17
  339. package/node_modules/audio-decode/node_modules/ogg-opus-decoder/types.d.ts +0 -37
  340. package/node_modules/audio-decode/node_modules/opus-decoder/README.md +0 -265
  341. package/node_modules/audio-decode/node_modules/opus-decoder/dist/opus-decoder.min.js +0 -232
  342. package/node_modules/audio-decode/node_modules/opus-decoder/dist/opus-decoder.min.js.map +0 -1
  343. package/node_modules/audio-decode/node_modules/opus-decoder/index.js +0 -8
  344. package/node_modules/audio-decode/node_modules/opus-decoder/package.json +0 -56
  345. package/node_modules/audio-decode/node_modules/opus-decoder/src/EmscriptenWasm.js +0 -0
  346. package/node_modules/audio-decode/node_modules/opus-decoder/src/OpusDecoder.js +0 -239
  347. package/node_modules/audio-decode/node_modules/opus-decoder/src/OpusDecoderWebWorker.js +0 -17
  348. package/node_modules/audio-decode/node_modules/opus-decoder/types.d.ts +0 -74
  349. package/node_modules/audio-decode/readme.md +0 -49
  350. package/node_modules/audio-decode/tea.yaml +0 -6
  351. package/node_modules/audio-decode/test-case.js +0 -11
  352. package/node_modules/audio-decode/test.html +0 -15
  353. package/node_modules/audio-decode/test.js +0 -107
  354. /package/node_modules/typebox/build/guard/{string.d.mts → unicode/unicode_segment.d.mts} +0 -0
@@ -1,8 +1,7 @@
1
- import { a as resolveWhatsAppAccount, s as resolveWhatsAppMediaMaxBytes } from "./accounts-D_NGDjCx.mjs";
1
+ import { a as resolveWhatsAppAccount, s as resolveWhatsAppMediaMaxBytes } from "./accounts-CtRPAQCL.mjs";
2
2
  import { c as normalizeWhatsAppTarget, t as isWhatsAppGroupJid } from "./normalize-target-BGra1ZnM.mjs";
3
- import { r as resolveAuthorizedWhatsAppOutboundTarget, t as handleWhatsAppAction } from "./action-runtime-DZZFamfl.mjs";
4
- import { a as sendWhatsAppUploadFile } from "./send-C6jDmcL9.mjs";
5
- import "./normalize-DdsROMMa.mjs";
3
+ import { r as resolveAuthorizedWhatsAppOutboundTarget, t as handleWhatsAppAction } from "./action-runtime-DeVk5V7r.mjs";
4
+ import { a as sendWhatsAppUploadFile } from "./send-BGdvf5cC.mjs";
6
5
  import { jsonResult, readStringOrNumberParam, readStringParam as readStringParam$1, resolveReactionMessageId } from "openclaw/plugin-sdk/channel-actions";
7
6
  import { canonicalizeBase64, estimateBase64DecodedBytes } from "openclaw/plugin-sdk/media-runtime";
8
7
  import { readBooleanParam } from "openclaw/plugin-sdk/boolean-param";
@@ -14,9 +13,6 @@ function readUploadFileMediaSource(args) {
14
13
  function readUploadFileCaptionText(args) {
15
14
  return readStringParam$1(args, "message", { allowEmpty: true }) ?? readStringParam$1(args, "content", { allowEmpty: true }) ?? readStringParam$1(args, "caption", { allowEmpty: true }) ?? "";
16
15
  }
17
- function hasUploadFileBufferPayload(args) {
18
- return readStringParam$1(args, "buffer", { trim: false }) !== void 0;
19
- }
20
16
  function readWhatsAppActionChatJid(params) {
21
17
  const explicit = readStringParam$1(params.params, "chatJid") ?? readStringParam$1(params.params, "to");
22
18
  if (explicit) return explicit;
@@ -46,7 +42,7 @@ async function handleWhatsAppUploadFileAction(params) {
46
42
  const encodedPayload = readStringParam$1(params.params, "buffer", { trim: false });
47
43
  const contentType = readStringParam$1(params.params, "contentType") ?? readStringParam$1(params.params, "mimeType");
48
44
  const fileName = readStringParam$1(params.params, "filename") ?? readStringParam$1(params.params, "fileName");
49
- if (!mediaUrl && !hasUploadFileBufferPayload(params.params)) throw new Error("WhatsApp upload-file requires media, mediaUrl, filePath, path, fileUrl, or buffer.");
45
+ if (!mediaUrl && encodedPayload === void 0) throw new Error("WhatsApp upload-file requires media, mediaUrl, filePath, path, fileUrl, or buffer.");
50
46
  const to = readWhatsAppActionChatJid(params) ?? readStringParam$1(params.params, "to", { required: true });
51
47
  const resolved = resolveAuthorizedWhatsAppOutboundTarget({
52
48
  cfg: params.cfg,
@@ -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, d as readWebAuthExistsBestEffort, f as readWebAuthExistsForDecision, g as readWebSelfId, h as readWebAuthState, m as readWebAuthSnapshotBestEffort, o as getWebAuthAgeMs, p as readWebAuthSnapshot, s as logWebSelfId, x as webAuthExists } from "./auth-store-Dh8a3cba.mjs";
2
+ import { c as logoutWeb, d as readWebAuthExistsBestEffort, f as readWebAuthExistsForDecision, g as readWebSelfId, h as readWebAuthState, m as readWebAuthSnapshotBestEffort, o as getWebAuthAgeMs, p as readWebAuthSnapshot, s as logWebSelfId, x as webAuthExists } from "./auth-store-BBonwKks.mjs";
3
3
  import { t as getActiveWebListener } from "./active-listener-CDjoX9QR.mjs";
4
- import { t as monitorWebChannel } from "./monitor-By82ehLA.mjs";
5
- import { t as loginWeb } from "./login-2dmd1TfE.mjs";
6
- import { whatsappSetupWizard as whatsappSetupWizard$1 } from "./setup-surface-B9CYwDPZ.mjs";
4
+ import { t as monitorWebChannel } from "./monitor-CGpV2VNN.mjs";
5
+ import { t as loginWeb } from "./login-BFlvSh9h.mjs";
6
+ import { whatsappSetupWizard as whatsappSetupWizard$1 } from "./setup-surface-43fj197P.mjs";
7
7
  //#region extensions/whatsapp/src/channel.runtime.ts
8
8
  async function startWebLoginWithQr(...args) {
9
9
  return await startWebLoginWithQr$1(...args);
@@ -1,4 +1,4 @@
1
- import { t as createWhatsAppPluginBase } from "./shared-DVgQ8kRG.mjs";
1
+ import { t as createWhatsAppPluginBase } from "./shared-DgOG5Iqr.mjs";
2
2
  //#region extensions/whatsapp/src/channel.setup.ts
3
3
  const whatsappSetupPlugin = { ...createWhatsAppPluginBase() };
4
4
  //#endregion
@@ -1,43 +1,11 @@
1
1
  import { r as getWhatsAppChannelRuntime } from "./runtime-BLlToOi6.mjs";
2
2
  import { n as WHATSAPP_CONNECTION_OWNER_PENDING_CAPABILITY, t as WHATSAPP_CONNECTION_CONTROLLER_CAPABILITY } from "./connection-controller-runtime-context-hgLJoRc8.mjs";
3
- import { M as waitForCredsSaveQueueWithTimeout, c as logoutWeb, f as readWebAuthExistsForDecision, k as resolveComparableIdentity, r as WhatsAppAuthUnstableError } from "./auth-store-Dh8a3cba.mjs";
4
- import { a as waitForWaConnection, m as acquireWhatsAppGatewayConnectionOwner, o as DEFAULT_WHATSAPP_SOCKET_TIMING, r as createWaSocket, t as closeWhatsAppSocketAndWait } from "./socket-close-CCVSFufF.mjs";
5
- import { n as getStatusCode, t as formatError } from "./session-errors-JuazczrA.mjs";
6
- import { computeBackoff, info, sleepWithAbort } from "openclaw/plugin-sdk/runtime-env";
3
+ import { M as waitForCredsSaveQueueWithTimeout, c as logoutWeb, f as readWebAuthExistsForDecision, k as resolveComparableIdentity, r as WhatsAppAuthUnstableError } from "./auth-store-BBonwKks.mjs";
4
+ import { d as DEFAULT_WHATSAPP_SOCKET_TIMING, i as waitForWaConnection, o as computeBackoff, r as createWaSocket, t as closeWhatsAppSocketAndWait, u as sleepWithAbort, y as acquireWhatsAppGatewayConnectionOwner } from "./socket-close-CT__V2fz.mjs";
5
+ import { n as getStatusCode, t as formatError } from "./session-errors-B8UcAnZN.mjs";
6
+ import { info } from "openclaw/plugin-sdk/runtime-env";
7
7
  import { registerChannelRuntimeContext } from "openclaw/plugin-sdk/channel-runtime-context";
8
- import { clamp } from "openclaw/plugin-sdk/text-utility-runtime";
9
- import { randomUUID } from "node:crypto";
10
- //#region extensions/whatsapp/src/reconnect.ts
11
- const DEFAULT_HEARTBEAT_SECONDS = 60;
12
- const DEFAULT_RECONNECT_POLICY = {
13
- initialMs: 2e3,
14
- maxMs: 3e4,
15
- factor: 1.8,
16
- jitter: .25,
17
- maxAttempts: 12
18
- };
19
- function resolveHeartbeatSeconds(cfg, overrideSeconds) {
20
- const candidate = overrideSeconds;
21
- if (typeof candidate === "number" && candidate > 0) return candidate;
22
- return DEFAULT_HEARTBEAT_SECONDS;
23
- }
24
- function resolveReconnectPolicy(cfg, overrides) {
25
- const overrideConfig = overrides ?? {};
26
- const merged = {
27
- ...DEFAULT_RECONNECT_POLICY,
28
- ...overrideConfig
29
- };
30
- merged.initialMs = Math.max(250, merged.initialMs);
31
- merged.maxMs = Math.max(merged.initialMs, merged.maxMs);
32
- merged.factor = clamp(merged.factor, 1.1, 10);
33
- merged.jitter = clamp(merged.jitter, 0, 1);
34
- merged.maxAttempts = Math.max(0, Math.floor(merged.maxAttempts));
35
- return merged;
36
- }
37
- function newConnectionId() {
38
- return randomUUID();
39
- }
40
- //#endregion
8
+ import { createDeferred } from "openclaw/plugin-sdk/extension-shared";
41
9
  //#region extensions/whatsapp/src/connection-controller.ts
42
10
  const LOGGED_OUT_STATUS = 401;
43
11
  const POST_PAIRING_RESTART_STATUS = 515;
@@ -62,15 +30,7 @@ function getLoginSocketRestartMessage(kind) {
62
30
  return kind === "timeout" ? WHATSAPP_LOGIN_TIMEOUT_RESTART_MESSAGE : WHATSAPP_LOGIN_RESTART_MESSAGE;
63
31
  }
64
32
  function createLiveConnection(params) {
65
- let closeResolved = false;
66
- let resolveClosePromise = (_reason) => {};
67
- const closePromise = new Promise((resolve) => {
68
- resolveClosePromise = (reason) => {
69
- if (closeResolved) return;
70
- closeResolved = true;
71
- resolve(reason);
72
- };
73
- });
33
+ const close = createDeferred();
74
34
  return {
75
35
  connectionId: params.connectionId,
76
36
  startedAt: Date.now(),
@@ -85,8 +45,8 @@ function createLiveConnection(params) {
85
45
  unregisterTransportActivity: null,
86
46
  openedAfterRecentInbound: params.openedAfterRecentInbound,
87
47
  backgroundTasks: /* @__PURE__ */ new Set(),
88
- closePromise,
89
- resolveClose: resolveClosePromise,
48
+ closePromise: close.promise,
49
+ resolveClose: close.resolve,
90
50
  socketClosed: false
91
51
  };
92
52
  }
@@ -259,7 +219,7 @@ var WhatsAppConnectionController = class {
259
219
  this.watchdogCheckMs = params.watchdogCheckMs;
260
220
  this.reconnectPolicy = params.reconnectPolicy;
261
221
  this.abortSignal = params.abortSignal;
262
- this.sleep = params.sleep ?? ((ms, signal) => sleepWithAbort(ms, signal));
222
+ this.sleep = params.sleep ?? sleepWithAbort;
263
223
  this.isNonRetryableStatus = params.isNonRetryableStatus ?? (() => false);
264
224
  this.socketTiming = {
265
225
  ...DEFAULT_WHATSAPP_SOCKET_TIMING,
@@ -456,11 +416,11 @@ var WhatsAppConnectionController = class {
456
416
  ]);
457
417
  }
458
418
  normalizeCloseReason(reason) {
459
- const statusCode = (typeof reason === "object" && reason && "status" in reason ? reason.status : void 0) ?? void 0;
419
+ const statusCode = reason?.status ?? void 0;
460
420
  return {
461
421
  statusCode,
462
422
  statusLabel: typeof statusCode === "number" ? statusCode : "unknown",
463
- isLoggedOut: typeof reason === "object" && reason !== null && "isLoggedOut" in reason && reason.isLoggedOut === true,
423
+ isLoggedOut: reason.isLoggedOut,
464
424
  error: reason?.error,
465
425
  errorText: formatError(reason)
466
426
  };
@@ -482,18 +442,8 @@ var WhatsAppConnectionController = class {
482
442
  healthState: "conflict",
483
443
  normalized
484
444
  };
485
- const retryDecision = this.consumeReconnectAttempt();
486
- if (retryDecision.action === "stop") return {
487
- action: "stop",
488
- reconnectAttempts: retryDecision.reconnectAttempts,
489
- healthState: retryDecision.healthState,
490
- normalized
491
- };
492
445
  return {
493
- action: "retry",
494
- delayMs: retryDecision.delayMs,
495
- reconnectAttempts: retryDecision.reconnectAttempts,
496
- healthState: retryDecision.healthState,
446
+ ...this.consumeReconnectAttempt(),
497
447
  normalized
498
448
  };
499
449
  }
@@ -686,4 +636,4 @@ var WhatsAppConnectionController = class {
686
636
  }
687
637
  };
688
638
  //#endregion
689
- export { closeWaSocketSoon as a, computeBackoff as c, resolveReconnectPolicy as d, sleepWithAbort as f, closeWaSocket as i, newConnectionId as l, WHATSAPP_WATCHDOG_TIMEOUT_ERROR as n, waitForWhatsAppLoginResult as o, WhatsAppConnectionController as r, DEFAULT_RECONNECT_POLICY as s, WHATSAPP_LOGGED_OUT_QR_MESSAGE as t, resolveHeartbeatSeconds as u };
639
+ export { closeWaSocketSoon as a, closeWaSocket as i, WHATSAPP_WATCHDOG_TIMEOUT_ERROR as n, waitForWhatsAppLoginResult as o, WhatsAppConnectionController as r, WHATSAPP_LOGGED_OUT_QR_MESSAGE as t };
@@ -34,15 +34,9 @@ function resolveWebCredsParentCheck(filePath) {
34
34
  messagePrefix: "WhatsApp credential file path"
35
35
  };
36
36
  }
37
- async function assertWebCredsParentPathSafe(filePath) {
38
- await assertNoSymlinkParents(resolveWebCredsParentCheck(filePath));
39
- }
40
- function assertWebCredsParentPathSafeSync(filePath) {
41
- assertNoSymlinkParentsSync(resolveWebCredsParentCheck(filePath));
42
- }
43
37
  async function assertWebCredsPathRegularFileOrMissing(filePath) {
44
38
  try {
45
- await assertWebCredsParentPathSafe(filePath);
39
+ await assertNoSymlinkParents(resolveWebCredsParentCheck(filePath));
46
40
  await statRegularFile(filePath);
47
41
  } catch (error) {
48
42
  throw new Error(`WhatsApp credential file path is unsafe; creds.json must be a regular file or missing: ${filePath}`, { cause: error });
@@ -50,7 +44,7 @@ async function assertWebCredsPathRegularFileOrMissing(filePath) {
50
44
  }
51
45
  function readWebCredsJsonRawSync(filePath) {
52
46
  try {
53
- assertWebCredsParentPathSafeSync(filePath);
47
+ assertNoSymlinkParentsSync(resolveWebCredsParentCheck(filePath));
54
48
  const { buffer, stat } = readRegularFileSync({ filePath });
55
49
  return stat.size > 1 ? buffer.toString("utf-8") : null;
56
50
  } catch {
@@ -59,7 +53,7 @@ function readWebCredsJsonRawSync(filePath) {
59
53
  }
60
54
  async function readWebCredsJsonRaw(filePath) {
61
55
  try {
62
- await assertWebCredsParentPathSafe(filePath);
56
+ await assertNoSymlinkParents(resolveWebCredsParentCheck(filePath));
63
57
  const { buffer, stat } = await readRegularFile({ filePath });
64
58
  return stat.size > 1 ? buffer.toString("utf-8") : null;
65
59
  } catch {
@@ -68,7 +62,7 @@ async function readWebCredsJsonRaw(filePath) {
68
62
  }
69
63
  function statWebCredsFileSync(filePath) {
70
64
  try {
71
- assertWebCredsParentPathSafeSync(filePath);
65
+ assertNoSymlinkParentsSync(resolveWebCredsParentCheck(filePath));
72
66
  const result = statRegularFileSync(filePath);
73
67
  if (result.missing || result.stat.size <= 1) return null;
74
68
  return {
@@ -82,7 +76,7 @@ function statWebCredsFileSync(filePath) {
82
76
  function hasWebCredsRegularFileSync(authDir) {
83
77
  try {
84
78
  const credsPath = resolveWebCredsPath(authDir);
85
- assertWebCredsParentPathSafeSync(credsPath);
79
+ assertNoSymlinkParentsSync(resolveWebCredsParentCheck(credsPath));
86
80
  return !statRegularFileSync(credsPath).missing;
87
81
  } catch {
88
82
  return false;
@@ -1,11 +1,10 @@
1
- import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.mjs";
2
- import { c as resolveMergedWhatsAppAccountConfig, o as resolveWhatsAppAuthDir } from "./accounts-D_NGDjCx.mjs";
1
+ import { t as __exportAll } from "./rolldown-runtime-BBjsoOtd.mjs";
2
+ import { c as resolveMergedWhatsAppAccountConfig, o as resolveWhatsAppAuthDir } from "./accounts-CtRPAQCL.mjs";
3
3
  import { c as normalizeWhatsAppTarget, t as isWhatsAppGroupJid } from "./normalize-target-BGra1ZnM.mjs";
4
4
  import { i as hasPendingWhatsAppConnectionOwner, r as getWhatsAppConnectionController } from "./connection-controller-runtime-context-hgLJoRc8.mjs";
5
- import "./normalize-DdsROMMa.mjs";
6
- import { M as waitForCredsSaveQueueWithTimeout, f as readWebAuthExistsForDecision } from "./auth-store-Dh8a3cba.mjs";
5
+ import { M as waitForCredsSaveQueueWithTimeout, f as readWebAuthExistsForDecision } from "./auth-store-BBonwKks.mjs";
7
6
  import { n as resolveWebAccountId } from "./active-listener-CDjoX9QR.mjs";
8
- import { a as waitForWaConnection, h as acquireWhatsAppStandaloneConnectionOwner, n as createWaDirectorySocket, p as WhatsAppConnectionOwnerBusyError, t as closeWhatsAppSocketAndWait } from "./socket-close-CCVSFufF.mjs";
7
+ import { b as acquireWhatsAppStandaloneConnectionOwner, i as waitForWaConnection, n as createWaDirectorySocket, t as closeWhatsAppSocketAndWait, v as WhatsAppConnectionOwnerBusyError } from "./socket-close-CT__V2fz.mjs";
9
8
  import { listResolvedDirectoryGroupEntriesFromMapKeys, listResolvedDirectoryUserEntriesFromAllowFrom } from "openclaw/plugin-sdk/directory-config-runtime";
10
9
  //#region extensions/whatsapp/src/directory-config.ts
11
10
  var directory_config_exports = /* @__PURE__ */ __exportAll({
@@ -15,16 +14,13 @@ var directory_config_exports = /* @__PURE__ */ __exportAll({
15
14
  listWhatsAppDirectoryGroupsLive: () => listWhatsAppDirectoryGroupsLive,
16
15
  listWhatsAppDirectoryPeersFromConfig: () => listWhatsAppDirectoryPeersFromConfig
17
16
  });
18
- function resolveWhatsAppDirectoryAccount(cfg, accountId) {
19
- return resolveMergedWhatsAppAccountConfig({
20
- cfg,
21
- accountId
22
- });
23
- }
24
17
  async function listWhatsAppDirectoryPeersFromConfig(params) {
25
18
  return listResolvedDirectoryUserEntriesFromAllowFrom({
26
19
  ...params,
27
- resolveAccount: resolveWhatsAppDirectoryAccount,
20
+ resolveAccount: (cfg, accountId) => resolveMergedWhatsAppAccountConfig({
21
+ cfg,
22
+ accountId
23
+ }),
28
24
  resolveAllowFrom: (account) => account.allowFrom,
29
25
  normalizeId: (entry) => {
30
26
  const normalized = normalizeWhatsAppTarget(entry);
@@ -36,7 +32,10 @@ async function listWhatsAppDirectoryPeersFromConfig(params) {
36
32
  async function listWhatsAppDirectoryGroupsFromConfig(params) {
37
33
  return listResolvedDirectoryGroupEntriesFromMapKeys({
38
34
  ...params,
39
- resolveAccount: resolveWhatsAppDirectoryAccount,
35
+ resolveAccount: (cfg, accountId) => resolveMergedWhatsAppAccountConfig({
36
+ cfg,
37
+ accountId
38
+ }),
40
39
  resolveGroups: (account) => account.groups
41
40
  });
42
41
  }
@@ -127,7 +126,7 @@ async function finishPriorStandaloneCleanup(authDir) {
127
126
  }
128
127
  }
129
128
  async function listGroupsThroughStandaloneOwner(params) {
130
- const account = resolveWhatsAppDirectoryAccount(params.cfg, params.accountId);
129
+ const account = resolveMergedWhatsAppAccountConfig(params);
131
130
  const authDir = resolveWhatsAppAuthDir({
132
131
  cfg: params.cfg,
133
132
  accountId: account.accountId
@@ -0,0 +1,222 @@
1
+ import { n as __reExport, t as __exportAll } from "./rolldown-runtime-BBjsoOtd.mjs";
2
+ //#region packages/normalization-core/src/record-coerce.ts
3
+ /** Type guard for non-array object records at browser-safe boundaries. */
4
+ function isRecord(value) {
5
+ return value !== null && typeof value === "object" && !Array.isArray(value);
6
+ }
7
+ /** Returns a non-array record or null. */
8
+ function asNullableRecord(value) {
9
+ return isRecord(value) ? value : null;
10
+ }
11
+ //#endregion
12
+ //#region src/config/channel-config-normalization.ts
13
+ /** Applies one channel-specific doctor migration to every object-shaped account. */
14
+ function normalizeChannelAccounts(params) {
15
+ const rawAccounts = asNullableRecord(params.entry.accounts);
16
+ if (!rawAccounts) return {
17
+ entry: params.entry,
18
+ changed: false
19
+ };
20
+ let changed = false;
21
+ const accounts = { ...rawAccounts };
22
+ for (const [accountId, value] of Object.entries(rawAccounts)) {
23
+ const account = asNullableRecord(value);
24
+ if (!account) continue;
25
+ const normalized = params.normalizeAccount({
26
+ account,
27
+ accountId,
28
+ pathPrefix: `${params.pathPrefix}.accounts.${accountId}`,
29
+ changes: params.changes
30
+ });
31
+ if (normalized.changed) {
32
+ accounts[accountId] = normalized.entry;
33
+ changed = true;
34
+ }
35
+ }
36
+ return changed ? {
37
+ entry: {
38
+ ...params.entry,
39
+ accounts
40
+ },
41
+ changed: true
42
+ } : {
43
+ entry: params.entry,
44
+ changed: false
45
+ };
46
+ }
47
+ /** Applies the same channel-specific doctor migration at root and account scope. */
48
+ function normalizeChannelConfigEntries(params) {
49
+ const changes = params.changes ?? [];
50
+ const channels = params.cfg.channels;
51
+ const entry = asNullableRecord(channels?.[params.channelId]);
52
+ if (!entry) return {
53
+ config: params.cfg,
54
+ changes
55
+ };
56
+ const channelPath = `channels.${params.channelId}`;
57
+ const root = params.normalizeEntry({
58
+ entry,
59
+ pathPrefix: channelPath,
60
+ changes
61
+ });
62
+ const accounts = normalizeChannelAccounts({
63
+ entry: root.entry,
64
+ pathPrefix: channelPath,
65
+ changes,
66
+ normalizeAccount: (accountParams) => params.normalizeEntry({
67
+ entry: accountParams.account,
68
+ accountId: accountParams.accountId,
69
+ pathPrefix: accountParams.pathPrefix,
70
+ changes: accountParams.changes
71
+ })
72
+ });
73
+ if (!root.changed && !accounts.changed) return {
74
+ config: params.cfg,
75
+ changes
76
+ };
77
+ return {
78
+ config: {
79
+ ...params.cfg,
80
+ channels: {
81
+ ...channels,
82
+ [params.channelId]: accounts.entry
83
+ }
84
+ },
85
+ changes
86
+ };
87
+ }
88
+ //#endregion
89
+ //#region src/plugin-sdk/legacy-webhook-listener-migration.ts
90
+ /** Preserve explicitly configured webhook listeners while moving ingress onto Gateway routes. */
91
+ function createLegacyWebhookListenerDoctorContract(params) {
92
+ const portKey = params.portKey ?? "webhookPort";
93
+ const hostKey = params.hostKey === void 0 ? "webhookHost" : params.hostKey;
94
+ const source = (entry) => params.webhookKey ? asNullableRecord(entry[params.webhookKey]) : entry;
95
+ const hasLegacy = (value) => {
96
+ const entry = asNullableRecord(value);
97
+ const listener = entry && source(entry);
98
+ return Boolean(listener && (Object.hasOwn(listener, portKey) || hostKey && Object.hasOwn(listener, hostKey)));
99
+ };
100
+ const prefix = `channels.${params.channelKey}`;
101
+ return {
102
+ legacyConfigRules: [{
103
+ path: ["channels", params.channelKey],
104
+ message: `${prefix} webhook listeners moved to Gateway routes. Run "openclaw doctor --fix" to preserve explicitly configured listener settings as legacyWebhook.`,
105
+ match: (value) => {
106
+ const accounts = asNullableRecord(asNullableRecord(value)?.accounts);
107
+ return hasLegacy(value) || Object.values(accounts ?? {}).some(hasLegacy);
108
+ }
109
+ }],
110
+ normalizeCompatibilityConfig: ({ cfg }) => {
111
+ const root = asNullableRecord(asNullableRecord(cfg.channels)?.[params.channelKey]);
112
+ const inherited = root && source(root);
113
+ const canonicalRoot = asNullableRecord(root?.legacyWebhook);
114
+ return normalizeChannelConfigEntries({
115
+ cfg,
116
+ channelId: params.channelKey,
117
+ normalizeEntry: ({ entry, accountId, pathPrefix, changes }) => {
118
+ const listener = source(entry);
119
+ if (!listener || !hasLegacy(entry)) return {
120
+ entry,
121
+ changed: false
122
+ };
123
+ const next = { ...entry };
124
+ const port = Object.hasOwn(listener, portKey) ? listener[portKey] : (accountId ? canonicalRoot?.port ?? inherited?.[portKey] : void 0) ?? params.defaultPort;
125
+ const inheritedHost = accountId ? canonicalRoot ? canonicalRoot.host : (hostKey ? inherited?.[hostKey] : void 0) ?? params.defaultHost : params.defaultHost;
126
+ const host = hostKey ? listener[hostKey] ?? inheritedHost : inheritedHost;
127
+ const legacyPath = [pathPrefix, params.webhookKey].filter(Boolean).join(".");
128
+ if (Object.hasOwn(entry, "legacyWebhook")) changes.push(`Removed ${legacyPath} legacy listener keys; ${pathPrefix}.legacyWebhook is already configured.`);
129
+ else if (accountId && root?.legacyWebhook === false) changes.push(`Removed ${legacyPath} legacy listener keys; ${prefix}.legacyWebhook: false keeps this account's inherited listener disabled.`);
130
+ else {
131
+ next.legacyWebhook = {
132
+ port,
133
+ ...host !== void 0 ? { host } : {}
134
+ };
135
+ changes.push(`Moved ${legacyPath} listener settings to ${pathPrefix}.legacyWebhook. Point the external callback or reverse proxy at the Gateway port and webhook path, verify delivery, then set legacyWebhook: false to disable legacy forwarding.`);
136
+ }
137
+ const updated = params.webhookKey ? { ...listener } : next;
138
+ delete updated[portKey];
139
+ if (hostKey) delete updated[hostKey];
140
+ if (params.webhookKey) {
141
+ if (Object.keys(updated).length) next[params.webhookKey] = updated;
142
+ else delete next[params.webhookKey];
143
+ }
144
+ return {
145
+ entry: next,
146
+ changed: true
147
+ };
148
+ }
149
+ });
150
+ }
151
+ };
152
+ }
153
+ //#endregion
154
+ //#region \0openclaw:bundled-sdk:openclaw/plugin-sdk/runtime-doctor-migrations
155
+ var runtime_doctor_migrations_exports = /* @__PURE__ */ __exportAll({ createLegacyWebhookListenerDoctorContract: () => createLegacyWebhookListenerDoctorContract });
156
+ import * as import_openclaw_plugin_sdk_runtime_doctor_migrations from "openclaw/plugin-sdk/runtime-doctor-migrations";
157
+ __reExport(runtime_doctor_migrations_exports, import_openclaw_plugin_sdk_runtime_doctor_migrations);
158
+ //#endregion
159
+ //#region extensions/whatsapp/src/doctor.ts
160
+ function resolveLegacyAckScope(ack) {
161
+ const direct = ack.direct !== false;
162
+ const group = ack.group ?? "mentions";
163
+ if (direct) return group === "always" ? "all" : group === "never" ? "direct" : void 0;
164
+ return group === "always" ? "group-all" : group === "mentions" ? "group-mentions" : group === "never" ? "off" : void 0;
165
+ }
166
+ function resolveDefaultAgentEmoji(cfg) {
167
+ const entries = (0, runtime_doctor_migrations_exports.asObjectRecord)((0, runtime_doctor_migrations_exports.asObjectRecord)(cfg.agents)?.entries);
168
+ const agents = entries ? Object.values(entries).flatMap((value) => {
169
+ const entry = (0, runtime_doctor_migrations_exports.asObjectRecord)(value);
170
+ return entry ? [entry] : [];
171
+ }) : [];
172
+ const agent = agents.find((entry) => entry.default === true) ?? agents[0];
173
+ const emoji = (0, runtime_doctor_migrations_exports.asObjectRecord)(agent?.identity)?.emoji;
174
+ return typeof emoji === "string" ? emoji : void 0;
175
+ }
176
+ function normalizeCompatibilityConfig({ cfg }) {
177
+ const changes = [];
178
+ const sources = [];
179
+ for (const scope of (0, runtime_doctor_migrations_exports.collectChannelAccountScopes)({
180
+ cfg,
181
+ channelId: "whatsapp"
182
+ })) {
183
+ const ack = (0, runtime_doctor_migrations_exports.asObjectRecord)(scope.account.ackReaction);
184
+ if (!ack) continue;
185
+ sources.push({
186
+ path: `${scope.prefix}.ackReaction`,
187
+ account: scope.account,
188
+ ...typeof ack.emoji === "string" ? { emoji: ack.emoji } : {},
189
+ scope: resolveLegacyAckScope(ack),
190
+ unrepresentableScope: ack.direct !== false && (ack.group ?? "mentions") === "mentions"
191
+ });
192
+ }
193
+ if (sources.length === 0) return {
194
+ config: cfg,
195
+ changes
196
+ };
197
+ const messages = cfg.messages ??= {};
198
+ const identityEmoji = resolveDefaultAgentEmoji(cfg) ?? "👀";
199
+ for (const source of sources) {
200
+ messages.ackReaction ??= source.emoji ?? identityEmoji;
201
+ messages.ackReactionScope ??= source.scope;
202
+ delete source.account.ackReaction;
203
+ changes.push(`Moved translatable ${source.path} settings to messages ack settings.`);
204
+ }
205
+ const finalEmoji = messages.ackReaction.trim();
206
+ const finalScope = messages.ackReactionScope ?? "group-mentions";
207
+ const comparableFinalScope = finalScope === "none" ? "off" : finalScope;
208
+ for (const source of sources) {
209
+ const sourceEmoji = source.emoji?.trim();
210
+ if (source.emoji === void 0) changes.push(`${source.path} used a route-dependent agent identity acknowledgement emoji before migration; the final messages.ackReaction is ${JSON.stringify(finalEmoji)}. Review messages.ackReaction.`);
211
+ else if (sourceEmoji !== finalEmoji) changes.push(`${source.path} requested acknowledgement emoji ${JSON.stringify(sourceEmoji)}, but the final messages.ackReaction is ${JSON.stringify(finalEmoji)}. Review messages.ackReaction.`);
212
+ if (source.unrepresentableScope) changes.push(`${source.path} migration cannot preserve both direct-message and mentioned-group acknowledgements; the final messages.ackReactionScope is ${JSON.stringify(finalScope)}. Review messages.ackReactionScope.`);
213
+ else if (source.scope && source.scope !== comparableFinalScope) changes.push(`${source.path} requested acknowledgement scope ${JSON.stringify(source.scope)}, but the final messages.ackReactionScope is ${JSON.stringify(finalScope)}. Review messages.ackReactionScope.`);
214
+ }
215
+ return {
216
+ config: cfg,
217
+ changes
218
+ };
219
+ }
220
+ const whatsappDoctor = { normalizeCompatibilityConfig };
221
+ //#endregion
222
+ export { whatsappDoctor as n, runtime_doctor_migrations_exports as r, normalizeCompatibilityConfig as t };
@@ -0,0 +1,40 @@
1
+ import { DEFAULT_ACCOUNT_ID } from "openclaw/plugin-sdk/account-core";
2
+ //#region extensions/whatsapp/src/group-config-path.ts
3
+ const WHATSAPP_GROUP_SCOPE_FIELDS = [
4
+ "groupPolicy",
5
+ "groupAllowFrom",
6
+ "groups"
7
+ ];
8
+ function resolveWhatsAppAccountKey(accounts, accountId) {
9
+ if (!accounts) return;
10
+ if (Object.hasOwn(accounts, accountId)) return accountId;
11
+ const normalizedAccountId = accountId.trim().toLowerCase();
12
+ return Object.keys(accounts).find((key) => key.trim().toLowerCase() === normalizedAccountId);
13
+ }
14
+ function normalizePathAccountId(accountId) {
15
+ return typeof accountId === "string" ? accountId.trim() || DEFAULT_ACCOUNT_ID : DEFAULT_ACCOUNT_ID;
16
+ }
17
+ function hasConfiguredField(config, field) {
18
+ return Boolean(config && typeof config === "object" && Object.hasOwn(config, field) && config[field] !== void 0);
19
+ }
20
+ function resolveWhatsAppGroupScopeBasePath(params, fields = WHATSAPP_GROUP_SCOPE_FIELDS) {
21
+ const accountId = normalizePathAccountId(params.accountId);
22
+ const whatsapp = params.cfg.channels?.whatsapp;
23
+ const accounts = whatsapp?.accounts;
24
+ const accountKey = resolveWhatsAppAccountKey(accounts, accountId);
25
+ const defaultAccountKey = resolveWhatsAppAccountKey(accounts, DEFAULT_ACCOUNT_ID);
26
+ const accountConfig = accountKey ? accounts?.[accountKey] : void 0;
27
+ const defaultAccountConfig = defaultAccountKey ? accounts?.[defaultAccountKey] : void 0;
28
+ const hasField = (config) => fields.some((field) => hasConfiguredField(config, field));
29
+ if (hasField(accountConfig)) return `channels.whatsapp.accounts.${accountKey}`;
30
+ if (accountId !== DEFAULT_ACCOUNT_ID && hasField(defaultAccountConfig)) return `channels.whatsapp.accounts.${defaultAccountKey}`;
31
+ if (hasField(whatsapp)) return "channels.whatsapp";
32
+ }
33
+ function resolveWhatsAppConfigPath(params) {
34
+ return `${resolveWhatsAppGroupScopeBasePath(params) ?? "channels.whatsapp"}.${params.field}`;
35
+ }
36
+ function resolveWhatsAppGroupsConfigPath(params) {
37
+ return `${resolveWhatsAppGroupScopeBasePath(params, ["groups"]) ?? resolveWhatsAppGroupScopeBasePath(params) ?? "channels.whatsapp"}.groups`;
38
+ }
39
+ //#endregion
40
+ export { resolveWhatsAppGroupsConfigPath as n, resolveWhatsAppConfigPath as t };
@@ -1,8 +1,6 @@
1
- import { a as resolveWhatsAppAccount } from "./accounts-D_NGDjCx.mjs";
1
+ import { a as resolveWhatsAppAccount } from "./accounts-CtRPAQCL.mjs";
2
2
  import { c as normalizeWhatsAppTarget } from "./normalize-target-BGra1ZnM.mjs";
3
- import "./normalize-DdsROMMa.mjs";
4
- import { r as jidToE164 } from "./targets-runtime-RBjx3pg_.mjs";
5
- import "./text-runtime-CHl0iPYe.mjs";
3
+ import { r as jidToE164 } from "./targets-runtime-DmiqXIXO.mjs";
6
4
  import { formatMediaPlaceholderText } from "openclaw/plugin-sdk/channel-inbound";
7
5
  import { createChannelApprovalAuth } from "openclaw/plugin-sdk/approval-auth-runtime";
8
6
  import { isHostedLidUser, isHostedPnUser, isLidUser, isPnUser } from "baileys";
@@ -96,11 +94,7 @@ function lookupInboundMessageMetaForTarget(accountId, targetJid, messageId) {
96
94
  const exact = lookupInboundMessageMeta(accountId, targetJid, messageId);
97
95
  if (exact) return {
98
96
  remoteJid: targetJid,
99
- participant: exact.participant,
100
- participantE164: exact.participantE164,
101
- body: exact.body,
102
- media: exact.media,
103
- fromMe: exact.fromMe
97
+ ...exact
104
98
  };
105
99
  const prefix = `${accountId}:`;
106
100
  const suffix = `:${messageId}`;
@@ -1,11 +1,12 @@
1
- import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.mjs";
2
- import { a as resolveWhatsAppAccount } from "./accounts-D_NGDjCx.mjs";
3
- import { b as restoreCredsFromBackupIfNeeded } from "./auth-store-Dh8a3cba.mjs";
4
- import { f as renderQrTerminal, r as createWaSocket, u as resolveWhatsAppSocketTiming } from "./socket-close-CCVSFufF.mjs";
5
- import { a as closeWaSocketSoon, o as waitForWhatsAppLoginResult } from "./connection-controller-C60mU7j7.mjs";
1
+ import { t as __exportAll } from "./rolldown-runtime-BBjsoOtd.mjs";
2
+ import { a as resolveWhatsAppAccount } from "./accounts-CtRPAQCL.mjs";
3
+ import { b as restoreCredsFromBackupIfNeeded } from "./auth-store-BBonwKks.mjs";
4
+ import { _ as renderQrTerminal, h as resolveWhatsAppSocketTiming, r as createWaSocket } from "./socket-close-CT__V2fz.mjs";
5
+ import { a as closeWaSocketSoon, o as waitForWhatsAppLoginResult } from "./connection-controller-CHo1oRJA.mjs";
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";
9
+ import { createDeferred } from "openclaw/plugin-sdk/extension-shared";
9
10
  import { getRuntimeConfig } from "openclaw/plugin-sdk/runtime-config-snapshot";
10
11
  //#region extensions/whatsapp/src/login.ts
11
12
  var login_exports = /* @__PURE__ */ __exportAll({ loginWeb: () => loginWeb });
@@ -20,14 +21,11 @@ async function loginWeb(verbose, waitForConnection, runtime = defaultRuntime, ac
20
21
  const socketTiming = resolveWhatsAppSocketTiming();
21
22
  const restoredFromBackup = await restoreCredsFromBackupIfNeeded(account.authDir, { beforeCredentialPersistence: options?.beforeCredentialPersistence });
22
23
  const credentialPersistenceState = { failure: null };
23
- let resolveCredentialPersistenceFailure = (_failure) => {};
24
- const credentialPersistenceFailurePromise = new Promise((resolve) => {
25
- resolveCredentialPersistenceFailure = resolve;
26
- });
24
+ const credentialPersistenceFailure = createDeferred();
27
25
  const onCredentialPersistenceError = (error) => {
28
26
  if (credentialPersistenceState.failure) return;
29
27
  credentialPersistenceState.failure = { error };
30
- resolveCredentialPersistenceFailure(credentialPersistenceState.failure);
28
+ credentialPersistenceFailure.resolve(credentialPersistenceState.failure);
31
29
  };
32
30
  const credentialPersistenceTasks = /* @__PURE__ */ new Set();
33
31
  const onCredentialPersistenceTask = (task) => {
@@ -84,7 +82,7 @@ async function loginWeb(verbose, waitForConnection, runtime = defaultRuntime, ac
84
82
  onQr,
85
83
  ...credentialPersistenceOptions,
86
84
  ...options?.beforeCredentialPersistence ? {
87
- credentialPersistenceFailure: credentialPersistenceFailurePromise,
85
+ credentialPersistenceFailure: credentialPersistenceFailure.promise,
88
86
  getCredentialPersistenceFailure: () => credentialPersistenceState.failure,
89
87
  waitForCredentialPersistence
90
88
  } : {},