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