@qqbrowser/openclaw-qbot 0.0.142 → 0.0.144
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.
- package/dist/{agents-Bpp_F5In.js → agents-D3Z05GqK.js} +2 -2
- package/dist/{agents.config-DfIJAGcd.js → agents.config-BUQjISaN.js} +2 -2
- package/dist/{agents.config-B6LRG9eP.js → agents.config-BvxrGqOT.js} +2 -2
- package/dist/{auth-choice-DvTApGhx.js → auth-choice-CYGzLW73.js} +2 -2
- package/dist/{auth-choice-EQdNd7jO.js → auth-choice-DJn6683d.js} +2 -2
- package/dist/{banner-9u45RL26.js → banner-xQa2kS6O.js} +2 -2
- package/dist/build-info.json +3 -3
- package/dist/bundled/boot-md/handler.js +1 -1
- package/dist/bundled/session-memory/handler.js +1 -1
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/{channel-options-D2syI791.js → channel-options-BurUBfoY.js} +2 -2
- package/dist/{channel-options-CEIzjOno.js → channel-options-Ce8uNnAp.js} +2 -2
- package/dist/{channel-web-BrElpZAc.js → channel-web-D5TgFlMz.js} +2 -2
- package/dist/{channel-web-CxHbET4B.js → channel-web-D7FkrASC.js} +2 -2
- package/dist/{channels-cli-BmAJuuRs.js → channels-cli-BfzZrnkt.js} +2 -2
- package/dist/{channels-cli-Dgosczr6.js → channels-cli-DFI6F6G0.js} +2 -2
- package/dist/{cli-D8T2tphD.js → cli-CMLvfh6N.js} +2 -2
- package/dist/{cli-BcnoCo4z.js → cli-MTpYYgjl.js} +2 -2
- package/dist/{command-registry-CfuXCRwV.js → command-registry-CSBvrqwW.js} +2 -2
- package/dist/{compact-Dg66DXx_.js → compact-BEeB6bwq.js} +7 -7
- package/dist/{compact.runtime-3mTLUPqu.js → compact.runtime-BC7F7HPJ.js} +1 -1
- package/dist/{compact.runtime-DcTdUW4o.js → compact.runtime-BTUQRS-2.js} +1 -1
- package/dist/{compact.runtime-Bhewj5vA.js → compact.runtime-C0GyLWem.js} +1 -1
- package/dist/{compact.runtime-XXtYlNJN.js → compact.runtime-CrOFsO5D.js} +1 -1
- package/dist/{completion-cli-BZi4nuQb.js → completion-cli-Bizog38J.js} +2 -2
- package/dist/{completion-cli-C40TWdsv.js → completion-cli-W1_FoDFF.js} +2 -2
- package/dist/{config-cli-CBte2b1h.js → config-cli-B9hEiZsw.js} +2 -2
- package/dist/{config-cli-1ojSLwAj.js → config-cli-BNTGUqL_.js} +2 -2
- package/dist/{configure-kod4tmZa.js → configure-DForkh7R.js} +2 -2
- package/dist/{configure-DJrNDEpR.js → configure-DR77VUCy.js} +2 -2
- package/dist/{deps-send-whatsapp.runtime-C4O9crnk.js → deps-send-whatsapp.runtime-BuIiTn5n.js} +1 -1
- package/dist/{deps-send-whatsapp.runtime-5Lot99zq.js → deps-send-whatsapp.runtime-C4hGmfeP.js} +1 -1
- package/dist/{deps-send-whatsapp.runtime-LiNvHd_E.js → deps-send-whatsapp.runtime-CYlLppMS.js} +1 -1
- package/dist/{deps-send-whatsapp.runtime-Bg-_kVX6.js → deps-send-whatsapp.runtime-FY-HuZ5S.js} +1 -1
- package/dist/{doctor-completion-BJ6steqx.js → doctor-completion-Da0cocZX.js} +2 -2
- package/dist/{doctor-completion-DMJhfrtC.js → doctor-completion-DpCWb88H.js} +2 -2
- package/dist/entry.js +1 -1
- package/dist/extensionAPI.js +1 -1
- package/dist/{gateway-cli-CKu0FA7D.js → gateway-cli-C4YOlz3m.js} +6 -6
- package/dist/{gateway-cli-C_s9eMlC.js → gateway-cli-D78GfbjG.js} +6 -6
- package/dist/{health-PaRHFItm.js → health-DBu0V1Y-.js} +2 -2
- package/dist/{health-BgOggK9k.js → health-RQzDNQwf.js} +2 -2
- package/dist/{hooks-cli-CsBrScq0.js → hooks-cli-B3eDoEHO.js} +2 -2
- package/dist/{hooks-cli-BzyzTNBx.js → hooks-cli-xgORhqZ2.js} +2 -2
- package/dist/index.js +2 -2
- package/dist/llm-slug-generator.js +1 -1
- package/dist/{models-C_Vg3Cty.js → models-BEO5lvkx.js} +2 -2
- package/dist/{models-cli-CDZliTXq.js → models-cli-BbcJ6A0F.js} +2 -2
- package/dist/{models-cli-bGr8jwAb.js → models-cli-Dacwv6BY.js} +2 -2
- package/dist/{npm-resolution-DWPloph4.js → npm-resolution-Bui58Ks1.js} +2 -2
- package/dist/{npm-resolution-BnJGLwhi.js → npm-resolution-Ct6MRtq6.js} +2 -2
- package/dist/{onboard-B0BNCQaO.js → onboard-2iF3lTUI.js} +3 -3
- package/dist/{onboard-CjVhdaiR.js → onboard-B9ouFJC7.js} +3 -3
- package/dist/{onboard-channels-CZK_7xMR.js → onboard-channels-BXReNh4B.js} +2 -2
- package/dist/{onboard-channels-BMIOddLN.js → onboard-channels-CjXCpXI-.js} +2 -2
- package/dist/{onboarding-B6ixWwgp.js → onboarding-BTBbx6Ka.js} +2 -2
- package/dist/{onboarding-ouEqUuUr.js → onboarding-TkoOoq9D.js} +2 -2
- package/dist/{onboarding.finalize-Bgat5Npc.js → onboarding.finalize-C9QGFQpa.js} +2 -2
- package/dist/{onboarding.finalize-DsMVlTcH.js → onboarding.finalize-CwjLMPKK.js} +2 -2
- package/dist/{pi-embedded-BZSn84Bh.js → pi-embedded-B_6OtP8m.js} +7 -7
- package/dist/{pi-embedded-Dsz7p3MF.js → pi-embedded-DjX-gdoY.js} +7 -7
- package/dist/{plugin-registry-CIBiHZH1.js → plugin-registry-CI5K3iWc.js} +2 -2
- package/dist/{plugin-registry-C6dY-Et7.js → plugin-registry-CYlBYbc8.js} +2 -2
- package/dist/plugin-sdk/{channel-web-9zn1Itpg.cjs → channel-web-BSUPSLCU.cjs} +2 -2
- package/dist/plugin-sdk/{channel-web-4ZQVqsrt.js → channel-web-CeSPyNTh.js} +2 -2
- package/dist/plugin-sdk/{channel-web-BrB00HKH.js → channel-web-Cptth4mc.js} +2 -2
- package/dist/plugin-sdk/{channel-web-DN5La-Ol.cjs → channel-web-D4x22KPN.cjs} +2 -2
- package/dist/plugin-sdk/{compact.runtime-8oUv1ld1.cjs → compact.runtime-BDgWntMu.cjs} +1 -1
- package/dist/plugin-sdk/{compact.runtime-CmJayEYX.js → compact.runtime-BJFMaTF4.js} +1 -1
- package/dist/plugin-sdk/{compact.runtime-BjJCBESR.cjs → compact.runtime-BWadwUyE.cjs} +1 -1
- package/dist/plugin-sdk/{compact.runtime-ALKRoVEG.js → compact.runtime-Bfu2rMai.js} +1 -1
- package/dist/plugin-sdk/{compact.runtime-DBlESOSV.cjs → compact.runtime-Cg47oUHq.cjs} +1 -1
- package/dist/plugin-sdk/{compact.runtime-Dmc0G6Yn.js → compact.runtime-CqK86P7R.js} +1 -1
- package/dist/plugin-sdk/{compact.runtime-Chumwp0K.cjs → compact.runtime-CqrB25-A.cjs} +1 -1
- package/dist/plugin-sdk/{compact.runtime-Ddfxp3fz.js → compact.runtime-DeATtENL.js} +1 -1
- package/dist/plugin-sdk/{compact.runtime-C_dc78Lp.cjs → compact.runtime-GMu30Jmw.cjs} +1 -1
- package/dist/plugin-sdk/{compact.runtime-ZrApPcrV.js → compact.runtime-YFzugj-k.js} +1 -1
- package/dist/plugin-sdk/{compact.runtime-BF4SCZ-5.js → compact.runtime-a8Z4_6wu.js} +1 -1
- package/dist/plugin-sdk/{compact.runtime-CbzQiVEW.cjs → compact.runtime-jGNfnpo2.cjs} +1 -1
- package/dist/plugin-sdk/compat.cjs +1 -1
- package/dist/plugin-sdk/compat.js +1 -1
- package/dist/plugin-sdk/{deps-send-whatsapp.runtime-BEDFRjff.js → deps-send-whatsapp.runtime-23E2Ab5R.js} +1 -1
- package/dist/plugin-sdk/{deps-send-whatsapp.runtime-QY0XTSgX.cjs → deps-send-whatsapp.runtime-B1oA3XBA.cjs} +1 -1
- package/dist/plugin-sdk/{deps-send-whatsapp.runtime-Du_3Rw7K.cjs → deps-send-whatsapp.runtime-C8q_3sOf.cjs} +1 -1
- package/dist/plugin-sdk/{deps-send-whatsapp.runtime-DMeaTnvE.cjs → deps-send-whatsapp.runtime-CsebM75z.cjs} +1 -1
- package/dist/plugin-sdk/{deps-send-whatsapp.runtime-CrVVnzLl.js → deps-send-whatsapp.runtime-D3mYdwaT.js} +1 -1
- package/dist/plugin-sdk/{deps-send-whatsapp.runtime-DR4rvUQL.js → deps-send-whatsapp.runtime-DDwUEbJ8.js} +1 -1
- package/dist/plugin-sdk/{deps-send-whatsapp.runtime-BULlOkpi.cjs → deps-send-whatsapp.runtime-Di3p_3Eh.cjs} +1 -1
- package/dist/plugin-sdk/{deps-send-whatsapp.runtime--uXLMs1C.js → deps-send-whatsapp.runtime-JzRD4jTI.js} +1 -1
- package/dist/plugin-sdk/{deps-send-whatsapp.runtime-BRjb9631.cjs → deps-send-whatsapp.runtime-gEp895yA.cjs} +1 -1
- package/dist/plugin-sdk/{deps-send-whatsapp.runtime-VQXeRmRl.js → deps-send-whatsapp.runtime-iV5E6CHf.js} +1 -1
- package/dist/plugin-sdk/{deps-send-whatsapp.runtime-2Us9O7dL.cjs → deps-send-whatsapp.runtime-k0yGrhs2.cjs} +1 -1
- package/dist/plugin-sdk/{deps-send-whatsapp.runtime-BfV5Q2fx.js → deps-send-whatsapp.runtime-v3sqBoDg.js} +1 -1
- package/dist/plugin-sdk/{dispatch-C2YTqGlf.js → dispatch-3PrSaGZi.js} +7 -7
- package/dist/plugin-sdk/{dispatch-DHbSBeFJ.js → dispatch-Bcf1uPHo.js} +7 -7
- package/dist/plugin-sdk/{dispatch-SWyfAZT0.cjs → dispatch-BgGE9usQ.cjs} +7 -7
- package/dist/plugin-sdk/{dispatch-BYlcmJ9u.js → dispatch-BhUN9ZDP.js} +7 -7
- package/dist/plugin-sdk/{dispatch-DK5ub8qa.cjs → dispatch-C3k8j6Zb.cjs} +7 -7
- package/dist/plugin-sdk/{dispatch-DCSwqteL.js → dispatch-C_gJPvbD.js} +7 -7
- package/dist/plugin-sdk/{dispatch-5v3v8zzA.js → dispatch-Df8B7owq.js} +7 -7
- package/dist/plugin-sdk/{dispatch-CNy3g9ma.cjs → dispatch-YK0qHNtb.cjs} +7 -7
- package/dist/plugin-sdk/{dispatch-B6UbZCpL.cjs → dispatch-_fZDA253.cjs} +7 -7
- package/dist/plugin-sdk/{dispatch-mR2vLkGa.cjs → dispatch-wEH2eS4y.cjs} +7 -7
- package/dist/plugin-sdk/index.cjs +1 -1
- package/dist/plugin-sdk/index.js +1 -1
- package/dist/plugin-sdk/irc.cjs +1 -1
- package/dist/plugin-sdk/irc.js +1 -1
- package/dist/plugin-sdk/matrix.cjs +1 -1
- package/dist/plugin-sdk/matrix.js +1 -1
- package/dist/plugin-sdk/msteams.cjs +1 -1
- package/dist/plugin-sdk/msteams.js +1 -1
- package/dist/plugin-sdk/nextcloud-talk.cjs +1 -1
- package/dist/plugin-sdk/nextcloud-talk.js +1 -1
- package/dist/plugin-sdk/{reply-0zCEbT4w.cjs → reply-BoWg-IXT.cjs} +7 -7
- package/dist/plugin-sdk/{reply-D-f2bbXy.js → reply-bS9U9BwG.js} +7 -7
- package/dist/plugin-sdk/{slash-dispatch.runtime-CNhhOTEP.js → slash-dispatch.runtime-4y3z-kPo.js} +1 -1
- package/dist/plugin-sdk/{slash-dispatch.runtime-B3b2L4iH.js → slash-dispatch.runtime-BRr9YGOs.js} +1 -1
- package/dist/plugin-sdk/{slash-dispatch.runtime-CPPp4KKH.cjs → slash-dispatch.runtime-BtdMVJQe.cjs} +1 -1
- package/dist/plugin-sdk/{slash-dispatch.runtime-Dw9M-fvv.js → slash-dispatch.runtime-C6iak1_0.js} +1 -1
- package/dist/plugin-sdk/{slash-dispatch.runtime-BoTYqNiv.js → slash-dispatch.runtime-CMx727dE.js} +1 -1
- package/dist/plugin-sdk/{slash-dispatch.runtime-CaWoVNJu.cjs → slash-dispatch.runtime-CXXaAMYa.cjs} +1 -1
- package/dist/plugin-sdk/{slash-dispatch.runtime-DbheDKxM.cjs → slash-dispatch.runtime-Cvom2Onl.cjs} +1 -1
- package/dist/plugin-sdk/{slash-dispatch.runtime-DpBWBF7J.js → slash-dispatch.runtime-D00kIROj.js} +1 -1
- package/dist/plugin-sdk/{slash-dispatch.runtime-DSQ2U0MM.cjs → slash-dispatch.runtime-DEu-D4XB.cjs} +1 -1
- package/dist/plugin-sdk/{slash-dispatch.runtime-Bu6Gwr3m.cjs → slash-dispatch.runtime-DG7_jQXD.cjs} +1 -1
- package/dist/plugin-sdk/{slash-dispatch.runtime-CCEMBSm2.cjs → slash-dispatch.runtime-DVP1q-_z.cjs} +1 -1
- package/dist/plugin-sdk/{slash-dispatch.runtime-Dm_cVnlq.js → slash-dispatch.runtime-U6qjtCfd.js} +1 -1
- package/dist/plugin-sdk/{subagent-registry-runtime-bVH8kl6Y.js → subagent-registry-runtime-BD_DkCmR.js} +1 -1
- package/dist/plugin-sdk/{subagent-registry-runtime-Der4fbZK.cjs → subagent-registry-runtime-BWiMCyG_.cjs} +1 -1
- package/dist/plugin-sdk/{subagent-registry-runtime-Pp_rfnk0.js → subagent-registry-runtime-C6vGkwe9.js} +1 -1
- package/dist/plugin-sdk/{subagent-registry-runtime-B0cZ_eaC.cjs → subagent-registry-runtime-CCcI3vhb.cjs} +1 -1
- package/dist/plugin-sdk/{subagent-registry-runtime-B-P4w-z9.js → subagent-registry-runtime-CDCU--WW.js} +1 -1
- package/dist/plugin-sdk/{subagent-registry-runtime-Ciev9m2W.cjs → subagent-registry-runtime-D98xiwmA.cjs} +1 -1
- package/dist/plugin-sdk/{subagent-registry-runtime-DBPvxiJW.cjs → subagent-registry-runtime-LebBdxD7.cjs} +1 -1
- package/dist/plugin-sdk/{subagent-registry-runtime-BfmeSbXD.cjs → subagent-registry-runtime-MfHdezNY.cjs} +1 -1
- package/dist/plugin-sdk/{subagent-registry-runtime-CL0sdx5J.cjs → subagent-registry-runtime-bMabqk9V.cjs} +1 -1
- package/dist/plugin-sdk/{subagent-registry-runtime-DH_Jx5hU.js → subagent-registry-runtime-h3qrqiJH.js} +1 -1
- package/dist/plugin-sdk/{subagent-registry-runtime-CEvE9keW.js → subagent-registry-runtime-tmI7JUke.js} +1 -1
- package/dist/plugin-sdk/{subagent-registry-runtime-Du8BhjzJ.js → subagent-registry-runtime-uC8wbfNS.js} +1 -1
- package/dist/plugin-sdk/{web-BdnQzLgF.js → web-9Os8v8Cu.js} +2 -2
- package/dist/plugin-sdk/{web-pcTha_l7.cjs → web-BQ9hOKe8.cjs} +2 -2
- package/dist/plugin-sdk/{web-C9T7tf6w.js → web-Bjk0MWu3.js} +2 -2
- package/dist/plugin-sdk/{web-_tj8xNZE.js → web-BsmnVZaX.js} +2 -2
- package/dist/plugin-sdk/{web-B2PwjHsu.cjs → web-CUbdclQS.cjs} +2 -2
- package/dist/plugin-sdk/{web-CcYBsmAj.cjs → web-C_Vx3mgY.cjs} +1 -1
- package/dist/plugin-sdk/{web-BZoOYDwf.js → web-Cdo1e0C7.js} +1 -1
- package/dist/plugin-sdk/{web-CODD4ksc.cjs → web-CfTkaUMk.cjs} +2 -2
- package/dist/plugin-sdk/{web-24o5tNe3.js → web-DkmdYSZ8.js} +1 -1
- package/dist/plugin-sdk/{web-B-QDcVRv.cjs → web-DpGXJ6SQ.cjs} +2 -2
- package/dist/plugin-sdk/{web-Czl9vNVv.cjs → web-DuF9udb6.cjs} +1 -1
- package/dist/plugin-sdk/{web-CkdCvvR-.js → web-Jr2J55LO.js} +2 -2
- package/dist/plugin-sdk/whatsapp.cjs +1 -1
- package/dist/plugin-sdk/whatsapp.js +1 -1
- package/dist/{plugins-cli-BiVMAr5T.js → plugins-cli-BzJeq-CW.js} +2 -2
- package/dist/{plugins-cli-BbjMbzJU.js → plugins-cli-o74CJV4A.js} +2 -2
- package/dist/{program-BrAZTwFr.js → program-CCS3CIqA.js} +3 -3
- package/dist/{program-context-B9ydtPje.js → program-context-lyPXjPfN.js} +2 -2
- package/dist/{prompt-select-styled-DIOWLjl0.js → prompt-select-styled-DmTwJKOO.js} +2 -2
- package/dist/{prompt-select-styled-BeJNbzSa.js → prompt-select-styled-Z30OVmpM.js} +2 -2
- package/dist/{provider-auth-helpers-pBVCjBj9.js → provider-auth-helpers-BzlcSA6U.js} +2 -2
- package/dist/{provider-auth-helpers-1lU43eTW.js → provider-auth-helpers-CDIiLD1m.js} +2 -2
- package/dist/{push-apns-BGUOmD5M.js → push-apns-CrAWstBo.js} +2 -2
- package/dist/{push-apns-B_a2MBJ4.js → push-apns-CrMV74Qs.js} +2 -2
- package/dist/{register.agent-CX78s_X9.js → register.agent-CisptTv_.js} +2 -2
- package/dist/{register.agent-DLDKQENq.js → register.agent-Dl2Ef-K5.js} +2 -2
- package/dist/{register.configure-BA5u9hT3.js → register.configure-CvPihXst.js} +2 -2
- package/dist/{register.configure-BhPtf3Qo.js → register.configure-D8bJJ16k.js} +2 -2
- package/dist/{register.maintenance-r_MzNK3-.js → register.maintenance-COWBeetm.js} +2 -2
- package/dist/{register.maintenance-BhsBepKS.js → register.maintenance-vhmmqtIi.js} +2 -2
- package/dist/{register.message-CTF--Z2a.js → register.message-3zVHQZ27.js} +2 -2
- package/dist/{register.message-jcZ875be.js → register.message-CM_Qudzn.js} +2 -2
- package/dist/{register.onboard-CNwnStUk.js → register.onboard-CJZKG0PP.js} +2 -2
- package/dist/{register.onboard-C3yL50_c.js → register.onboard-CaFl_mB1.js} +2 -2
- package/dist/{register.setup-BRJMzgfU.js → register.setup-CSW03BKj.js} +2 -2
- package/dist/{register.setup-BvsS-zgm.js → register.setup-DDkBFyvF.js} +2 -2
- package/dist/{register.status-health-sessions-Dqmkw820.js → register.status-health-sessions-BXiMraHZ.js} +2 -2
- package/dist/{register.status-health-sessions-DVc__2pc.js → register.status-health-sessions-Bo9VWxLG.js} +2 -2
- package/dist/{register.subclis-D-24j83X.js → register.subclis-B_0ZS-_K.js} +2 -2
- package/dist/{reply-l-Y47HP4.js → reply-CjyZeZ-j.js} +7 -7
- package/dist/{run-main-B_YBE_TN.js → run-main-CV49c7uu.js} +2 -2
- package/dist/{server-node-events-CFSY_-4t.js → server-node-events-BWiQg1NL.js} +2 -2
- package/dist/{server-node-events-ZFwmPwQ-.js → server-node-events-DicMyck-.js} +2 -2
- package/dist/{slash-dispatch.runtime-pdAIQrzR.js → slash-dispatch.runtime-CGgP5dBX.js} +1 -1
- package/dist/{slash-dispatch.runtime-CKWXmLO1.js → slash-dispatch.runtime-CknX8Fkv.js} +1 -1
- package/dist/{slash-dispatch.runtime-DIR5H2MY.js → slash-dispatch.runtime-CoKGpcpS.js} +1 -1
- package/dist/{slash-dispatch.runtime-14ABU-DD.js → slash-dispatch.runtime-pSpPe8qL.js} +1 -1
- package/dist/{status-DYqPF0rB.js → status-BoL8-JxA.js} +2 -2
- package/dist/{status-JIPeVrsc.js → status-DEAX-TLb.js} +2 -2
- package/dist/{subagent-registry-runtime-rPbwTnju.js → subagent-registry-runtime-2Nh6-7ym.js} +1 -1
- package/dist/{subagent-registry-runtime-DTVXQJOP.js → subagent-registry-runtime-CG_2Atu3.js} +1 -1
- package/dist/{subagent-registry-runtime-Cj4CKKl_.js → subagent-registry-runtime-Cc264UfD.js} +1 -1
- package/dist/{subagent-registry-runtime-8_ktZPZB.js → subagent-registry-runtime-CpYm78z3.js} +1 -1
- package/dist/{update-cli-YrBbmw4f.js → update-cli--P65ciut.js} +2 -2
- package/dist/{update-cli-BwBMOeP0.js → update-cli-Ibrshx_w.js} +2 -2
- package/dist/{update-runner-BvtyRBD2.js → update-runner-CvWH2ZAc.js} +2 -2
- package/dist/{update-runner-DYamgo1V.js → update-runner-mMbwEOlU.js} +2 -2
- package/dist/{web-DwcxsgH0.js → web-ARUUCMQo.js} +2 -2
- package/dist/{web-C15yQ-wI.js → web-C6jRFeYp.js} +1 -1
- package/dist/{web-C6So15hm.js → web-CDXYiCsB.js} +1 -1
- package/dist/{web-Cq3xWCaD.js → web-CiagxaWr.js} +2 -2
- package/node_modules/@aws-sdk/client-bedrock-runtime/package.json +42 -42
- package/node_modules/@aws-sdk/core/dist-cjs/index.js +17 -0
- package/node_modules/@aws-sdk/core/dist-cjs/submodules/client/index.js +17 -0
- package/node_modules/@aws-sdk/core/dist-es/submodules/client/index.js +1 -0
- package/node_modules/@aws-sdk/core/dist-es/submodules/client/longPollMiddleware.js +15 -0
- package/node_modules/@aws-sdk/core/package.json +11 -11
- package/node_modules/@aws-sdk/credential-provider-env/package.json +5 -5
- package/node_modules/@aws-sdk/credential-provider-http/package.json +10 -10
- package/node_modules/@aws-sdk/credential-provider-ini/package.json +14 -14
- package/node_modules/@aws-sdk/credential-provider-login/package.json +8 -8
- package/node_modules/@aws-sdk/credential-provider-node/package.json +12 -12
- package/node_modules/@aws-sdk/credential-provider-process/package.json +6 -6
- package/node_modules/@aws-sdk/credential-provider-sso/package.json +8 -8
- package/node_modules/@aws-sdk/credential-provider-web-identity/package.json +7 -7
- package/node_modules/@aws-sdk/eventstream-handler-node/package.json +4 -4
- package/node_modules/@aws-sdk/middleware-eventstream/package.json +4 -4
- package/node_modules/@aws-sdk/middleware-host-header/package.json +4 -4
- package/node_modules/@aws-sdk/middleware-logger/package.json +3 -3
- package/node_modules/@aws-sdk/middleware-recursion-detection/package.json +4 -4
- package/node_modules/@aws-sdk/middleware-user-agent/package.json +8 -8
- package/node_modules/@aws-sdk/middleware-websocket/package.json +9 -9
- package/node_modules/@aws-sdk/nested-clients/package.json +32 -32
- package/node_modules/@aws-sdk/region-config-resolver/package.json +5 -5
- package/node_modules/@aws-sdk/token-providers/package.json +7 -7
- package/node_modules/@aws-sdk/types/package.json +2 -2
- package/node_modules/@aws-sdk/util-endpoints/package.json +5 -5
- package/node_modules/@aws-sdk/util-format-url/package.json +4 -4
- package/node_modules/@aws-sdk/util-user-agent-browser/package.json +3 -3
- package/node_modules/@aws-sdk/util-user-agent-node/package.json +5 -5
- package/node_modules/@aws-sdk/xml-builder/package.json +2 -2
- package/node_modules/@whiskeysockets/baileys/node_modules/p-queue/dist/index.js +1 -0
- package/node_modules/@whiskeysockets/baileys/node_modules/p-queue/package.json +1 -1
- package/node_modules/content-disposition/index.js +118 -40
- package/node_modules/content-disposition/package.json +8 -11
- package/node_modules/path-expression-matcher/lib/pem.cjs +1 -1
- package/node_modules/path-expression-matcher/lib/pem.d.cts +18 -0
- package/node_modules/path-expression-matcher/lib/pem.min.js +1 -1
- package/node_modules/path-expression-matcher/package.json +1 -1
- package/node_modules/path-expression-matcher/src/Expression.js +2 -2
- package/node_modules/path-expression-matcher/src/ExpressionSet.js +24 -4
- package/package.json +1 -1
- package/preset-config.json +1 -1
- package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/LICENSE +0 -201
- package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/README.md +0 -62
- package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-cjs/index.js +0 -157
- package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/constants.js +0 -2
- package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/fromEnvSigningName.js +0 -16
- package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/fromSso.js +0 -81
- package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/fromStatic.js +0 -8
- package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/getNewSsoOidcToken.js +0 -11
- package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/getSsoOidcClient.js +0 -10
- package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/index.js +0 -4
- package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/nodeProvider.js +0 -5
- package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/validateTokenExpiry.js +0 -7
- package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/validateTokenKey.js +0 -7
- package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/dist-es/writeSSOTokenToFile.js +0 -8
- package/node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers/package.json +0 -70
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{B as e,C as t,D as n,E as r,H as i,J as a,K as o,O as s,R as c,T as l,U as u,W as d,X as f,Y as p,_ as m,a as h,b as g,c as _,d as v,f as y,g as b,h as x,i as S,k as C,l as ee,m as te,p as ne,s as re,t as w,u as T,v as ie,w as ae,x as oe,y as E,z as se}from"./dispatch-
|
|
1
|
+
import{B as e,C as t,D as n,E as r,H as i,J as a,K as o,O as s,R as c,T as l,U as u,W as d,X as f,Y as p,_ as m,a as h,b as g,c as _,d as v,f as y,g as b,h as x,i as S,k as C,l as ee,m as te,p as ne,s as re,t as w,u as T,v as ie,w as ae,x as oe,y as E,z as se}from"./dispatch-Df8B7owq.js";import{Dt as D,Et as O,Mt as k,kt as A,s as j}from"./paths-Do0djuaj.js";import{At as M,Ca as N,Gn as ce,Hn as P,Kn as le,Mt as ue,Ot as F,Un as de,Wn as fe,Xs as pe,Yn as I,Zn as me,ii as he,mr as ge,pr as L,tr as R,yr as z}from"./model-auth-CycDtQl-.js";import{B,C as V,K as H,M as _e,O as ve,R as U,T as W,h as G,m as K,o as ye,p as be,v as xe}from"./logger-DJGHvDbX.js";import"./paths-CtrEseGU.js";import"./proxy-env-MEjSyzTr.js";import"./github-copilot-token-vKAKX6iE.js";import"./send-CmO9z2-b.js";import{Mt as Se,Nt as Ce,jt as we}from"./send-CicLiXB4.js";import{J as Te,Y as Ee,tt as De}from"./send-XMOZsJcs.js";import"./deliver-D1P0FNTu.js";import"./diagnostic-Efe4b81B.js";import"./pi-model-discovery-Dqq9Vm8o.js";import{f as Oe}from"./audio-transcription-runner-B54MyF1_.js";import"./image-B6HEHWlJ.js";import"./fetch-guard-_fifU0fX.js";import"./api-key-rotation-CXY0AyM1.js";import{t as ke}from"./local-roots-D0yN794S.js";import"./proxy-fetch-DXt2R_Z5.js";import"./tokens-BqABmXSe.js";import"./commands-registry-Cnr6PvIw.js";import"./fetch-BtZY623f.js";import{a as Ae,d as je,h as Me,m as Ne,s as Pe}from"./ir-Dgc6qZMX.js";import"./render-DhTJXP1U.js";import"./target-errors-BZRN-lPd.js";import{n as Fe}from"./channel-activity-CmYpOPAn.js";import{t as Ie}from"./tables-BlNIkMV8.js";import"./send-Bq787fi_.js";import"./fetch-7Iq9POda.js";import"./skill-commands-Ny38ZFIC.js";import"./outbound-attachment-CftilZWd.js";import"./send-GuISe9C82.js";import{r as Le}from"./active-listener-gRRIfN1q.js";import"./query-expansion-CAboqtWr.js";import"./manager-CGHd5p2T.js";import{i as Re,r as ze,t as Be}from"./outbound-CzsdW5sy.js";import{i as Ve,n as q,r as He,t as Ue}from"./session-B2oURX5K.js";import{t as We}from"./login-jQwwt6C-.js";import{randomUUID as Ge}from"node:crypto";import{DisconnectReason as Ke,downloadMediaMessage as qe,extractMessageContent as Je,getContentType as Ye,isJidGroup as Xe,normalizeMessageContent as Ze}from"@whiskeysockets/baileys";const Qe={initialMs:2e3,maxMs:3e4,factor:1.8,jitter:.25,maxAttempts:12};function $e(e,t){let n=t??e.web?.heartbeatSeconds;return typeof n==`number`&&n>0?n:60}function et(e,t){let n=e.web?.reconnect??{},r=t??{},i={...Qe,...n,...r};return i.initialMs=Math.max(250,i.initialMs),i.maxMs=Math.max(i.initialMs,i.maxMs),i.factor=ye(i.factor,1.1,10),i.jitter=ye(i.jitter,0,1),i.maxAttempts=Math.max(0,Math.floor(i.maxAttempts)),i}function J(){return Ge()}const Y=ve(`gateway/channels/whatsapp`),X=Y.child(`inbound`),Z=Y.child(`outbound`),tt=Y.child(`heartbeat`);function nt(){return setInterval(()=>{},1e6).unref(),new Promise(()=>{})}const rt=c({ttlMs:20*6e4,maxSize:5e3});function it(e){return rt.check(e)}const at=new Set([`FN`,`N`,`TEL`]);function ot(e){if(!e)return{phones:[]};let t=e.split(/\r?\n/),n,r,i=[];for(let e of t){let t=e.trim();if(!t)continue;let a=t.indexOf(`:`);if(a===-1)continue;let o=t.slice(0,a).toUpperCase(),s=t.slice(a+1).trim();if(!s)continue;let c=st(o);if(!c||!at.has(c))continue;let l=ct(s);if(l){if(c===`FN`&&!r){r=lt(l);continue}if(c===`N`&&!n){n=lt(l);continue}if(c===`TEL`){let e=ut(l);e&&i.push(e)}}}return{name:r??n,phones:i}}function st(e){let[t]=e.split(`;`);if(!t)return;let n=t.split(`.`);return n[n.length-1]||void 0}function ct(e){return e.replace(/\\n/gi,` `).replace(/\\,/g,`,`).replace(/\\;/g,`;`).trim()}function lt(e){return e.replace(/;/g,` `).replace(/\s+/g,` `).trim()}function ut(e){let t=e.trim();return t?t.toLowerCase().startsWith(`tel:`)?t.slice(4).trim():t:``}function Q(e){return Ze(e)}function dt(e){if(!e)return;let t=Ye(e),n=t?e[t]:void 0,r=n&&typeof n==`object`&&`contextInfo`in n?n.contextInfo:void 0;if(r)return r;let i=e.extendedTextMessage?.contextInfo??e.imageMessage?.contextInfo??e.videoMessage?.contextInfo??e.documentMessage?.contextInfo??e.audioMessage?.contextInfo??e.stickerMessage?.contextInfo??e.buttonsResponseMessage?.contextInfo??e.listResponseMessage?.contextInfo??e.templateButtonReplyMessage?.contextInfo??e.interactiveResponseMessage?.contextInfo??e.buttonsMessage?.contextInfo??e.listMessage?.contextInfo;if(i)return i;for(let t of Object.values(e)){if(!t||typeof t!=`object`||!(`contextInfo`in t))continue;let e=t.contextInfo;if(e)return e}}function ft(e){let t=Q(e);if(!t)return;let n=[t.extendedTextMessage?.contextInfo?.mentionedJid,t.extendedTextMessage?.contextInfo?.quotedMessage?.extendedTextMessage?.contextInfo?.mentionedJid,t.imageMessage?.contextInfo?.mentionedJid,t.videoMessage?.contextInfo?.mentionedJid,t.documentMessage?.contextInfo?.mentionedJid,t.audioMessage?.contextInfo?.mentionedJid,t.stickerMessage?.contextInfo?.mentionedJid,t.buttonsResponseMessage?.contextInfo?.mentionedJid,t.listResponseMessage?.contextInfo?.mentionedJid].flatMap(e=>e??[]).filter(Boolean);if(n.length!==0)return Array.from(new Set(n))}function pt(e){let t=Q(e);if(!t)return;let n=Je(t),r=[t,n&&n!==t?n:void 0];for(let e of r){if(!e)continue;if(typeof e.conversation==`string`&&e.conversation.trim())return e.conversation.trim();let t=e.extendedTextMessage?.text;if(t?.trim())return t.trim();let n=e.imageMessage?.caption??e.videoMessage?.caption??e.documentMessage?.caption;if(n?.trim())return n.trim()}let i=ht(t)??(n&&n!==t?ht(n):void 0);if(i)return i}function mt(e){let t=Q(e);if(t){if(t.imageMessage)return`<media:image>`;if(t.videoMessage)return`<media:video>`;if(t.audioMessage)return`<media:audio>`;if(t.documentMessage)return`<media:document>`;if(t.stickerMessage)return`<media:sticker>`}}function ht(e){let t=Q(e);if(!t)return;let n=t.contactMessage??void 0;if(n){let{name:e,phones:t}=gt({displayName:n.displayName,vcard:n.vcard});return _t(e,t)}let r=t.contactsArrayMessage?.contacts??void 0;if(!(!r||r.length===0))return vt(r.map(e=>gt({displayName:e.displayName,vcard:e.vcard})).map(e=>yt(e.name,e.phones)).filter(e=>!!e),r.length)}function gt(e){let t=(e.displayName??``).trim(),n=ot(e.vcard??void 0);return{name:t||n.name,phones:n.phones}}function _t(e,t){let n=yt(e,t);return n?`<contact: ${n}>`:`<contact>`}function vt(e,t){let n=e.map(e=>e.trim()).filter(Boolean);if(n.length===0)return`<contacts: ${t} ${t===1?`contact`:`contacts`}>`;let r=Math.max(t-n.length,0),i=r>0?` +${r} more`:``;return`<contacts: ${n.join(`, `)}${i}>`}function yt(e,t){let n=[e,bt(t)].filter(e=>!!e);if(n.length!==0)return n.join(`, `)}function bt(e){let t=e?.map(e=>e.trim()).filter(Boolean)??[];if(t.length===0)return;let{shown:n,remaining:r}=xt(t,t.length,1),[i]=n;if(i)return r===0?i:`${i} (+${r} more)`}function xt(e,t,n){let r=e.slice(0,n);return{shown:r,remaining:Math.max(t-r.length,0)}}function St(e){let t=Q(e);if(!t)return null;let n=t.liveLocationMessage??void 0;if(n){let e=n.degreesLatitude,t=n.degreesLongitude;if(e!=null&&t!=null){let r=Number(e),i=Number(t);if(Number.isFinite(r)&&Number.isFinite(i))return{latitude:r,longitude:i,accuracy:n.accuracyInMeters??void 0,caption:n.caption??void 0,source:`live`,isLive:!0}}}let r=t.locationMessage??void 0;if(r){let e=r.degreesLatitude,t=r.degreesLongitude;if(e!=null&&t!=null){let n=Number(e),i=Number(t);if(Number.isFinite(n)&&Number.isFinite(i)){let e=!!r.isLive;return{latitude:n,longitude:i,accuracy:r.accuracyInMeters??void 0,name:r.name??void 0,address:r.address??void 0,caption:r.comment??void 0,source:e?`live`:r.name||r.address?`place`:`pin`,isLive:e}}}}return null}function Ct(e){let t=Q(e);if(!t)return null;let n=dt(t),r=Ze(n?.quotedMessage);if(!r)return null;let i=St(r),a=i?Te(i):void 0,o=[pt(r),a].filter(Boolean).join(`
|
|
2
2
|
`).trim();if(o||=mt(r),!o){let e=r?Ye(r):void 0;return U(`Quoted message missing extractable body${e?` (type ${e})`:``}`),null}let s=n?.participant??void 0,c=s?K(s)??s:void 0,l=c??`unknown sender`;return{id:n?.stanzaId?String(n.stanzaId):void 0,body:o,sender:l,senderJid:s,senderE164:c}}function wt(e){return Se({providerConfigPresent:e.providerConfigPresent,groupPolicy:e.groupPolicy,defaultGroupPolicy:e.defaultGroupPolicy})}async function Tt(t){let n=N(),r=P({cfg:n,accountId:t.accountId}),a=r.dmPolicy??`pairing`,o=r.allowFrom??[],s=await i({provider:`whatsapp`,accountId:r.accountId,dmPolicy:a}),c=o.length===0&&t.selfE164?[t.selfE164]:[],l=o.length>0?o:c,u=r.groupAllowFrom??(o.length>0?o:void 0),f=t.from===t.selfE164,p=r.selfChatMode??be(t.selfE164,o),m=typeof t.pairingGraceMs==`number`&&t.pairingGraceMs>0?t.pairingGraceMs:3e4,h=typeof t.connectedAtMs==`number`&&typeof t.messageTimestampMs==`number`&&t.messageTimestampMs<t.connectedAtMs-m,g=we(n),{groupPolicy:_,providerMissingFallbackApplied:v}=wt({providerConfigPresent:n.channels?.whatsapp!==void 0,groupPolicy:r.groupPolicy,defaultGroupPolicy:g});Ce({providerMissingFallbackApplied:v,providerKey:`whatsapp`,accountId:r.accountId,log:e=>U(e)});let y=G(t.from),b=typeof t.senderE164==`string`?G(t.senderE164):null,x=d({isGroup:t.group,dmPolicy:a,groupPolicy:_,allowFrom:t.group?o:l,groupAllowFrom:u,storeAllowFrom:s,isSenderAllowed:e=>{if(e.includes(`*`))return!0;let n=new Set(e.map(e=>G(String(e))).filter(e=>!!e));return!t.group&&f?!0:t.group?!!(b&&n.has(b)):n.has(y)}});if(t.group&&x.decision!==`allow`)return x.reason===`groupPolicy=disabled`?U(`Blocked group message (groupPolicy: disabled)`):x.reason===`groupPolicy=allowlist (empty allowlist)`?U(`Blocked group message (groupPolicy: allowlist, no groupAllowFrom)`):U(`Blocked group message from ${t.senderE164??`unknown sender`} (groupPolicy: allowlist)`),{allowed:!1,shouldMarkRead:!1,isSelfChat:p,resolvedAccountId:r.accountId};if(!t.group){if(t.isFromMe&&!f)return U(`Skipping outbound DM (fromMe); no pairing reply needed.`),{allowed:!1,shouldMarkRead:!1,isSelfChat:p,resolvedAccountId:r.accountId};if(x.decision===`block`&&x.reason===`dmPolicy=disabled`)return U(`Blocked dm (dmPolicy: disabled)`),{allowed:!1,shouldMarkRead:!1,isSelfChat:p,resolvedAccountId:r.accountId};if(x.decision===`pairing`&&!f){let n=t.from;return h?U(`Skipping pairing reply for historical DM from ${n}.`):await e({channel:`whatsapp`,senderId:n,senderIdLine:`Your WhatsApp phone number: ${n}`,meta:{name:(t.pushName??``).trim()||void 0},upsertPairingRequest:async({id:e,meta:t})=>await De({channel:`whatsapp`,id:e,accountId:r.accountId,meta:t}),onCreated:()=>{U(`whatsapp pairing request sender=${n} name=${t.pushName??`unknown`}`)},sendPairingReply:async e=>{await t.sock.sendMessage(t.remoteJid,{text:e})},onReplyError:e=>{U(`whatsapp pairing reply failed for ${n}: ${String(e)}`)}}),{allowed:!1,shouldMarkRead:!1,isSelfChat:p,resolvedAccountId:r.accountId}}if(x.decision!==`allow`)return U(`Blocked unauthorized sender ${t.from} (dmPolicy=${a})`),{allowed:!1,shouldMarkRead:!1,isSelfChat:p,resolvedAccountId:r.accountId}}return{allowed:!0,shouldMarkRead:!0,isSelfChat:p,resolvedAccountId:r.accountId}}function Et(e){return Ze(e)}function Dt(e){let t=e.imageMessage?.mimetype??e.videoMessage?.mimetype??e.documentMessage?.mimetype??e.audioMessage?.mimetype??e.stickerMessage?.mimetype??void 0;if(t)return t;if(e.audioMessage)return`audio/ogg; codecs=opus`;if(e.imageMessage)return`image/jpeg`;if(e.videoMessage)return`video/mp4`;if(e.stickerMessage)return`image/webp`}async function Ot(e,t){let n=Et(e.message);if(!n)return;let r=Dt(n),i=n.documentMessage?.fileName??void 0;if(!(!n.imageMessage&&!n.videoMessage&&!n.documentMessage&&!n.audioMessage&&!n.stickerMessage))try{return{buffer:await qe(e,`buffer`,{},{reuploadRequest:t.updateMediaMessage,logger:t.logger}),mimetype:r,fileName:i}}catch(e){U(`downloadMediaMessage failed: ${String(e)}`);return}}function kt(e){Fe({channel:`whatsapp`,accountId:e,direction:`outbound`})}function At(e){return typeof e==`object`&&e&&`key`in e?String(e.key?.id??`unknown`):`unknown`}function jt(e){return{sendMessage:async(t,n,r,i,a)=>{let o=W(t),s;if(r&&i)if(i.startsWith(`image/`))s={image:r,caption:n||void 0,mimetype:i};else if(i.startsWith(`audio/`))s={audio:r,ptt:!0,mimetype:i};else if(i.startsWith(`video/`)){let e=a?.gifPlayback;s={video:r,caption:n||void 0,mimetype:i,...e?{gifPlayback:!0}:{}}}else s={document:r,fileName:a?.fileName?.trim()||`file`,caption:n||void 0,mimetype:i};else s={text:n};let c=await e.sock.sendMessage(o,s);return kt(a?.accountId??e.defaultAccountId),{messageId:At(c)}},sendPoll:async(t,n)=>{let r=W(t),i=await e.sock.sendMessage(r,{poll:{name:n.question,values:n.options,selectableCount:n.maxSelections??1}});return kt(e.defaultAccountId),{messageId:At(i)}},sendReaction:async(t,n,r,i,a)=>{let o=W(t);await e.sock.sendMessage(o,{react:{text:r,key:{remoteJid:o,id:n,fromMe:i,participant:a?W(a):void 0}}})},sendComposingTo:async t=>{let n=W(t);await e.sock.sendPresenceUpdate(`composing`,n)}}}async function Mt(e){let n=H({module:`web-inbound`}),r=ve(`gateway/channels/whatsapp`).child(`inbound`),i=await Ue(!1,e.verbose,{authDir:e.authDir});await Ve(i);let a=Date.now(),o=null,s=new Promise(e=>{o=e}),c=e=>{if(!o)return;let t=o;o=null,t(e)};try{await i.sendPresenceUpdate(`available`),B()&&U(`Sent global 'available' presence on connect`)}catch(e){U(`Failed to send 'available' presence on connect: ${String(e)}`)}let l=i.user?.id,u=l?K(l):null,d=t({debounceMs:e.debounceMs??0,buildKey:e=>{let t=e.chatType===`group`?e.senderJid??e.senderE164??e.senderName??e.from:e.from;if(!t)return null;let n=e.chatType===`group`?e.chatId:e.from;return`${e.accountId}:${n}:${t}`},shouldDebounce:e.shouldDebounce,onFlush:async t=>{let n=t.at(-1);if(!n)return;if(t.length===1){await e.onMessage(n);return}let r=new Set;for(let e of t)for(let t of e.mentionedJids??[])r.add(t);let i=t.map(e=>e.body).filter(Boolean).join(`
|
|
3
3
|
`),a={...n,body:i,mentionedJids:r.size>0?Array.from(r):void 0};await e.onMessage(a)},onError:e=>{n.error({error:String(e)},`failed handling inbound web message`),r.error(`Failed handling inbound web message: ${String(e)}`)}}),f=new Map,p=300*1e3,m=i.signalRepository?.lidMapping,h=async t=>xe(t,{authDir:e.authDir,lidLookup:m}),g=async e=>{let t=f.get(e);if(t&&t.expires>Date.now())return t;try{let t=await i.groupMetadata(e),n=(await Promise.all(t.participants?.map(async e=>await h(e.id)??e.id)??[])).filter(Boolean)??[],r={subject:t.subject,participants:n,expires:Date.now()+p};return f.set(e,r),r}catch(t){return U(`Failed to fetch group metadata for ${e}: ${String(t)}`),{expires:Date.now()+p}}},_=async t=>{let n=t.key?.id??void 0,r=t.key?.remoteJid;if(!r||r.endsWith(`@status`)||r.endsWith(`@broadcast`))return null;let o=Xe(r)===!0;if(n&&it(`${e.accountId}:${r}:${n}`))return null;let s=t.key?.participant??void 0,c=o?r:await h(r);if(!c)return null;let l=o?s?await h(s):null:c,d,f;if(o){let e=await g(r);d=e.subject,f=e.participants}let p=t.messageTimestamp?Number(t.messageTimestamp)*1e3:void 0,m=await Tt({accountId:e.accountId,from:c,selfE164:u,senderE164:l,group:o,pushName:t.pushName??void 0,isFromMe:!!t.key?.fromMe,messageTimestampMs:p,connectedAtMs:a,sock:{sendMessage:(e,t)=>i.sendMessage(e,t)},remoteJid:r});return m.allowed?{id:n,remoteJid:r,group:o,participantJid:s,from:c,senderE164:l,groupSubject:d,groupParticipants:f,messageTimestampMs:p,access:m}:null},v=async t=>{let{id:n,remoteJid:r,participantJid:a,access:o}=t;if(n&&!o.isSelfChat&&e.sendReadReceipts!==!1)try{await i.readMessages([{remoteJid:r,id:n,participant:a,fromMe:!1}]),B()&&U(`Marked message ${n} as read for ${r}${a?` (participant ${a})`:``}`)}catch(e){U(`Failed to mark message ${n} read: ${String(e)}`)}else n&&o.isSelfChat&&B()&&U(`Self-chat mode: skipping read receipt for ${n}`)},y=async t=>{let n=St(t.message??void 0),r=n?Te(n):void 0,a=pt(t.message??void 0);if(r&&(a=[a,r].filter(Boolean).join(`
|
|
4
4
|
`).trim()),!a&&(a=mt(t.message??void 0),!a))return null;let o=Ct(t.message),s,c,l;try{let n=await Ot(t,i);if(n){let t=(typeof e.mediaMaxMb==`number`&&e.mediaMaxMb>0?e.mediaMaxMb:50)*1024*1024;s=(await he(n.buffer,n.mimetype,`inbound`,t,n.fileName)).path,c=n.mimetype,l=n.fileName}}catch(e){U(`Inbound media download failed: ${String(e)}`)}return{body:a,location:n??void 0,replyContext:o,mediaPath:s,mediaType:c,mediaFileName:l}},b=async(e,t,a)=>{let o=t.remoteJid,s=async()=>{try{await i.sendPresenceUpdate(`composing`,o)}catch(e){U(`Presence update failed: ${String(e)}`)}},c=async e=>{await i.sendMessage(o,{text:e})},f=async e=>{await i.sendMessage(o,e)},p=t.messageTimestampMs,m=ft(e.message),h=e.pushName??void 0;n.info({from:t.from,to:u??`me`,body:a.body,mediaPath:a.mediaPath,mediaType:a.mediaType,mediaFileName:a.mediaFileName,timestamp:p},`inbound message`);let g={id:t.id,from:t.from,conversationId:t.from,to:u??`me`,accountId:t.access.resolvedAccountId,body:a.body,pushName:h,timestamp:p,chatType:t.group?`group`:`direct`,chatId:t.remoteJid,senderJid:t.participantJid,senderE164:t.senderE164??void 0,senderName:h,replyToId:a.replyContext?.id,replyToBody:a.replyContext?.body,replyToSender:a.replyContext?.sender,replyToSenderJid:a.replyContext?.senderJid,replyToSenderE164:a.replyContext?.senderE164,groupSubject:t.groupSubject,groupParticipants:t.groupParticipants,mentionedJids:m??void 0,selfJid:l,selfE164:u,fromMe:!!e.key?.fromMe,location:a.location??void 0,sendComposing:s,reply:c,sendMedia:f,mediaPath:a.mediaPath,mediaType:a.mediaType,mediaFileName:a.mediaFileName};try{Promise.resolve(d.enqueue(g)).catch(e=>{n.error({error:String(e)},`failed handling inbound web message`),r.error(`Failed handling inbound web message: ${String(e)}`)})}catch(e){n.error({error:String(e)},`failed handling inbound web message`),r.error(`Failed handling inbound web message: ${String(e)}`)}},x=async t=>{if(!(t.type!==`notify`&&t.type!==`append`))for(let n of t.messages??[]){Fe({channel:`whatsapp`,accountId:e.accountId,direction:`inbound`});let r=await _(n);if(!r||(await v(r),t.type===`append`))continue;let i=await y(n);i&&await b(n,r,i)}};i.ev.on(`messages.upsert`,x);let S=e=>{try{if(e.connection===`close`){let t=He(e.lastDisconnect?.error);c({status:t,isLoggedOut:t===Ke.loggedOut,error:e.lastDisconnect?.error})}}catch(e){n.error({error:String(e)},`connection.update handler error`),c({status:void 0,isLoggedOut:!1,error:e})}};return i.ev.on(`connection.update`,S),{close:async()=>{try{let e=i.ev,t=x,n=S;typeof e.off==`function`?(e.off(`messages.upsert`,t),e.off(`connection.update`,n)):typeof e.removeListener==`function`&&(e.removeListener(`messages.upsert`,t),e.removeListener(`connection.update`,n)),i.ws?.close()}catch(e){U(`Socket close failed: ${String(e)}`)}},onClose:s,signalClose:e=>{c(e??{status:void 0,isLoggedOut:!1,error:`closed`})},...jt({sock:{sendMessage:(e,t)=>i.sendMessage(e,t),sendPresenceUpdate:(e,t)=>i.sendPresenceUpdate(e,t)},defaultAccountId:e.accountId})}}function Nt(e,t){return{mentionRegexes:s(e,t),allowFrom:e.channels?.whatsapp?.allowFrom}}function Pt(e,t){let n=t?{authDir:t}:void 0;return{normalizedMentions:e.mentionedJids?.length?e.mentionedJids.map(e=>K(e,n)??e).filter(Boolean):[],selfE164:e.selfE164??(e.selfJid?K(e.selfJid,n):null),selfJid:e.selfJid?e.selfJid.replace(/:\\d+/,``):null}}function Ft(e,t,n){let r=e=>C(e),i=be(n.selfE164,t.allowFrom);if((e.mentionedJids?.length??0)>0&&!i)return!!(n.selfE164&&n.normalizedMentions.includes(n.selfE164)||n.selfJid&&n.normalizedMentions.includes(n.selfJid));let a=r(e.body);if(t.mentionRegexes.some(e=>e.test(a)))return!0;if(n.selfE164){let t=n.selfE164.replace(/\D/g,``);if(t){if(a.replace(/[^\d]/g,``).includes(t))return!0;let n=e.body.replace(/[\s-]/g,``);if(RegExp(`\\+?${t}`,`i`).test(n))return!0}}return!1}function It(e,t,n){let r=Pt(e,n);return{wasMentioned:Ft(e,t,r),details:{from:e.from,body:e.body,bodyClean:C(e.body),mentionedJids:e.mentionedJids??null,normalizedMentionedJids:r.normalizedMentions.length?r.normalizedMentions:null,selfJid:e.selfJid??null,selfJidBare:r.selfJid,selfE164:e.selfE164??null,resolvedSelfE164:r.selfE164}}}function Lt(e,t){let n=e.allowFrom;return(Array.isArray(n)&&n.length>0?n:t?[t]:[]).filter(e=>!!(e&&e!==`*`)).map(e=>G(e)).filter(e=>!!e)}function Rt(e){let t=new Set,n=Math.max(1,e.maxItems??100),r=e=>`combined:${e.sessionKey}:${e.combinedBody}`,i=()=>{for(;t.size>n;){let e=t.values().next().value;if(!e)break;t.delete(e)}};return{rememberText:(n,a)=>{n&&(t.add(n),a.combinedBody&&a.combinedBodySessionKey&&t.add(r({sessionKey:a.combinedBodySessionKey,combinedBody:a.combinedBody})),a.logVerboseMessage&&e.logVerbose?.(`Added to echo detection set (size now: ${t.size}): ${n.substring(0,50)}...`),i())},has:e=>t.has(e),forget:e=>{t.delete(e)},buildCombinedKey:r}}function zt(e){let t=te({agentId:e.agentId,channel:`whatsapp`,accountId:e.route.accountId,peer:{kind:e.msg.chatType===`group`?`group`:`direct`,id:e.peerId},dmScope:e.cfg.session?.dmScope,identityLinks:e.cfg.session?.identityLinks}),n=D({agentId:e.agentId,mainKey:O});return{sessionKey:t,mainSessionKey:n,lastRoutePolicy:x({sessionKey:t,mainSessionKey:n})}}async function Bt(e){let t=e.cfg.broadcast?.[e.peerId];if(!t||!Array.isArray(t)||t.length===0)return!1;let n=e.cfg.broadcast?.strategy||`parallel`;X.info(`Broadcasting message to ${t.length} agents (${n})`);let r=e.cfg.agents?.list?.map(e=>k(e.id)),i=(r?.length??0)>0,a=e.msg.chatType===`group`?e.groupHistories.get(e.groupHistoryKey)??[]:void 0,o=async t=>{let n=k(t);if(i&&!r?.includes(n))return X.warn(`Broadcast agent ${t} not found in agents.list; skipping`),!1;let o=zt({cfg:e.cfg,msg:e.msg,route:e.route,peerId:e.peerId,agentId:n}),s={...e.route,agentId:n,...o};try{return await e.processMessage(e.msg,s,e.groupHistoryKey,{groupHistory:a,suppressGroupHistoryClear:!0})}catch(e){return X.error(`Broadcast agent ${t} failed: ${q(e)}`),!1}};if(n===`sequential`)for(let e of t)await o(e);else await Promise.allSettled(t.map(o));return e.msg.chatType===`group`&&e.groupHistories.set(e.groupHistoryKey,[]),!0}function Vt(e,t,n){let r=e;for(let e of t)r=r.replace(e,` `);if(n){let e=n.replace(/\D/g,``);if(e){let t=RegExp(`\\+?${e}`,`g`);r=r.replace(t,` `)}}return r.replace(/\s+/g,` `).trim()}function Ht(e,t){let n=z({From:t,ChatType:`group`,Provider:`whatsapp`})?.id,r=e.channels?.whatsapp,i=!!(r?.groupAllowFrom?.length||r?.allowFrom?.length);return L({cfg:e,channel:`whatsapp`,groupId:n??t,hasGroupAllowFrom:i})}function Ut(e,t){let n=z({From:t,ChatType:`group`,Provider:`whatsapp`})?.id;return ge({cfg:e,channel:`whatsapp`,groupId:n??t})}function Wt(e){let t=F(j(e.cfg.session?.store,{agentId:e.agentId}))[e.sessionKey],n=Ut(e.cfg,e.conversationId)?`mention`:`always`;return S(t?.groupActivation)??n}function Gt(e,t,n){for(let r of e){let e=G(r)??r;!e||t.has(e)||(t.add(e),n.push(e))}}function Kt(e,t,n,r){if(!n||!r)return;let i=G(n)??n;if(!i)return;let a=e.get(t);a||(a=new Map,e.set(t,a)),a.set(i,r)}function qt(e){let{participants:t,roster:n,fallbackE164:r}=e,i=new Set,a=[];if(t?.length&&Gt(t,i,a),n&&Gt(n.keys(),i,a),a.length===0&&r){let e=G(r)??r;e&&a.push(e)}if(a.length!==0)return a.map(e=>{let t=n?.get(e);return t?`${t} (${e})`:e}).join(`, `)}function Jt(e,t){let n=G(t.senderE164??``);return n?Lt(e,t.selfE164??void 0).includes(n):!1}function Yt(e){let t=e.msg.senderName&&e.msg.senderE164?`${e.msg.senderName} (${e.msg.senderE164})`:e.msg.senderName??e.msg.senderE164??`Unknown`;ne({historyMap:e.groupHistories,historyKey:e.groupHistoryKey,limit:e.groupHistoryLimit,entry:{sender:t,body:e.msg.body,timestamp:e.msg.timestamp,id:e.msg.id,senderJid:e.msg.senderJid}})}function Xt(e,t){return e.logVerbose(t),Yt({msg:e.msg,groupHistories:e.groupHistories,groupHistoryKey:e.groupHistoryKey,groupHistoryLimit:e.groupHistoryLimit}),{shouldProcess:!1}}function Zt(e){let t=Ht(e.cfg,e.conversationId);if(t.allowlistEnabled&&!t.allowed)return e.logVerbose(`Skipping group message ${e.conversationId} (not in allowlist)`),{shouldProcess:!1};Kt(e.groupMemberNames,e.groupHistoryKey,e.msg.senderE164,e.msg.senderName);let n=Nt(e.cfg,e.agentId),i=Vt(e.msg.body,n.mentionRegexes,e.msg.selfE164),a=h(i),o=Jt(e.baseMentionConfig,e.msg),s=o&&r(i,e.cfg);if(a.hasCommand&&!o)return Xt(e,`Ignoring /activation from non-owner in group ${e.conversationId}`);let c=It(e.msg,n,e.authDir);e.replyLogger.debug({conversationId:e.conversationId,wasMentioned:c.wasMentioned,...c.details},`group mention debug`);let l=c.wasMentioned,u=Wt({cfg:e.cfg,agentId:e.agentId,sessionKey:e.sessionKey,conversationId:e.conversationId})!==`always`,d=e.msg.selfJid?.replace(/:\\d+/,``),f=e.msg.replyToSenderJid?.replace(/:\\d+/,``),p=e.msg.selfE164?G(e.msg.selfE164):null,m=e.msg.replyToSenderE164?G(e.msg.replyToSenderE164):null,g=v({requireMention:u,canDetectMention:!0,wasMentioned:l,implicitMention:!!(d&&f&&d===f||p&&m&&p===m),shouldBypassMention:s});return e.msg.wasMentioned=g.effectiveWasMentioned,!s&&u&&g.shouldSkip?Xt(e,`Group message stored for context (no mention detected) in ${e.conversationId}: ${e.msg.body}`):{shouldProcess:!0}}function Qt(e,t){e.add(t),t.finally(()=>{e.delete(t)})}function $t(e){let t=j(e.cfg.session?.store,{agentId:e.storeAgentId}),n=ue({storePath:t,sessionKey:e.sessionKey,deliveryContext:{channel:e.channel,to:e.to,accountId:e.accountId},ctx:e.ctx}).catch(n=>{e.warn({error:q(n),storePath:t,sessionKey:e.sessionKey,to:e.to},`failed updating last route`)});Qt(e.backgroundTasks,n)}function en(e){return e.chatType===`group`?e.conversationId??e.from:e.senderE164?G(e.senderE164)??e.senderE164:e.from.includes(`@`)?K(e.from)??e.from:G(e.from)??e.from}function $(e,t=400){return!e||e.length<=t?e:`${e.slice(0,t)}… (truncated ${e.length-t} chars)`}function tn(e){let t=(e instanceof Error?`${e.message}\n${e.stack??``}`:(e=>{if(e==null)return``;if(typeof e==`string`)return e;if(e instanceof Error)return`${e.message}\n${e.stack??``}`;if(typeof e==`object`)try{return JSON.stringify(e)}catch{return Object.prototype.toString.call(e)}return typeof e==`number`||typeof e==`boolean`||typeof e==`bigint`?String(e):typeof e==`symbol`?e.description??e.toString():typeof e==`function`?e.name?`[function ${e.name}]`:`[function]`:Object.prototype.toString.call(e)})(e)).toLowerCase();return t.includes(`unsupported state or unable to authenticate data`)||t.includes(`bad mac`)?t.includes(`@whiskeysockets/baileys`)||t.includes(`baileys`)||t.includes(`noise-handler`)||t.includes(`aesdecryptgcm`):!1}function nn(e){if(e.isReasoning===!0)return!0;let t=e.text;return typeof t==`string`?t.trimStart().toLowerCase().startsWith(`reasoning:`):!1}async function rn(e){let{replyResult:t,msg:n,maxMediaBytes:r,textLimit:i,replyLogger:a,connectionId:o,skipLog:s}=e,c=Date.now();if(nn(t)){Z.debug(`Suppressed reasoning payload to ${n.from}`);return}let l=e.tableMode??`code`,u=e.chunkMode??`length`,d=je(Re(Ie(t.text||``,l)),i,u),f=t.mediaUrls?.length?t.mediaUrls:t.mediaUrl?[t.mediaUrl]:[],p=async(e,t,r=3)=>{let i;for(let a=1;a<=r;a++)try{return await e()}catch(e){i=e;let o=q(e),s=a===r;if(!/closed|reset|timed\s*out|disconnect/i.test(o)||s)throw e;let c=500*a;U(`Retrying ${t} to ${n.from} after failure (${a}/${r-1}) in ${c}ms: ${o}`),await V(c)}throw i};if(f.length===0&&d.length){let e=d.length;for(let[t,r]of d.entries()){let i=Date.now();if(await p(()=>n.reply(r),`text`),!s){let r=Date.now()-i;Z.debug(`Sent chunk ${t+1}/${e} to ${n.from} (${r.toFixed(0)}ms)`)}}a.info({correlationId:n.id??J(),connectionId:o??null,to:n.from,from:n.to,text:$(t.text,240),mediaUrl:null,mediaSizeBytes:null,mediaKind:null,durationMs:Date.now()-c},`auto-reply sent (text)`);return}let m=[...d];for(let[t,i]of f.entries()){let s=t===0&&m.shift()||void 0;try{let t=await Ae(i,{maxBytes:r,localRoots:e.mediaLocalRoots});if(B()&&(U(`Web auto-reply media size: ${(t.buffer.length/(1024*1024)).toFixed(2)}MB`),U(`Web auto-reply media source: ${i} (kind ${t.kind})`)),t.kind===`image`)await p(()=>n.sendMedia({image:t.buffer,caption:s,mimetype:t.contentType}),`media:image`);else if(t.kind===`audio`)await p(()=>n.sendMedia({audio:t.buffer,ptt:!0,mimetype:t.contentType,caption:s}),`media:audio`);else if(t.kind===`video`)await p(()=>n.sendMedia({video:t.buffer,caption:s,mimetype:t.contentType}),`media:video`);else{let e=t.fileName??i.split(`/`).pop()??`file`,r=t.contentType??`application/octet-stream`;await p(()=>n.sendMedia({document:t.buffer,fileName:e,caption:s,mimetype:r}),`media:document`)}Z.info(`Sent media reply to ${n.from} (${(t.buffer.length/(1024*1024)).toFixed(2)}MB)`),a.info({correlationId:n.id??J(),connectionId:o??null,to:n.from,from:n.to,text:s??null,mediaUrl:i,mediaSizeBytes:t.buffer.length,mediaKind:t.kind,durationMs:Date.now()-c},`auto-reply sent (media)`)}catch(e){if(Z.error(`Failed sending web media to ${n.from}: ${q(e)}`),a.warn({err:e,mediaUrl:i},`failed to send web media reply`),t===0){let t=e instanceof Error?`⚠️ Media failed: ${e.message}`:`⚠️ Media failed.`,r=[m.shift()??s??``,t].filter(Boolean).join(`
|
|
5
5
|
`);r&&(Z.warn(`Media skipped; sent text-only to ${n.from}`),await n.reply(r))}}}for(let e of m)await n.reply(e)}function an(e){if(!e.msg.id)return;let t=e.cfg.channels?.whatsapp?.ackReaction,n=(t?.emoji??``).trim(),r=t?.direct??!0,i=t?.group??`mentions`,a=e.msg.conversationId??e.msg.from,o=e.msg.chatType===`group`?Wt({cfg:e.cfg,agentId:e.agentId,sessionKey:e.sessionKey,conversationId:a}):null;g({emoji:n,isDirect:e.msg.chatType===`direct`,isGroup:e.msg.chatType===`group`,directEnabled:r,groupMode:i,wasMentioned:e.msg.wasMentioned===!0,groupActivated:o===`always`})&&(e.info({chatId:e.msg.chatId,messageId:e.msg.id,emoji:n},`sending ack reaction`),ze(e.msg.chatId,e.msg.id,n,{verbose:e.verbose,fromMe:!1,participant:e.msg.senderJid,accountId:e.accountId}).catch(t=>{e.warn({error:q(t),chatId:e.msg.chatId,messageId:e.msg.id},`failed to send ack reaction`),U(`WhatsApp ack reaction failed for chat ${e.msg.chatId}: ${q(t)}`)}))}function on(e){return e.replyToBody?`[Replying to ${e.replyToSender??`unknown sender`}${e.replyToId?` id:${e.replyToId}`:``}]\n${e.replyToBody}\n[/Replying]`:null}function sn(e){let{cfg:t,msg:n,agentId:r,previousTimestamp:i,envelope:a}=e,o=f(t,r,{configured:t.channels?.whatsapp?.messagePrefix,hasAllowFrom:(t.channels?.whatsapp?.allowFrom?.length??0)>0}),s=o?`${o} `:``,c=on(n),u=`${s}${n.body}${c?`\n\n${c}`:``}`;return l({channel:`WhatsApp`,from:n.chatType===`group`?n.from:n.from?.replace(/^whatsapp:/,``),timestamp:n.timestamp,body:u,chatType:n.chatType,sender:{name:n.senderName,e164:n.senderE164,id:n.senderJid},previousTimestamp:i,envelope:a,fromMe:n.fromMe})}async function cn(e){let t=e.cfg.commands?.useAccessGroups!==!1;if(!t)return!0;let n=e.msg.chatType===`group`,r=G(n?e.msg.senderE164??``:e.msg.senderE164??e.msg.from??``);if(!r)return!1;let a=P({cfg:e.cfg,accountId:e.msg.accountId}),o=a.dmPolicy??`pairing`,s=a.groupPolicy??`allowlist`,c=a.allowFrom??[],l=a.groupAllowFrom??(c.length>0?c:void 0),d=n?[]:await i({provider:`whatsapp`,accountId:e.msg.accountId,dmPolicy:o});return u({isGroup:n,dmPolicy:o,groupPolicy:s,allowFrom:c.length>0?c:e.msg.selfE164?[e.msg.selfE164]:[],groupAllowFrom:l,storeAllowFrom:d,isSenderAllowed:e=>e.includes(`*`)?!0:e.map(e=>G(String(e))).filter(e=>!!e).includes(r),command:{useAccessGroups:t,allowTextCommands:!0,hasControlCommand:!0}}).commandAuthorized}function ln(e){let t=P({cfg:e.cfg,accountId:e.msg.accountId});return o({dmScope:e.cfg.session?.dmScope,allowFrom:t.allowFrom,normalizeEntry:e=>G(e)})}async function un(e){let t=e.msg.conversationId??e.msg.from,{storePath:r,envelopeOptions:i,previousTimestamp:o}=re({cfg:e.cfg,agentId:e.route.agentId,sessionKey:e.route.sessionKey}),s=sn({cfg:e.cfg,msg:e.msg,agentId:e.route.agentId,previousTimestamp:o,envelope:i}),c=!1;if(e.msg.chatType===`group`){let n=e.groupHistory??e.groupHistories.get(e.groupHistoryKey)??[];n.length>0&&(s=y({entries:n.map(e=>({sender:e.sender,body:e.body,timestamp:e.timestamp})),currentMessage:s,excludeLast:!1,formatEntry:e=>l({channel:`WhatsApp`,from:t,timestamp:e.timestamp,body:e.body,chatType:`group`,senderLabel:e.sender,envelope:i})})),c=!(e.suppressGroupHistoryClear??!1)}let u=e.buildCombinedEchoKey({sessionKey:e.route.sessionKey,combinedBody:s});if(e.echoHas(u))return U(`Skipping auto-reply: detected echo for combined message`),e.echoForget(u),!1;an({cfg:e.cfg,msg:e.msg,agentId:e.route.agentId,sessionKey:e.route.sessionKey,conversationId:t,verbose:e.verbose,accountId:e.route.accountId,info:e.replyLogger.info.bind(e.replyLogger),warn:e.replyLogger.warn.bind(e.replyLogger)});let d=e.msg.id??J();e.replyLogger.info({connectionId:e.connectionId,correlationId:d,from:e.msg.chatType===`group`?t:e.msg.from,to:e.msg.to,body:$(s,240),mediaType:e.msg.mediaType??null,mediaPath:e.msg.mediaPath??null},`inbound web message`);let f=e.msg.chatType===`group`?t:e.msg.from,h=e.msg.mediaType?`, ${e.msg.mediaType}`:``;X.info(`Inbound message ${f} -> ${e.msg.to} (${e.msg.chatType}${h}, ${s.length} chars)`),B()&&X.debug(`Inbound body: ${$(s,400)}`);let g=e.msg.chatType===`group`?void 0:e.msg.senderE164?G(e.msg.senderE164):e.msg.from.includes(`@`)?K(e.msg.from):G(e.msg.from),_=e.maxMediaTextChunkLimit??Me(e.cfg,`whatsapp`),v=Ne(e.cfg,`whatsapp`,e.route.accountId),b=Pe({cfg:e.cfg,channel:`whatsapp`,accountId:e.route.accountId}),x=ke(e.cfg,e.route.agentId),S=!1,C=!1,ee=n(e.msg.body,e.cfg)?await cn({cfg:e.cfg,msg:e.msg}):void 0,te=e.cfg.messages?.responsePrefix,{onModelSelected:ne,...w}=a({cfg:e.cfg,agentId:e.route.agentId,channel:`whatsapp`,accountId:e.route.accountId}),T=e.msg.chatType!==`group`&&!!e.msg.selfE164&&G(e.msg.from)===G(e.msg.selfE164??``),ie=w.responsePrefix??(te===void 0&&T?p(e.cfg,e.route.agentId):void 0),ae=e.msg.chatType===`group`?(e.groupHistory??e.groupHistories.get(e.groupHistoryKey)??[]).map(e=>({sender:e.sender,body:e.body,timestamp:e.timestamp})):void 0,E=se({Body:s,BodyForAgent:e.msg.body,InboundHistory:ae,RawBody:e.msg.body,CommandBody:e.msg.body,From:e.msg.from,To:e.msg.to,SessionKey:e.route.sessionKey,AccountId:e.route.accountId,MessageSid:e.msg.id,ReplyToId:e.msg.replyToId,ReplyToBody:e.msg.replyToBody,ReplyToSender:e.msg.replyToSender,MediaPath:e.msg.mediaPath,MediaUrl:e.msg.mediaUrl,MediaType:e.msg.mediaType,ChatType:e.msg.chatType,ConversationLabel:e.msg.chatType===`group`?t:e.msg.from,GroupSubject:e.msg.groupSubject,GroupMembers:qt({participants:e.msg.groupParticipants,roster:e.groupMemberNames.get(e.groupHistoryKey),fallbackE164:e.msg.senderE164}),SenderName:e.msg.senderName,SenderId:e.msg.senderJid?.trim()||e.msg.senderE164,SenderE164:e.msg.senderE164,CommandAuthorized:ee,WasMentioned:e.msg.wasMentioned,...e.msg.location?Ee(e.msg.location):{},Provider:`whatsapp`,Surface:`whatsapp`,OriginatingChannel:`whatsapp`,OriginatingTo:e.msg.from}),D=ln({cfg:e.cfg,msg:e.msg}),O=!D||D===g,k=m({route:e.route,sessionKey:e.route.sessionKey});g&&k===e.route.mainSessionKey&&O?$t({cfg:e.cfg,backgroundTasks:e.backgroundTasks,storeAgentId:e.route.agentId,sessionKey:e.route.mainSessionKey,channel:`whatsapp`,to:g,accountId:e.route.accountId,ctx:E,warn:e.replyLogger.warn.bind(e.replyLogger)}):g&&k===e.route.mainSessionKey&&D&&U(`Skipping main-session last route update for ${g} (pinned owner ${D})`);let A=M({storePath:r,sessionKey:e.route.sessionKey,ctx:E}).catch(t=>{e.replyLogger.warn({error:q(t),storePath:r,sessionKey:e.route.sessionKey},`failed updating session meta`)});Qt(e.backgroundTasks,A);let{queuedFinal:j}=await oe({ctx:E,cfg:e.cfg,replyResolver:e.replyResolver,dispatcherOptions:{...w,responsePrefix:ie,onHeartbeatStrip:()=>{S||(S=!0,U(`Stripped stray HEARTBEAT_OK token from web reply`))},deliver:async(n,r)=>{if(r.kind!==`final`)return;await rn({replyResult:n,msg:e.msg,mediaLocalRoots:x,maxMediaBytes:e.maxMediaBytes,textLimit:_,chunkMode:v,replyLogger:e.replyLogger,connectionId:e.connectionId,skipLog:!1,tableMode:b}),C=!0;let i=n.text?!0:void 0;e.rememberSentText(n.text,{combinedBody:s,combinedBodySessionKey:e.route.sessionKey,logVerboseMessage:i});let a=e.msg.chatType===`group`?t:e.msg.from??`unknown`,o=!!(n.mediaUrl||n.mediaUrls?.length);if(Z.info(`Auto-replied to ${a}${o?` (media)`:``}`),B()){let e=n.text==null?`<media>`:$(n.text,400);Z.debug(`Reply body: ${e}${o?` (media)`:``}`)}},onError:(n,r)=>{let i=r.kind===`tool`?`tool update`:r.kind===`block`?`block update`:`auto-reply`;Z.error(`Failed sending web ${i} to ${e.msg.from??t}: ${q(n)}`)},onReplyStart:e.msg.sendComposing},replyOptions:{disableBlockStreaming:!0,onModelSelected:ne}});return j?(c&&e.groupHistories.set(e.groupHistoryKey,[]),C):(c&&e.groupHistories.set(e.groupHistoryKey,[]),U(`Skipping auto-reply: silent token or no text/media returned from resolver`),!1)}function dn(e){let t=async(t,n,r,i)=>un({cfg:e.cfg,msg:t,route:n,groupHistoryKey:r,groupHistories:e.groupHistories,groupMemberNames:e.groupMemberNames,connectionId:e.connectionId,verbose:e.verbose,maxMediaBytes:e.maxMediaBytes,replyResolver:e.replyResolver,replyLogger:e.replyLogger,backgroundTasks:e.backgroundTasks,rememberSentText:e.echoTracker.rememberText,echoHas:e.echoTracker.has,echoForget:e.echoTracker.forget,buildCombinedEchoKey:e.echoTracker.buildCombinedKey,groupHistory:i?.groupHistory,suppressGroupHistoryClear:i?.suppressGroupHistoryClear});return async n=>{let r=n.conversationId??n.from,i=en(n),a=b({cfg:N(),channel:`whatsapp`,accountId:n.accountId,peer:{kind:n.chatType===`group`?`group`:`direct`,id:i}}),o=n.chatType===`group`?A({channel:`whatsapp`,accountId:a.accountId,peerKind:`group`,peerId:i}):a.sessionKey;if(n.from===n.to&&U(`📱 Same-phone mode detected (from === to: ${n.from})`),e.echoTracker.has(n.body)){U(`Skipping auto-reply: detected echo (message matches recently sent text)`),e.echoTracker.forget(n.body);return}if(n.chatType===`group`){let t={From:n.from,To:n.to,SessionKey:a.sessionKey,AccountId:a.accountId,ChatType:n.chatType,ConversationLabel:r,GroupSubject:n.groupSubject,SenderName:n.senderName,SenderId:n.senderJid?.trim()||n.senderE164,SenderE164:n.senderE164,Provider:`whatsapp`,Surface:`whatsapp`,OriginatingChannel:`whatsapp`,OriginatingTo:r};if($t({cfg:e.cfg,backgroundTasks:e.backgroundTasks,storeAgentId:a.agentId,sessionKey:a.sessionKey,channel:`whatsapp`,to:r,accountId:a.accountId,ctx:t,warn:e.replyLogger.warn.bind(e.replyLogger)}),!Zt({cfg:e.cfg,msg:n,conversationId:r,groupHistoryKey:o,agentId:a.agentId,sessionKey:a.sessionKey,baseMentionConfig:e.baseMentionConfig,authDir:e.account.authDir,groupHistories:e.groupHistories,groupHistoryLimit:e.groupHistoryLimit,groupMemberNames:e.groupMemberNames,logVerbose:U,replyLogger:e.replyLogger}).shouldProcess)return}else !n.senderE164&&i&&i.startsWith(`+`)&&(n.senderE164=G(i)??n.senderE164);await Bt({cfg:e.cfg,msg:n,peerId:i,route:a,groupHistoryKey:o,groupHistories:e.groupHistories,processMessage:t})||await t(n,a,o)}}function fn(e){return e===440}async function pn(e,t=Mt,n=!0,i=w,a=_e,o,s={}){let c=J(),l=H({module:`web-auto-reply`,runId:c}),u=H({module:`web-heartbeat`,runId:c}),d=H({module:`web-reconnect`,runId:c}),f={running:!0,connected:!1,reconnectAttempts:0,lastConnectedAt:null,lastDisconnect:null,lastMessageAt:null,lastEventAt:null,lastError:null},p=()=>{s.statusSink?.({...f,lastDisconnect:f.lastDisconnect?{...f.lastDisconnect}:null})};p();let m=N(),h=P({cfg:m,accountId:s.accountId}),g={...m,channels:{...m.channels,whatsapp:{...m.channels?.whatsapp,ackReaction:h.ackReaction,messagePrefix:h.messagePrefix,allowFrom:h.allowFrom,groupAllowFrom:h.groupAllowFrom,groupPolicy:h.groupPolicy,textChunkLimit:h.textChunkLimit,chunkMode:h.chunkMode,mediaMaxMb:h.mediaMaxMb,blockStreaming:h.blockStreaming,groups:h.groups}}},v=de(h),y=$e(g,s.heartbeatSeconds),x=et(g,s.reconnect),S=Nt(g),C=g.channels?.whatsapp?.accounts?.[s.accountId??``]?.historyLimit??g.channels?.whatsapp?.historyLimit??g.messages?.groupChat?.historyLimit??50,te=new Map,ne=new Map,re=Rt({maxItems:100,logVerbose:U}),oe=s.sleep??((e,t)=>T(e,t??o)),se=()=>o?.aborted===!0,D=o&&new Promise(e=>o.addEventListener(`abort`,()=>e(`aborted`),{once:!0})),O=process.getMaxListeners?.()??10;process.setMaxListeners&&O<50&&process.setMaxListeners(50);let k=!1,A=()=>{k=!0};process.once(`SIGINT`,A);let j=0;for(;!se();){let c=J(),m=Date.now(),T=null,O=null,M=null,N=0,P=null,le=s.messageTimeoutMs??1800*1e3,ue=s.watchdogCheckMs??60*1e3,F=new Set,de=dn({cfg:g,verbose:e,connectionId:c,maxMediaBytes:v,groupHistoryLimit:C,groupHistories:te,groupMemberNames:ne,echoTracker:re,backgroundTasks:F,replyResolver:i??w,replyLogger:l,baseMentionConfig:S,account:h}),fe=ae({cfg:g,channel:`whatsapp`}),I=await(t??Mt)({verbose:e,accountId:h.accountId,authDir:h.authDir,mediaMaxMb:h.mediaMaxMb,sendReadReceipts:h.sendReadReceipts,debounceMs:fe,shouldDebounce:e=>e.mediaPath||e.mediaType||e.location||e.replyToId||e.replyToBody?!1:!r(e.body,g),onMessage:async e=>{N+=1,M=Date.now(),f.lastMessageAt=M,f.lastEventAt=M,p(),await de(e)}});Object.assign(f,_()),f.lastError=null,p();let{e164:he}=me(h.authDir),ge=b({cfg:g,channel:`whatsapp`,accountId:h.accountId});ie(`WhatsApp gateway connected${he?` as ${he}`:``}.`,{sessionKey:ge.sessionKey}),Le(h.accountId,I),P=Oe(e=>{if(!tn(e))return!1;let t=q(e);return d.warn({connectionId:c,error:t},`web reconnect: unhandled rejection from WhatsApp socket; forcing reconnect`),I.signalClose?.({status:499,isLoggedOut:!1,error:e}),!0});let L=async()=>{Le(h.accountId,null),P&&=(P(),null),T&&clearInterval(T),O&&clearInterval(O),F.size>0&&(await Promise.allSettled(F),F.clear());try{await I.close()}catch(e){U(`Socket close failed: ${q(e)}`)}};if(n&&(T=setInterval(()=>{let e=ce(h.authDir),t=M?Math.floor((Date.now()-M)/6e4):null,n={connectionId:c,reconnectAttempts:j,messagesHandled:N,lastMessageAt:M,authAgeMs:e,uptimeMs:Date.now()-m,...t!==null&&t>30?{minutesSinceLastMessage:t}:{}};t&&t>30?u.warn(n,`⚠️ web gateway heartbeat - no messages in 30+ minutes`):u.info(n,`web gateway heartbeat`)},y*1e3),O=setInterval(()=>{if(!M)return;let e=Date.now()-M;if(e<=le)return;let t=Math.floor(e/6e4);u.warn({connectionId:c,minutesSinceLastMessage:t,lastMessageAt:new Date(M),messagesHandled:N},`Message timeout detected - forcing reconnect`),tt.warn(`No messages received in ${t}m - restarting connection`),L().catch(e=>{U(`Close listener failed: ${q(e)}`)}),I.signalClose?.({status:499,isLoggedOut:!1,error:`watchdog-timeout`})},ue)),Y.info(`Listening for personal WhatsApp inbound messages.`),(process.stdout.isTTY||process.stderr.isTTY)&&Y.raw(`Ctrl+C to stop.`),!n){await L(),process.removeListener(`SIGINT`,A);return}let R=await Promise.race([I.onClose?.catch(e=>(d.error({error:q(e)},`listener.onClose rejected`),{status:500,isLoggedOut:!1,error:e}))??nt(),D??nt()]);if(Date.now()-m>y*1e3&&(j=0),f.reconnectAttempts=j,p(),se()||k||R===`aborted`){await L();break}let z=(typeof R==`object`&&R&&`status`in R?R.status:void 0)??`unknown`,B=typeof R==`object`&&R&&`isLoggedOut`in R&&R.isLoggedOut,V=q(R);if(f.connected=!1,f.lastEventAt=Date.now(),f.lastDisconnect={at:f.lastEventAt,status:typeof z==`number`?z:void 0,error:V,loggedOut:!!B},f.lastError=V,f.reconnectAttempts=j,p(),d.info({connectionId:c,status:z,loggedOut:B,reconnectAttempts:j,error:V},`web reconnect: connection closed`),ie(`WhatsApp gateway disconnected (status ${z??`unknown`})`,{sessionKey:ge.sessionKey}),B){a.error(`WhatsApp session logged out. Run \`${pe(`openclaw channels login --channel web`)}\` to relink.`),await L();break}if(fn(z)){d.warn({connectionId:c,status:z,error:V},`web reconnect: non-retryable close status; stopping monitor`),a.error(`WhatsApp Web connection closed (status ${z}: session conflict). Resolve conflicting WhatsApp Web sessions, then relink with \`${pe(`openclaw channels login --channel web`)}\`. Stopping web monitoring.`),await L();break}if(j+=1,f.reconnectAttempts=j,p(),x.maxAttempts>0&&j>=x.maxAttempts){d.warn({connectionId:c,status:z,reconnectAttempts:j,maxAttempts:x.maxAttempts},`web reconnect: max attempts reached; continuing in degraded mode`),a.error(`WhatsApp Web reconnect: max attempts reached (${j}/${x.maxAttempts}). Stopping web monitoring.`),await L();break}let H=ee(x,j);d.info({connectionId:c,status:z,reconnectAttempts:j,maxAttempts:x.maxAttempts||`unlimited`,delayMs:H},`web reconnect: scheduling retry`),a.error(`WhatsApp Web connection closed (status ${z}). Retry ${j}/${x.maxAttempts||`∞`} in ${E(H)}… (${V})`),await L();try{await oe(H,o)}catch{break}}f.running=!1,f.connected=!1,f.lastEventAt=Date.now(),p(),process.removeListener(`SIGINT`,A)}export{fe as WA_WEB_AUTH_DIR,Ue as createWaSocket,le as logWebSelfId,We as loginWeb,pn as monitorWebChannel,Mt as monitorWebInbox,I as pickWebChannel,Be as sendMessageWhatsApp,Ve as waitForWaConnection,R as webAuthExists};
|
|
6
|
-
//# sourceMappingURL=web-
|
|
6
|
+
//# sourceMappingURL=web-Bjk0MWu3.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{Ct as e,Et as t,kt as n,s as r,wt as i}from"./paths-piJASC5k.js";import"./paths-BpQOWYiT.js";import{B as a,C as o,K as s,M as c,O as l,R as u,T as d,h as f,m as p,o as m,p as h,v as g}from"./logger-DwWqfo66.js";import{As as _,At as v,Bs as y,Ds as b,Is as x,Mt as S,Os as C,Ot as w,Ps as T,Ws as E,hn as D,js as ee,ks as te,oc as O,sc as k,tr as ne,xi as A}from"./model-auth-C1YL9HcW.js";import"./proxy-env-DGzNnnJh.js";import"./send-BlWuQHYB.js";import{Ft as j,Nt as M,Pt as N}from"./send-CL0W7jLW.js";import{B as P,C as F,D as I,E as re,I as ie,J as L,L as ae,T as R,U as z,V as B,Y as oe,Z as V,_ as H,b as U,ct as W,d as se,f as G,g as ce,h as K,it as le,l as ue,lt as de,m as fe,o as pe,p as me,q as he,r as ge,s as _e,st as ve,u as ye,v as be,w as xe,x as Se,y as Ce,z as we}from"./dispatch-
|
|
1
|
+
import{Ct as e,Et as t,kt as n,s as r,wt as i}from"./paths-piJASC5k.js";import"./paths-BpQOWYiT.js";import{B as a,C as o,K as s,M as c,O as l,R as u,T as d,h as f,m as p,o as m,p as h,v as g}from"./logger-DwWqfo66.js";import{As as _,At as v,Bs as y,Ds as b,Is as x,Mt as S,Os as C,Ot as w,Ps as T,Ws as E,hn as D,js as ee,ks as te,oc as O,sc as k,tr as ne,xi as A}from"./model-auth-C1YL9HcW.js";import"./proxy-env-DGzNnnJh.js";import"./send-BlWuQHYB.js";import{Ft as j,Nt as M,Pt as N}from"./send-CL0W7jLW.js";import{B as P,C as F,D as I,E as re,I as ie,J as L,L as ae,T as R,U as z,V as B,Y as oe,Z as V,_ as H,b as U,ct as W,d as se,f as G,g as ce,h as K,it as le,l as ue,lt as de,m as fe,o as pe,p as me,q as he,r as ge,s as _e,st as ve,u as ye,v as be,w as xe,x as Se,y as Ce,z as we}from"./dispatch-Bcf1uPHo.js";import"./tokens-BPc1fcZ3.js";import"./deliver-Dkh3lqXR.js";import"./github-copilot-token-Bt4PduRB.js";import"./fetch-guard-DSvAbvSx.js";import{J as Te,Y as Ee,tt as De}from"./send-3VNTSIhr.js";import{t as Oe}from"./local-roots-DGe-SRNu.js";import{_ as ke,c as Ae,d as je,f as Me,i as Ne}from"./ir-ynWQeZD9.js";import"./diagnostic-EqHqw9xo.js";import"./pi-model-discovery-D5tLf04u.js";import{f as Pe}from"./audio-transcription-runner-BVmaaA2k.js";import"./image-aG-5S1vd.js";import"./api-key-rotation-D5Nr1xl3.js";import"./proxy-fetch-Del551nu.js";import"./commands-registry-DI2vPscP.js";import"./fetch-B1GR6-u4.js";import"./render-DhTJXP1U.js";import"./target-errors-CFzzcffg.js";import{n as Fe}from"./channel-activity-CKfWFchu.js";import{t as Ie}from"./tables-C4j5Bar_.js";import"./send-De4qiprb.js";import"./fetch-B27H-XCf.js";import"./skill-commands-DWDtyCtB.js";import"./outbound-attachment-Bgf1pCh8.js";import"./send-6q4owAw0.js";import{r as Le}from"./active-listener-DuO6KMXJ.js";import"./query-expansion-r_iXkNzt.js";import"./manager-DfdDglld.js";import{i as Re,r as ze,t as Be}from"./outbound-2Lo6mZEY.js";import{i as Ve,n as q,r as He,t as Ue}from"./session-Be_7rXAz.js";import{t as We}from"./login-CxnDKwXC.js";import{randomUUID as Ge}from"node:crypto";import{DisconnectReason as Ke,downloadMediaMessage as qe,extractMessageContent as Je,getContentType as Ye,isJidGroup as Xe,normalizeMessageContent as Ze}from"@whiskeysockets/baileys";const Qe={initialMs:2e3,maxMs:3e4,factor:1.8,jitter:.25,maxAttempts:12};function $e(e,t){let n=t??e.web?.heartbeatSeconds;return typeof n==`number`&&n>0?n:60}function et(e,t){let n=e.web?.reconnect??{},r=t??{},i={...Qe,...n,...r};return i.initialMs=Math.max(250,i.initialMs),i.maxMs=Math.max(i.initialMs,i.maxMs),i.factor=m(i.factor,1.1,10),i.jitter=m(i.jitter,0,1),i.maxAttempts=Math.max(0,Math.floor(i.maxAttempts)),i}function J(){return Ge()}const Y=l(`gateway/channels/whatsapp`),X=Y.child(`inbound`),Z=Y.child(`outbound`),tt=Y.child(`heartbeat`);function nt(){return setInterval(()=>{},1e6).unref(),new Promise(()=>{})}const rt=ie({ttlMs:20*6e4,maxSize:5e3});function it(e){return rt.check(e)}const at=new Set([`FN`,`N`,`TEL`]);function ot(e){if(!e)return{phones:[]};let t=e.split(/\r?\n/),n,r,i=[];for(let e of t){let t=e.trim();if(!t)continue;let a=t.indexOf(`:`);if(a===-1)continue;let o=t.slice(0,a).toUpperCase(),s=t.slice(a+1).trim();if(!s)continue;let c=st(o);if(!c||!at.has(c))continue;let l=ct(s);if(l){if(c===`FN`&&!r){r=lt(l);continue}if(c===`N`&&!n){n=lt(l);continue}if(c===`TEL`){let e=ut(l);e&&i.push(e)}}}return{name:r??n,phones:i}}function st(e){let[t]=e.split(`;`);if(!t)return;let n=t.split(`.`);return n[n.length-1]||void 0}function ct(e){return e.replace(/\\n/gi,` `).replace(/\\,/g,`,`).replace(/\\;/g,`;`).trim()}function lt(e){return e.replace(/;/g,` `).replace(/\s+/g,` `).trim()}function ut(e){let t=e.trim();return t?t.toLowerCase().startsWith(`tel:`)?t.slice(4).trim():t:``}function Q(e){return Ze(e)}function dt(e){if(!e)return;let t=Ye(e),n=t?e[t]:void 0,r=n&&typeof n==`object`&&`contextInfo`in n?n.contextInfo:void 0;if(r)return r;let i=e.extendedTextMessage?.contextInfo??e.imageMessage?.contextInfo??e.videoMessage?.contextInfo??e.documentMessage?.contextInfo??e.audioMessage?.contextInfo??e.stickerMessage?.contextInfo??e.buttonsResponseMessage?.contextInfo??e.listResponseMessage?.contextInfo??e.templateButtonReplyMessage?.contextInfo??e.interactiveResponseMessage?.contextInfo??e.buttonsMessage?.contextInfo??e.listMessage?.contextInfo;if(i)return i;for(let t of Object.values(e)){if(!t||typeof t!=`object`||!(`contextInfo`in t))continue;let e=t.contextInfo;if(e)return e}}function ft(e){let t=Q(e);if(!t)return;let n=[t.extendedTextMessage?.contextInfo?.mentionedJid,t.extendedTextMessage?.contextInfo?.quotedMessage?.extendedTextMessage?.contextInfo?.mentionedJid,t.imageMessage?.contextInfo?.mentionedJid,t.videoMessage?.contextInfo?.mentionedJid,t.documentMessage?.contextInfo?.mentionedJid,t.audioMessage?.contextInfo?.mentionedJid,t.stickerMessage?.contextInfo?.mentionedJid,t.buttonsResponseMessage?.contextInfo?.mentionedJid,t.listResponseMessage?.contextInfo?.mentionedJid].flatMap(e=>e??[]).filter(Boolean);if(n.length!==0)return Array.from(new Set(n))}function pt(e){let t=Q(e);if(!t)return;let n=Je(t),r=[t,n&&n!==t?n:void 0];for(let e of r){if(!e)continue;if(typeof e.conversation==`string`&&e.conversation.trim())return e.conversation.trim();let t=e.extendedTextMessage?.text;if(t?.trim())return t.trim();let n=e.imageMessage?.caption??e.videoMessage?.caption??e.documentMessage?.caption;if(n?.trim())return n.trim()}let i=ht(t)??(n&&n!==t?ht(n):void 0);if(i)return i}function mt(e){let t=Q(e);if(t){if(t.imageMessage)return`<media:image>`;if(t.videoMessage)return`<media:video>`;if(t.audioMessage)return`<media:audio>`;if(t.documentMessage)return`<media:document>`;if(t.stickerMessage)return`<media:sticker>`}}function ht(e){let t=Q(e);if(!t)return;let n=t.contactMessage??void 0;if(n){let{name:e,phones:t}=gt({displayName:n.displayName,vcard:n.vcard});return _t(e,t)}let r=t.contactsArrayMessage?.contacts??void 0;if(!(!r||r.length===0))return vt(r.map(e=>gt({displayName:e.displayName,vcard:e.vcard})).map(e=>yt(e.name,e.phones)).filter(e=>!!e),r.length)}function gt(e){let t=(e.displayName??``).trim(),n=ot(e.vcard??void 0);return{name:t||n.name,phones:n.phones}}function _t(e,t){let n=yt(e,t);return n?`<contact: ${n}>`:`<contact>`}function vt(e,t){let n=e.map(e=>e.trim()).filter(Boolean);if(n.length===0)return`<contacts: ${t} ${t===1?`contact`:`contacts`}>`;let r=Math.max(t-n.length,0),i=r>0?` +${r} more`:``;return`<contacts: ${n.join(`, `)}${i}>`}function yt(e,t){let n=[e,bt(t)].filter(e=>!!e);if(n.length!==0)return n.join(`, `)}function bt(e){let t=e?.map(e=>e.trim()).filter(Boolean)??[];if(t.length===0)return;let{shown:n,remaining:r}=xt(t,t.length,1),[i]=n;if(i)return r===0?i:`${i} (+${r} more)`}function xt(e,t,n){let r=e.slice(0,n);return{shown:r,remaining:Math.max(t-r.length,0)}}function St(e){let t=Q(e);if(!t)return null;let n=t.liveLocationMessage??void 0;if(n){let e=n.degreesLatitude,t=n.degreesLongitude;if(e!=null&&t!=null){let r=Number(e),i=Number(t);if(Number.isFinite(r)&&Number.isFinite(i))return{latitude:r,longitude:i,accuracy:n.accuracyInMeters??void 0,caption:n.caption??void 0,source:`live`,isLive:!0}}}let r=t.locationMessage??void 0;if(r){let e=r.degreesLatitude,t=r.degreesLongitude;if(e!=null&&t!=null){let n=Number(e),i=Number(t);if(Number.isFinite(n)&&Number.isFinite(i)){let e=!!r.isLive;return{latitude:n,longitude:i,accuracy:r.accuracyInMeters??void 0,name:r.name??void 0,address:r.address??void 0,caption:r.comment??void 0,source:e?`live`:r.name||r.address?`place`:`pin`,isLive:e}}}}return null}function Ct(e){let t=Q(e);if(!t)return null;let n=dt(t),r=Ze(n?.quotedMessage);if(!r)return null;let i=St(r),a=i?Te(i):void 0,o=[pt(r),a].filter(Boolean).join(`
|
|
2
2
|
`).trim();if(o||=mt(r),!o){let e=r?Ye(r):void 0;return u(`Quoted message missing extractable body${e?` (type ${e})`:``}`),null}let s=n?.participant??void 0,c=s?p(s)??s:void 0,l=c??`unknown sender`;return{id:n?.stanzaId?String(n.stanzaId):void 0,body:o,sender:l,senderJid:s,senderE164:c}}function wt(e){return N({providerConfigPresent:e.providerConfigPresent,groupPolicy:e.groupPolicy,defaultGroupPolicy:e.defaultGroupPolicy})}async function Tt(e){let t=A(),n=b({cfg:t,accountId:e.accountId}),r=n.dmPolicy??`pairing`,i=n.allowFrom??[],a=await we({provider:`whatsapp`,accountId:n.accountId,dmPolicy:r}),o=i.length===0&&e.selfE164?[e.selfE164]:[],s=i.length>0?i:o,c=n.groupAllowFrom??(i.length>0?i:void 0),l=e.from===e.selfE164,d=n.selfChatMode??h(e.selfE164,i),p=typeof e.pairingGraceMs==`number`&&e.pairingGraceMs>0?e.pairingGraceMs:3e4,m=typeof e.connectedAtMs==`number`&&typeof e.messageTimestampMs==`number`&&e.messageTimestampMs<e.connectedAtMs-p,g=M(t),{groupPolicy:_,providerMissingFallbackApplied:v}=wt({providerConfigPresent:t.channels?.whatsapp!==void 0,groupPolicy:n.groupPolicy,defaultGroupPolicy:g});j({providerMissingFallbackApplied:v,providerKey:`whatsapp`,accountId:n.accountId,log:e=>u(e)});let y=f(e.from),x=typeof e.senderE164==`string`?f(e.senderE164):null,S=B({isGroup:e.group,dmPolicy:r,groupPolicy:_,allowFrom:e.group?i:s,groupAllowFrom:c,storeAllowFrom:a,isSenderAllowed:t=>{if(t.includes(`*`))return!0;let n=new Set(t.map(e=>f(String(e))).filter(e=>!!e));return!e.group&&l?!0:e.group?!!(x&&n.has(x)):n.has(y)}});if(e.group&&S.decision!==`allow`)return S.reason===`groupPolicy=disabled`?u(`Blocked group message (groupPolicy: disabled)`):S.reason===`groupPolicy=allowlist (empty allowlist)`?u(`Blocked group message (groupPolicy: allowlist, no groupAllowFrom)`):u(`Blocked group message from ${e.senderE164??`unknown sender`} (groupPolicy: allowlist)`),{allowed:!1,shouldMarkRead:!1,isSelfChat:d,resolvedAccountId:n.accountId};if(!e.group){if(e.isFromMe&&!l)return u(`Skipping outbound DM (fromMe); no pairing reply needed.`),{allowed:!1,shouldMarkRead:!1,isSelfChat:d,resolvedAccountId:n.accountId};if(S.decision===`block`&&S.reason===`dmPolicy=disabled`)return u(`Blocked dm (dmPolicy: disabled)`),{allowed:!1,shouldMarkRead:!1,isSelfChat:d,resolvedAccountId:n.accountId};if(S.decision===`pairing`&&!l){let t=e.from;return m?u(`Skipping pairing reply for historical DM from ${t}.`):await me({channel:`whatsapp`,senderId:t,senderIdLine:`Your WhatsApp phone number: ${t}`,meta:{name:(e.pushName??``).trim()||void 0},upsertPairingRequest:async({id:e,meta:t})=>await De({channel:`whatsapp`,id:e,accountId:n.accountId,meta:t}),onCreated:()=>{u(`whatsapp pairing request sender=${t} name=${e.pushName??`unknown`}`)},sendPairingReply:async t=>{await e.sock.sendMessage(e.remoteJid,{text:t})},onReplyError:e=>{u(`whatsapp pairing reply failed for ${t}: ${String(e)}`)}}),{allowed:!1,shouldMarkRead:!1,isSelfChat:d,resolvedAccountId:n.accountId}}if(S.decision!==`allow`)return u(`Blocked unauthorized sender ${e.from} (dmPolicy=${r})`),{allowed:!1,shouldMarkRead:!1,isSelfChat:d,resolvedAccountId:n.accountId}}return{allowed:!0,shouldMarkRead:!0,isSelfChat:d,resolvedAccountId:n.accountId}}function Et(e){return Ze(e)}function Dt(e){let t=e.imageMessage?.mimetype??e.videoMessage?.mimetype??e.documentMessage?.mimetype??e.audioMessage?.mimetype??e.stickerMessage?.mimetype??void 0;if(t)return t;if(e.audioMessage)return`audio/ogg; codecs=opus`;if(e.imageMessage)return`image/jpeg`;if(e.videoMessage)return`video/mp4`;if(e.stickerMessage)return`image/webp`}async function Ot(e,t){let n=Et(e.message);if(!n)return;let r=Dt(n),i=n.documentMessage?.fileName??void 0;if(!(!n.imageMessage&&!n.videoMessage&&!n.documentMessage&&!n.audioMessage&&!n.stickerMessage))try{return{buffer:await qe(e,`buffer`,{},{reuploadRequest:t.updateMediaMessage,logger:t.logger}),mimetype:r,fileName:i}}catch(e){u(`downloadMediaMessage failed: ${String(e)}`);return}}function kt(e){Fe({channel:`whatsapp`,accountId:e,direction:`outbound`})}function At(e){return typeof e==`object`&&e&&`key`in e?String(e.key?.id??`unknown`):`unknown`}function jt(e){return{sendMessage:async(t,n,r,i,a)=>{let o=d(t),s;if(r&&i)if(i.startsWith(`image/`))s={image:r,caption:n||void 0,mimetype:i};else if(i.startsWith(`audio/`))s={audio:r,ptt:!0,mimetype:i};else if(i.startsWith(`video/`)){let e=a?.gifPlayback;s={video:r,caption:n||void 0,mimetype:i,...e?{gifPlayback:!0}:{}}}else s={document:r,fileName:a?.fileName?.trim()||`file`,caption:n||void 0,mimetype:i};else s={text:n};let c=await e.sock.sendMessage(o,s);return kt(a?.accountId??e.defaultAccountId),{messageId:At(c)}},sendPoll:async(t,n)=>{let r=d(t),i=await e.sock.sendMessage(r,{poll:{name:n.question,values:n.options,selectableCount:n.maxSelections??1}});return kt(e.defaultAccountId),{messageId:At(i)}},sendReaction:async(t,n,r,i,a)=>{let o=d(t);await e.sock.sendMessage(o,{react:{text:r,key:{remoteJid:o,id:n,fromMe:i,participant:a?d(a):void 0}}})},sendComposingTo:async t=>{let n=d(t);await e.sock.sendPresenceUpdate(`composing`,n)}}}async function Mt(e){let t=s({module:`web-inbound`}),n=l(`gateway/channels/whatsapp`).child(`inbound`),r=await Ue(!1,e.verbose,{authDir:e.authDir});await Ve(r);let i=Date.now(),o=null,c=new Promise(e=>{o=e}),d=e=>{if(!o)return;let t=o;o=null,t(e)};try{await r.sendPresenceUpdate(`available`),a()&&u(`Sent global 'available' presence on connect`)}catch(e){u(`Failed to send 'available' presence on connect: ${String(e)}`)}let f=r.user?.id,m=f?p(f):null,h=F({debounceMs:e.debounceMs??0,buildKey:e=>{let t=e.chatType===`group`?e.senderJid??e.senderE164??e.senderName??e.from:e.from;if(!t)return null;let n=e.chatType===`group`?e.chatId:e.from;return`${e.accountId}:${n}:${t}`},shouldDebounce:e.shouldDebounce,onFlush:async t=>{let n=t.at(-1);if(!n)return;if(t.length===1){await e.onMessage(n);return}let r=new Set;for(let e of t)for(let t of e.mentionedJids??[])r.add(t);let i=t.map(e=>e.body).filter(Boolean).join(`
|
|
3
3
|
`),a={...n,body:i,mentionedJids:r.size>0?Array.from(r):void 0};await e.onMessage(a)},onError:e=>{t.error({error:String(e)},`failed handling inbound web message`),n.error(`Failed handling inbound web message: ${String(e)}`)}}),_=new Map,v=300*1e3,y=r.signalRepository?.lidMapping,b=async t=>g(t,{authDir:e.authDir,lidLookup:y}),x=async e=>{let t=_.get(e);if(t&&t.expires>Date.now())return t;try{let t=await r.groupMetadata(e),n=(await Promise.all(t.participants?.map(async e=>await b(e.id)??e.id)??[])).filter(Boolean)??[],i={subject:t.subject,participants:n,expires:Date.now()+v};return _.set(e,i),i}catch(t){return u(`Failed to fetch group metadata for ${e}: ${String(t)}`),{expires:Date.now()+v}}},S=async t=>{let n=t.key?.id??void 0,a=t.key?.remoteJid;if(!a||a.endsWith(`@status`)||a.endsWith(`@broadcast`))return null;let o=Xe(a)===!0;if(n&&it(`${e.accountId}:${a}:${n}`))return null;let s=t.key?.participant??void 0,c=o?a:await b(a);if(!c)return null;let l=o?s?await b(s):null:c,u,d;if(o){let e=await x(a);u=e.subject,d=e.participants}let f=t.messageTimestamp?Number(t.messageTimestamp)*1e3:void 0,p=await Tt({accountId:e.accountId,from:c,selfE164:m,senderE164:l,group:o,pushName:t.pushName??void 0,isFromMe:!!t.key?.fromMe,messageTimestampMs:f,connectedAtMs:i,sock:{sendMessage:(e,t)=>r.sendMessage(e,t)},remoteJid:a});return p.allowed?{id:n,remoteJid:a,group:o,participantJid:s,from:c,senderE164:l,groupSubject:u,groupParticipants:d,messageTimestampMs:f,access:p}:null},C=async t=>{let{id:n,remoteJid:i,participantJid:o,access:s}=t;if(n&&!s.isSelfChat&&e.sendReadReceipts!==!1)try{await r.readMessages([{remoteJid:i,id:n,participant:o,fromMe:!1}]),a()&&u(`Marked message ${n} as read for ${i}${o?` (participant ${o})`:``}`)}catch(e){u(`Failed to mark message ${n} read: ${String(e)}`)}else n&&s.isSelfChat&&a()&&u(`Self-chat mode: skipping read receipt for ${n}`)},w=async t=>{let n=St(t.message??void 0),i=n?Te(n):void 0,a=pt(t.message??void 0);if(i&&(a=[a,i].filter(Boolean).join(`
|
|
4
4
|
`).trim()),!a&&(a=mt(t.message??void 0),!a))return null;let o=Ct(t.message),s,c,l;try{let n=await Ot(t,r);if(n){let t=(typeof e.mediaMaxMb==`number`&&e.mediaMaxMb>0?e.mediaMaxMb:50)*1024*1024;s=(await ne(n.buffer,n.mimetype,`inbound`,t,n.fileName)).path,c=n.mimetype,l=n.fileName}}catch(e){u(`Inbound media download failed: ${String(e)}`)}return{body:a,location:n??void 0,replyContext:o,mediaPath:s,mediaType:c,mediaFileName:l}},T=async(e,i,a)=>{let o=i.remoteJid,s=async()=>{try{await r.sendPresenceUpdate(`composing`,o)}catch(e){u(`Presence update failed: ${String(e)}`)}},c=async e=>{await r.sendMessage(o,{text:e})},l=async e=>{await r.sendMessage(o,e)},d=i.messageTimestampMs,p=ft(e.message),g=e.pushName??void 0;t.info({from:i.from,to:m??`me`,body:a.body,mediaPath:a.mediaPath,mediaType:a.mediaType,mediaFileName:a.mediaFileName,timestamp:d},`inbound message`);let _={id:i.id,from:i.from,conversationId:i.from,to:m??`me`,accountId:i.access.resolvedAccountId,body:a.body,pushName:g,timestamp:d,chatType:i.group?`group`:`direct`,chatId:i.remoteJid,senderJid:i.participantJid,senderE164:i.senderE164??void 0,senderName:g,replyToId:a.replyContext?.id,replyToBody:a.replyContext?.body,replyToSender:a.replyContext?.sender,replyToSenderJid:a.replyContext?.senderJid,replyToSenderE164:a.replyContext?.senderE164,groupSubject:i.groupSubject,groupParticipants:i.groupParticipants,mentionedJids:p??void 0,selfJid:f,selfE164:m,fromMe:!!e.key?.fromMe,location:a.location??void 0,sendComposing:s,reply:c,sendMedia:l,mediaPath:a.mediaPath,mediaType:a.mediaType,mediaFileName:a.mediaFileName};try{Promise.resolve(h.enqueue(_)).catch(e=>{t.error({error:String(e)},`failed handling inbound web message`),n.error(`Failed handling inbound web message: ${String(e)}`)})}catch(e){t.error({error:String(e)},`failed handling inbound web message`),n.error(`Failed handling inbound web message: ${String(e)}`)}},E=async t=>{if(!(t.type!==`notify`&&t.type!==`append`))for(let n of t.messages??[]){Fe({channel:`whatsapp`,accountId:e.accountId,direction:`inbound`});let r=await S(n);if(!r||(await C(r),t.type===`append`))continue;let i=await w(n);i&&await T(n,r,i)}};r.ev.on(`messages.upsert`,E);let D=e=>{try{if(e.connection===`close`){let t=He(e.lastDisconnect?.error);d({status:t,isLoggedOut:t===Ke.loggedOut,error:e.lastDisconnect?.error})}}catch(e){t.error({error:String(e)},`connection.update handler error`),d({status:void 0,isLoggedOut:!1,error:e})}};return r.ev.on(`connection.update`,D),{close:async()=>{try{let e=r.ev,t=E,n=D;typeof e.off==`function`?(e.off(`messages.upsert`,t),e.off(`connection.update`,n)):typeof e.removeListener==`function`&&(e.removeListener(`messages.upsert`,t),e.removeListener(`connection.update`,n)),r.ws?.close()}catch(e){u(`Socket close failed: ${String(e)}`)}},onClose:c,signalClose:e=>{d(e??{status:void 0,isLoggedOut:!1,error:`closed`})},...jt({sock:{sendMessage:(e,t)=>r.sendMessage(e,t),sendPresenceUpdate:(e,t)=>r.sendPresenceUpdate(e,t)},defaultAccountId:e.accountId})}}function Nt(e,t){return{mentionRegexes:W(e,t),allowFrom:e.channels?.whatsapp?.allowFrom}}function Pt(e,t){let n=t?{authDir:t}:void 0;return{normalizedMentions:e.mentionedJids?.length?e.mentionedJids.map(e=>p(e,n)??e).filter(Boolean):[],selfE164:e.selfE164??(e.selfJid?p(e.selfJid,n):null),selfJid:e.selfJid?e.selfJid.replace(/:\\d+/,``):null}}function Ft(e,t,n){let r=e=>de(e),i=h(n.selfE164,t.allowFrom);if((e.mentionedJids?.length??0)>0&&!i)return!!(n.selfE164&&n.normalizedMentions.includes(n.selfE164)||n.selfJid&&n.normalizedMentions.includes(n.selfJid));let a=r(e.body);if(t.mentionRegexes.some(e=>e.test(a)))return!0;if(n.selfE164){let t=n.selfE164.replace(/\D/g,``);if(t){if(a.replace(/[^\d]/g,``).includes(t))return!0;let n=e.body.replace(/[\s-]/g,``);if(RegExp(`\\+?${t}`,`i`).test(n))return!0}}return!1}function It(e,t,n){let r=Pt(e,n);return{wasMentioned:Ft(e,t,r),details:{from:e.from,body:e.body,bodyClean:de(e.body),mentionedJids:e.mentionedJids??null,normalizedMentionedJids:r.normalizedMentions.length?r.normalizedMentions:null,selfJid:e.selfJid??null,selfJidBare:r.selfJid,selfE164:e.selfE164??null,resolvedSelfE164:r.selfE164}}}function Lt(e,t){let n=e.allowFrom;return(Array.isArray(n)&&n.length>0?n:t?[t]:[]).filter(e=>!!(e&&e!==`*`)).map(e=>f(e)).filter(e=>!!e)}function Rt(e){let t=new Set,n=Math.max(1,e.maxItems??100),r=e=>`combined:${e.sessionKey}:${e.combinedBody}`,i=()=>{for(;t.size>n;){let e=t.values().next().value;if(!e)break;t.delete(e)}};return{rememberText:(n,a)=>{n&&(t.add(n),a.combinedBody&&a.combinedBodySessionKey&&t.add(r({sessionKey:a.combinedBodySessionKey,combinedBody:a.combinedBody})),a.logVerboseMessage&&e.logVerbose?.(`Added to echo detection set (size now: ${t.size}): ${n.substring(0,50)}...`),i())},has:e=>t.has(e),forget:e=>{t.delete(e)},buildCombinedKey:r}}function zt(t){let n=fe({agentId:t.agentId,channel:`whatsapp`,accountId:t.route.accountId,peer:{kind:t.msg.chatType===`group`?`group`:`direct`,id:t.peerId},dmScope:t.cfg.session?.dmScope,identityLinks:t.cfg.session?.identityLinks}),r=i({agentId:t.agentId,mainKey:e});return{sessionKey:n,mainSessionKey:r,lastRoutePolicy:K({sessionKey:n,mainSessionKey:r})}}async function Bt(e){let t=e.cfg.broadcast?.[e.peerId];if(!t||!Array.isArray(t)||t.length===0)return!1;let r=e.cfg.broadcast?.strategy||`parallel`;X.info(`Broadcasting message to ${t.length} agents (${r})`);let i=e.cfg.agents?.list?.map(e=>n(e.id)),a=(i?.length??0)>0,o=e.msg.chatType===`group`?e.groupHistories.get(e.groupHistoryKey)??[]:void 0,s=async t=>{let r=n(t);if(a&&!i?.includes(r))return X.warn(`Broadcast agent ${t} not found in agents.list; skipping`),!1;let s=zt({cfg:e.cfg,msg:e.msg,route:e.route,peerId:e.peerId,agentId:r}),c={...e.route,agentId:r,...s};try{return await e.processMessage(e.msg,c,e.groupHistoryKey,{groupHistory:o,suppressGroupHistoryClear:!0})}catch(e){return X.error(`Broadcast agent ${t} failed: ${q(e)}`),!1}};if(r===`sequential`)for(let e of t)await s(e);else await Promise.allSettled(t.map(s));return e.msg.chatType===`group`&&e.groupHistories.set(e.groupHistoryKey,[]),!0}function Vt(e,t,n){let r=e;for(let e of t)r=r.replace(e,` `);if(n){let e=n.replace(/\D/g,``);if(e){let t=RegExp(`\\+?${e}`,`g`);r=r.replace(t,` `)}}return r.replace(/\s+/g,` `).trim()}function Ht(e,t){let n=D({From:t,ChatType:`group`,Provider:`whatsapp`})?.id,r=e.channels?.whatsapp,i=!!(r?.groupAllowFrom?.length||r?.allowFrom?.length);return O({cfg:e,channel:`whatsapp`,groupId:n??t,hasGroupAllowFrom:i})}function Ut(e,t){let n=D({From:t,ChatType:`group`,Provider:`whatsapp`})?.id;return k({cfg:e,channel:`whatsapp`,groupId:n??t})}function Wt(e){let t=w(r(e.cfg.session?.store,{agentId:e.agentId}))[e.sessionKey],n=Ut(e.cfg,e.conversationId)?`mention`:`always`;return pe(t?.groupActivation)??n}function Gt(e,t,n){for(let r of e){let e=f(r)??r;!e||t.has(e)||(t.add(e),n.push(e))}}function Kt(e,t,n,r){if(!n||!r)return;let i=f(n)??n;if(!i)return;let a=e.get(t);a||(a=new Map,e.set(t,a)),a.set(i,r)}function qt(e){let{participants:t,roster:n,fallbackE164:r}=e,i=new Set,a=[];if(t?.length&&Gt(t,i,a),n&&Gt(n.keys(),i,a),a.length===0&&r){let e=f(r)??r;e&&a.push(e)}if(a.length!==0)return a.map(e=>{let t=n?.get(e);return t?`${t} (${e})`:e}).join(`, `)}function Jt(e,t){let n=f(t.senderE164??``);return n?Lt(e,t.selfE164??void 0).includes(n):!1}function Yt(e){let t=e.msg.senderName&&e.msg.senderE164?`${e.msg.senderName} (${e.msg.senderE164})`:e.msg.senderName??e.msg.senderE164??`Unknown`;ve({historyMap:e.groupHistories,historyKey:e.groupHistoryKey,limit:e.groupHistoryLimit,entry:{sender:t,body:e.msg.body,timestamp:e.msg.timestamp,id:e.msg.id,senderJid:e.msg.senderJid}})}function Xt(e,t){return e.logVerbose(t),Yt({msg:e.msg,groupHistories:e.groupHistories,groupHistoryKey:e.groupHistoryKey,groupHistoryLimit:e.groupHistoryLimit}),{shouldProcess:!1}}function Zt(e){let t=Ht(e.cfg,e.conversationId);if(t.allowlistEnabled&&!t.allowed)return e.logVerbose(`Skipping group message ${e.conversationId} (not in allowlist)`),{shouldProcess:!1};Kt(e.groupMemberNames,e.groupHistoryKey,e.msg.senderE164,e.msg.senderName);let n=Nt(e.cfg,e.agentId),r=Vt(e.msg.body,n.mentionRegexes,e.msg.selfE164),i=_e(r),a=Jt(e.baseMentionConfig,e.msg),o=a&&re(r,e.cfg);if(i.hasCommand&&!a)return Xt(e,`Ignoring /activation from non-owner in group ${e.conversationId}`);let s=It(e.msg,n,e.authDir);e.replyLogger.debug({conversationId:e.conversationId,wasMentioned:s.wasMentioned,...s.details},`group mention debug`);let c=s.wasMentioned,l=Wt({cfg:e.cfg,agentId:e.agentId,sessionKey:e.sessionKey,conversationId:e.conversationId})!==`always`,u=e.msg.selfJid?.replace(/:\\d+/,``),d=e.msg.replyToSenderJid?.replace(/:\\d+/,``),p=e.msg.selfE164?f(e.msg.selfE164):null,m=e.msg.replyToSenderE164?f(e.msg.replyToSenderE164):null,h=V({requireMention:l,canDetectMention:!0,wasMentioned:c,implicitMention:!!(u&&d&&u===d||p&&m&&p===m),shouldBypassMention:o});return e.msg.wasMentioned=h.effectiveWasMentioned,!o&&l&&h.shouldSkip?Xt(e,`Group message stored for context (no mention detected) in ${e.conversationId}: ${e.msg.body}`):{shouldProcess:!0}}function Qt(e,t){e.add(t),t.finally(()=>{e.delete(t)})}function $t(e){let t=r(e.cfg.session?.store,{agentId:e.storeAgentId}),n=S({storePath:t,sessionKey:e.sessionKey,deliveryContext:{channel:e.channel,to:e.to,accountId:e.accountId},ctx:e.ctx}).catch(n=>{e.warn({error:q(n),storePath:t,sessionKey:e.sessionKey,to:e.to},`failed updating last route`)});Qt(e.backgroundTasks,n)}function en(e){return e.chatType===`group`?e.conversationId??e.from:e.senderE164?f(e.senderE164)??e.senderE164:e.from.includes(`@`)?p(e.from)??e.from:f(e.from)??e.from}function $(e,t=400){return!e||e.length<=t?e:`${e.slice(0,t)}… (truncated ${e.length-t} chars)`}function tn(e){let t=(e instanceof Error?`${e.message}\n${e.stack??``}`:(e=>{if(e==null)return``;if(typeof e==`string`)return e;if(e instanceof Error)return`${e.message}\n${e.stack??``}`;if(typeof e==`object`)try{return JSON.stringify(e)}catch{return Object.prototype.toString.call(e)}return typeof e==`number`||typeof e==`boolean`||typeof e==`bigint`?String(e):typeof e==`symbol`?e.description??e.toString():typeof e==`function`?e.name?`[function ${e.name}]`:`[function]`:Object.prototype.toString.call(e)})(e)).toLowerCase();return t.includes(`unsupported state or unable to authenticate data`)||t.includes(`bad mac`)?t.includes(`@whiskeysockets/baileys`)||t.includes(`baileys`)||t.includes(`noise-handler`)||t.includes(`aesdecryptgcm`):!1}function nn(e){if(e.isReasoning===!0)return!0;let t=e.text;return typeof t==`string`?t.trimStart().toLowerCase().startsWith(`reasoning:`):!1}async function rn(e){let{replyResult:t,msg:n,maxMediaBytes:r,textLimit:i,replyLogger:s,connectionId:c,skipLog:l}=e,d=Date.now();if(nn(t)){Z.debug(`Suppressed reasoning payload to ${n.from}`);return}let f=e.tableMode??`code`,p=e.chunkMode??`length`,m=Ae(Re(Ie(t.text||``,f)),i,p),h=t.mediaUrls?.length?t.mediaUrls:t.mediaUrl?[t.mediaUrl]:[],g=async(e,t,r=3)=>{let i;for(let a=1;a<=r;a++)try{return await e()}catch(e){i=e;let s=q(e),c=a===r;if(!/closed|reset|timed\s*out|disconnect/i.test(s)||c)throw e;let l=500*a;u(`Retrying ${t} to ${n.from} after failure (${a}/${r-1}) in ${l}ms: ${s}`),await o(l)}throw i};if(h.length===0&&m.length){let e=m.length;for(let[t,r]of m.entries()){let i=Date.now();if(await g(()=>n.reply(r),`text`),!l){let r=Date.now()-i;Z.debug(`Sent chunk ${t+1}/${e} to ${n.from} (${r.toFixed(0)}ms)`)}}s.info({correlationId:n.id??J(),connectionId:c??null,to:n.from,from:n.to,text:$(t.text,240),mediaUrl:null,mediaSizeBytes:null,mediaKind:null,durationMs:Date.now()-d},`auto-reply sent (text)`);return}let _=[...m];for(let[t,i]of h.entries()){let o=t===0&&_.shift()||void 0;try{let t=await ke(i,{maxBytes:r,localRoots:e.mediaLocalRoots});if(a()&&(u(`Web auto-reply media size: ${(t.buffer.length/(1024*1024)).toFixed(2)}MB`),u(`Web auto-reply media source: ${i} (kind ${t.kind})`)),t.kind===`image`)await g(()=>n.sendMedia({image:t.buffer,caption:o,mimetype:t.contentType}),`media:image`);else if(t.kind===`audio`)await g(()=>n.sendMedia({audio:t.buffer,ptt:!0,mimetype:t.contentType,caption:o}),`media:audio`);else if(t.kind===`video`)await g(()=>n.sendMedia({video:t.buffer,caption:o,mimetype:t.contentType}),`media:video`);else{let e=t.fileName??i.split(`/`).pop()??`file`,r=t.contentType??`application/octet-stream`;await g(()=>n.sendMedia({document:t.buffer,fileName:e,caption:o,mimetype:r}),`media:document`)}Z.info(`Sent media reply to ${n.from} (${(t.buffer.length/(1024*1024)).toFixed(2)}MB)`),s.info({correlationId:n.id??J(),connectionId:c??null,to:n.from,from:n.to,text:o??null,mediaUrl:i,mediaSizeBytes:t.buffer.length,mediaKind:t.kind,durationMs:Date.now()-d},`auto-reply sent (media)`)}catch(e){if(Z.error(`Failed sending web media to ${n.from}: ${q(e)}`),s.warn({err:e,mediaUrl:i},`failed to send web media reply`),t===0){let t=e instanceof Error?`⚠️ Media failed: ${e.message}`:`⚠️ Media failed.`,r=[_.shift()??o??``,t].filter(Boolean).join(`
|
|
5
5
|
`);r&&(Z.warn(`Media skipped; sent text-only to ${n.from}`),await n.reply(r))}}}for(let e of _)await n.reply(e)}function an(e){if(!e.msg.id)return;let t=e.cfg.channels?.whatsapp?.ackReaction,n=(t?.emoji??``).trim(),r=t?.direct??!0,i=t?.group??`mentions`,a=e.msg.conversationId??e.msg.from,o=e.msg.chatType===`group`?Wt({cfg:e.cfg,agentId:e.agentId,sessionKey:e.sessionKey,conversationId:a}):null;U({emoji:n,isDirect:e.msg.chatType===`direct`,isGroup:e.msg.chatType===`group`,directEnabled:r,groupMode:i,wasMentioned:e.msg.wasMentioned===!0,groupActivated:o===`always`})&&(e.info({chatId:e.msg.chatId,messageId:e.msg.id,emoji:n},`sending ack reaction`),ze(e.msg.chatId,e.msg.id,n,{verbose:e.verbose,fromMe:!1,participant:e.msg.senderJid,accountId:e.accountId}).catch(t=>{e.warn({error:q(t),chatId:e.msg.chatId,messageId:e.msg.id},`failed to send ack reaction`),u(`WhatsApp ack reaction failed for chat ${e.msg.chatId}: ${q(t)}`)}))}function on(e){return e.replyToBody?`[Replying to ${e.replyToSender??`unknown sender`}${e.replyToId?` id:${e.replyToId}`:``}]\n${e.replyToBody}\n[/Replying]`:null}function sn(e){let{cfg:t,msg:n,agentId:r,previousTimestamp:i,envelope:a}=e,o=oe(t,r,{configured:t.channels?.whatsapp?.messagePrefix,hasAllowFrom:(t.channels?.whatsapp?.allowFrom?.length??0)>0}),s=o?`${o} `:``,c=on(n),l=`${s}${n.body}${c?`\n\n${c}`:``}`;return R({channel:`WhatsApp`,from:n.chatType===`group`?n.from:n.from?.replace(/^whatsapp:/,``),timestamp:n.timestamp,body:l,chatType:n.chatType,sender:{name:n.senderName,e164:n.senderE164,id:n.senderJid},previousTimestamp:i,envelope:a,fromMe:n.fromMe})}async function cn(e){let t=e.cfg.commands?.useAccessGroups!==!1;if(!t)return!0;let n=e.msg.chatType===`group`,r=f(n?e.msg.senderE164??``:e.msg.senderE164??e.msg.from??``);if(!r)return!1;let i=b({cfg:e.cfg,accountId:e.msg.accountId}),a=i.dmPolicy??`pairing`,o=i.groupPolicy??`allowlist`,s=i.allowFrom??[],c=i.groupAllowFrom??(s.length>0?s:void 0),l=n?[]:await we({provider:`whatsapp`,accountId:e.msg.accountId,dmPolicy:a});return P({isGroup:n,dmPolicy:a,groupPolicy:o,allowFrom:s.length>0?s:e.msg.selfE164?[e.msg.selfE164]:[],groupAllowFrom:c,storeAllowFrom:l,isSenderAllowed:e=>e.includes(`*`)?!0:e.map(e=>f(String(e))).filter(e=>!!e).includes(r),command:{useAccessGroups:t,allowTextCommands:!0,hasControlCommand:!0}}).commandAuthorized}function ln(e){let t=b({cfg:e.cfg,accountId:e.msg.accountId});return z({dmScope:e.cfg.session?.dmScope,allowFrom:t.allowFrom,normalizeEntry:e=>f(e)})}async function un(e){let t=e.msg.conversationId??e.msg.from,{storePath:n,envelopeOptions:r,previousTimestamp:i}=ue({cfg:e.cfg,agentId:e.route.agentId,sessionKey:e.route.sessionKey}),o=sn({cfg:e.cfg,msg:e.msg,agentId:e.route.agentId,previousTimestamp:i,envelope:r}),s=!1;if(e.msg.chatType===`group`){let n=e.groupHistory??e.groupHistories.get(e.groupHistoryKey)??[];n.length>0&&(o=le({entries:n.map(e=>({sender:e.sender,body:e.body,timestamp:e.timestamp})),currentMessage:o,excludeLast:!1,formatEntry:e=>R({channel:`WhatsApp`,from:t,timestamp:e.timestamp,body:e.body,chatType:`group`,senderLabel:e.sender,envelope:r})})),s=!(e.suppressGroupHistoryClear??!1)}let c=e.buildCombinedEchoKey({sessionKey:e.route.sessionKey,combinedBody:o});if(e.echoHas(c))return u(`Skipping auto-reply: detected echo for combined message`),e.echoForget(c),!1;an({cfg:e.cfg,msg:e.msg,agentId:e.route.agentId,sessionKey:e.route.sessionKey,conversationId:t,verbose:e.verbose,accountId:e.route.accountId,info:e.replyLogger.info.bind(e.replyLogger),warn:e.replyLogger.warn.bind(e.replyLogger)});let l=e.msg.id??J();e.replyLogger.info({connectionId:e.connectionId,correlationId:l,from:e.msg.chatType===`group`?t:e.msg.from,to:e.msg.to,body:$(o,240),mediaType:e.msg.mediaType??null,mediaPath:e.msg.mediaPath??null},`inbound web message`);let d=e.msg.chatType===`group`?t:e.msg.from,m=e.msg.mediaType?`, ${e.msg.mediaType}`:``;X.info(`Inbound message ${d} -> ${e.msg.to} (${e.msg.chatType}${m}, ${o.length} chars)`),a()&&X.debug(`Inbound body: ${$(o,400)}`);let h=e.msg.chatType===`group`?void 0:e.msg.senderE164?f(e.msg.senderE164):e.msg.from.includes(`@`)?p(e.msg.from):f(e.msg.from),g=e.maxMediaTextChunkLimit??Me(e.cfg,`whatsapp`),_=je(e.cfg,`whatsapp`,e.route.accountId),y=Ne({cfg:e.cfg,channel:`whatsapp`,accountId:e.route.accountId}),b=Oe(e.cfg,e.route.agentId),x=!1,S=!1,C=I(e.msg.body,e.cfg)?await cn({cfg:e.cfg,msg:e.msg}):void 0,w=e.cfg.messages?.responsePrefix,{onModelSelected:T,...E}=he({cfg:e.cfg,agentId:e.route.agentId,channel:`whatsapp`,accountId:e.route.accountId}),D=e.msg.chatType!==`group`&&!!e.msg.selfE164&&f(e.msg.from)===f(e.msg.selfE164??``),ee=E.responsePrefix??(w===void 0&&D?L(e.cfg,e.route.agentId):void 0),te=e.msg.chatType===`group`?(e.groupHistory??e.groupHistories.get(e.groupHistoryKey)??[]).map(e=>({sender:e.sender,body:e.body,timestamp:e.timestamp})):void 0,O=ae({Body:o,BodyForAgent:e.msg.body,InboundHistory:te,RawBody:e.msg.body,CommandBody:e.msg.body,From:e.msg.from,To:e.msg.to,SessionKey:e.route.sessionKey,AccountId:e.route.accountId,MessageSid:e.msg.id,ReplyToId:e.msg.replyToId,ReplyToBody:e.msg.replyToBody,ReplyToSender:e.msg.replyToSender,MediaPath:e.msg.mediaPath,MediaUrl:e.msg.mediaUrl,MediaType:e.msg.mediaType,ChatType:e.msg.chatType,ConversationLabel:e.msg.chatType===`group`?t:e.msg.from,GroupSubject:e.msg.groupSubject,GroupMembers:qt({participants:e.msg.groupParticipants,roster:e.groupMemberNames.get(e.groupHistoryKey),fallbackE164:e.msg.senderE164}),SenderName:e.msg.senderName,SenderId:e.msg.senderJid?.trim()||e.msg.senderE164,SenderE164:e.msg.senderE164,CommandAuthorized:C,WasMentioned:e.msg.wasMentioned,...e.msg.location?Ee(e.msg.location):{},Provider:`whatsapp`,Surface:`whatsapp`,OriginatingChannel:`whatsapp`,OriginatingTo:e.msg.from}),k=ln({cfg:e.cfg,msg:e.msg}),ne=!k||k===h,A=H({route:e.route,sessionKey:e.route.sessionKey});h&&A===e.route.mainSessionKey&&ne?$t({cfg:e.cfg,backgroundTasks:e.backgroundTasks,storeAgentId:e.route.agentId,sessionKey:e.route.mainSessionKey,channel:`whatsapp`,to:h,accountId:e.route.accountId,ctx:O,warn:e.replyLogger.warn.bind(e.replyLogger)}):h&&A===e.route.mainSessionKey&&k&&u(`Skipping main-session last route update for ${h} (pinned owner ${k})`);let j=v({storePath:n,sessionKey:e.route.sessionKey,ctx:O}).catch(t=>{e.replyLogger.warn({error:q(t),storePath:n,sessionKey:e.route.sessionKey},`failed updating session meta`)});Qt(e.backgroundTasks,j);let{queuedFinal:M}=await Se({ctx:O,cfg:e.cfg,replyResolver:e.replyResolver,dispatcherOptions:{...E,responsePrefix:ee,onHeartbeatStrip:()=>{x||(x=!0,u(`Stripped stray HEARTBEAT_OK token from web reply`))},deliver:async(n,r)=>{if(r.kind!==`final`)return;await rn({replyResult:n,msg:e.msg,mediaLocalRoots:b,maxMediaBytes:e.maxMediaBytes,textLimit:g,chunkMode:_,replyLogger:e.replyLogger,connectionId:e.connectionId,skipLog:!1,tableMode:y}),S=!0;let i=n.text?!0:void 0;e.rememberSentText(n.text,{combinedBody:o,combinedBodySessionKey:e.route.sessionKey,logVerboseMessage:i});let s=e.msg.chatType===`group`?t:e.msg.from??`unknown`,c=!!(n.mediaUrl||n.mediaUrls?.length);if(Z.info(`Auto-replied to ${s}${c?` (media)`:``}`),a()){let e=n.text==null?`<media>`:$(n.text,400);Z.debug(`Reply body: ${e}${c?` (media)`:``}`)}},onError:(n,r)=>{let i=r.kind===`tool`?`tool update`:r.kind===`block`?`block update`:`auto-reply`;Z.error(`Failed sending web ${i} to ${e.msg.from??t}: ${q(n)}`)},onReplyStart:e.msg.sendComposing},replyOptions:{disableBlockStreaming:!0,onModelSelected:T}});return M?(s&&e.groupHistories.set(e.groupHistoryKey,[]),S):(s&&e.groupHistories.set(e.groupHistoryKey,[]),u(`Skipping auto-reply: silent token or no text/media returned from resolver`),!1)}function dn(e){let n=async(t,n,r,i)=>un({cfg:e.cfg,msg:t,route:n,groupHistoryKey:r,groupHistories:e.groupHistories,groupMemberNames:e.groupMemberNames,connectionId:e.connectionId,verbose:e.verbose,maxMediaBytes:e.maxMediaBytes,replyResolver:e.replyResolver,replyLogger:e.replyLogger,backgroundTasks:e.backgroundTasks,rememberSentText:e.echoTracker.rememberText,echoHas:e.echoTracker.has,echoForget:e.echoTracker.forget,buildCombinedEchoKey:e.echoTracker.buildCombinedKey,groupHistory:i?.groupHistory,suppressGroupHistoryClear:i?.suppressGroupHistoryClear});return async r=>{let i=r.conversationId??r.from,a=en(r),o=ce({cfg:A(),channel:`whatsapp`,accountId:r.accountId,peer:{kind:r.chatType===`group`?`group`:`direct`,id:a}}),s=r.chatType===`group`?t({channel:`whatsapp`,accountId:o.accountId,peerKind:`group`,peerId:a}):o.sessionKey;if(r.from===r.to&&u(`📱 Same-phone mode detected (from === to: ${r.from})`),e.echoTracker.has(r.body)){u(`Skipping auto-reply: detected echo (message matches recently sent text)`),e.echoTracker.forget(r.body);return}if(r.chatType===`group`){let t={From:r.from,To:r.to,SessionKey:o.sessionKey,AccountId:o.accountId,ChatType:r.chatType,ConversationLabel:i,GroupSubject:r.groupSubject,SenderName:r.senderName,SenderId:r.senderJid?.trim()||r.senderE164,SenderE164:r.senderE164,Provider:`whatsapp`,Surface:`whatsapp`,OriginatingChannel:`whatsapp`,OriginatingTo:i};if($t({cfg:e.cfg,backgroundTasks:e.backgroundTasks,storeAgentId:o.agentId,sessionKey:o.sessionKey,channel:`whatsapp`,to:i,accountId:o.accountId,ctx:t,warn:e.replyLogger.warn.bind(e.replyLogger)}),!Zt({cfg:e.cfg,msg:r,conversationId:i,groupHistoryKey:s,agentId:o.agentId,sessionKey:o.sessionKey,baseMentionConfig:e.baseMentionConfig,authDir:e.account.authDir,groupHistories:e.groupHistories,groupHistoryLimit:e.groupHistoryLimit,groupMemberNames:e.groupMemberNames,logVerbose:u,replyLogger:e.replyLogger}).shouldProcess)return}else !r.senderE164&&a&&a.startsWith(`+`)&&(r.senderE164=f(a)??r.senderE164);await Bt({cfg:e.cfg,msg:r,peerId:a,route:o,groupHistoryKey:s,groupHistories:e.groupHistories,processMessage:n})||await n(r,o,s)}}function fn(e){return e===440}async function pn(e,t=Mt,n=!0,r=ge,i=c,a,o={}){let l=J(),d=s({module:`web-auto-reply`,runId:l}),f=s({module:`web-heartbeat`,runId:l}),p=s({module:`web-reconnect`,runId:l}),m={running:!0,connected:!1,reconnectAttempts:0,lastConnectedAt:null,lastDisconnect:null,lastMessageAt:null,lastEventAt:null,lastError:null},h=()=>{o.statusSink?.({...m,lastDisconnect:m.lastDisconnect?{...m.lastDisconnect}:null})};h();let g=A(),v=b({cfg:g,accountId:o.accountId}),y={...g,channels:{...g.channels,whatsapp:{...g.channels?.whatsapp,ackReaction:v.ackReaction,messagePrefix:v.messagePrefix,allowFrom:v.allowFrom,groupAllowFrom:v.groupAllowFrom,groupPolicy:v.groupPolicy,textChunkLimit:v.textChunkLimit,chunkMode:v.chunkMode,mediaMaxMb:v.mediaMaxMb,blockStreaming:v.blockStreaming,groups:v.groups}}},S=C(v),w=$e(y,o.heartbeatSeconds),T=et(y,o.reconnect),D=Nt(y),ee=y.channels?.whatsapp?.accounts?.[o.accountId??``]?.historyLimit??y.channels?.whatsapp?.historyLimit??y.messages?.groupChat?.historyLimit??50,te=new Map,O=new Map,k=Rt({maxItems:100,logVerbose:u}),ne=o.sleep??((e,t)=>G(e,t??a)),j=()=>a?.aborted===!0,M=a&&new Promise(e=>a.addEventListener(`abort`,()=>e(`aborted`),{once:!0})),N=process.getMaxListeners?.()??10;process.setMaxListeners&&N<50&&process.setMaxListeners(50);let P=!1,F=()=>{P=!0};process.once(`SIGINT`,F);let I=0;for(;!j();){let s=J(),c=Date.now(),l=null,g=null,b=null,C=0,A=null,N=o.messageTimeoutMs??1800*1e3,ie=o.watchdogCheckMs??60*1e3,L=new Set,ae=dn({cfg:y,verbose:e,connectionId:s,maxMediaBytes:S,groupHistoryLimit:ee,groupHistories:te,groupMemberNames:O,echoTracker:k,backgroundTasks:L,replyResolver:r??ge,replyLogger:d,baseMentionConfig:D,account:v}),R=xe({cfg:y,channel:`whatsapp`}),z=await(t??Mt)({verbose:e,accountId:v.accountId,authDir:v.authDir,mediaMaxMb:v.mediaMaxMb,sendReadReceipts:v.sendReadReceipts,debounceMs:R,shouldDebounce:e=>e.mediaPath||e.mediaType||e.location||e.replyToId||e.replyToBody?!1:!re(e.body,y),onMessage:async e=>{C+=1,b=Date.now(),m.lastMessageAt=b,m.lastEventAt=b,h(),await ae(e)}});Object.assign(m,ye()),m.lastError=null,h();let{e164:B}=x(v.authDir),oe=ce({cfg:y,channel:`whatsapp`,accountId:v.accountId});be(`WhatsApp gateway connected${B?` as ${B}`:``}.`,{sessionKey:oe.sessionKey}),Le(v.accountId,z),A=Pe(e=>{if(!tn(e))return!1;let t=q(e);return p.warn({connectionId:s,error:t},`web reconnect: unhandled rejection from WhatsApp socket; forcing reconnect`),z.signalClose?.({status:499,isLoggedOut:!1,error:e}),!0});let V=async()=>{Le(v.accountId,null),A&&=(A(),null),l&&clearInterval(l),g&&clearInterval(g),L.size>0&&(await Promise.allSettled(L),L.clear());try{await z.close()}catch(e){u(`Socket close failed: ${q(e)}`)}};if(n&&(l=setInterval(()=>{let e=_(v.authDir),t=b?Math.floor((Date.now()-b)/6e4):null,n={connectionId:s,reconnectAttempts:I,messagesHandled:C,lastMessageAt:b,authAgeMs:e,uptimeMs:Date.now()-c,...t!==null&&t>30?{minutesSinceLastMessage:t}:{}};t&&t>30?f.warn(n,`⚠️ web gateway heartbeat - no messages in 30+ minutes`):f.info(n,`web gateway heartbeat`)},w*1e3),g=setInterval(()=>{if(!b)return;let e=Date.now()-b;if(e<=N)return;let t=Math.floor(e/6e4);f.warn({connectionId:s,minutesSinceLastMessage:t,lastMessageAt:new Date(b),messagesHandled:C},`Message timeout detected - forcing reconnect`),tt.warn(`No messages received in ${t}m - restarting connection`),V().catch(e=>{u(`Close listener failed: ${q(e)}`)}),z.signalClose?.({status:499,isLoggedOut:!1,error:`watchdog-timeout`})},ie)),Y.info(`Listening for personal WhatsApp inbound messages.`),(process.stdout.isTTY||process.stderr.isTTY)&&Y.raw(`Ctrl+C to stop.`),!n){await V(),process.removeListener(`SIGINT`,F);return}let H=await Promise.race([z.onClose?.catch(e=>(p.error({error:q(e)},`listener.onClose rejected`),{status:500,isLoggedOut:!1,error:e}))??nt(),M??nt()]);if(Date.now()-c>w*1e3&&(I=0),m.reconnectAttempts=I,h(),j()||P||H===`aborted`){await V();break}let U=(typeof H==`object`&&H&&`status`in H?H.status:void 0)??`unknown`,W=typeof H==`object`&&H&&`isLoggedOut`in H&&H.isLoggedOut,G=q(H);if(m.connected=!1,m.lastEventAt=Date.now(),m.lastDisconnect={at:m.lastEventAt,status:typeof U==`number`?U:void 0,error:G,loggedOut:!!W},m.lastError=G,m.reconnectAttempts=I,h(),p.info({connectionId:s,status:U,loggedOut:W,reconnectAttempts:I,error:G},`web reconnect: connection closed`),be(`WhatsApp gateway disconnected (status ${U??`unknown`})`,{sessionKey:oe.sessionKey}),W){i.error(`WhatsApp session logged out. Run \`${E(`openclaw channels login --channel web`)}\` to relink.`),await V();break}if(fn(U)){p.warn({connectionId:s,status:U,error:G},`web reconnect: non-retryable close status; stopping monitor`),i.error(`WhatsApp Web connection closed (status ${U}: session conflict). Resolve conflicting WhatsApp Web sessions, then relink with \`${E(`openclaw channels login --channel web`)}\`. Stopping web monitoring.`),await V();break}if(I+=1,m.reconnectAttempts=I,h(),T.maxAttempts>0&&I>=T.maxAttempts){p.warn({connectionId:s,status:U,reconnectAttempts:I,maxAttempts:T.maxAttempts},`web reconnect: max attempts reached; continuing in degraded mode`),i.error(`WhatsApp Web reconnect: max attempts reached (${I}/${T.maxAttempts}). Stopping web monitoring.`),await V();break}let K=se(T,I);p.info({connectionId:s,status:U,reconnectAttempts:I,maxAttempts:T.maxAttempts||`unlimited`,delayMs:K},`web reconnect: scheduling retry`),i.error(`WhatsApp Web connection closed (status ${U}). Retry ${I}/${T.maxAttempts||`∞`} in ${Ce(K)}… (${G})`),await V();try{await ne(K,a)}catch{break}}m.running=!1,m.connected=!1,m.lastEventAt=Date.now(),h(),process.removeListener(`SIGINT`,F)}export{te as WA_WEB_AUTH_DIR,Ue as createWaSocket,ee as logWebSelfId,We as loginWeb,pn as monitorWebChannel,Mt as monitorWebInbox,T as pickWebChannel,Be as sendMessageWhatsApp,Ve as waitForWaConnection,y as webAuthExists};
|
|
6
|
-
//# sourceMappingURL=web-
|
|
6
|
+
//# sourceMappingURL=web-BsmnVZaX.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
require(`./paths-Bcdg3ma0.cjs`);const e=require(`./paths-CIcxeNL-.cjs`),t=require(`./utils-PPIvU9qw.cjs`),n=require(`./model-auth-BwajGuoF.cjs`);require(`./target-errors-9cdJA1L2.cjs`);const r=require(`./dispatch-
|
|
1
|
+
require(`./paths-Bcdg3ma0.cjs`);const e=require(`./paths-CIcxeNL-.cjs`),t=require(`./utils-PPIvU9qw.cjs`),n=require(`./model-auth-BwajGuoF.cjs`);require(`./target-errors-9cdJA1L2.cjs`);const r=require(`./dispatch-wEH2eS4y.cjs`),i=require(`./send-CxMiTtxI.cjs`),a=require(`./send-CuX4LcJ3.cjs`);require(`./proxy-env-D48qBPAr.cjs`),require(`./github-copilot-token-C1O2cBqk.cjs`),require(`./send-DZr98eqE.cjs`),require(`./fetch-guard-DLNzldn9.cjs`),require(`./deliver-C-tChWTI.cjs`),require(`./diagnostic-Cu1PGj0E.cjs`),require(`./pi-model-discovery-DMrqvV1O.cjs`);const o=require(`./audio-transcription-runner-ClGibmMi.cjs`);require(`./image-DJyEMzkq.cjs`),require(`./api-key-rotation-Bj1A9Slo.cjs`);const s=require(`./local-roots-D4i3H0UG.cjs`);require(`./proxy-fetch-BwXFVsHE.cjs`),require(`./tokens-CnB4dJmp.cjs`),require(`./commands-registry-DkUhCIDk.cjs`),require(`./fetch-CZewCAvu.cjs`);const c=require(`./ir-DSuLr2UE.cjs`);require(`./render-g5VlmgpF.cjs`);const l=require(`./channel-activity-CgXnZ0GC.cjs`),u=require(`./tables-Bk8lHaPx.cjs`);require(`./send-B3aEYvqG.cjs`),require(`./fetch-BN9y3kTg.cjs`),require(`./skill-commands-BoTeA376.cjs`),require(`./outbound-attachment-BDwI_tn0.cjs`),require(`./send-C4cyMW4S.cjs`);const d=require(`./active-listener-BZPPbsNy.cjs`);require(`./query-expansion-cpXCyoDy.cjs`),require(`./manager-DIS4ywpb.cjs`);const f=require(`./outbound-9XFlZzaF.cjs`),p=require(`./session-DUlmK2IL.cjs`),m=require(`./login-DIPBcPQc.cjs`);let h=require(`node:crypto`),g=require(`@whiskeysockets/baileys`);const _={initialMs:2e3,maxMs:3e4,factor:1.8,jitter:.25,maxAttempts:12};function v(e,t){let n=t??e.web?.heartbeatSeconds;return typeof n==`number`&&n>0?n:60}function y(e,n){let r=e.web?.reconnect??{},i=n??{},a={..._,...r,...i};return a.initialMs=Math.max(250,a.initialMs),a.maxMs=Math.max(a.initialMs,a.maxMs),a.factor=t.n(a.factor,1.1,10),a.jitter=t.n(a.jitter,0,1),a.maxAttempts=Math.max(0,Math.floor(a.maxAttempts)),a}function b(){return(0,h.randomUUID)()}const x=t.O(`gateway/channels/whatsapp`),S=x.child(`inbound`),C=x.child(`outbound`),ee=x.child(`heartbeat`);function w(){return setInterval(()=>{},1e6).unref(),new Promise(()=>{})}const T=r.B({ttlMs:20*6e4,maxSize:5e3});function E(e){return T.check(e)}const D=new Set([`FN`,`N`,`TEL`]);function O(e){if(!e)return{phones:[]};let t=e.split(/\r?\n/),n,r,i=[];for(let e of t){let t=e.trim();if(!t)continue;let a=t.indexOf(`:`);if(a===-1)continue;let o=t.slice(0,a).toUpperCase(),s=t.slice(a+1).trim();if(!s)continue;let c=k(o);if(!c||!D.has(c))continue;let l=A(s);if(l){if(c===`FN`&&!r){r=j(l);continue}if(c===`N`&&!n){n=j(l);continue}if(c===`TEL`){let e=M(l);e&&i.push(e)}}}return{name:r??n,phones:i}}function k(e){let[t]=e.split(`;`);if(!t)return;let n=t.split(`.`);return n[n.length-1]||void 0}function A(e){return e.replace(/\\n/gi,` `).replace(/\\,/g,`,`).replace(/\\;/g,`;`).trim()}function j(e){return e.replace(/;/g,` `).replace(/\s+/g,` `).trim()}function M(e){let t=e.trim();return t?t.toLowerCase().startsWith(`tel:`)?t.slice(4).trim():t:``}function N(e){return(0,g.normalizeMessageContent)(e)}function P(e){if(!e)return;let t=(0,g.getContentType)(e),n=t?e[t]:void 0,r=n&&typeof n==`object`&&`contextInfo`in n?n.contextInfo:void 0;if(r)return r;let i=e.extendedTextMessage?.contextInfo??e.imageMessage?.contextInfo??e.videoMessage?.contextInfo??e.documentMessage?.contextInfo??e.audioMessage?.contextInfo??e.stickerMessage?.contextInfo??e.buttonsResponseMessage?.contextInfo??e.listResponseMessage?.contextInfo??e.templateButtonReplyMessage?.contextInfo??e.interactiveResponseMessage?.contextInfo??e.buttonsMessage?.contextInfo??e.listMessage?.contextInfo;if(i)return i;for(let t of Object.values(e)){if(!t||typeof t!=`object`||!(`contextInfo`in t))continue;let e=t.contextInfo;if(e)return e}}function F(e){let t=N(e);if(!t)return;let n=[t.extendedTextMessage?.contextInfo?.mentionedJid,t.extendedTextMessage?.contextInfo?.quotedMessage?.extendedTextMessage?.contextInfo?.mentionedJid,t.imageMessage?.contextInfo?.mentionedJid,t.videoMessage?.contextInfo?.mentionedJid,t.documentMessage?.contextInfo?.mentionedJid,t.audioMessage?.contextInfo?.mentionedJid,t.stickerMessage?.contextInfo?.mentionedJid,t.buttonsResponseMessage?.contextInfo?.mentionedJid,t.listResponseMessage?.contextInfo?.mentionedJid].flatMap(e=>e??[]).filter(Boolean);if(n.length!==0)return Array.from(new Set(n))}function I(e){let t=N(e);if(!t)return;let n=(0,g.extractMessageContent)(t),r=[t,n&&n!==t?n:void 0];for(let e of r){if(!e)continue;if(typeof e.conversation==`string`&&e.conversation.trim())return e.conversation.trim();let t=e.extendedTextMessage?.text;if(t?.trim())return t.trim();let n=e.imageMessage?.caption??e.videoMessage?.caption??e.documentMessage?.caption;if(n?.trim())return n.trim()}let i=R(t)??(n&&n!==t?R(n):void 0);if(i)return i}function L(e){let t=N(e);if(t){if(t.imageMessage)return`<media:image>`;if(t.videoMessage)return`<media:video>`;if(t.audioMessage)return`<media:audio>`;if(t.documentMessage)return`<media:document>`;if(t.stickerMessage)return`<media:sticker>`}}function R(e){let t=N(e);if(!t)return;let n=t.contactMessage??void 0;if(n){let{name:e,phones:t}=z({displayName:n.displayName,vcard:n.vcard});return B(e,t)}let r=t.contactsArrayMessage?.contacts??void 0;if(!(!r||r.length===0))return V(r.map(e=>z({displayName:e.displayName,vcard:e.vcard})).map(e=>H(e.name,e.phones)).filter(e=>!!e),r.length)}function z(e){let t=(e.displayName??``).trim(),n=O(e.vcard??void 0);return{name:t||n.name,phones:n.phones}}function B(e,t){let n=H(e,t);return n?`<contact: ${n}>`:`<contact>`}function V(e,t){let n=e.map(e=>e.trim()).filter(Boolean);if(n.length===0)return`<contacts: ${t} ${t===1?`contact`:`contacts`}>`;let r=Math.max(t-n.length,0),i=r>0?` +${r} more`:``;return`<contacts: ${n.join(`, `)}${i}>`}function H(e,t){let n=[e,U(t)].filter(e=>!!e);if(n.length!==0)return n.join(`, `)}function U(e){let t=e?.map(e=>e.trim()).filter(Boolean)??[];if(t.length===0)return;let{shown:n,remaining:r}=te(t,t.length,1),[i]=n;if(i)return r===0?i:`${i} (+${r} more)`}function te(e,t,n){let r=e.slice(0,n);return{shown:r,remaining:Math.max(t-r.length,0)}}function ne(e){let t=N(e);if(!t)return null;let n=t.liveLocationMessage??void 0;if(n){let e=n.degreesLatitude,t=n.degreesLongitude;if(e!=null&&t!=null){let r=Number(e),i=Number(t);if(Number.isFinite(r)&&Number.isFinite(i))return{latitude:r,longitude:i,accuracy:n.accuracyInMeters??void 0,caption:n.caption??void 0,source:`live`,isLive:!0}}}let r=t.locationMessage??void 0;if(r){let e=r.degreesLatitude,t=r.degreesLongitude;if(e!=null&&t!=null){let n=Number(e),i=Number(t);if(Number.isFinite(n)&&Number.isFinite(i)){let e=!!r.isLive;return{latitude:n,longitude:i,accuracy:r.accuracyInMeters??void 0,name:r.name??void 0,address:r.address??void 0,caption:r.comment??void 0,source:e?`live`:r.name||r.address?`place`:`pin`,isLive:e}}}}return null}function W(e){let n=N(e);if(!n)return null;let r=P(n),a=(0,g.normalizeMessageContent)(r?.quotedMessage);if(!a)return null;let o=ne(a),s=o?i.ct(o):void 0,c=[I(a),s].filter(Boolean).join(`
|
|
2
2
|
`).trim();if(c||=L(a),!c){let e=a?(0,g.getContentType)(a):void 0;return t.R(`Quoted message missing extractable body${e?` (type ${e})`:``}`),null}let l=r?.participant??void 0,u=l?t.u(l)??l:void 0,d=u??`unknown sender`;return{id:r?.stanzaId?String(r.stanzaId):void 0,body:c,sender:d,senderJid:l,senderE164:u}}function re(e){return a.Nt({providerConfigPresent:e.providerConfigPresent,groupPolicy:e.groupPolicy,defaultGroupPolicy:e.defaultGroupPolicy})}async function ie(e){let o=n.Gi(),s=n.zs({cfg:o,accountId:e.accountId}),c=s.dmPolicy??`pairing`,l=s.allowFrom??[],u=await r.U({provider:`whatsapp`,accountId:s.accountId,dmPolicy:c}),d=l.length===0&&e.selfE164?[e.selfE164]:[],f=l.length>0?l:d,p=s.groupAllowFrom??(l.length>0?l:void 0),m=e.from===e.selfE164,h=s.selfChatMode??t.l(e.selfE164,l),g=typeof e.pairingGraceMs==`number`&&e.pairingGraceMs>0?e.pairingGraceMs:3e4,_=typeof e.connectedAtMs==`number`&&typeof e.messageTimestampMs==`number`&&e.messageTimestampMs<e.connectedAtMs-g,v=a.Mt(o),{groupPolicy:y,providerMissingFallbackApplied:b}=re({providerConfigPresent:o.channels?.whatsapp!==void 0,groupPolicy:s.groupPolicy,defaultGroupPolicy:v});a.Pt({providerMissingFallbackApplied:b,providerKey:`whatsapp`,accountId:s.accountId,log:e=>t.R(e)});let x=t.d(e.from),S=typeof e.senderE164==`string`?t.d(e.senderE164):null,C=r.G({isGroup:e.group,dmPolicy:c,groupPolicy:y,allowFrom:e.group?l:f,groupAllowFrom:p,storeAllowFrom:u,isSenderAllowed:n=>{if(n.includes(`*`))return!0;let r=new Set(n.map(e=>t.d(String(e))).filter(e=>!!e));return!e.group&&m?!0:e.group?!!(S&&r.has(S)):r.has(x)}});if(e.group&&C.decision!==`allow`)return C.reason===`groupPolicy=disabled`?t.R(`Blocked group message (groupPolicy: disabled)`):C.reason===`groupPolicy=allowlist (empty allowlist)`?t.R(`Blocked group message (groupPolicy: allowlist, no groupAllowFrom)`):t.R(`Blocked group message from ${e.senderE164??`unknown sender`} (groupPolicy: allowlist)`),{allowed:!1,shouldMarkRead:!1,isSelfChat:h,resolvedAccountId:s.accountId};if(!e.group){if(e.isFromMe&&!m)return t.R(`Skipping outbound DM (fromMe); no pairing reply needed.`),{allowed:!1,shouldMarkRead:!1,isSelfChat:h,resolvedAccountId:s.accountId};if(C.decision===`block`&&C.reason===`dmPolicy=disabled`)return t.R(`Blocked dm (dmPolicy: disabled)`),{allowed:!1,shouldMarkRead:!1,isSelfChat:h,resolvedAccountId:s.accountId};if(C.decision===`pairing`&&!m){let n=e.from;return _?t.R(`Skipping pairing reply for historical DM from ${n}.`):await r.q({channel:`whatsapp`,senderId:n,senderIdLine:`Your WhatsApp phone number: ${n}`,meta:{name:(e.pushName??``).trim()||void 0},upsertPairingRequest:async({id:e,meta:t})=>await i.$({channel:`whatsapp`,id:e,accountId:s.accountId,meta:t}),onCreated:()=>{t.R(`whatsapp pairing request sender=${n} name=${e.pushName??`unknown`}`)},sendPairingReply:async t=>{await e.sock.sendMessage(e.remoteJid,{text:t})},onReplyError:e=>{t.R(`whatsapp pairing reply failed for ${n}: ${String(e)}`)}}),{allowed:!1,shouldMarkRead:!1,isSelfChat:h,resolvedAccountId:s.accountId}}if(C.decision!==`allow`)return t.R(`Blocked unauthorized sender ${e.from} (dmPolicy=${c})`),{allowed:!1,shouldMarkRead:!1,isSelfChat:h,resolvedAccountId:s.accountId}}return{allowed:!0,shouldMarkRead:!0,isSelfChat:h,resolvedAccountId:s.accountId}}function G(e){return(0,g.normalizeMessageContent)(e)}function K(e){let t=e.imageMessage?.mimetype??e.videoMessage?.mimetype??e.documentMessage?.mimetype??e.audioMessage?.mimetype??e.stickerMessage?.mimetype??void 0;if(t)return t;if(e.audioMessage)return`audio/ogg; codecs=opus`;if(e.imageMessage)return`image/jpeg`;if(e.videoMessage)return`video/mp4`;if(e.stickerMessage)return`image/webp`}async function ae(e,n){let r=G(e.message);if(!r)return;let i=K(r),a=r.documentMessage?.fileName??void 0;if(!(!r.imageMessage&&!r.videoMessage&&!r.documentMessage&&!r.audioMessage&&!r.stickerMessage))try{return{buffer:await(0,g.downloadMediaMessage)(e,`buffer`,{},{reuploadRequest:n.updateMediaMessage,logger:n.logger}),mimetype:i,fileName:a}}catch(e){t.R(`downloadMediaMessage failed: ${String(e)}`);return}}function q(e){l.n({channel:`whatsapp`,accountId:e,direction:`outbound`})}function J(e){return typeof e==`object`&&e&&`key`in e?String(e.key?.id??`unknown`):`unknown`}function Y(e){return{sendMessage:async(n,r,i,a,o)=>{let s=t.x(n),c;if(i&&a)if(a.startsWith(`image/`))c={image:i,caption:r||void 0,mimetype:a};else if(a.startsWith(`audio/`))c={audio:i,ptt:!0,mimetype:a};else if(a.startsWith(`video/`)){let e=o?.gifPlayback;c={video:i,caption:r||void 0,mimetype:a,...e?{gifPlayback:!0}:{}}}else c={document:i,fileName:o?.fileName?.trim()||`file`,caption:r||void 0,mimetype:a};else c={text:r};let l=await e.sock.sendMessage(s,c);return q(o?.accountId??e.defaultAccountId),{messageId:J(l)}},sendPoll:async(n,r)=>{let i=t.x(n),a=await e.sock.sendMessage(i,{poll:{name:r.question,values:r.options,selectableCount:r.maxSelections??1}});return q(e.defaultAccountId),{messageId:J(a)}},sendReaction:async(n,r,i,a,o)=>{let s=t.x(n);await e.sock.sendMessage(s,{react:{text:i,key:{remoteJid:s,id:r,fromMe:a,participant:o?t.x(o):void 0}}})},sendComposingTo:async n=>{let r=t.x(n);await e.sock.sendPresenceUpdate(`composing`,r)}}}async function oe(e){let a=t.K({module:`web-inbound`}),o=t.O(`gateway/channels/whatsapp`).child(`inbound`),s=await p.t(!1,e.verbose,{authDir:e.authDir});await p.i(s);let c=Date.now(),u=null,d=new Promise(e=>{u=e}),f=e=>{if(!u)return;let t=u;u=null,t(e)};try{await s.sendPresenceUpdate(`available`),t.B()&&t.R(`Sent global 'available' presence on connect`)}catch(e){t.R(`Failed to send 'available' presence on connect: ${String(e)}`)}let m=s.user?.id,h=m?t.u(m):null,_=r.T({debounceMs:e.debounceMs??0,buildKey:e=>{let t=e.chatType===`group`?e.senderJid??e.senderE164??e.senderName??e.from:e.from;if(!t)return null;let n=e.chatType===`group`?e.chatId:e.from;return`${e.accountId}:${n}:${t}`},shouldDebounce:e.shouldDebounce,onFlush:async t=>{let n=t.at(-1);if(!n)return;if(t.length===1){await e.onMessage(n);return}let r=new Set;for(let e of t)for(let t of e.mentionedJids??[])r.add(t);let i=t.map(e=>e.body).filter(Boolean).join(`
|
|
3
3
|
`),a={...n,body:i,mentionedJids:r.size>0?Array.from(r):void 0};await e.onMessage(a)},onError:e=>{a.error({error:String(e)},`failed handling inbound web message`),o.error(`Failed handling inbound web message: ${String(e)}`)}}),v=new Map,y=300*1e3,b=s.signalRepository?.lidMapping,x=async n=>t.m(n,{authDir:e.authDir,lidLookup:b}),S=async e=>{let n=v.get(e);if(n&&n.expires>Date.now())return n;try{let t=await s.groupMetadata(e),n=(await Promise.all(t.participants?.map(async e=>await x(e.id)??e.id)??[])).filter(Boolean)??[],r={subject:t.subject,participants:n,expires:Date.now()+y};return v.set(e,r),r}catch(n){return t.R(`Failed to fetch group metadata for ${e}: ${String(n)}`),{expires:Date.now()+y}}},C=async t=>{let n=t.key?.id??void 0,r=t.key?.remoteJid;if(!r||r.endsWith(`@status`)||r.endsWith(`@broadcast`))return null;let i=(0,g.isJidGroup)(r)===!0;if(n&&E(`${e.accountId}:${r}:${n}`))return null;let a=t.key?.participant??void 0,o=i?r:await x(r);if(!o)return null;let l=i?a?await x(a):null:o,u,d;if(i){let e=await S(r);u=e.subject,d=e.participants}let f=t.messageTimestamp?Number(t.messageTimestamp)*1e3:void 0,p=await ie({accountId:e.accountId,from:o,selfE164:h,senderE164:l,group:i,pushName:t.pushName??void 0,isFromMe:!!t.key?.fromMe,messageTimestampMs:f,connectedAtMs:c,sock:{sendMessage:(e,t)=>s.sendMessage(e,t)},remoteJid:r});return p.allowed?{id:n,remoteJid:r,group:i,participantJid:a,from:o,senderE164:l,groupSubject:u,groupParticipants:d,messageTimestampMs:f,access:p}:null},ee=async n=>{let{id:r,remoteJid:i,participantJid:a,access:o}=n;if(r&&!o.isSelfChat&&e.sendReadReceipts!==!1)try{await s.readMessages([{remoteJid:i,id:r,participant:a,fromMe:!1}]),t.B()&&t.R(`Marked message ${r} as read for ${i}${a?` (participant ${a})`:``}`)}catch(e){t.R(`Failed to mark message ${r} read: ${String(e)}`)}else r&&o.isSelfChat&&t.B()&&t.R(`Self-chat mode: skipping read receipt for ${r}`)},w=async r=>{let a=ne(r.message??void 0),o=a?i.ct(a):void 0,c=I(r.message??void 0);if(o&&(c=[c,o].filter(Boolean).join(`
|
|
4
4
|
`).trim()),!c&&(c=L(r.message??void 0),!c))return null;let l=W(r.message),u,d,f;try{let t=await ae(r,s);if(t){let r=(typeof e.mediaMaxMb==`number`&&e.mediaMaxMb>0?e.mediaMaxMb:50)*1024*1024;u=(await n.kr(t.buffer,t.mimetype,`inbound`,r,t.fileName)).path,d=t.mimetype,f=t.fileName}}catch(e){t.R(`Inbound media download failed: ${String(e)}`)}return{body:c,location:a??void 0,replyContext:l,mediaPath:u,mediaType:d,mediaFileName:f}},T=async(e,n,r)=>{let i=n.remoteJid,c=async()=>{try{await s.sendPresenceUpdate(`composing`,i)}catch(e){t.R(`Presence update failed: ${String(e)}`)}},l=async e=>{await s.sendMessage(i,{text:e})},u=async e=>{await s.sendMessage(i,e)},d=n.messageTimestampMs,f=F(e.message),p=e.pushName??void 0;a.info({from:n.from,to:h??`me`,body:r.body,mediaPath:r.mediaPath,mediaType:r.mediaType,mediaFileName:r.mediaFileName,timestamp:d},`inbound message`);let g={id:n.id,from:n.from,conversationId:n.from,to:h??`me`,accountId:n.access.resolvedAccountId,body:r.body,pushName:p,timestamp:d,chatType:n.group?`group`:`direct`,chatId:n.remoteJid,senderJid:n.participantJid,senderE164:n.senderE164??void 0,senderName:p,replyToId:r.replyContext?.id,replyToBody:r.replyContext?.body,replyToSender:r.replyContext?.sender,replyToSenderJid:r.replyContext?.senderJid,replyToSenderE164:r.replyContext?.senderE164,groupSubject:n.groupSubject,groupParticipants:n.groupParticipants,mentionedJids:f??void 0,selfJid:m,selfE164:h,fromMe:!!e.key?.fromMe,location:r.location??void 0,sendComposing:c,reply:l,sendMedia:u,mediaPath:r.mediaPath,mediaType:r.mediaType,mediaFileName:r.mediaFileName};try{Promise.resolve(_.enqueue(g)).catch(e=>{a.error({error:String(e)},`failed handling inbound web message`),o.error(`Failed handling inbound web message: ${String(e)}`)})}catch(e){a.error({error:String(e)},`failed handling inbound web message`),o.error(`Failed handling inbound web message: ${String(e)}`)}},D=async t=>{if(!(t.type!==`notify`&&t.type!==`append`))for(let n of t.messages??[]){l.n({channel:`whatsapp`,accountId:e.accountId,direction:`inbound`});let r=await C(n);if(!r||(await ee(r),t.type===`append`))continue;let i=await w(n);i&&await T(n,r,i)}};s.ev.on(`messages.upsert`,D);let O=e=>{try{if(e.connection===`close`){let t=p.r(e.lastDisconnect?.error);f({status:t,isLoggedOut:t===g.DisconnectReason.loggedOut,error:e.lastDisconnect?.error})}}catch(e){a.error({error:String(e)},`connection.update handler error`),f({status:void 0,isLoggedOut:!1,error:e})}};return s.ev.on(`connection.update`,O),{close:async()=>{try{let e=s.ev,t=D,n=O;typeof e.off==`function`?(e.off(`messages.upsert`,t),e.off(`connection.update`,n)):typeof e.removeListener==`function`&&(e.removeListener(`messages.upsert`,t),e.removeListener(`connection.update`,n)),s.ws?.close()}catch(e){t.R(`Socket close failed: ${String(e)}`)}},onClose:d,signalClose:e=>{f(e??{status:void 0,isLoggedOut:!1,error:`closed`})},...Y({sock:{sendMessage:(e,t)=>s.sendMessage(e,t),sendPresenceUpdate:(e,t)=>s.sendPresenceUpdate(e,t)},defaultAccountId:e.accountId})}}function X(e,t){return{mentionRegexes:r.A(e,t),allowFrom:e.channels?.whatsapp?.allowFrom}}function Z(e,n){let r=n?{authDir:n}:void 0;return{normalizedMentions:e.mentionedJids?.length?e.mentionedJids.map(e=>t.u(e,r)??e).filter(Boolean):[],selfE164:e.selfE164??(e.selfJid?t.u(e.selfJid,r):null),selfJid:e.selfJid?e.selfJid.replace(/:\\d+/,``):null}}function Q(e,n,i){let a=e=>r.j(e),o=t.l(i.selfE164,n.allowFrom);if((e.mentionedJids?.length??0)>0&&!o)return!!(i.selfE164&&i.normalizedMentions.includes(i.selfE164)||i.selfJid&&i.normalizedMentions.includes(i.selfJid));let s=a(e.body);if(n.mentionRegexes.some(e=>e.test(s)))return!0;if(i.selfE164){let t=i.selfE164.replace(/\D/g,``);if(t){if(s.replace(/[^\d]/g,``).includes(t))return!0;let n=e.body.replace(/[\s-]/g,``);if(RegExp(`\\+?${t}`,`i`).test(n))return!0}}return!1}function se(e,t,n){let i=Z(e,n);return{wasMentioned:Q(e,t,i),details:{from:e.from,body:e.body,bodyClean:r.j(e.body),mentionedJids:e.mentionedJids??null,normalizedMentionedJids:i.normalizedMentions.length?i.normalizedMentions:null,selfJid:e.selfJid??null,selfJidBare:i.selfJid,selfE164:e.selfE164??null,resolvedSelfE164:i.selfE164}}}function ce(e,n){let r=e.allowFrom;return(Array.isArray(r)&&r.length>0?r:n?[n]:[]).filter(e=>!!(e&&e!==`*`)).map(e=>t.d(e)).filter(e=>!!e)}function le(e){let t=new Set,n=Math.max(1,e.maxItems??100),r=e=>`combined:${e.sessionKey}:${e.combinedBody}`,i=()=>{for(;t.size>n;){let e=t.values().next().value;if(!e)break;t.delete(e)}};return{rememberText:(n,a)=>{n&&(t.add(n),a.combinedBody&&a.combinedBodySessionKey&&t.add(r({sessionKey:a.combinedBodySessionKey,combinedBody:a.combinedBody})),a.logVerboseMessage&&e.logVerbose?.(`Added to echo detection set (size now: ${t.size}): ${n.substring(0,50)}...`),i())},has:e=>t.has(e),forget:e=>{t.delete(e)},buildCombinedKey:r}}function ue(t){let n=r.g({agentId:t.agentId,channel:`whatsapp`,accountId:t.route.accountId,peer:{kind:t.msg.chatType===`group`?`group`:`direct`,id:t.peerId},dmScope:t.cfg.session?.dmScope,identityLinks:t.cfg.session?.identityLinks}),i=e.gt({agentId:t.agentId,mainKey:e.ht});return{sessionKey:n,mainSessionKey:i,lastRoutePolicy:r._({sessionKey:n,mainSessionKey:i})}}async function de(t){let n=t.cfg.broadcast?.[t.peerId];if(!n||!Array.isArray(n)||n.length===0)return!1;let r=t.cfg.broadcast?.strategy||`parallel`;S.info(`Broadcasting message to ${n.length} agents (${r})`);let i=t.cfg.agents?.list?.map(t=>e.xt(t.id)),a=(i?.length??0)>0,o=t.msg.chatType===`group`?t.groupHistories.get(t.groupHistoryKey)??[]:void 0,s=async n=>{let r=e.xt(n);if(a&&!i?.includes(r))return S.warn(`Broadcast agent ${n} not found in agents.list; skipping`),!1;let s=ue({cfg:t.cfg,msg:t.msg,route:t.route,peerId:t.peerId,agentId:r}),c={...t.route,agentId:r,...s};try{return await t.processMessage(t.msg,c,t.groupHistoryKey,{groupHistory:o,suppressGroupHistoryClear:!0})}catch(e){return S.error(`Broadcast agent ${n} failed: ${p.n(e)}`),!1}};if(r===`sequential`)for(let e of n)await s(e);else await Promise.allSettled(n.map(s));return t.msg.chatType===`group`&&t.groupHistories.set(t.groupHistoryKey,[]),!0}function fe(e,t,n){let r=e;for(let e of t)r=r.replace(e,` `);if(n){let e=n.replace(/\D/g,``);if(e){let t=RegExp(`\\+?${e}`,`g`);r=r.replace(t,` `)}}return r.replace(/\s+/g,` `).trim()}function pe(e,t){let r=n.Yn({From:t,ChatType:`group`,Provider:`whatsapp`})?.id,i=e.channels?.whatsapp,a=!!(i?.groupAllowFrom?.length||i?.allowFrom?.length);return n.Wn({cfg:e,channel:`whatsapp`,groupId:r??t,hasGroupAllowFrom:a})}function me(e,t){let r=n.Yn({From:t,ChatType:`group`,Provider:`whatsapp`})?.id;return n.Gn({cfg:e,channel:`whatsapp`,groupId:r??t})}function he(t){let i=n.wt(e.s(t.cfg.session?.store,{agentId:t.agentId}))[t.sessionKey],a=me(t.cfg,t.conversationId)?`mention`:`always`;return r.o(i?.groupActivation)??a}function ge(e,n,r){for(let i of e){let e=t.d(i)??i;!e||n.has(e)||(n.add(e),r.push(e))}}function _e(e,n,r,i){if(!r||!i)return;let a=t.d(r)??r;if(!a)return;let o=e.get(n);o||(o=new Map,e.set(n,o)),o.set(a,i)}function ve(e){let{participants:n,roster:r,fallbackE164:i}=e,a=new Set,o=[];if(n?.length&&ge(n,a,o),r&&ge(r.keys(),a,o),o.length===0&&i){let e=t.d(i)??i;e&&o.push(e)}if(o.length!==0)return o.map(e=>{let t=r?.get(e);return t?`${t} (${e})`:e}).join(`, `)}function ye(e,n){let r=t.d(n.senderE164??``);return r?ce(e,n.selfE164??void 0).includes(r):!1}function be(e){let t=e.msg.senderName&&e.msg.senderE164?`${e.msg.senderName} (${e.msg.senderE164})`:e.msg.senderName??e.msg.senderE164??`Unknown`;r.h({historyMap:e.groupHistories,historyKey:e.groupHistoryKey,limit:e.groupHistoryLimit,entry:{sender:t,body:e.msg.body,timestamp:e.msg.timestamp,id:e.msg.id,senderJid:e.msg.senderJid}})}function xe(e,t){return e.logVerbose(t),be({msg:e.msg,groupHistories:e.groupHistories,groupHistoryKey:e.groupHistoryKey,groupHistoryLimit:e.groupHistoryLimit}),{shouldProcess:!1}}function Se(e){let n=pe(e.cfg,e.conversationId);if(n.allowlistEnabled&&!n.allowed)return e.logVerbose(`Skipping group message ${e.conversationId} (not in allowlist)`),{shouldProcess:!1};_e(e.groupMemberNames,e.groupHistoryKey,e.msg.senderE164,e.msg.senderName);let i=X(e.cfg,e.agentId),a=fe(e.msg.body,i.mentionRegexes,e.msg.selfE164),o=r.s(a),s=ye(e.baseMentionConfig,e.msg),c=s&&r.O(a,e.cfg);if(o.hasCommand&&!s)return xe(e,`Ignoring /activation from non-owner in group ${e.conversationId}`);let l=se(e.msg,i,e.authDir);e.replyLogger.debug({conversationId:e.conversationId,wasMentioned:l.wasMentioned,...l.details},`group mention debug`);let u=l.wasMentioned,d=he({cfg:e.cfg,agentId:e.agentId,sessionKey:e.sessionKey,conversationId:e.conversationId})!==`always`,f=e.msg.selfJid?.replace(/:\\d+/,``),p=e.msg.replyToSenderJid?.replace(/:\\d+/,``),m=e.msg.selfE164?t.d(e.msg.selfE164):null,h=e.msg.replyToSenderE164?t.d(e.msg.replyToSenderE164):null,g=r.p({requireMention:d,canDetectMention:!0,wasMentioned:u,implicitMention:!!(f&&p&&f===p||m&&h&&m===h),shouldBypassMention:c});return e.msg.wasMentioned=g.effectiveWasMentioned,!c&&d&&g.shouldSkip?xe(e,`Group message stored for context (no mention detected) in ${e.conversationId}: ${e.msg.body}`):{shouldProcess:!0}}function Ce(e,t){e.add(t),t.finally(()=>{e.delete(t)})}function we(t){let r=e.s(t.cfg.session?.store,{agentId:t.storeAgentId}),i=n.Ot({storePath:r,sessionKey:t.sessionKey,deliveryContext:{channel:t.channel,to:t.to,accountId:t.accountId},ctx:t.ctx}).catch(e=>{t.warn({error:p.n(e),storePath:r,sessionKey:t.sessionKey,to:t.to},`failed updating last route`)});Ce(t.backgroundTasks,i)}function Te(e){return e.chatType===`group`?e.conversationId??e.from:e.senderE164?t.d(e.senderE164)??e.senderE164:e.from.includes(`@`)?t.u(e.from)??e.from:t.d(e.from)??e.from}function $(e,t=400){return!e||e.length<=t?e:`${e.slice(0,t)}… (truncated ${e.length-t} chars)`}function Ee(e){let t=(e instanceof Error?`${e.message}\n${e.stack??``}`:(e=>{if(e==null)return``;if(typeof e==`string`)return e;if(e instanceof Error)return`${e.message}\n${e.stack??``}`;if(typeof e==`object`)try{return JSON.stringify(e)}catch{return Object.prototype.toString.call(e)}return typeof e==`number`||typeof e==`boolean`||typeof e==`bigint`?String(e):typeof e==`symbol`?e.description??e.toString():typeof e==`function`?e.name?`[function ${e.name}]`:`[function]`:Object.prototype.toString.call(e)})(e)).toLowerCase();return t.includes(`unsupported state or unable to authenticate data`)||t.includes(`bad mac`)?t.includes(`@whiskeysockets/baileys`)||t.includes(`baileys`)||t.includes(`noise-handler`)||t.includes(`aesdecryptgcm`):!1}function De(e){if(e.isReasoning===!0)return!0;let t=e.text;return typeof t==`string`?t.trimStart().toLowerCase().startsWith(`reasoning:`):!1}async function Oe(e){let{replyResult:n,msg:r,maxMediaBytes:i,textLimit:a,replyLogger:o,connectionId:s,skipLog:l}=e,d=Date.now();if(De(n)){C.debug(`Suppressed reasoning payload to ${r.from}`);return}let m=e.tableMode??`code`,h=e.chunkMode??`length`,g=c.d(f.i(u.t(n.text||``,m)),a,h),_=n.mediaUrls?.length?n.mediaUrls:n.mediaUrl?[n.mediaUrl]:[],v=async(e,n,i=3)=>{let a;for(let o=1;o<=i;o++)try{return await e()}catch(e){a=e;let s=p.n(e),c=o===i;if(!/closed|reset|timed\s*out|disconnect/i.test(s)||c)throw e;let l=500*o;t.R(`Retrying ${n} to ${r.from} after failure (${o}/${i-1}) in ${l}ms: ${s}`),await t.y(l)}throw a};if(_.length===0&&g.length){let e=g.length;for(let[t,n]of g.entries()){let i=Date.now();if(await v(()=>r.reply(n),`text`),!l){let n=Date.now()-i;C.debug(`Sent chunk ${t+1}/${e} to ${r.from} (${n.toFixed(0)}ms)`)}}o.info({correlationId:r.id??b(),connectionId:s??null,to:r.from,from:r.to,text:$(n.text,240),mediaUrl:null,mediaSizeBytes:null,mediaKind:null,durationMs:Date.now()-d},`auto-reply sent (text)`);return}let y=[...g];for(let[n,a]of _.entries()){let l=n===0&&y.shift()||void 0;try{let n=await c.a(a,{maxBytes:i,localRoots:e.mediaLocalRoots});if(t.B()&&(t.R(`Web auto-reply media size: ${(n.buffer.length/(1024*1024)).toFixed(2)}MB`),t.R(`Web auto-reply media source: ${a} (kind ${n.kind})`)),n.kind===`image`)await v(()=>r.sendMedia({image:n.buffer,caption:l,mimetype:n.contentType}),`media:image`);else if(n.kind===`audio`)await v(()=>r.sendMedia({audio:n.buffer,ptt:!0,mimetype:n.contentType,caption:l}),`media:audio`);else if(n.kind===`video`)await v(()=>r.sendMedia({video:n.buffer,caption:l,mimetype:n.contentType}),`media:video`);else{let e=n.fileName??a.split(`/`).pop()??`file`,t=n.contentType??`application/octet-stream`;await v(()=>r.sendMedia({document:n.buffer,fileName:e,caption:l,mimetype:t}),`media:document`)}C.info(`Sent media reply to ${r.from} (${(n.buffer.length/(1024*1024)).toFixed(2)}MB)`),o.info({correlationId:r.id??b(),connectionId:s??null,to:r.from,from:r.to,text:l??null,mediaUrl:a,mediaSizeBytes:n.buffer.length,mediaKind:n.kind,durationMs:Date.now()-d},`auto-reply sent (media)`)}catch(e){if(C.error(`Failed sending web media to ${r.from}: ${p.n(e)}`),o.warn({err:e,mediaUrl:a},`failed to send web media reply`),n===0){let t=e instanceof Error?`⚠️ Media failed: ${e.message}`:`⚠️ Media failed.`,n=[y.shift()??l??``,t].filter(Boolean).join(`
|
|
5
5
|
`);n&&(C.warn(`Media skipped; sent text-only to ${r.from}`),await r.reply(n))}}}for(let e of y)await r.reply(e)}function ke(e){if(!e.msg.id)return;let n=e.cfg.channels?.whatsapp?.ackReaction,i=(n?.emoji??``).trim(),a=n?.direct??!0,o=n?.group??`mentions`,s=e.msg.conversationId??e.msg.from,c=e.msg.chatType===`group`?he({cfg:e.cfg,agentId:e.agentId,sessionKey:e.sessionKey,conversationId:s}):null;r.S({emoji:i,isDirect:e.msg.chatType===`direct`,isGroup:e.msg.chatType===`group`,directEnabled:a,groupMode:o,wasMentioned:e.msg.wasMentioned===!0,groupActivated:c===`always`})&&(e.info({chatId:e.msg.chatId,messageId:e.msg.id,emoji:i},`sending ack reaction`),f.r(e.msg.chatId,e.msg.id,i,{verbose:e.verbose,fromMe:!1,participant:e.msg.senderJid,accountId:e.accountId}).catch(n=>{e.warn({error:p.n(n),chatId:e.msg.chatId,messageId:e.msg.id},`failed to send ack reaction`),t.R(`WhatsApp ack reaction failed for chat ${e.msg.chatId}: ${p.n(n)}`)}))}function Ae(e){return e.replyToBody?`[Replying to ${e.replyToSender??`unknown sender`}${e.replyToId?` id:${e.replyToId}`:``}]\n${e.replyToBody}\n[/Replying]`:null}function je(e){let{cfg:t,msg:n,agentId:i,previousTimestamp:a,envelope:o}=e,s=r.Z(t,i,{configured:t.channels?.whatsapp?.messagePrefix,hasAllowFrom:(t.channels?.whatsapp?.allowFrom?.length??0)>0}),c=s?`${s} `:``,l=Ae(n),u=`${c}${n.body}${l?`\n\n${l}`:``}`;return r.D({channel:`WhatsApp`,from:n.chatType===`group`?n.from:n.from?.replace(/^whatsapp:/,``),timestamp:n.timestamp,body:u,chatType:n.chatType,sender:{name:n.senderName,e164:n.senderE164,id:n.senderJid},previousTimestamp:a,envelope:o,fromMe:n.fromMe})}async function Me(e){let i=e.cfg.commands?.useAccessGroups!==!1;if(!i)return!0;let a=e.msg.chatType===`group`,o=t.d(a?e.msg.senderE164??``:e.msg.senderE164??e.msg.from??``);if(!o)return!1;let s=n.zs({cfg:e.cfg,accountId:e.msg.accountId}),c=s.dmPolicy??`pairing`,l=s.groupPolicy??`allowlist`,u=s.allowFrom??[],d=s.groupAllowFrom??(u.length>0?u:void 0),f=a?[]:await r.U({provider:`whatsapp`,accountId:e.msg.accountId,dmPolicy:c});return r.W({isGroup:a,dmPolicy:c,groupPolicy:l,allowFrom:u.length>0?u:e.msg.selfE164?[e.msg.selfE164]:[],groupAllowFrom:d,storeAllowFrom:f,isSenderAllowed:e=>e.includes(`*`)?!0:e.map(e=>t.d(String(e))).filter(e=>!!e).includes(o),command:{useAccessGroups:i,allowTextCommands:!0,hasControlCommand:!0}}).commandAuthorized}function Ne(e){let i=n.zs({cfg:e.cfg,accountId:e.msg.accountId});return r.K({dmScope:e.cfg.session?.dmScope,allowFrom:i.allowFrom,normalizeEntry:e=>t.d(e)})}async function Pe(e){let a=e.msg.conversationId??e.msg.from,{storePath:o,envelopeOptions:l,previousTimestamp:u}=r.l({cfg:e.cfg,agentId:e.route.agentId,sessionKey:e.route.sessionKey}),d=je({cfg:e.cfg,msg:e.msg,agentId:e.route.agentId,previousTimestamp:u,envelope:l}),f=!1;if(e.msg.chatType===`group`){let t=e.groupHistory??e.groupHistories.get(e.groupHistoryKey)??[];t.length>0&&(d=r.m({entries:t.map(e=>({sender:e.sender,body:e.body,timestamp:e.timestamp})),currentMessage:d,excludeLast:!1,formatEntry:e=>r.D({channel:`WhatsApp`,from:a,timestamp:e.timestamp,body:e.body,chatType:`group`,senderLabel:e.sender,envelope:l})})),f=!(e.suppressGroupHistoryClear??!1)}let m=e.buildCombinedEchoKey({sessionKey:e.route.sessionKey,combinedBody:d});if(e.echoHas(m))return t.R(`Skipping auto-reply: detected echo for combined message`),e.echoForget(m),!1;ke({cfg:e.cfg,msg:e.msg,agentId:e.route.agentId,sessionKey:e.route.sessionKey,conversationId:a,verbose:e.verbose,accountId:e.route.accountId,info:e.replyLogger.info.bind(e.replyLogger),warn:e.replyLogger.warn.bind(e.replyLogger)});let h=e.msg.id??b();e.replyLogger.info({connectionId:e.connectionId,correlationId:h,from:e.msg.chatType===`group`?a:e.msg.from,to:e.msg.to,body:$(d,240),mediaType:e.msg.mediaType??null,mediaPath:e.msg.mediaPath??null},`inbound web message`);let g=e.msg.chatType===`group`?a:e.msg.from,_=e.msg.mediaType?`, ${e.msg.mediaType}`:``;S.info(`Inbound message ${g} -> ${e.msg.to} (${e.msg.chatType}${_}, ${d.length} chars)`),t.B()&&S.debug(`Inbound body: ${$(d,400)}`);let v=e.msg.chatType===`group`?void 0:e.msg.senderE164?t.d(e.msg.senderE164):e.msg.from.includes(`@`)?t.u(e.msg.from):t.d(e.msg.from),y=e.maxMediaTextChunkLimit??c.h(e.cfg,`whatsapp`),x=c.m(e.cfg,`whatsapp`,e.route.accountId),ee=c.s({cfg:e.cfg,channel:`whatsapp`,accountId:e.route.accountId}),w=s.t(e.cfg,e.route.agentId),T=!1,E=!1,D=r.k(e.msg.body,e.cfg)?await Me({cfg:e.cfg,msg:e.msg}):void 0,O=e.cfg.messages?.responsePrefix,{onModelSelected:k,...A}=r.Y({cfg:e.cfg,agentId:e.route.agentId,channel:`whatsapp`,accountId:e.route.accountId}),j=e.msg.chatType!==`group`&&!!e.msg.selfE164&&t.d(e.msg.from)===t.d(e.msg.selfE164??``),M=A.responsePrefix??(O===void 0&&j?r.X(e.cfg,e.route.agentId):void 0),N=e.msg.chatType===`group`?(e.groupHistory??e.groupHistories.get(e.groupHistoryKey)??[]).map(e=>({sender:e.sender,body:e.body,timestamp:e.timestamp})):void 0,P=r.V({Body:d,BodyForAgent:e.msg.body,InboundHistory:N,RawBody:e.msg.body,CommandBody:e.msg.body,From:e.msg.from,To:e.msg.to,SessionKey:e.route.sessionKey,AccountId:e.route.accountId,MessageSid:e.msg.id,ReplyToId:e.msg.replyToId,ReplyToBody:e.msg.replyToBody,ReplyToSender:e.msg.replyToSender,MediaPath:e.msg.mediaPath,MediaUrl:e.msg.mediaUrl,MediaType:e.msg.mediaType,ChatType:e.msg.chatType,ConversationLabel:e.msg.chatType===`group`?a:e.msg.from,GroupSubject:e.msg.groupSubject,GroupMembers:ve({participants:e.msg.groupParticipants,roster:e.groupMemberNames.get(e.groupHistoryKey),fallbackE164:e.msg.senderE164}),SenderName:e.msg.senderName,SenderId:e.msg.senderJid?.trim()||e.msg.senderE164,SenderE164:e.msg.senderE164,CommandAuthorized:D,WasMentioned:e.msg.wasMentioned,...e.msg.location?i.lt(e.msg.location):{},Provider:`whatsapp`,Surface:`whatsapp`,OriginatingChannel:`whatsapp`,OriginatingTo:e.msg.from}),F=Ne({cfg:e.cfg,msg:e.msg}),I=!F||F===v,L=r.y({route:e.route,sessionKey:e.route.sessionKey});v&&L===e.route.mainSessionKey&&I?we({cfg:e.cfg,backgroundTasks:e.backgroundTasks,storeAgentId:e.route.agentId,sessionKey:e.route.mainSessionKey,channel:`whatsapp`,to:v,accountId:e.route.accountId,ctx:P,warn:e.replyLogger.warn.bind(e.replyLogger)}):v&&L===e.route.mainSessionKey&&F&&t.R(`Skipping main-session last route update for ${v} (pinned owner ${F})`);let R=n.Et({storePath:o,sessionKey:e.route.sessionKey,ctx:P}).catch(t=>{e.replyLogger.warn({error:p.n(t),storePath:o,sessionKey:e.route.sessionKey},`failed updating session meta`)});Ce(e.backgroundTasks,R);let{queuedFinal:z}=await r.C({ctx:P,cfg:e.cfg,replyResolver:e.replyResolver,dispatcherOptions:{...A,responsePrefix:M,onHeartbeatStrip:()=>{T||(T=!0,t.R(`Stripped stray HEARTBEAT_OK token from web reply`))},deliver:async(n,r)=>{if(r.kind!==`final`)return;await Oe({replyResult:n,msg:e.msg,mediaLocalRoots:w,maxMediaBytes:e.maxMediaBytes,textLimit:y,chunkMode:x,replyLogger:e.replyLogger,connectionId:e.connectionId,skipLog:!1,tableMode:ee}),E=!0;let i=n.text?!0:void 0;e.rememberSentText(n.text,{combinedBody:d,combinedBodySessionKey:e.route.sessionKey,logVerboseMessage:i});let o=e.msg.chatType===`group`?a:e.msg.from??`unknown`,s=!!(n.mediaUrl||n.mediaUrls?.length);if(C.info(`Auto-replied to ${o}${s?` (media)`:``}`),t.B()){let e=n.text==null?`<media>`:$(n.text,400);C.debug(`Reply body: ${e}${s?` (media)`:``}`)}},onError:(t,n)=>{let r=n.kind===`tool`?`tool update`:n.kind===`block`?`block update`:`auto-reply`;C.error(`Failed sending web ${r} to ${e.msg.from??a}: ${p.n(t)}`)},onReplyStart:e.msg.sendComposing},replyOptions:{disableBlockStreaming:!0,onModelSelected:k}});return z?(f&&e.groupHistories.set(e.groupHistoryKey,[]),E):(f&&e.groupHistories.set(e.groupHistoryKey,[]),t.R(`Skipping auto-reply: silent token or no text/media returned from resolver`),!1)}function Fe(i){let a=async(e,t,n,r)=>Pe({cfg:i.cfg,msg:e,route:t,groupHistoryKey:n,groupHistories:i.groupHistories,groupMemberNames:i.groupMemberNames,connectionId:i.connectionId,verbose:i.verbose,maxMediaBytes:i.maxMediaBytes,replyResolver:i.replyResolver,replyLogger:i.replyLogger,backgroundTasks:i.backgroundTasks,rememberSentText:i.echoTracker.rememberText,echoHas:i.echoTracker.has,echoForget:i.echoTracker.forget,buildCombinedEchoKey:i.echoTracker.buildCombinedKey,groupHistory:r?.groupHistory,suppressGroupHistoryClear:r?.suppressGroupHistoryClear});return async o=>{let s=o.conversationId??o.from,c=Te(o),l=r.v({cfg:n.Gi(),channel:`whatsapp`,accountId:o.accountId,peer:{kind:o.chatType===`group`?`group`:`direct`,id:c}}),u=o.chatType===`group`?e.vt({channel:`whatsapp`,accountId:l.accountId,peerKind:`group`,peerId:c}):l.sessionKey;if(o.from===o.to&&t.R(`📱 Same-phone mode detected (from === to: ${o.from})`),i.echoTracker.has(o.body)){t.R(`Skipping auto-reply: detected echo (message matches recently sent text)`),i.echoTracker.forget(o.body);return}if(o.chatType===`group`){let e={From:o.from,To:o.to,SessionKey:l.sessionKey,AccountId:l.accountId,ChatType:o.chatType,ConversationLabel:s,GroupSubject:o.groupSubject,SenderName:o.senderName,SenderId:o.senderJid?.trim()||o.senderE164,SenderE164:o.senderE164,Provider:`whatsapp`,Surface:`whatsapp`,OriginatingChannel:`whatsapp`,OriginatingTo:s};if(we({cfg:i.cfg,backgroundTasks:i.backgroundTasks,storeAgentId:l.agentId,sessionKey:l.sessionKey,channel:`whatsapp`,to:s,accountId:l.accountId,ctx:e,warn:i.replyLogger.warn.bind(i.replyLogger)}),!Se({cfg:i.cfg,msg:o,conversationId:s,groupHistoryKey:u,agentId:l.agentId,sessionKey:l.sessionKey,baseMentionConfig:i.baseMentionConfig,authDir:i.account.authDir,groupHistories:i.groupHistories,groupHistoryLimit:i.groupHistoryLimit,groupMemberNames:i.groupMemberNames,logVerbose:t.R,replyLogger:i.replyLogger}).shouldProcess)return}else !o.senderE164&&c&&c.startsWith(`+`)&&(o.senderE164=t.d(c)??o.senderE164);await de({cfg:i.cfg,msg:o,peerId:c,route:l,groupHistoryKey:u,groupHistories:i.groupHistories,processMessage:a})||await a(o,l,u)}}function Ie(e){return e===440}async function Le(e,i=oe,a=!0,s=r.r,c=t.M,l,u={}){let f=b(),m=t.K({module:`web-auto-reply`,runId:f}),h=t.K({module:`web-heartbeat`,runId:f}),g=t.K({module:`web-reconnect`,runId:f}),_={running:!0,connected:!1,reconnectAttempts:0,lastConnectedAt:null,lastDisconnect:null,lastMessageAt:null,lastEventAt:null,lastError:null},S=()=>{u.statusSink?.({..._,lastDisconnect:_.lastDisconnect?{..._.lastDisconnect}:null})};S();let C=n.Gi(),T=n.zs({cfg:C,accountId:u.accountId}),E={...C,channels:{...C.channels,whatsapp:{...C.channels?.whatsapp,ackReaction:T.ackReaction,messagePrefix:T.messagePrefix,allowFrom:T.allowFrom,groupAllowFrom:T.groupAllowFrom,groupPolicy:T.groupPolicy,textChunkLimit:T.textChunkLimit,chunkMode:T.chunkMode,mediaMaxMb:T.mediaMaxMb,blockStreaming:T.blockStreaming,groups:T.groups}}},D=n.Bs(T),O=v(E,u.heartbeatSeconds),k=y(E,u.reconnect),A=X(E),j=E.channels?.whatsapp?.accounts?.[u.accountId??``]?.historyLimit??E.channels?.whatsapp?.historyLimit??E.messages?.groupChat?.historyLimit??50,M=new Map,N=new Map,P=le({maxItems:100,logVerbose:t.R}),F=u.sleep??((e,t)=>r.f(e,t??l)),I=()=>l?.aborted===!0,L=l&&new Promise(e=>l.addEventListener(`abort`,()=>e(`aborted`),{once:!0})),R=process.getMaxListeners?.()??10;process.setMaxListeners&&R<50&&process.setMaxListeners(50);let z=!1,B=()=>{z=!0};process.once(`SIGINT`,B);let V=0;for(;!I();){let f=b(),v=Date.now(),y=null,C=null,R=null,H=0,U=null,te=u.messageTimeoutMs??1800*1e3,ne=u.watchdogCheckMs??60*1e3,W=new Set,re=Fe({cfg:E,verbose:e,connectionId:f,maxMediaBytes:D,groupHistoryLimit:j,groupHistories:M,groupMemberNames:N,echoTracker:P,backgroundTasks:W,replyResolver:s??r.r,replyLogger:m,baseMentionConfig:A,account:T}),ie=r.E({cfg:E,channel:`whatsapp`}),G=await(i??oe)({verbose:e,accountId:T.accountId,authDir:T.authDir,mediaMaxMb:T.mediaMaxMb,sendReadReceipts:T.sendReadReceipts,debounceMs:ie,shouldDebounce:e=>e.mediaPath||e.mediaType||e.location||e.replyToId||e.replyToBody?!1:!r.O(e.body,E),onMessage:async e=>{H+=1,R=Date.now(),_.lastMessageAt=R,_.lastEventAt=R,S(),await re(e)}});Object.assign(_,r.u()),_.lastError=null,S();let{e164:K}=n.Js(T.authDir),ae=r.v({cfg:E,channel:`whatsapp`,accountId:T.accountId});r.b(`WhatsApp gateway connected${K?` as ${K}`:``}.`,{sessionKey:ae.sessionKey}),d.r(T.accountId,G),U=o.f(e=>{if(!Ee(e))return!1;let t=p.n(e);return g.warn({connectionId:f,error:t},`web reconnect: unhandled rejection from WhatsApp socket; forcing reconnect`),G.signalClose?.({status:499,isLoggedOut:!1,error:e}),!0});let q=async()=>{d.r(T.accountId,null),U&&=(U(),null),y&&clearInterval(y),C&&clearInterval(C),W.size>0&&(await Promise.allSettled(W),W.clear());try{await G.close()}catch(e){t.R(`Socket close failed: ${p.n(e)}`)}};if(a&&(y=setInterval(()=>{let e=n.Hs(T.authDir),t=R?Math.floor((Date.now()-R)/6e4):null,r={connectionId:f,reconnectAttempts:V,messagesHandled:H,lastMessageAt:R,authAgeMs:e,uptimeMs:Date.now()-v,...t!==null&&t>30?{minutesSinceLastMessage:t}:{}};t&&t>30?h.warn(r,`⚠️ web gateway heartbeat - no messages in 30+ minutes`):h.info(r,`web gateway heartbeat`)},O*1e3),C=setInterval(()=>{if(!R)return;let e=Date.now()-R;if(e<=te)return;let n=Math.floor(e/6e4);h.warn({connectionId:f,minutesSinceLastMessage:n,lastMessageAt:new Date(R),messagesHandled:H},`Message timeout detected - forcing reconnect`),ee.warn(`No messages received in ${n}m - restarting connection`),q().catch(e=>{t.R(`Close listener failed: ${p.n(e)}`)}),G.signalClose?.({status:499,isLoggedOut:!1,error:`watchdog-timeout`})},ne)),x.info(`Listening for personal WhatsApp inbound messages.`),(process.stdout.isTTY||process.stderr.isTTY)&&x.raw(`Ctrl+C to stop.`),!a){await q(),process.removeListener(`SIGINT`,B);return}let J=await Promise.race([G.onClose?.catch(e=>(g.error({error:p.n(e)},`listener.onClose rejected`),{status:500,isLoggedOut:!1,error:e}))??w(),L??w()]);if(Date.now()-v>O*1e3&&(V=0),_.reconnectAttempts=V,S(),I()||z||J===`aborted`){await q();break}let Y=(typeof J==`object`&&J&&`status`in J?J.status:void 0)??`unknown`,X=typeof J==`object`&&J&&`isLoggedOut`in J&&J.isLoggedOut,Z=p.n(J);if(_.connected=!1,_.lastEventAt=Date.now(),_.lastDisconnect={at:_.lastEventAt,status:typeof Y==`number`?Y:void 0,error:Z,loggedOut:!!X},_.lastError=Z,_.reconnectAttempts=V,S(),g.info({connectionId:f,status:Y,loggedOut:X,reconnectAttempts:V,error:Z},`web reconnect: connection closed`),r.b(`WhatsApp gateway disconnected (status ${Y??`unknown`})`,{sessionKey:ae.sessionKey}),X){c.error(`WhatsApp session logged out. Run \`${n.ac(`openclaw channels login --channel web`)}\` to relink.`),await q();break}if(Ie(Y)){g.warn({connectionId:f,status:Y,error:Z},`web reconnect: non-retryable close status; stopping monitor`),c.error(`WhatsApp Web connection closed (status ${Y}: session conflict). Resolve conflicting WhatsApp Web sessions, then relink with \`${n.ac(`openclaw channels login --channel web`)}\`. Stopping web monitoring.`),await q();break}if(V+=1,_.reconnectAttempts=V,S(),k.maxAttempts>0&&V>=k.maxAttempts){g.warn({connectionId:f,status:Y,reconnectAttempts:V,maxAttempts:k.maxAttempts},`web reconnect: max attempts reached; continuing in degraded mode`),c.error(`WhatsApp Web reconnect: max attempts reached (${V}/${k.maxAttempts}). Stopping web monitoring.`),await q();break}let Q=r.d(k,V);g.info({connectionId:f,status:Y,reconnectAttempts:V,maxAttempts:k.maxAttempts||`unlimited`,delayMs:Q},`web reconnect: scheduling retry`),c.error(`WhatsApp Web connection closed (status ${Y}). Retry ${V}/${k.maxAttempts||`∞`} in ${r.x(Q)}… (${Z})`),await q();try{await F(Q,l)}catch{break}}_.running=!1,_.connected=!1,_.lastEventAt=Date.now(),S(),process.removeListener(`SIGINT`,B)}exports.WA_WEB_AUTH_DIR=n.Vs,exports.createWaSocket=p.t,exports.logWebSelfId=n.Us,exports.loginWeb=m.t,exports.monitorWebChannel=Le,exports.monitorWebInbox=oe,exports.pickWebChannel=n.Ks,exports.sendMessageWhatsApp=f.t,exports.waitForWaConnection=p.i,exports.webAuthExists=n.Qs;
|
|
6
|
-
//# sourceMappingURL=web-
|
|
6
|
+
//# sourceMappingURL=web-CUbdclQS.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`./paths-Bcdg3ma0.cjs`),require(`./paths-D90l3h_o.cjs`);const e=require(`./sessions-Dz5JUL8j.cjs`);require(`./logger-DUYnS-W3.cjs`),require(`./proxy-env-DQoJjkWE.cjs`),require(`./send-D3imkSlz.cjs`),require(`./common-B4iFXuoZ.cjs`),require(`./send-Co_Wy2kT.cjs`),require(`./reply-
|
|
1
|
+
require(`./paths-Bcdg3ma0.cjs`),require(`./paths-D90l3h_o.cjs`);const e=require(`./sessions-Dz5JUL8j.cjs`);require(`./logger-DUYnS-W3.cjs`),require(`./proxy-env-DQoJjkWE.cjs`),require(`./send-D3imkSlz.cjs`),require(`./common-B4iFXuoZ.cjs`),require(`./send-Co_Wy2kT.cjs`),require(`./reply-BoWg-IXT.cjs`),require(`./github-copilot-token-zskwAEpd.cjs`),require(`./send-CFuJjCNB.cjs`);const t=require(`./channel-web-D4x22KPN.cjs`);require(`./tokens-CXsPDJTr.cjs`),require(`./audio-transcription-runner-CH5CoZrF.cjs`),require(`./image-DegWnAZU.cjs`),require(`./fetch-guard-CIJUkBIL.cjs`),require(`./api-key-rotation-DDCwA0KM.cjs`),require(`./local-roots-Cu7YCpql.cjs`),require(`./proxy-fetch-BzcKzknk.cjs`),require(`./deliver-DCrO9mvv.cjs`),require(`./commands-registry-CtYCWfuM.cjs`),require(`./fetch-ClKErpni.cjs`),require(`./diagnostic-8iX73nz_.cjs`),require(`./pi-model-discovery-D5xlUS2J.cjs`),require(`./ir-C3VNqnc2.cjs`),require(`./render-6fCdtAr6.cjs`),require(`./send-Cox_iyYB.cjs`),require(`./outbound-attachment-Cujprd6T.cjs`),require(`./send-61GHLNYP.cjs`),require(`./channel-activity-CLUi31fX.cjs`),require(`./tables-CnrHab5d.cjs`),require(`./fetch-DQxuOB8o.cjs`),require(`./skill-commands-KyN0FGaC.cjs`),require(`./query-expansion-0zYzKrrd.cjs`),require(`./manager-gE9187gu.cjs`);const n=require(`./outbound-CW3o4Eng.cjs`),r=require(`./session-WRCBgAzG.cjs`),i=require(`./login-UrWNtI80.cjs`);exports.WA_WEB_AUTH_DIR=e.js,exports.createWaSocket=r.t,exports.logWebSelfId=e.Ns,exports.loginWeb=i.t,exports.monitorWebChannel=t.t,exports.monitorWebInbox=t.n,exports.pickWebChannel=e.Is,exports.sendMessageWhatsApp=n.t,exports.waitForWaConnection=r.i,exports.webAuthExists=e.Hs;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./paths-cBAF6Bj0.js";import{Ds as e,Ms as t,Rs as n,ks as r}from"./sessions-DxXXAfdI.js";import"./logger-vBDTZWl3.js";import"./paths-CnHSNSeR.js";import"./proxy-env-B765haXA.js";import"./send-D-qD7BCb.js";import"./common-B6fDMl_i.js";import"./send-C4ZFbUux.js";import"./reply-
|
|
1
|
+
import"./paths-cBAF6Bj0.js";import{Ds as e,Ms as t,Rs as n,ks as r}from"./sessions-DxXXAfdI.js";import"./logger-vBDTZWl3.js";import"./paths-CnHSNSeR.js";import"./proxy-env-B765haXA.js";import"./send-D-qD7BCb.js";import"./common-B6fDMl_i.js";import"./send-C4ZFbUux.js";import"./reply-bS9U9BwG.js";import"./github-copilot-token-N8vnLZPw.js";import"./send-BTE2rI1E.js";import{n as i,t as a}from"./channel-web-CeSPyNTh.js";import"./tokens-B8ys7Q2e.js";import"./audio-transcription-runner-BIqM5H5q.js";import"./image-CWnsS03L.js";import"./fetch-guard-CY03i4gu.js";import"./api-key-rotation-DcREl_0x.js";import"./local-roots-tee85Q-1.js";import"./proxy-fetch-CYVChsKE.js";import"./deliver-vYe_sYOL.js";import"./commands-registry-MCsWR5Vf.js";import"./fetch-CCLWsYaQ.js";import"./diagnostic-CkePwN5F.js";import"./pi-model-discovery-BuEMyAsU.js";import"./ir-OBi5zaEW.js";import"./render-CBsnn-2A.js";import"./send-CEfs0Fsr.js";import"./outbound-attachment-DQYtdTUw.js";import"./send-B2qa7CSk.js";import"./channel-activity-D7tpmatp.js";import"./tables-BIDWwpX8.js";import"./fetch-C-HRWp5R.js";import"./skill-commands-Hmuw0PPK.js";import"./query-expansion-C_DnhmUy.js";import"./manager-MR9stU_p.js";import{t as o}from"./outbound-C18nEOFP.js";import{i as s,t as c}from"./session-BJhNqIOi.js";import{t as l}from"./login-DtDOozuU.js";export{e as WA_WEB_AUTH_DIR,c as createWaSocket,r as logWebSelfId,l as loginWeb,a as monitorWebChannel,i as monitorWebInbox,t as pickWebChannel,o as sendMessageWhatsApp,s as waitForWaConnection,n as webAuthExists};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
require(`./paths-BvlJvmRS.cjs`);const e=require(`./paths-Chp3zwtq.cjs`),t=require(`./logger-BlddiV_d.cjs`),n=require(`./model-auth-BpS4IWDi.cjs`);require(`./proxy-env-DWw9TnOj.cjs`),require(`./send-Cm7bEwx-.cjs`);const r=require(`./send-h--iKoQE.cjs`),i=require(`./dispatch-
|
|
1
|
+
require(`./paths-BvlJvmRS.cjs`);const e=require(`./paths-Chp3zwtq.cjs`),t=require(`./logger-BlddiV_d.cjs`),n=require(`./model-auth-BpS4IWDi.cjs`);require(`./proxy-env-DWw9TnOj.cjs`),require(`./send-Cm7bEwx-.cjs`);const r=require(`./send-h--iKoQE.cjs`),i=require(`./dispatch-BgGE9usQ.cjs`);require(`./tokens-DtrljGtQ.cjs`),require(`./deliver-DsFtXFyr.cjs`),require(`./github-copilot-token-DoHgkI2r.cjs`),require(`./fetch-guard-Cz-cgYmR.cjs`);const a=require(`./send-C8f5H4XV.cjs`),o=require(`./local-roots-C5UoE741.cjs`),s=require(`./ir-CZOtKajq.cjs`);require(`./diagnostic-CVS4k9hh.cjs`),require(`./pi-model-discovery-DoY7qnlI.cjs`);const c=require(`./audio-transcription-runner-By3lSLub.cjs`);require(`./image-CTgwucug.cjs`),require(`./api-key-rotation-DHMvXm70.cjs`),require(`./proxy-fetch-BaA3JYgW.cjs`),require(`./commands-registry-DsMbmie-.cjs`),require(`./fetch-CZewCAvu.cjs`),require(`./render-DxBO2Blp.cjs`),require(`./target-errors-BrwqillR.cjs`);const l=require(`./channel-activity-CwaMf9qT.cjs`),u=require(`./tables-CZGtYzDC.cjs`);require(`./send-CSGh_GVr.cjs`),require(`./fetch-DUMEaqum.cjs`),require(`./skill-commands-BzkMuA58.cjs`),require(`./outbound-attachment-1pf06Oiu.cjs`),require(`./send-JVdUTsN1.cjs`);const d=require(`./active-listener-BETopzG5.cjs`);require(`./query-expansion-BYSjmpkV.cjs`),require(`./manager-DQ2C-2IU.cjs`);const f=require(`./outbound-DcP22VOo.cjs`),p=require(`./session-8BcB905y.cjs`),m=require(`./login-mGjCzJzb.cjs`);let h=require(`node:crypto`),g=require(`@whiskeysockets/baileys`);const _={initialMs:2e3,maxMs:3e4,factor:1.8,jitter:.25,maxAttempts:12};function v(e,t){let n=t??e.web?.heartbeatSeconds;return typeof n==`number`&&n>0?n:60}function y(e,n){let r=e.web?.reconnect??{},i=n??{},a={..._,...r,...i};return a.initialMs=Math.max(250,a.initialMs),a.maxMs=Math.max(a.initialMs,a.maxMs),a.factor=t.o(a.factor,1.1,10),a.jitter=t.o(a.jitter,0,1),a.maxAttempts=Math.max(0,Math.floor(a.maxAttempts)),a}function b(){return(0,h.randomUUID)()}const x=t.O(`gateway/channels/whatsapp`),S=x.child(`inbound`),C=x.child(`outbound`),ee=x.child(`heartbeat`);function w(){return setInterval(()=>{},1e6).unref(),new Promise(()=>{})}const T=i.I({ttlMs:20*6e4,maxSize:5e3});function E(e){return T.check(e)}const D=new Set([`FN`,`N`,`TEL`]);function O(e){if(!e)return{phones:[]};let t=e.split(/\r?\n/),n,r,i=[];for(let e of t){let t=e.trim();if(!t)continue;let a=t.indexOf(`:`);if(a===-1)continue;let o=t.slice(0,a).toUpperCase(),s=t.slice(a+1).trim();if(!s)continue;let c=k(o);if(!c||!D.has(c))continue;let l=A(s);if(l){if(c===`FN`&&!r){r=j(l);continue}if(c===`N`&&!n){n=j(l);continue}if(c===`TEL`){let e=M(l);e&&i.push(e)}}}return{name:r??n,phones:i}}function k(e){let[t]=e.split(`;`);if(!t)return;let n=t.split(`.`);return n[n.length-1]||void 0}function A(e){return e.replace(/\\n/gi,` `).replace(/\\,/g,`,`).replace(/\\;/g,`;`).trim()}function j(e){return e.replace(/;/g,` `).replace(/\s+/g,` `).trim()}function M(e){let t=e.trim();return t?t.toLowerCase().startsWith(`tel:`)?t.slice(4).trim():t:``}function N(e){return(0,g.normalizeMessageContent)(e)}function P(e){if(!e)return;let t=(0,g.getContentType)(e),n=t?e[t]:void 0,r=n&&typeof n==`object`&&`contextInfo`in n?n.contextInfo:void 0;if(r)return r;let i=e.extendedTextMessage?.contextInfo??e.imageMessage?.contextInfo??e.videoMessage?.contextInfo??e.documentMessage?.contextInfo??e.audioMessage?.contextInfo??e.stickerMessage?.contextInfo??e.buttonsResponseMessage?.contextInfo??e.listResponseMessage?.contextInfo??e.templateButtonReplyMessage?.contextInfo??e.interactiveResponseMessage?.contextInfo??e.buttonsMessage?.contextInfo??e.listMessage?.contextInfo;if(i)return i;for(let t of Object.values(e)){if(!t||typeof t!=`object`||!(`contextInfo`in t))continue;let e=t.contextInfo;if(e)return e}}function F(e){let t=N(e);if(!t)return;let n=[t.extendedTextMessage?.contextInfo?.mentionedJid,t.extendedTextMessage?.contextInfo?.quotedMessage?.extendedTextMessage?.contextInfo?.mentionedJid,t.imageMessage?.contextInfo?.mentionedJid,t.videoMessage?.contextInfo?.mentionedJid,t.documentMessage?.contextInfo?.mentionedJid,t.audioMessage?.contextInfo?.mentionedJid,t.stickerMessage?.contextInfo?.mentionedJid,t.buttonsResponseMessage?.contextInfo?.mentionedJid,t.listResponseMessage?.contextInfo?.mentionedJid].flatMap(e=>e??[]).filter(Boolean);if(n.length!==0)return Array.from(new Set(n))}function I(e){let t=N(e);if(!t)return;let n=(0,g.extractMessageContent)(t),r=[t,n&&n!==t?n:void 0];for(let e of r){if(!e)continue;if(typeof e.conversation==`string`&&e.conversation.trim())return e.conversation.trim();let t=e.extendedTextMessage?.text;if(t?.trim())return t.trim();let n=e.imageMessage?.caption??e.videoMessage?.caption??e.documentMessage?.caption;if(n?.trim())return n.trim()}let i=R(t)??(n&&n!==t?R(n):void 0);if(i)return i}function L(e){let t=N(e);if(t){if(t.imageMessage)return`<media:image>`;if(t.videoMessage)return`<media:video>`;if(t.audioMessage)return`<media:audio>`;if(t.documentMessage)return`<media:document>`;if(t.stickerMessage)return`<media:sticker>`}}function R(e){let t=N(e);if(!t)return;let n=t.contactMessage??void 0;if(n){let{name:e,phones:t}=z({displayName:n.displayName,vcard:n.vcard});return B(e,t)}let r=t.contactsArrayMessage?.contacts??void 0;if(!(!r||r.length===0))return V(r.map(e=>z({displayName:e.displayName,vcard:e.vcard})).map(e=>H(e.name,e.phones)).filter(e=>!!e),r.length)}function z(e){let t=(e.displayName??``).trim(),n=O(e.vcard??void 0);return{name:t||n.name,phones:n.phones}}function B(e,t){let n=H(e,t);return n?`<contact: ${n}>`:`<contact>`}function V(e,t){let n=e.map(e=>e.trim()).filter(Boolean);if(n.length===0)return`<contacts: ${t} ${t===1?`contact`:`contacts`}>`;let r=Math.max(t-n.length,0),i=r>0?` +${r} more`:``;return`<contacts: ${n.join(`, `)}${i}>`}function H(e,t){let n=[e,U(t)].filter(e=>!!e);if(n.length!==0)return n.join(`, `)}function U(e){let t=e?.map(e=>e.trim()).filter(Boolean)??[];if(t.length===0)return;let{shown:n,remaining:r}=te(t,t.length,1),[i]=n;if(i)return r===0?i:`${i} (+${r} more)`}function te(e,t,n){let r=e.slice(0,n);return{shown:r,remaining:Math.max(t-r.length,0)}}function ne(e){let t=N(e);if(!t)return null;let n=t.liveLocationMessage??void 0;if(n){let e=n.degreesLatitude,t=n.degreesLongitude;if(e!=null&&t!=null){let r=Number(e),i=Number(t);if(Number.isFinite(r)&&Number.isFinite(i))return{latitude:r,longitude:i,accuracy:n.accuracyInMeters??void 0,caption:n.caption??void 0,source:`live`,isLive:!0}}}let r=t.locationMessage??void 0;if(r){let e=r.degreesLatitude,t=r.degreesLongitude;if(e!=null&&t!=null){let n=Number(e),i=Number(t);if(Number.isFinite(n)&&Number.isFinite(i)){let e=!!r.isLive;return{latitude:n,longitude:i,accuracy:r.accuracyInMeters??void 0,name:r.name??void 0,address:r.address??void 0,caption:r.comment??void 0,source:e?`live`:r.name||r.address?`place`:`pin`,isLive:e}}}}return null}function W(e){let n=N(e);if(!n)return null;let r=P(n),i=(0,g.normalizeMessageContent)(r?.quotedMessage);if(!i)return null;let o=ne(i),s=o?a.J(o):void 0,c=[I(i),s].filter(Boolean).join(`
|
|
2
2
|
`).trim();if(c||=L(i),!c){let e=i?(0,g.getContentType)(i):void 0;return t.R(`Quoted message missing extractable body${e?` (type ${e})`:``}`),null}let l=r?.participant??void 0,u=l?t.m(l)??l:void 0,d=u??`unknown sender`;return{id:r?.stanzaId?String(r.stanzaId):void 0,body:c,sender:d,senderJid:l,senderE164:u}}function re(e){return r.Pt({providerConfigPresent:e.providerConfigPresent,groupPolicy:e.groupPolicy,defaultGroupPolicy:e.defaultGroupPolicy})}async function ie(e){let o=n.Si(),s=n.js({cfg:o,accountId:e.accountId}),c=s.dmPolicy??`pairing`,l=s.allowFrom??[],u=await i.z({provider:`whatsapp`,accountId:s.accountId,dmPolicy:c}),d=l.length===0&&e.selfE164?[e.selfE164]:[],f=l.length>0?l:d,p=s.groupAllowFrom??(l.length>0?l:void 0),m=e.from===e.selfE164,h=s.selfChatMode??t.p(e.selfE164,l),g=typeof e.pairingGraceMs==`number`&&e.pairingGraceMs>0?e.pairingGraceMs:3e4,_=typeof e.connectedAtMs==`number`&&typeof e.messageTimestampMs==`number`&&e.messageTimestampMs<e.connectedAtMs-g,v=r.Nt(o),{groupPolicy:y,providerMissingFallbackApplied:b}=re({providerConfigPresent:o.channels?.whatsapp!==void 0,groupPolicy:s.groupPolicy,defaultGroupPolicy:v});r.Ft({providerMissingFallbackApplied:b,providerKey:`whatsapp`,accountId:s.accountId,log:e=>t.R(e)});let x=t.h(e.from),S=typeof e.senderE164==`string`?t.h(e.senderE164):null,C=i.V({isGroup:e.group,dmPolicy:c,groupPolicy:y,allowFrom:e.group?l:f,groupAllowFrom:p,storeAllowFrom:u,isSenderAllowed:n=>{if(n.includes(`*`))return!0;let r=new Set(n.map(e=>t.h(String(e))).filter(e=>!!e));return!e.group&&m?!0:e.group?!!(S&&r.has(S)):r.has(x)}});if(e.group&&C.decision!==`allow`)return C.reason===`groupPolicy=disabled`?t.R(`Blocked group message (groupPolicy: disabled)`):C.reason===`groupPolicy=allowlist (empty allowlist)`?t.R(`Blocked group message (groupPolicy: allowlist, no groupAllowFrom)`):t.R(`Blocked group message from ${e.senderE164??`unknown sender`} (groupPolicy: allowlist)`),{allowed:!1,shouldMarkRead:!1,isSelfChat:h,resolvedAccountId:s.accountId};if(!e.group){if(e.isFromMe&&!m)return t.R(`Skipping outbound DM (fromMe); no pairing reply needed.`),{allowed:!1,shouldMarkRead:!1,isSelfChat:h,resolvedAccountId:s.accountId};if(C.decision===`block`&&C.reason===`dmPolicy=disabled`)return t.R(`Blocked dm (dmPolicy: disabled)`),{allowed:!1,shouldMarkRead:!1,isSelfChat:h,resolvedAccountId:s.accountId};if(C.decision===`pairing`&&!m){let n=e.from;return _?t.R(`Skipping pairing reply for historical DM from ${n}.`):await i.p({channel:`whatsapp`,senderId:n,senderIdLine:`Your WhatsApp phone number: ${n}`,meta:{name:(e.pushName??``).trim()||void 0},upsertPairingRequest:async({id:e,meta:t})=>await a.tt({channel:`whatsapp`,id:e,accountId:s.accountId,meta:t}),onCreated:()=>{t.R(`whatsapp pairing request sender=${n} name=${e.pushName??`unknown`}`)},sendPairingReply:async t=>{await e.sock.sendMessage(e.remoteJid,{text:t})},onReplyError:e=>{t.R(`whatsapp pairing reply failed for ${n}: ${String(e)}`)}}),{allowed:!1,shouldMarkRead:!1,isSelfChat:h,resolvedAccountId:s.accountId}}if(C.decision!==`allow`)return t.R(`Blocked unauthorized sender ${e.from} (dmPolicy=${c})`),{allowed:!1,shouldMarkRead:!1,isSelfChat:h,resolvedAccountId:s.accountId}}return{allowed:!0,shouldMarkRead:!0,isSelfChat:h,resolvedAccountId:s.accountId}}function G(e){return(0,g.normalizeMessageContent)(e)}function K(e){let t=e.imageMessage?.mimetype??e.videoMessage?.mimetype??e.documentMessage?.mimetype??e.audioMessage?.mimetype??e.stickerMessage?.mimetype??void 0;if(t)return t;if(e.audioMessage)return`audio/ogg; codecs=opus`;if(e.imageMessage)return`image/jpeg`;if(e.videoMessage)return`video/mp4`;if(e.stickerMessage)return`image/webp`}async function ae(e,n){let r=G(e.message);if(!r)return;let i=K(r),a=r.documentMessage?.fileName??void 0;if(!(!r.imageMessage&&!r.videoMessage&&!r.documentMessage&&!r.audioMessage&&!r.stickerMessage))try{return{buffer:await(0,g.downloadMediaMessage)(e,`buffer`,{},{reuploadRequest:n.updateMediaMessage,logger:n.logger}),mimetype:i,fileName:a}}catch(e){t.R(`downloadMediaMessage failed: ${String(e)}`);return}}function q(e){l.n({channel:`whatsapp`,accountId:e,direction:`outbound`})}function J(e){return typeof e==`object`&&e&&`key`in e?String(e.key?.id??`unknown`):`unknown`}function Y(e){return{sendMessage:async(n,r,i,a,o)=>{let s=t.T(n),c;if(i&&a)if(a.startsWith(`image/`))c={image:i,caption:r||void 0,mimetype:a};else if(a.startsWith(`audio/`))c={audio:i,ptt:!0,mimetype:a};else if(a.startsWith(`video/`)){let e=o?.gifPlayback;c={video:i,caption:r||void 0,mimetype:a,...e?{gifPlayback:!0}:{}}}else c={document:i,fileName:o?.fileName?.trim()||`file`,caption:r||void 0,mimetype:a};else c={text:r};let l=await e.sock.sendMessage(s,c);return q(o?.accountId??e.defaultAccountId),{messageId:J(l)}},sendPoll:async(n,r)=>{let i=t.T(n),a=await e.sock.sendMessage(i,{poll:{name:r.question,values:r.options,selectableCount:r.maxSelections??1}});return q(e.defaultAccountId),{messageId:J(a)}},sendReaction:async(n,r,i,a,o)=>{let s=t.T(n);await e.sock.sendMessage(s,{react:{text:i,key:{remoteJid:s,id:r,fromMe:a,participant:o?t.T(o):void 0}}})},sendComposingTo:async n=>{let r=t.T(n);await e.sock.sendPresenceUpdate(`composing`,r)}}}async function oe(e){let r=t.K({module:`web-inbound`}),o=t.O(`gateway/channels/whatsapp`).child(`inbound`),s=await p.t(!1,e.verbose,{authDir:e.authDir});await p.i(s);let c=Date.now(),u=null,d=new Promise(e=>{u=e}),f=e=>{if(!u)return;let t=u;u=null,t(e)};try{await s.sendPresenceUpdate(`available`),t.B()&&t.R(`Sent global 'available' presence on connect`)}catch(e){t.R(`Failed to send 'available' presence on connect: ${String(e)}`)}let m=s.user?.id,h=m?t.m(m):null,_=i.C({debounceMs:e.debounceMs??0,buildKey:e=>{let t=e.chatType===`group`?e.senderJid??e.senderE164??e.senderName??e.from:e.from;if(!t)return null;let n=e.chatType===`group`?e.chatId:e.from;return`${e.accountId}:${n}:${t}`},shouldDebounce:e.shouldDebounce,onFlush:async t=>{let n=t.at(-1);if(!n)return;if(t.length===1){await e.onMessage(n);return}let r=new Set;for(let e of t)for(let t of e.mentionedJids??[])r.add(t);let i=t.map(e=>e.body).filter(Boolean).join(`
|
|
3
3
|
`),a={...n,body:i,mentionedJids:r.size>0?Array.from(r):void 0};await e.onMessage(a)},onError:e=>{r.error({error:String(e)},`failed handling inbound web message`),o.error(`Failed handling inbound web message: ${String(e)}`)}}),v=new Map,y=300*1e3,b=s.signalRepository?.lidMapping,x=async n=>t.v(n,{authDir:e.authDir,lidLookup:b}),S=async e=>{let n=v.get(e);if(n&&n.expires>Date.now())return n;try{let t=await s.groupMetadata(e),n=(await Promise.all(t.participants?.map(async e=>await x(e.id)??e.id)??[])).filter(Boolean)??[],r={subject:t.subject,participants:n,expires:Date.now()+y};return v.set(e,r),r}catch(n){return t.R(`Failed to fetch group metadata for ${e}: ${String(n)}`),{expires:Date.now()+y}}},C=async t=>{let n=t.key?.id??void 0,r=t.key?.remoteJid;if(!r||r.endsWith(`@status`)||r.endsWith(`@broadcast`))return null;let i=(0,g.isJidGroup)(r)===!0;if(n&&E(`${e.accountId}:${r}:${n}`))return null;let a=t.key?.participant??void 0,o=i?r:await x(r);if(!o)return null;let l=i?a?await x(a):null:o,u,d;if(i){let e=await S(r);u=e.subject,d=e.participants}let f=t.messageTimestamp?Number(t.messageTimestamp)*1e3:void 0,p=await ie({accountId:e.accountId,from:o,selfE164:h,senderE164:l,group:i,pushName:t.pushName??void 0,isFromMe:!!t.key?.fromMe,messageTimestampMs:f,connectedAtMs:c,sock:{sendMessage:(e,t)=>s.sendMessage(e,t)},remoteJid:r});return p.allowed?{id:n,remoteJid:r,group:i,participantJid:a,from:o,senderE164:l,groupSubject:u,groupParticipants:d,messageTimestampMs:f,access:p}:null},ee=async n=>{let{id:r,remoteJid:i,participantJid:a,access:o}=n;if(r&&!o.isSelfChat&&e.sendReadReceipts!==!1)try{await s.readMessages([{remoteJid:i,id:r,participant:a,fromMe:!1}]),t.B()&&t.R(`Marked message ${r} as read for ${i}${a?` (participant ${a})`:``}`)}catch(e){t.R(`Failed to mark message ${r} read: ${String(e)}`)}else r&&o.isSelfChat&&t.B()&&t.R(`Self-chat mode: skipping read receipt for ${r}`)},w=async r=>{let i=ne(r.message??void 0),o=i?a.J(i):void 0,c=I(r.message??void 0);if(o&&(c=[c,o].filter(Boolean).join(`
|
|
4
4
|
`).trim()),!c&&(c=L(r.message??void 0),!c))return null;let l=W(r.message),u,d,f;try{let t=await ae(r,s);if(t){let r=(typeof e.mediaMaxMb==`number`&&e.mediaMaxMb>0?e.mediaMaxMb:50)*1024*1024;u=(await n.nr(t.buffer,t.mimetype,`inbound`,r,t.fileName)).path,d=t.mimetype,f=t.fileName}}catch(e){t.R(`Inbound media download failed: ${String(e)}`)}return{body:c,location:i??void 0,replyContext:l,mediaPath:u,mediaType:d,mediaFileName:f}},T=async(e,n,i)=>{let a=n.remoteJid,c=async()=>{try{await s.sendPresenceUpdate(`composing`,a)}catch(e){t.R(`Presence update failed: ${String(e)}`)}},l=async e=>{await s.sendMessage(a,{text:e})},u=async e=>{await s.sendMessage(a,e)},d=n.messageTimestampMs,f=F(e.message),p=e.pushName??void 0;r.info({from:n.from,to:h??`me`,body:i.body,mediaPath:i.mediaPath,mediaType:i.mediaType,mediaFileName:i.mediaFileName,timestamp:d},`inbound message`);let g={id:n.id,from:n.from,conversationId:n.from,to:h??`me`,accountId:n.access.resolvedAccountId,body:i.body,pushName:p,timestamp:d,chatType:n.group?`group`:`direct`,chatId:n.remoteJid,senderJid:n.participantJid,senderE164:n.senderE164??void 0,senderName:p,replyToId:i.replyContext?.id,replyToBody:i.replyContext?.body,replyToSender:i.replyContext?.sender,replyToSenderJid:i.replyContext?.senderJid,replyToSenderE164:i.replyContext?.senderE164,groupSubject:n.groupSubject,groupParticipants:n.groupParticipants,mentionedJids:f??void 0,selfJid:m,selfE164:h,fromMe:!!e.key?.fromMe,location:i.location??void 0,sendComposing:c,reply:l,sendMedia:u,mediaPath:i.mediaPath,mediaType:i.mediaType,mediaFileName:i.mediaFileName};try{Promise.resolve(_.enqueue(g)).catch(e=>{r.error({error:String(e)},`failed handling inbound web message`),o.error(`Failed handling inbound web message: ${String(e)}`)})}catch(e){r.error({error:String(e)},`failed handling inbound web message`),o.error(`Failed handling inbound web message: ${String(e)}`)}},D=async t=>{if(!(t.type!==`notify`&&t.type!==`append`))for(let n of t.messages??[]){l.n({channel:`whatsapp`,accountId:e.accountId,direction:`inbound`});let r=await C(n);if(!r||(await ee(r),t.type===`append`))continue;let i=await w(n);i&&await T(n,r,i)}};s.ev.on(`messages.upsert`,D);let O=e=>{try{if(e.connection===`close`){let t=p.r(e.lastDisconnect?.error);f({status:t,isLoggedOut:t===g.DisconnectReason.loggedOut,error:e.lastDisconnect?.error})}}catch(e){r.error({error:String(e)},`connection.update handler error`),f({status:void 0,isLoggedOut:!1,error:e})}};return s.ev.on(`connection.update`,O),{close:async()=>{try{let e=s.ev,t=D,n=O;typeof e.off==`function`?(e.off(`messages.upsert`,t),e.off(`connection.update`,n)):typeof e.removeListener==`function`&&(e.removeListener(`messages.upsert`,t),e.removeListener(`connection.update`,n)),s.ws?.close()}catch(e){t.R(`Socket close failed: ${String(e)}`)}},onClose:d,signalClose:e=>{f(e??{status:void 0,isLoggedOut:!1,error:`closed`})},...Y({sock:{sendMessage:(e,t)=>s.sendMessage(e,t),sendPresenceUpdate:(e,t)=>s.sendPresenceUpdate(e,t)},defaultAccountId:e.accountId})}}function X(e,t){return{mentionRegexes:i.ct(e,t),allowFrom:e.channels?.whatsapp?.allowFrom}}function Z(e,n){let r=n?{authDir:n}:void 0;return{normalizedMentions:e.mentionedJids?.length?e.mentionedJids.map(e=>t.m(e,r)??e).filter(Boolean):[],selfE164:e.selfE164??(e.selfJid?t.m(e.selfJid,r):null),selfJid:e.selfJid?e.selfJid.replace(/:\\d+/,``):null}}function Q(e,n,r){let a=e=>i.lt(e),o=t.p(r.selfE164,n.allowFrom);if((e.mentionedJids?.length??0)>0&&!o)return!!(r.selfE164&&r.normalizedMentions.includes(r.selfE164)||r.selfJid&&r.normalizedMentions.includes(r.selfJid));let s=a(e.body);if(n.mentionRegexes.some(e=>e.test(s)))return!0;if(r.selfE164){let t=r.selfE164.replace(/\D/g,``);if(t){if(s.replace(/[^\d]/g,``).includes(t))return!0;let n=e.body.replace(/[\s-]/g,``);if(RegExp(`\\+?${t}`,`i`).test(n))return!0}}return!1}function se(e,t,n){let r=Z(e,n);return{wasMentioned:Q(e,t,r),details:{from:e.from,body:e.body,bodyClean:i.lt(e.body),mentionedJids:e.mentionedJids??null,normalizedMentionedJids:r.normalizedMentions.length?r.normalizedMentions:null,selfJid:e.selfJid??null,selfJidBare:r.selfJid,selfE164:e.selfE164??null,resolvedSelfE164:r.selfE164}}}function ce(e,n){let r=e.allowFrom;return(Array.isArray(r)&&r.length>0?r:n?[n]:[]).filter(e=>!!(e&&e!==`*`)).map(e=>t.h(e)).filter(e=>!!e)}function le(e){let t=new Set,n=Math.max(1,e.maxItems??100),r=e=>`combined:${e.sessionKey}:${e.combinedBody}`,i=()=>{for(;t.size>n;){let e=t.values().next().value;if(!e)break;t.delete(e)}};return{rememberText:(n,a)=>{n&&(t.add(n),a.combinedBody&&a.combinedBodySessionKey&&t.add(r({sessionKey:a.combinedBodySessionKey,combinedBody:a.combinedBody})),a.logVerboseMessage&&e.logVerbose?.(`Added to echo detection set (size now: ${t.size}): ${n.substring(0,50)}...`),i())},has:e=>t.has(e),forget:e=>{t.delete(e)},buildCombinedKey:r}}function ue(t){let n=i.m({agentId:t.agentId,channel:`whatsapp`,accountId:t.route.accountId,peer:{kind:t.msg.chatType===`group`?`group`:`direct`,id:t.peerId},dmScope:t.cfg.session?.dmScope,identityLinks:t.cfg.session?.identityLinks}),r=e.wt({agentId:t.agentId,mainKey:e.Ct});return{sessionKey:n,mainSessionKey:r,lastRoutePolicy:i.h({sessionKey:n,mainSessionKey:r})}}async function de(t){let n=t.cfg.broadcast?.[t.peerId];if(!n||!Array.isArray(n)||n.length===0)return!1;let r=t.cfg.broadcast?.strategy||`parallel`;S.info(`Broadcasting message to ${n.length} agents (${r})`);let i=t.cfg.agents?.list?.map(t=>e.kt(t.id)),a=(i?.length??0)>0,o=t.msg.chatType===`group`?t.groupHistories.get(t.groupHistoryKey)??[]:void 0,s=async n=>{let r=e.kt(n);if(a&&!i?.includes(r))return S.warn(`Broadcast agent ${n} not found in agents.list; skipping`),!1;let s=ue({cfg:t.cfg,msg:t.msg,route:t.route,peerId:t.peerId,agentId:r}),c={...t.route,agentId:r,...s};try{return await t.processMessage(t.msg,c,t.groupHistoryKey,{groupHistory:o,suppressGroupHistoryClear:!0})}catch(e){return S.error(`Broadcast agent ${n} failed: ${p.n(e)}`),!1}};if(r===`sequential`)for(let e of n)await s(e);else await Promise.allSettled(n.map(s));return t.msg.chatType===`group`&&t.groupHistories.set(t.groupHistoryKey,[]),!0}function fe(e,t,n){let r=e;for(let e of t)r=r.replace(e,` `);if(n){let e=n.replace(/\D/g,``);if(e){let t=RegExp(`\\+?${e}`,`g`);r=r.replace(t,` `)}}return r.replace(/\s+/g,` `).trim()}function pe(e,t){let r=n.gn({From:t,ChatType:`group`,Provider:`whatsapp`})?.id,i=e.channels?.whatsapp,a=!!(i?.groupAllowFrom?.length||i?.allowFrom?.length);return n.uc({cfg:e,channel:`whatsapp`,groupId:r??t,hasGroupAllowFrom:a})}function me(e,t){let r=n.gn({From:t,ChatType:`group`,Provider:`whatsapp`})?.id;return n.dc({cfg:e,channel:`whatsapp`,groupId:r??t})}function he(t){let r=n.kt(e.s(t.cfg.session?.store,{agentId:t.agentId}))[t.sessionKey],a=me(t.cfg,t.conversationId)?`mention`:`always`;return i.o(r?.groupActivation)??a}function ge(e,n,r){for(let i of e){let e=t.h(i)??i;!e||n.has(e)||(n.add(e),r.push(e))}}function _e(e,n,r,i){if(!r||!i)return;let a=t.h(r)??r;if(!a)return;let o=e.get(n);o||(o=new Map,e.set(n,o)),o.set(a,i)}function ve(e){let{participants:n,roster:r,fallbackE164:i}=e,a=new Set,o=[];if(n?.length&&ge(n,a,o),r&&ge(r.keys(),a,o),o.length===0&&i){let e=t.h(i)??i;e&&o.push(e)}if(o.length!==0)return o.map(e=>{let t=r?.get(e);return t?`${t} (${e})`:e}).join(`, `)}function ye(e,n){let r=t.h(n.senderE164??``);return r?ce(e,n.selfE164??void 0).includes(r):!1}function be(e){let t=e.msg.senderName&&e.msg.senderE164?`${e.msg.senderName} (${e.msg.senderE164})`:e.msg.senderName??e.msg.senderE164??`Unknown`;i.st({historyMap:e.groupHistories,historyKey:e.groupHistoryKey,limit:e.groupHistoryLimit,entry:{sender:t,body:e.msg.body,timestamp:e.msg.timestamp,id:e.msg.id,senderJid:e.msg.senderJid}})}function xe(e,t){return e.logVerbose(t),be({msg:e.msg,groupHistories:e.groupHistories,groupHistoryKey:e.groupHistoryKey,groupHistoryLimit:e.groupHistoryLimit}),{shouldProcess:!1}}function Se(e){let n=pe(e.cfg,e.conversationId);if(n.allowlistEnabled&&!n.allowed)return e.logVerbose(`Skipping group message ${e.conversationId} (not in allowlist)`),{shouldProcess:!1};_e(e.groupMemberNames,e.groupHistoryKey,e.msg.senderE164,e.msg.senderName);let r=X(e.cfg,e.agentId),a=fe(e.msg.body,r.mentionRegexes,e.msg.selfE164),o=i.s(a),s=ye(e.baseMentionConfig,e.msg),c=s&&i.E(a,e.cfg);if(o.hasCommand&&!s)return xe(e,`Ignoring /activation from non-owner in group ${e.conversationId}`);let l=se(e.msg,r,e.authDir);e.replyLogger.debug({conversationId:e.conversationId,wasMentioned:l.wasMentioned,...l.details},`group mention debug`);let u=l.wasMentioned,d=he({cfg:e.cfg,agentId:e.agentId,sessionKey:e.sessionKey,conversationId:e.conversationId})!==`always`,f=e.msg.selfJid?.replace(/:\\d+/,``),p=e.msg.replyToSenderJid?.replace(/:\\d+/,``),m=e.msg.selfE164?t.h(e.msg.selfE164):null,h=e.msg.replyToSenderE164?t.h(e.msg.replyToSenderE164):null,g=i.Z({requireMention:d,canDetectMention:!0,wasMentioned:u,implicitMention:!!(f&&p&&f===p||m&&h&&m===h),shouldBypassMention:c});return e.msg.wasMentioned=g.effectiveWasMentioned,!c&&d&&g.shouldSkip?xe(e,`Group message stored for context (no mention detected) in ${e.conversationId}: ${e.msg.body}`):{shouldProcess:!0}}function Ce(e,t){e.add(t),t.finally(()=>{e.delete(t)})}function we(t){let r=e.s(t.cfg.session?.store,{agentId:t.storeAgentId}),i=n.Nt({storePath:r,sessionKey:t.sessionKey,deliveryContext:{channel:t.channel,to:t.to,accountId:t.accountId},ctx:t.ctx}).catch(e=>{t.warn({error:p.n(e),storePath:r,sessionKey:t.sessionKey,to:t.to},`failed updating last route`)});Ce(t.backgroundTasks,i)}function Te(e){return e.chatType===`group`?e.conversationId??e.from:e.senderE164?t.h(e.senderE164)??e.senderE164:e.from.includes(`@`)?t.m(e.from)??e.from:t.h(e.from)??e.from}function $(e,t=400){return!e||e.length<=t?e:`${e.slice(0,t)}… (truncated ${e.length-t} chars)`}function Ee(e){let t=(e instanceof Error?`${e.message}\n${e.stack??``}`:(e=>{if(e==null)return``;if(typeof e==`string`)return e;if(e instanceof Error)return`${e.message}\n${e.stack??``}`;if(typeof e==`object`)try{return JSON.stringify(e)}catch{return Object.prototype.toString.call(e)}return typeof e==`number`||typeof e==`boolean`||typeof e==`bigint`?String(e):typeof e==`symbol`?e.description??e.toString():typeof e==`function`?e.name?`[function ${e.name}]`:`[function]`:Object.prototype.toString.call(e)})(e)).toLowerCase();return t.includes(`unsupported state or unable to authenticate data`)||t.includes(`bad mac`)?t.includes(`@whiskeysockets/baileys`)||t.includes(`baileys`)||t.includes(`noise-handler`)||t.includes(`aesdecryptgcm`):!1}function De(e){if(e.isReasoning===!0)return!0;let t=e.text;return typeof t==`string`?t.trimStart().toLowerCase().startsWith(`reasoning:`):!1}async function Oe(e){let{replyResult:n,msg:r,maxMediaBytes:i,textLimit:a,replyLogger:o,connectionId:c,skipLog:l}=e,d=Date.now();if(De(n)){C.debug(`Suppressed reasoning payload to ${r.from}`);return}let m=e.tableMode??`code`,h=e.chunkMode??`length`,g=s.c(f.i(u.t(n.text||``,m)),a,h),_=n.mediaUrls?.length?n.mediaUrls:n.mediaUrl?[n.mediaUrl]:[],v=async(e,n,i=3)=>{let a;for(let o=1;o<=i;o++)try{return await e()}catch(e){a=e;let s=p.n(e),c=o===i;if(!/closed|reset|timed\s*out|disconnect/i.test(s)||c)throw e;let l=500*o;t.R(`Retrying ${n} to ${r.from} after failure (${o}/${i-1}) in ${l}ms: ${s}`),await t.C(l)}throw a};if(_.length===0&&g.length){let e=g.length;for(let[t,n]of g.entries()){let i=Date.now();if(await v(()=>r.reply(n),`text`),!l){let n=Date.now()-i;C.debug(`Sent chunk ${t+1}/${e} to ${r.from} (${n.toFixed(0)}ms)`)}}o.info({correlationId:r.id??b(),connectionId:c??null,to:r.from,from:r.to,text:$(n.text,240),mediaUrl:null,mediaSizeBytes:null,mediaKind:null,durationMs:Date.now()-d},`auto-reply sent (text)`);return}let y=[...g];for(let[n,a]of _.entries()){let l=n===0&&y.shift()||void 0;try{let n=await s._(a,{maxBytes:i,localRoots:e.mediaLocalRoots});if(t.B()&&(t.R(`Web auto-reply media size: ${(n.buffer.length/(1024*1024)).toFixed(2)}MB`),t.R(`Web auto-reply media source: ${a} (kind ${n.kind})`)),n.kind===`image`)await v(()=>r.sendMedia({image:n.buffer,caption:l,mimetype:n.contentType}),`media:image`);else if(n.kind===`audio`)await v(()=>r.sendMedia({audio:n.buffer,ptt:!0,mimetype:n.contentType,caption:l}),`media:audio`);else if(n.kind===`video`)await v(()=>r.sendMedia({video:n.buffer,caption:l,mimetype:n.contentType}),`media:video`);else{let e=n.fileName??a.split(`/`).pop()??`file`,t=n.contentType??`application/octet-stream`;await v(()=>r.sendMedia({document:n.buffer,fileName:e,caption:l,mimetype:t}),`media:document`)}C.info(`Sent media reply to ${r.from} (${(n.buffer.length/(1024*1024)).toFixed(2)}MB)`),o.info({correlationId:r.id??b(),connectionId:c??null,to:r.from,from:r.to,text:l??null,mediaUrl:a,mediaSizeBytes:n.buffer.length,mediaKind:n.kind,durationMs:Date.now()-d},`auto-reply sent (media)`)}catch(e){if(C.error(`Failed sending web media to ${r.from}: ${p.n(e)}`),o.warn({err:e,mediaUrl:a},`failed to send web media reply`),n===0){let t=e instanceof Error?`⚠️ Media failed: ${e.message}`:`⚠️ Media failed.`,n=[y.shift()??l??``,t].filter(Boolean).join(`
|
|
5
5
|
`);n&&(C.warn(`Media skipped; sent text-only to ${r.from}`),await r.reply(n))}}}for(let e of y)await r.reply(e)}function ke(e){if(!e.msg.id)return;let n=e.cfg.channels?.whatsapp?.ackReaction,r=(n?.emoji??``).trim(),a=n?.direct??!0,o=n?.group??`mentions`,s=e.msg.conversationId??e.msg.from,c=e.msg.chatType===`group`?he({cfg:e.cfg,agentId:e.agentId,sessionKey:e.sessionKey,conversationId:s}):null;i.b({emoji:r,isDirect:e.msg.chatType===`direct`,isGroup:e.msg.chatType===`group`,directEnabled:a,groupMode:o,wasMentioned:e.msg.wasMentioned===!0,groupActivated:c===`always`})&&(e.info({chatId:e.msg.chatId,messageId:e.msg.id,emoji:r},`sending ack reaction`),f.r(e.msg.chatId,e.msg.id,r,{verbose:e.verbose,fromMe:!1,participant:e.msg.senderJid,accountId:e.accountId}).catch(n=>{e.warn({error:p.n(n),chatId:e.msg.chatId,messageId:e.msg.id},`failed to send ack reaction`),t.R(`WhatsApp ack reaction failed for chat ${e.msg.chatId}: ${p.n(n)}`)}))}function Ae(e){return e.replyToBody?`[Replying to ${e.replyToSender??`unknown sender`}${e.replyToId?` id:${e.replyToId}`:``}]\n${e.replyToBody}\n[/Replying]`:null}function je(e){let{cfg:t,msg:n,agentId:r,previousTimestamp:a,envelope:o}=e,s=i.Y(t,r,{configured:t.channels?.whatsapp?.messagePrefix,hasAllowFrom:(t.channels?.whatsapp?.allowFrom?.length??0)>0}),c=s?`${s} `:``,l=Ae(n),u=`${c}${n.body}${l?`\n\n${l}`:``}`;return i.T({channel:`WhatsApp`,from:n.chatType===`group`?n.from:n.from?.replace(/^whatsapp:/,``),timestamp:n.timestamp,body:u,chatType:n.chatType,sender:{name:n.senderName,e164:n.senderE164,id:n.senderJid},previousTimestamp:a,envelope:o,fromMe:n.fromMe})}async function Me(e){let r=e.cfg.commands?.useAccessGroups!==!1;if(!r)return!0;let a=e.msg.chatType===`group`,o=t.h(a?e.msg.senderE164??``:e.msg.senderE164??e.msg.from??``);if(!o)return!1;let s=n.js({cfg:e.cfg,accountId:e.msg.accountId}),c=s.dmPolicy??`pairing`,l=s.groupPolicy??`allowlist`,u=s.allowFrom??[],d=s.groupAllowFrom??(u.length>0?u:void 0),f=a?[]:await i.z({provider:`whatsapp`,accountId:e.msg.accountId,dmPolicy:c});return i.B({isGroup:a,dmPolicy:c,groupPolicy:l,allowFrom:u.length>0?u:e.msg.selfE164?[e.msg.selfE164]:[],groupAllowFrom:d,storeAllowFrom:f,isSenderAllowed:e=>e.includes(`*`)?!0:e.map(e=>t.h(String(e))).filter(e=>!!e).includes(o),command:{useAccessGroups:r,allowTextCommands:!0,hasControlCommand:!0}}).commandAuthorized}function Ne(e){let r=n.js({cfg:e.cfg,accountId:e.msg.accountId});return i.U({dmScope:e.cfg.session?.dmScope,allowFrom:r.allowFrom,normalizeEntry:e=>t.h(e)})}async function Pe(e){let r=e.msg.conversationId??e.msg.from,{storePath:c,envelopeOptions:l,previousTimestamp:u}=i.l({cfg:e.cfg,agentId:e.route.agentId,sessionKey:e.route.sessionKey}),d=je({cfg:e.cfg,msg:e.msg,agentId:e.route.agentId,previousTimestamp:u,envelope:l}),f=!1;if(e.msg.chatType===`group`){let t=e.groupHistory??e.groupHistories.get(e.groupHistoryKey)??[];t.length>0&&(d=i.it({entries:t.map(e=>({sender:e.sender,body:e.body,timestamp:e.timestamp})),currentMessage:d,excludeLast:!1,formatEntry:e=>i.T({channel:`WhatsApp`,from:r,timestamp:e.timestamp,body:e.body,chatType:`group`,senderLabel:e.sender,envelope:l})})),f=!(e.suppressGroupHistoryClear??!1)}let m=e.buildCombinedEchoKey({sessionKey:e.route.sessionKey,combinedBody:d});if(e.echoHas(m))return t.R(`Skipping auto-reply: detected echo for combined message`),e.echoForget(m),!1;ke({cfg:e.cfg,msg:e.msg,agentId:e.route.agentId,sessionKey:e.route.sessionKey,conversationId:r,verbose:e.verbose,accountId:e.route.accountId,info:e.replyLogger.info.bind(e.replyLogger),warn:e.replyLogger.warn.bind(e.replyLogger)});let h=e.msg.id??b();e.replyLogger.info({connectionId:e.connectionId,correlationId:h,from:e.msg.chatType===`group`?r:e.msg.from,to:e.msg.to,body:$(d,240),mediaType:e.msg.mediaType??null,mediaPath:e.msg.mediaPath??null},`inbound web message`);let g=e.msg.chatType===`group`?r:e.msg.from,_=e.msg.mediaType?`, ${e.msg.mediaType}`:``;S.info(`Inbound message ${g} -> ${e.msg.to} (${e.msg.chatType}${_}, ${d.length} chars)`),t.B()&&S.debug(`Inbound body: ${$(d,400)}`);let v=e.msg.chatType===`group`?void 0:e.msg.senderE164?t.h(e.msg.senderE164):e.msg.from.includes(`@`)?t.m(e.msg.from):t.h(e.msg.from),y=e.maxMediaTextChunkLimit??s.f(e.cfg,`whatsapp`),x=s.d(e.cfg,`whatsapp`,e.route.accountId),ee=s.i({cfg:e.cfg,channel:`whatsapp`,accountId:e.route.accountId}),w=o.t(e.cfg,e.route.agentId),T=!1,E=!1,D=i.D(e.msg.body,e.cfg)?await Me({cfg:e.cfg,msg:e.msg}):void 0,O=e.cfg.messages?.responsePrefix,{onModelSelected:k,...A}=i.q({cfg:e.cfg,agentId:e.route.agentId,channel:`whatsapp`,accountId:e.route.accountId}),j=e.msg.chatType!==`group`&&!!e.msg.selfE164&&t.h(e.msg.from)===t.h(e.msg.selfE164??``),M=A.responsePrefix??(O===void 0&&j?i.J(e.cfg,e.route.agentId):void 0),N=e.msg.chatType===`group`?(e.groupHistory??e.groupHistories.get(e.groupHistoryKey)??[]).map(e=>({sender:e.sender,body:e.body,timestamp:e.timestamp})):void 0,P=i.L({Body:d,BodyForAgent:e.msg.body,InboundHistory:N,RawBody:e.msg.body,CommandBody:e.msg.body,From:e.msg.from,To:e.msg.to,SessionKey:e.route.sessionKey,AccountId:e.route.accountId,MessageSid:e.msg.id,ReplyToId:e.msg.replyToId,ReplyToBody:e.msg.replyToBody,ReplyToSender:e.msg.replyToSender,MediaPath:e.msg.mediaPath,MediaUrl:e.msg.mediaUrl,MediaType:e.msg.mediaType,ChatType:e.msg.chatType,ConversationLabel:e.msg.chatType===`group`?r:e.msg.from,GroupSubject:e.msg.groupSubject,GroupMembers:ve({participants:e.msg.groupParticipants,roster:e.groupMemberNames.get(e.groupHistoryKey),fallbackE164:e.msg.senderE164}),SenderName:e.msg.senderName,SenderId:e.msg.senderJid?.trim()||e.msg.senderE164,SenderE164:e.msg.senderE164,CommandAuthorized:D,WasMentioned:e.msg.wasMentioned,...e.msg.location?a.Y(e.msg.location):{},Provider:`whatsapp`,Surface:`whatsapp`,OriginatingChannel:`whatsapp`,OriginatingTo:e.msg.from}),F=Ne({cfg:e.cfg,msg:e.msg}),I=!F||F===v,L=i._({route:e.route,sessionKey:e.route.sessionKey});v&&L===e.route.mainSessionKey&&I?we({cfg:e.cfg,backgroundTasks:e.backgroundTasks,storeAgentId:e.route.agentId,sessionKey:e.route.mainSessionKey,channel:`whatsapp`,to:v,accountId:e.route.accountId,ctx:P,warn:e.replyLogger.warn.bind(e.replyLogger)}):v&&L===e.route.mainSessionKey&&F&&t.R(`Skipping main-session last route update for ${v} (pinned owner ${F})`);let R=n.jt({storePath:c,sessionKey:e.route.sessionKey,ctx:P}).catch(t=>{e.replyLogger.warn({error:p.n(t),storePath:c,sessionKey:e.route.sessionKey},`failed updating session meta`)});Ce(e.backgroundTasks,R);let{queuedFinal:z}=await i.x({ctx:P,cfg:e.cfg,replyResolver:e.replyResolver,dispatcherOptions:{...A,responsePrefix:M,onHeartbeatStrip:()=>{T||(T=!0,t.R(`Stripped stray HEARTBEAT_OK token from web reply`))},deliver:async(n,i)=>{if(i.kind!==`final`)return;await Oe({replyResult:n,msg:e.msg,mediaLocalRoots:w,maxMediaBytes:e.maxMediaBytes,textLimit:y,chunkMode:x,replyLogger:e.replyLogger,connectionId:e.connectionId,skipLog:!1,tableMode:ee}),E=!0;let a=n.text?!0:void 0;e.rememberSentText(n.text,{combinedBody:d,combinedBodySessionKey:e.route.sessionKey,logVerboseMessage:a});let o=e.msg.chatType===`group`?r:e.msg.from??`unknown`,s=!!(n.mediaUrl||n.mediaUrls?.length);if(C.info(`Auto-replied to ${o}${s?` (media)`:``}`),t.B()){let e=n.text==null?`<media>`:$(n.text,400);C.debug(`Reply body: ${e}${s?` (media)`:``}`)}},onError:(t,n)=>{let i=n.kind===`tool`?`tool update`:n.kind===`block`?`block update`:`auto-reply`;C.error(`Failed sending web ${i} to ${e.msg.from??r}: ${p.n(t)}`)},onReplyStart:e.msg.sendComposing},replyOptions:{disableBlockStreaming:!0,onModelSelected:k}});return z?(f&&e.groupHistories.set(e.groupHistoryKey,[]),E):(f&&e.groupHistories.set(e.groupHistoryKey,[]),t.R(`Skipping auto-reply: silent token or no text/media returned from resolver`),!1)}function Fe(r){let a=async(e,t,n,i)=>Pe({cfg:r.cfg,msg:e,route:t,groupHistoryKey:n,groupHistories:r.groupHistories,groupMemberNames:r.groupMemberNames,connectionId:r.connectionId,verbose:r.verbose,maxMediaBytes:r.maxMediaBytes,replyResolver:r.replyResolver,replyLogger:r.replyLogger,backgroundTasks:r.backgroundTasks,rememberSentText:r.echoTracker.rememberText,echoHas:r.echoTracker.has,echoForget:r.echoTracker.forget,buildCombinedEchoKey:r.echoTracker.buildCombinedKey,groupHistory:i?.groupHistory,suppressGroupHistoryClear:i?.suppressGroupHistoryClear});return async o=>{let s=o.conversationId??o.from,c=Te(o),l=i.g({cfg:n.Si(),channel:`whatsapp`,accountId:o.accountId,peer:{kind:o.chatType===`group`?`group`:`direct`,id:c}}),u=o.chatType===`group`?e.Et({channel:`whatsapp`,accountId:l.accountId,peerKind:`group`,peerId:c}):l.sessionKey;if(o.from===o.to&&t.R(`📱 Same-phone mode detected (from === to: ${o.from})`),r.echoTracker.has(o.body)){t.R(`Skipping auto-reply: detected echo (message matches recently sent text)`),r.echoTracker.forget(o.body);return}if(o.chatType===`group`){let e={From:o.from,To:o.to,SessionKey:l.sessionKey,AccountId:l.accountId,ChatType:o.chatType,ConversationLabel:s,GroupSubject:o.groupSubject,SenderName:o.senderName,SenderId:o.senderJid?.trim()||o.senderE164,SenderE164:o.senderE164,Provider:`whatsapp`,Surface:`whatsapp`,OriginatingChannel:`whatsapp`,OriginatingTo:s};if(we({cfg:r.cfg,backgroundTasks:r.backgroundTasks,storeAgentId:l.agentId,sessionKey:l.sessionKey,channel:`whatsapp`,to:s,accountId:l.accountId,ctx:e,warn:r.replyLogger.warn.bind(r.replyLogger)}),!Se({cfg:r.cfg,msg:o,conversationId:s,groupHistoryKey:u,agentId:l.agentId,sessionKey:l.sessionKey,baseMentionConfig:r.baseMentionConfig,authDir:r.account.authDir,groupHistories:r.groupHistories,groupHistoryLimit:r.groupHistoryLimit,groupMemberNames:r.groupMemberNames,logVerbose:t.R,replyLogger:r.replyLogger}).shouldProcess)return}else !o.senderE164&&c&&c.startsWith(`+`)&&(o.senderE164=t.h(c)??o.senderE164);await de({cfg:r.cfg,msg:o,peerId:c,route:l,groupHistoryKey:u,groupHistories:r.groupHistories,processMessage:a})||await a(o,l,u)}}function Ie(e){return e===440}async function Le(e,r=oe,a=!0,o=i.r,s=t.M,l,u={}){let f=b(),m=t.K({module:`web-auto-reply`,runId:f}),h=t.K({module:`web-heartbeat`,runId:f}),g=t.K({module:`web-reconnect`,runId:f}),_={running:!0,connected:!1,reconnectAttempts:0,lastConnectedAt:null,lastDisconnect:null,lastMessageAt:null,lastEventAt:null,lastError:null},S=()=>{u.statusSink?.({..._,lastDisconnect:_.lastDisconnect?{..._.lastDisconnect}:null})};S();let C=n.Si(),T=n.js({cfg:C,accountId:u.accountId}),E={...C,channels:{...C.channels,whatsapp:{...C.channels?.whatsapp,ackReaction:T.ackReaction,messagePrefix:T.messagePrefix,allowFrom:T.allowFrom,groupAllowFrom:T.groupAllowFrom,groupPolicy:T.groupPolicy,textChunkLimit:T.textChunkLimit,chunkMode:T.chunkMode,mediaMaxMb:T.mediaMaxMb,blockStreaming:T.blockStreaming,groups:T.groups}}},D=n.Ms(T),O=v(E,u.heartbeatSeconds),k=y(E,u.reconnect),A=X(E),j=E.channels?.whatsapp?.accounts?.[u.accountId??``]?.historyLimit??E.channels?.whatsapp?.historyLimit??E.messages?.groupChat?.historyLimit??50,M=new Map,N=new Map,P=le({maxItems:100,logVerbose:t.R}),F=u.sleep??((e,t)=>i.f(e,t??l)),I=()=>l?.aborted===!0,L=l&&new Promise(e=>l.addEventListener(`abort`,()=>e(`aborted`),{once:!0})),R=process.getMaxListeners?.()??10;process.setMaxListeners&&R<50&&process.setMaxListeners(50);let z=!1,B=()=>{z=!0};process.once(`SIGINT`,B);let V=0;for(;!I();){let f=b(),v=Date.now(),y=null,C=null,R=null,H=0,U=null,te=u.messageTimeoutMs??1800*1e3,ne=u.watchdogCheckMs??60*1e3,W=new Set,re=Fe({cfg:E,verbose:e,connectionId:f,maxMediaBytes:D,groupHistoryLimit:j,groupHistories:M,groupMemberNames:N,echoTracker:P,backgroundTasks:W,replyResolver:o??i.r,replyLogger:m,baseMentionConfig:A,account:T}),ie=i.w({cfg:E,channel:`whatsapp`}),G=await(r??oe)({verbose:e,accountId:T.accountId,authDir:T.authDir,mediaMaxMb:T.mediaMaxMb,sendReadReceipts:T.sendReadReceipts,debounceMs:ie,shouldDebounce:e=>e.mediaPath||e.mediaType||e.location||e.replyToId||e.replyToBody?!1:!i.E(e.body,E),onMessage:async e=>{H+=1,R=Date.now(),_.lastMessageAt=R,_.lastEventAt=R,S(),await re(e)}});Object.assign(_,i.u()),_.lastError=null,S();let{e164:K}=n.Bs(T.authDir),ae=i.g({cfg:E,channel:`whatsapp`,accountId:T.accountId});i.v(`WhatsApp gateway connected${K?` as ${K}`:``}.`,{sessionKey:ae.sessionKey}),d.r(T.accountId,G),U=c.f(e=>{if(!Ee(e))return!1;let t=p.n(e);return g.warn({connectionId:f,error:t},`web reconnect: unhandled rejection from WhatsApp socket; forcing reconnect`),G.signalClose?.({status:499,isLoggedOut:!1,error:e}),!0});let q=async()=>{d.r(T.accountId,null),U&&=(U(),null),y&&clearInterval(y),C&&clearInterval(C),W.size>0&&(await Promise.allSettled(W),W.clear());try{await G.close()}catch(e){t.R(`Socket close failed: ${p.n(e)}`)}};if(a&&(y=setInterval(()=>{let e=n.Ps(T.authDir),t=R?Math.floor((Date.now()-R)/6e4):null,r={connectionId:f,reconnectAttempts:V,messagesHandled:H,lastMessageAt:R,authAgeMs:e,uptimeMs:Date.now()-v,...t!==null&&t>30?{minutesSinceLastMessage:t}:{}};t&&t>30?h.warn(r,`⚠️ web gateway heartbeat - no messages in 30+ minutes`):h.info(r,`web gateway heartbeat`)},O*1e3),C=setInterval(()=>{if(!R)return;let e=Date.now()-R;if(e<=te)return;let n=Math.floor(e/6e4);h.warn({connectionId:f,minutesSinceLastMessage:n,lastMessageAt:new Date(R),messagesHandled:H},`Message timeout detected - forcing reconnect`),ee.warn(`No messages received in ${n}m - restarting connection`),q().catch(e=>{t.R(`Close listener failed: ${p.n(e)}`)}),G.signalClose?.({status:499,isLoggedOut:!1,error:`watchdog-timeout`})},ne)),x.info(`Listening for personal WhatsApp inbound messages.`),(process.stdout.isTTY||process.stderr.isTTY)&&x.raw(`Ctrl+C to stop.`),!a){await q(),process.removeListener(`SIGINT`,B);return}let J=await Promise.race([G.onClose?.catch(e=>(g.error({error:p.n(e)},`listener.onClose rejected`),{status:500,isLoggedOut:!1,error:e}))??w(),L??w()]);if(Date.now()-v>O*1e3&&(V=0),_.reconnectAttempts=V,S(),I()||z||J===`aborted`){await q();break}let Y=(typeof J==`object`&&J&&`status`in J?J.status:void 0)??`unknown`,X=typeof J==`object`&&J&&`isLoggedOut`in J&&J.isLoggedOut,Z=p.n(J);if(_.connected=!1,_.lastEventAt=Date.now(),_.lastDisconnect={at:_.lastEventAt,status:typeof Y==`number`?Y:void 0,error:Z,loggedOut:!!X},_.lastError=Z,_.reconnectAttempts=V,S(),g.info({connectionId:f,status:Y,loggedOut:X,reconnectAttempts:V,error:Z},`web reconnect: connection closed`),i.v(`WhatsApp gateway disconnected (status ${Y??`unknown`})`,{sessionKey:ae.sessionKey}),X){s.error(`WhatsApp session logged out. Run \`${n.Js(`openclaw channels login --channel web`)}\` to relink.`),await q();break}if(Ie(Y)){g.warn({connectionId:f,status:Y,error:Z},`web reconnect: non-retryable close status; stopping monitor`),s.error(`WhatsApp Web connection closed (status ${Y}: session conflict). Resolve conflicting WhatsApp Web sessions, then relink with \`${n.Js(`openclaw channels login --channel web`)}\`. Stopping web monitoring.`),await q();break}if(V+=1,_.reconnectAttempts=V,S(),k.maxAttempts>0&&V>=k.maxAttempts){g.warn({connectionId:f,status:Y,reconnectAttempts:V,maxAttempts:k.maxAttempts},`web reconnect: max attempts reached; continuing in degraded mode`),s.error(`WhatsApp Web reconnect: max attempts reached (${V}/${k.maxAttempts}). Stopping web monitoring.`),await q();break}let Q=i.d(k,V);g.info({connectionId:f,status:Y,reconnectAttempts:V,maxAttempts:k.maxAttempts||`unlimited`,delayMs:Q},`web reconnect: scheduling retry`),s.error(`WhatsApp Web connection closed (status ${Y}). Retry ${V}/${k.maxAttempts||`∞`} in ${i.y(Q)}… (${Z})`),await q();try{await F(Q,l)}catch{break}}_.running=!1,_.connected=!1,_.lastEventAt=Date.now(),S(),process.removeListener(`SIGINT`,B)}exports.WA_WEB_AUTH_DIR=n.Ns,exports.createWaSocket=p.t,exports.logWebSelfId=n.Fs,exports.loginWeb=m.t,exports.monitorWebChannel=Le,exports.monitorWebInbox=oe,exports.pickWebChannel=n.Rs,exports.sendMessageWhatsApp=f.t,exports.waitForWaConnection=p.i,exports.webAuthExists=n.Ws;
|
|
6
|
-
//# sourceMappingURL=web-
|
|
6
|
+
//# sourceMappingURL=web-CfTkaUMk.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./paths-J4JUiRsa.js";import{Ka as e,Wa as t,Ya as n,to as r}from"./config-ByA2hluR.js";import"./dispatch-
|
|
1
|
+
import"./paths-J4JUiRsa.js";import{Ka as e,Wa as t,Ya as n,to as r}from"./config-ByA2hluR.js";import"./dispatch-3PrSaGZi.js";import"./paths-DaRoqzBQ.js";import"./github-copilot-token-C1hiDugd.js";import"./logger-BtrWb0dj.js";import"./proxy-env-t6hcaFqC.js";import"./send-DtjJM0LO.js";import"./fetch-DBRI0sKI.js";import"./channel-activity-DpxSOlXF.js";import"./fetch-guard-DbOZYxyN.js";import"./local-roots-5udQUs81.js";import"./ir-Bh6lKGdS.js";import"./render-DGmfCIRG.js";import"./tables-DtslIPYw.js";import"./send-DaLB9Lca.js";import"./target-errors-DFmK5loi.js";import"./send-NpNVFRmY.js";import"./deliver-BOLmjIJ3.js";import"./diagnostic-DGLX0zXU.js";import"./pi-model-discovery-Bb2vCP6M.js";import"./audio-transcription-runner-pVTD93vq.js";import"./image-TCSQZpr6.js";import"./api-key-rotation-_VfXYfHS.js";import"./proxy-fetch-B9aXJVe-.js";import"./tokens-AAdZjj0M.js";import"./commands-registry-DcBvmwSU.js";import"./send-IoGcE0w2.js";import"./fetch-BVEVk5YF.js";import"./skill-commands-Cvb6oXym.js";import"./outbound-attachment-CvSHb9ci.js";import"./send-DWuChr46.js";import"./query-expansion-DyCDaZbL.js";import"./manager-WwW37IUu.js";import{n as i,t as a}from"./channel-web-Cptth4mc.js";import{t as o}from"./outbound-dTvIiFIZ.js";import{i as s,t as c}from"./session-DxTRZTnu.js";import{t as l}from"./login-DHE1rzB1.js";export{t as WA_WEB_AUTH_DIR,c as createWaSocket,e as logWebSelfId,l as loginWeb,a as monitorWebChannel,i as monitorWebInbox,n as pickWebChannel,o as sendMessageWhatsApp,s as waitForWaConnection,r as webAuthExists};
|