diff --git a/Cargo.lock b/Cargo.lock index 7cda216..572c206 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -82,6 +82,12 @@ version = "1.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" +[[package]] +name = "beef" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1" + [[package]] name = "bitflags" version = "2.12.1" @@ -329,6 +335,12 @@ dependencies = [ "zeroize", ] +[[package]] +name = "either" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" + [[package]] name = "elliptic-curve" version = "0.13.8" @@ -378,6 +390,12 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + [[package]] name = "generic-array" version = "0.14.7" @@ -473,6 +491,15 @@ dependencies = [ "generic-array", ] +[[package]] +name = "itertools" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.18" @@ -506,12 +533,100 @@ version = "0.4.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "953f07c43838f8e6f9758cab68bf5bed85465e7587ebe0b823f1bcd81978ad3a" +[[package]] +name = "logos" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff472f899b4ec2d99161c51f60ff7075eeb3097069a36050d8037a6325eb8154" +dependencies = [ + "logos-derive 0.15.1", +] + +[[package]] +name = "logos" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb2c55a318a87600ea870ff8c2012148b44bf18b74fad48d0f835c38c7d07c5f" +dependencies = [ + "logos-derive 0.16.1", +] + +[[package]] +name = "logos-codegen" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "192a3a2b90b0c05b27a0b2c43eecdb7c415e29243acc3f89cc8247a5b693045c" +dependencies = [ + "beef", + "fnv", + "lazy_static", + "proc-macro2", + "quote", + "regex-syntax", + "rustc_version", + "syn", +] + +[[package]] +name = "logos-codegen" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58b3ffaa284e1350d017a57d04ada118c4583cf260c8fb01e0fe28a2e9cf8970" +dependencies = [ + "fnv", + "proc-macro2", + "quote", + "regex-automata", + "regex-syntax", + "syn", +] + +[[package]] +name = "logos-derive" +version = "0.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "605d9697bcd5ef3a42d38efc51541aa3d6a4a25f7ab6d1ed0da5ac632a26b470" +dependencies = [ + "logos-codegen 0.15.1", +] + +[[package]] +name = "logos-derive" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52d3a9855747c17eaf4383823f135220716ab49bea5fbea7dd42cc9a92f8aa31" +dependencies = [ + "logos-codegen 0.16.1", +] + [[package]] name = "memchr" version = "2.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" +[[package]] +name = "miette" +version = "7.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f98efec8807c63c752b5bd61f862c165c115b0a35685bdcfd9238c7aeb592b7" +dependencies = [ + "cfg-if", + "miette-derive", + "unicode-width 0.1.14", +] + +[[package]] +name = "miette-derive" +version = "7.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db5b29714e950dbb20d5e6f74f9dcec4edbcc1067bb7f8ed198c097b8c1a818b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "nonmax" version = "0.5.5" @@ -604,7 +719,7 @@ dependencies = [ "textwrap", "thiserror", "unicode-segmentation", - "unicode-width", + "unicode-width 0.2.2", ] [[package]] @@ -978,6 +1093,77 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "prost" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "528ac67416ff8646872a3c02cad9cc4ee5dc9f9540c9b10771855c95cb2e5ae1" +dependencies = [ + "bytes", + "prost-derive", +] + +[[package]] +name = "prost-derive" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b570b25f7617e43d59005d0990ccb79e950a423952cea19671b7a876da390adf" +dependencies = [ + "anyhow", + "itertools", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "prost-reflect" +version = "0.16.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "590aa145fee8f7a26b5a6055365e7c5e89a5c1caae9869de76ec0ee73181a2f9" +dependencies = [ + "logos 0.16.1", + "miette", + "prost", + "prost-types", +] + +[[package]] +name = "prost-types" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f94967dc7688f3054c7fac87473ffae4cc4c3904800e2d9f5b857246d8963b0a" +dependencies = [ + "prost", +] + +[[package]] +name = "protox" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f25a07a73c6717f0b9bbbd685918f5df9815f7efba450b83d9c9dea41f0e3a1" +dependencies = [ + "bytes", + "miette", + "prost", + "prost-reflect", + "prost-types", + "protox-parse", + "thiserror", +] + +[[package]] +name = "protox-parse" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "072eee358134396a4643dff81cfff1c255c9fbd3fb296be14bdb6a26f9156366" +dependencies = [ + "logos 0.15.1", + "miette", + "prost-types", + "thiserror", +] + [[package]] name = "quote" version = "1.0.45" @@ -1409,7 +1595,7 @@ checksum = "c13547615a44dc9c452a8a534638acdf07120d4b6847c8178705da06306a3057" dependencies = [ "smawk", "unicode-linebreak", - "unicode-width", + "unicode-width 0.2.2", ] [[package]] @@ -1462,6 +1648,12 @@ version = "1.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c6f5d3c3b1bf09027a88a6bc961fc00497d651009560b5463668dc81b0fa87a8" +[[package]] +name = "unicode-width" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" + [[package]] name = "unicode-width" version = "0.2.2" @@ -1640,6 +1832,7 @@ dependencies = [ "oxc_allocator", "oxc_ast", "oxc_ast_visit", + "protox", "wa-ir", "wa-oxc", "wa-transform", diff --git a/crates/wa-codegen/src/stanza_export.rs b/crates/wa-codegen/src/stanza_export.rs index 64639e1..9c596c7 100644 --- a/crates/wa-codegen/src/stanza_export.rs +++ b/crates/wa-codegen/src/stanza_export.rs @@ -334,6 +334,7 @@ mod tests { ], children: vec![], response: None, + fragment: false, }, StanzaDef { stanza_type: StanzaTag::Message, @@ -347,6 +348,7 @@ mod tests { attrs: vec![plain_attr("id", WapAttrKind::String)], children: vec![enc], response: None, + fragment: false, }, ], }; @@ -409,6 +411,7 @@ mod tests { ], children: vec![enc], response: None, + fragment: false, }], }; let code = generate_stanza(&ir); diff --git a/crates/wa-enums/src/lib.rs b/crates/wa-enums/src/lib.rs index 4fe7e23..48be1ab 100644 --- a/crates/wa-enums/src/lib.rs +++ b/crates/wa-enums/src/lib.rs @@ -41,11 +41,21 @@ pub fn extract_enums_from_modules( ) -> EnumsIr { let mut enums = Vec::new(); for m in module_defs { - // Only modules that actually depend on $InternalEnum can define one. - if !m.deps.iter().any(|d| d == DEP) { - continue; + let slice = &source[m.start..m.end]; + if m.deps.iter().any(|d| d == DEP) { + // The reliable, cheap path: `$InternalEnum({…})` definitions. + enums.extend(extract_from_module(slice, &m.name)); + } else if is_protocol_enum_module(&m.name) { + // Some wire enums are plain object literals exported by name + // (`var e={INACTIVE:-6,…}; i.ACK=e`) with no `$InternalEnum` dep. A plain + // object is ambiguous (every `{a:1,b:2}` config/UI/i18n map looks like one), + // so this path is scoped to modules WA names by its *protocol* enum-bag + // convention — `WASmax…Enums` plus the two ack/receipt level modules — + // never the app's infra constants (loggers, locales, JPEG markers, …). Within + // those, [`extract_plain_object_enums`] still keeps only `CONSTANT_CASE` + // members so a stray helper export can't leak in. + enums.extend(extract_plain_object_enums(slice, &m.name)); } - enums.extend(extract_from_module(&source[m.start..m.end], &m.name)); } // Deterministic order independent of bundle layout. enums.sort_by(|a, b| a.module.cmp(&b.module).then_with(|| a.name.cmp(&b.name))); @@ -90,6 +100,19 @@ fn extract_from_module(slice: &str, module: &str) -> Vec { out } +/// Resolve `X.Name = local` bindings against the locals captured by var-init, filling +/// `exports` (first binding wins). Shared by [`resolve_named_enum`] and the plain-object +/// catalog pass so the two resolution sites can't drift. +fn resolve_pending(r: &mut NamedResolver) { + for (export, local) in &r.pending { + if let Some(data) = r.locals.get(local) { + r.exports + .entry(export.clone()) + .or_insert_with(|| data.clone()); + } + } +} + /// Resolve one named enum export from a single module, for the IQ attribute /// enum-linking. Unlike the catalog extractor this also accepts a **plain /// object-literal** export (`X.Name = {KEY:"val"}` or `var l = {…}; X.Name = l`) — @@ -110,14 +133,7 @@ pub fn resolve_named_enum(module_slice: &str, module: &str, name: &str) -> Optio pending: Vec::new(), }; r.visit_program(&ret.program); - // `X.Name = local` bindings resolve against the locals captured by var-init. - for (export, local) in &r.pending { - if let Some(data) = r.locals.get(local) { - r.exports - .entry(export.clone()) - .or_insert_with(|| data.clone()); - } - } + resolve_pending(&mut r); let (value_kind, variants) = r.exports.get(name)?.clone(); Some(InternalEnumDef { name: name.to_string(), @@ -132,6 +148,59 @@ fn enum_object<'b, 'a>(e: &'b Expression<'a>) -> Option<&'b ObjectExpression<'a> internal_enum_object(e).or_else(|| as_object(e)) } +/// Whether `name` is `CONSTANT_CASE` (`[A-Z][A-Z0-9_]*`) — the member-name shape WA +/// uses for its plain-object wire enums (`INACTIVE`, `READ_SELF`, `CONTENT_TOO_BIG`), +/// as opposed to the `camelCase` keys of config/lookup maps. +fn is_constant_case(name: &str) -> bool { + let mut chars = name.chars(); + matches!(chars.next(), Some(c) if c.is_ascii_uppercase()) + && chars.all(|c| c.is_ascii_uppercase() || c.is_ascii_digit() || c == '_') +} + +/// Whether `module` is one WA declares its *wire-protocol* enums in as plain object +/// literals (no `$InternalEnum`): the `WASmax…Enums` smax enum bags, plus the +/// two ack/receipt-level modules that predate that convention. Deliberately narrow — +/// the app has thousands of `CONSTANT_CASE` infra objects (loggers, locales, JPEG +/// markers, UI constants) that are not part of the protocol surface. +fn is_protocol_enum_module(module: &str) -> bool { + ((module.starts_with("WASmaxIn") || module.starts_with("WASmaxOut")) + && module.ends_with("Enums")) + || module == "WAWebAck" + || module == "WAAckLevel" +} + +/// Extract plain-object-literal enums exported by name from a non-`$InternalEnum` +/// module (`i.ACK = {INACTIVE:-6,…}` or `var e={…}; i.ACK=e`). Kept deliberately strict +/// — only exports with ≥2 members, all-literal single-kind values ([`parse_enum`]), and +/// all-`CONSTANT_CASE` member names — so config/lookup maps don't leak into the catalog. +fn extract_plain_object_enums(slice: &str, module: &str) -> Vec { + let alloc = Allocator::default(); + let ret = parse_cjs(&alloc, slice); + if ret.panicked { + return Vec::new(); + } + let mut r = NamedResolver { + locals: HashMap::new(), + exports: HashMap::new(), + pending: Vec::new(), + }; + r.visit_program(&ret.program); + resolve_pending(&mut r); + let mut out: Vec = Vec::new(); + for (name, (value_kind, variants)) in r.exports { + if variants.len() >= 2 && variants.iter().all(|v| is_constant_case(&v.name)) { + out.push(InternalEnumDef { + name, + module: module.to_string(), + value_kind, + variants, + }); + } + } + out.sort_by(|a, b| a.name.cmp(&b.name)); + out +} + struct NamedResolver { locals: HashMap, exports: HashMap, @@ -369,4 +438,43 @@ mod tests { let src = r#"__d("Nope",[],function(g,r,d,o,e,i,l){ l.X=r("$InternalEnum")({A:1}); },1);"#; assert!(run(src).is_empty()); } + + #[test] + fn plain_object_wire_enums_captured_only_from_protocol_modules() { + // WA's ack/receipt level enums and smax `*Enums` bags are plain object literals + // with no `$InternalEnum` dep — captured via the protocol-module convention. + let src = r#" + __d("WAWebAck",[],(function(t,n,r,o,a,i){var e={INACTIVE:-6,SENT:1,READ:3};i.ACK=e}),1); + __d("WASmaxInReceiptEnums",["WAJids"],(function(t,n,r,o,a,i,l){var e={CBP:"cbp",NBP:"nbp"};i.ENUM_CBP_NBP=e}),1); + "#; + let enums = run(src); + let ack = enums + .iter() + .find(|e| e.module == "WAWebAck") + .expect("WAWebAck.ACK"); + assert_eq!(ack.name, "ACK"); + assert_eq!(ack.value_kind, EnumValueKind::Int); + assert_eq!(ack.variants.len(), 3); + assert!( + enums + .iter() + .any(|e| e.module == "WASmaxInReceiptEnums" && e.name == "ENUM_CBP_NBP") + ); + } + + #[test] + fn plain_object_non_protocol_and_camelcase_are_not_enums() { + // Same plain-object shape, but a non-protocol infra module → not scanned + // (would otherwise flood the catalog with loggers/locales/UI constants). + let infra = r#"__d("WAWebLog",[],(function(t,n,r,o,a,i){var e={DEBUG:0,INFO:1,ERROR:2};i.Level=e}),1);"#; + assert!(run(infra).iter().all(|e| e.module != "WAWebLog")); + // A protocol module, but a `camelCase`-keyed (non-enum) map is still rejected by + // the CONSTANT_CASE guard. + let cfg = r#"__d("WASmaxInFooEnums",[],(function(t,n,r,o,a,i){var e={maxRetries:3,timeoutMs:5};i.config=e}),1);"#; + assert!(run(cfg).iter().all(|e| e.module != "WASmaxInFooEnums")); + // A protocol module whose plain-object export mixes int and string values is + // rejected (single value-kind), mirroring the `$InternalEnum` mixed-skip path. + let mixed = r#"__d("WASmaxInBarEnums",[],(function(t,n,r,o,a,i){var e={A:1,B:"two"};i.MIXED=e}),1);"#; + assert!(run(mixed).iter().all(|e| e.module != "WASmaxInBarEnums")); + } } diff --git a/crates/wa-ir/src/iq.rs b/crates/wa-ir/src/iq.rs index 1c4b669..0d5112b 100644 --- a/crates/wa-ir/src/iq.rs +++ b/crates/wa-ir/src/iq.rs @@ -576,6 +576,13 @@ pub struct StanzaDef { pub children: Vec, /// Present for IQ stanzas; `null` for fire-and-forget stanzas. pub response: Option, + /// True for a `merge…Mixin` fragment: a partial stanza (e.g. a message + /// content-type mixin `smax("message",{type:"reaction"})`) that WA folds into a + /// concrete stanza via `mergeStanzas`, not a standalone sendable stanza. Catalogued + /// so the full set of message/receipt content types is visible; consumers building a + /// stanza to send should filter these out. + #[serde(default, skip_serializing_if = "std::ops::Not::not")] + pub fragment: bool, } /// An entry in the incoming stanza dispatch table. diff --git a/crates/wa-proto/Cargo.toml b/crates/wa-proto/Cargo.toml index ea7086e..dcc59b3 100644 --- a/crates/wa-proto/Cargo.toml +++ b/crates/wa-proto/Cargo.toml @@ -18,3 +18,9 @@ wa-transform = { workspace = true } [dev-dependencies] anyhow = { workspace = true } +# Dev-only: a pure-Rust protoc that parses AND fully type-resolves the emitted +# `WAProto.proto`, so a broken extraction (dangling type ref, duplicate name, bad +# enum scoping) fails `cargo test` instead of being silently auto-committed. Kept a +# dev-dep of this native-only crate so it never enters the wasm/shipped surface, and +# it is C-free (no ring/aws-lc/openssl-sys) so the C-free CI guard still holds. +protox = "0.9" diff --git a/crates/wa-proto/tests/proto_compiles.rs b/crates/wa-proto/tests/proto_compiles.rs new file mode 100644 index 0000000..74be980 --- /dev/null +++ b/crates/wa-proto/tests/proto_compiles.rs @@ -0,0 +1,53 @@ +//! Guard: the committed `generated/proto/WAProto.proto` must be a syntactically valid, +//! fully self-consistent protobuf schema. +//! +//! `WAProto.proto` is the only generated artifact with no validation in CI — the JSON +//! domains are schema-checked by `scripts/validate-schemas.py`, but the `.proto` was +//! never even parsed. Since `update.yml` auto-regenerates and auto-commits on new +//! WhatsApp versions with no human review, a future bundle change that breaks extraction +//! (a dangling type reference, a duplicate message name, mis-scoped enum values — exactly +//! the failure class the enum-relocation pass in `extract.rs` risks producing) would be +//! committed silently. `protox` is a pure-Rust protoc that parses *and* resolves every +//! type, so such a break fails `cargo test` here instead. + +use std::path::Path; + +#[test] +fn committed_waproto_compiles_and_resolves() { + let proto_dir = Path::new(env!("CARGO_MANIFEST_DIR")).join("../../generated/proto"); + let proto_file = proto_dir.join("WAProto.proto"); + + // The artifact is committed, so in CI it is always present — a missing file there + // means the guard silently isn't being exercised, which defeats its whole purpose, so + // fail loudly. Locally (e.g. a sparse/partial checkout) tolerate its absence, since + // `cargo test` hides a passing test's stderr and a spurious failure would be noise. + if !proto_file.exists() { + assert!( + std::env::var_os("CI").is_none(), + "{} is absent under CI — the proto compile guard would be silently skipped", + proto_file.display() + ); + eprintln!( + "skipping: {} not present (local only; CI requires it)", + proto_file.display() + ); + return; + } + + // `compile` parses the file and resolves every cross-reference against the include + // root; an unresolved type name, duplicate definition, or mis-scoped enum value is a + // hard error — precisely what we want to catch. + let descriptors = protox::compile(["WAProto.proto"], [&proto_dir]).unwrap_or_else(|e| { + panic!( + "committed generated/proto/WAProto.proto is not a valid, self-consistent \ + protobuf schema: {e}" + ) + }); + + // Sanity floor: the real schema compiles to a non-empty descriptor set. An empty one + // would mean the include root resolved to nothing meaningful. + assert!( + !descriptors.file.is_empty(), + "expected the committed WAProto.proto to compile to at least one file descriptor" + ); +} diff --git a/crates/wa-scan/src/request.rs b/crates/wa-scan/src/request.rs index 0a78a2b..e989746 100644 --- a/crates/wa-scan/src/request.rs +++ b/crates/wa-scan/src/request.rs @@ -216,6 +216,36 @@ pub(crate) fn resolve_child_node( ); } + // Case 0: a conditional child `cond ? A : B` (e.g. an optional child built as + // `a.length > 0 ? wap("list", …) : null`, as the aggregate receipt/ack builder does). + // Resolve BOTH branches and union their children: the common `cond ? node : null` + // yields just `node` (the `null` side resolves to nothing), while a genuinely + // divergent `cond ? wap("a", …) : wap("b", …)` catalogs both possible children + // rather than silently dropping one — the schema should reflect every shape a child + // can take. Identical children (e.g. `cond ? x : x`) are collapsed so the union + // doesn't duplicate. + if let Expression::ConditionalExpression(cond) = node { + let resolve = |branch| { + resolve_child_node( + branch, + node_source, + scope, + module_source, + aliases, + contributions, + helpers, + depth, + ) + }; + let mut out = resolve(&cond.consequent); + for child in resolve(&cond.alternate) { + if !out.contains(&child) { + out.push(child); + } + } + return out; + } + // Case 1: direct wap()/smax() call. if let Some(call) = as_call(node) && let Some(wap) = parse_wap_call(call, aliases) diff --git a/crates/wa-scan/src/stanza.rs b/crates/wa-scan/src/stanza.rs index 86888d1..2453c75 100644 --- a/crates/wa-scan/src/stanza.rs +++ b/crates/wa-scan/src/stanza.rs @@ -67,8 +67,9 @@ pub fn scan_stanzas_from_modules(source: &str, defs: &[ModuleDefinition]) -> Vec out.extend(scan_module(slice, &helpers)); } // Drop structureless stanzas (no attrs, no children, no subtype) — a bare `` - // carries nothing a consumer can model. (Fragment `merge…Mixin` modules are already - // dropped whole in `scan_module`.) + // carries nothing a consumer can model. Fragment `merge…Mixin` modules are kept and + // marked via `StanzaDef::fragment` in `scan_module`, so they're only dropped here if + // genuinely structureless. out.retain(|s| !s.attrs.is_empty() || !s.children.is_empty() || s.subtype.is_some()); // Fill in the attribute enum links (`receipt.type` → `ENC_RETRY_RECEIPT_ATTRS`, …). let mut resolver = EnumResolver::new(defs, source); @@ -134,30 +135,31 @@ fn scan_module(source: &str, helpers: &HelperIndex) -> Vec { // A module whose function exports are all `merge…Mixin` is a fragment: its stanzas // are partials folded into real ones via `mergeStanzas`, not top-level builders (the // `smax` sits in an inner un-exported helper, so this is judged per-module, not per - // call). The IQ scanner drops these the same way. - if is_fragment_module(&c.exports) { - return Vec::new(); - } + // call). We keep them, marked `fragment`, so the message/receipt content-type mixin + // catalog (`{type:"reaction"}`, `{type:"media"}`, …) is captured rather than dropped; + // a consumer building a sendable stanza filters them out. + let fragment = is_fragment_module(&c.exports); // Record the module's exports on each emitted stanza (matches the IQ scanner). let all_exports = c.exports; for s in &mut c.out { s.all_exports = all_exports.clone(); + s.fragment = fragment; } c.out } -/// Whether a module's exports are only `merge…Mixin` combinators — a stanza fragment. -/// Ignores constants (ALL_CAPS) and `default`, matching the IQ fragment heuristic. +/// Whether a module exports a `merge…Mixin` combinator — a stanza fragment. `any`, not +/// `all` (and matching the IQ scanner, `wa-scan::module`): a genuine mixin often exports +/// a `merge…Mixin` *alongside* a `make…` helper, so requiring every export to be a mixin +/// would misclassify it as a standalone sendable stanza. `merge…Mixin` is WA's exclusive +/// cross-module mixin-export convention, so a real standalone builder never carries one. +/// Ignores constants (ALL_CAPS) and `default`. fn is_fragment_module(exports: &[String]) -> bool { - let functions: Vec<&str> = exports + exports .iter() .map(String::as_str) .filter(|e| *e != "default" && !e.chars().all(|c| c.is_ascii_uppercase() || c == '_')) - .collect(); - !functions.is_empty() - && functions - .iter() - .all(|e| e.starts_with("merge") && e.contains("Mixin")) + .any(|e| e.starts_with("merge") && e.contains("Mixin")) } struct StanzaCollector<'s> { @@ -252,6 +254,7 @@ impl<'a> Visit<'a> for StanzaCollector<'_> { attrs, children, response: None, + fragment: false, }); // The stanza's children are already recovered by `resolve_child_node` // above; don't descend into this call's args and re-capture a nested @@ -380,9 +383,11 @@ mod tests { } #[test] - fn merge_mixin_fragment_module_is_dropped() { + fn merge_mixin_fragment_module_is_catalogued_as_fragment() { // A module whose only function export is a `merge…Mixin` combinator is a - // fragment (its stanza is folded into a real one), so it emits nothing. + // fragment (its stanza is folded into a real one). It's kept — so the + // message/receipt content-type mixin catalog is captured — but marked `fragment` + // so a consumer building a sendable stanza can filter it out. let bundle = r#" __d("WASmaxOutFooMixin",["WASmaxJsx","WASmaxMixins"],(function(t,n,r,o,a,i,l){ function e(){ return o("WASmaxJsx").smax("receipt",{type:"read"}); } @@ -390,10 +395,13 @@ mod tests { l.mergeFooMixin=s; }),1); "#; - assert!( - scan(bundle).is_empty(), - "fragment module must emit no stanza" - ); + let stanzas = scan(bundle); + let frag = stanzas + .iter() + .find(|s| s.stanza_type == StanzaTag::Receipt) + .expect("fragment receipt catalogued"); + assert!(frag.fragment, "must be marked as a fragment"); + assert_eq!(frag.subtype.as_deref(), Some("read")); assert!(is_fragment_module(&["mergeFooMixin".into()])); assert!(!is_fragment_module(&["sendReceipt".into()])); // Constants alongside the mixin don't disqualify it. @@ -401,13 +409,88 @@ mod tests { "mergeFooMixin".into(), "SOME_CONST".into() ])); + // A `make…` helper exported *alongside* the mixin must NOT reclassify it as a + // standalone stanza (`any`, not `all` — matching the IQ scanner). + assert!(is_fragment_module(&[ + "mergeFooMixin".into(), + "makeFooRequest".into() + ])); + // A pure helper module (no mixin) is not a fragment. + assert!(!is_fragment_module(&["makeFooRequest".into()])); + } + + #[test] + fn conditionally_built_child_is_recovered() { + // The aggregate receipt/ack builder attaches its `` child conditionally + // (`a.length > 0 ? wap("list", …) : null`). The child must be recovered from the + // ternary, not dropped. + let bundle = r#" + __d("WAWebSendAckJob",["WAWap"],(function(g,r,d,o,e,i,l){ + l.send=function(ids){ + var extra = ids.length>0 ? o("WAWap").wap("list",null, o("WAWap").wap("item",{id:o("WAWap").CUSTOM_STRING(ids[0])})) : null; + return o("WAWap").wap("ack",{id:o("WAWap").CUSTOM_STRING(ids[0]),type:"text"}, extra); + }; + }),1); + "#; + let ack = scan(bundle) + .into_iter() + .find(|s| s.stanza_type == StanzaTag::Ack) + .expect("ack captured"); + let list = ack + .children + .iter() + .find(|c| c.tag == "list") + .expect("conditional child recovered"); + assert!( + list.children.iter().any(|c| c.tag == "item"), + "nested under the conditional list recovered" + ); + } + + #[test] + fn both_ternary_branches_children_are_captured() { + // A genuinely divergent `cond ? wap("a") : wap("b")` child catalogs BOTH shapes, + // not just the consequent — the static schema should reflect every possible child. + let bundle = r#" + __d("WAWebSendAckJob2",["WAWap"],(function(g,r,d,o,e,i,l){ + l.send=function(x){ + var c = x ? o("WAWap").wap("a",{k:o("WAWap").CUSTOM_STRING(x)}) : o("WAWap").wap("b",{k:o("WAWap").CUSTOM_STRING(x)}); + return o("WAWap").wap("ack",{id:o("WAWap").CUSTOM_STRING(x),type:"text"}, c); + }; + }),1); + "#; + let ack = scan(bundle) + .into_iter() + .find(|s| s.stanza_type == StanzaTag::Ack) + .expect("ack captured"); + let tags: Vec<&str> = ack.children.iter().map(|c| c.tag.as_str()).collect(); + assert!( + tags.contains(&"a") && tags.contains(&"b"), + "both ternary branches captured, got {tags:?}" + ); + } + + #[test] + fn standalone_stanza_is_not_marked_fragment() { + // A real top-level builder (non-mixin export) stays `fragment: false`. + let bundle = r#" + __d("WAWebSendPresence",["WAWap"],(function(g,r,d,o,e,i,l){ + l.send=function(t){ return o("WAWap").wap("presence",{type:"available"}); }; + }),98); + "#; + let p = scan(bundle) + .into_iter() + .find(|s| s.stanza_type == StanzaTag::Presence) + .expect("presence captured"); + assert!(!p.fragment); } #[test] fn internal_object_write_does_not_pollute_exports() { // A fragment module that also writes to a LOCAL object (`cache.key = …`) must - // still be dropped: only `.x = …` counts as an export, so the - // internal write doesn't add a bogus non-mixin export that would save it. + // still be classified as a fragment: only `.x = …` counts as an + // export, so the internal write doesn't add a bogus non-mixin export that would + // reclassify it as a standalone stanza. let bundle = r#" __d("WASmaxOutBarMixin",["WASmaxJsx","WASmaxMixins"],(function(t,n,r,o,a,i,l){ var cache={}; cache.key="v"; @@ -415,9 +498,13 @@ mod tests { l.mergeBarMixin=function(t){ return o("WASmaxMixins").mergeStanzas(t,e()); }; }),1); "#; + let frag = scan(bundle) + .into_iter() + .find(|s| s.stanza_type == StanzaTag::Receipt) + .expect("fragment catalogued"); assert!( - scan(bundle).is_empty(), - "internal `cache.key` write must not save the fragment from being dropped" + frag.fragment, + "internal `cache.key` write must not reclassify the fragment as standalone" ); } } diff --git a/generated/enums/index.json b/generated/enums/index.json index a1db82b..6b80ffc 100644 --- a/generated/enums/index.json +++ b/generated/enums/index.json @@ -547,6 +547,61 @@ } ] }, + { + "name": "ACK", + "module": "WAAckLevel", + "valueKind": "int", + "variants": [ + { + "name": "SENDER_BACKFILL_SENT", + "value": -7 + }, + { + "name": "INACTIVE_RECEIVED", + "value": -6 + }, + { + "name": "CONTENT_UNUPLOADABLE", + "value": -5 + }, + { + "name": "CONTENT_TOO_BIG", + "value": -4 + }, + { + "name": "CONTENT_GONE", + "value": -3 + }, + { + "name": "EXPIRED", + "value": -2 + }, + { + "name": "FAILED", + "value": -1 + }, + { + "name": "CLOCK", + "value": 0 + }, + { + "name": "SENT", + "value": 1 + }, + { + "name": "RECEIVED", + "value": 2 + }, + { + "name": "READ", + "value": 3 + }, + { + "name": "PLAYED", + "value": 4 + } + ] + }, { "name": "HostedState", "module": "WAFingerprint.pb", @@ -646,6 +701,587 @@ } ] }, + { + "name": "ENUM_FBPAY_NOVI_UPI", + "module": "WASmaxInAccountEnums", + "valueKind": "string", + "variants": [ + { + "name": "FBPAY", + "value": "FBPAY" + }, + { + "name": "NOVI", + "value": "NOVI" + }, + { + "name": "UPI", + "value": "UPI" + } + ] + }, + { + "name": "ENUM_CITY_COUNTRY_CUSTOMLOCATION_NEIGHBORHOOD_REGION_ZIP", + "module": "WASmaxInBizCtwaNativeAdEnums", + "valueKind": "string", + "variants": [ + { + "name": "CITY", + "value": "CITY" + }, + { + "name": "COUNTRY", + "value": "COUNTRY" + }, + { + "name": "CUSTOM_LOCATION", + "value": "CUSTOM_LOCATION" + }, + { + "name": "NEIGHBORHOOD", + "value": "NEIGHBORHOOD" + }, + { + "name": "REGION", + "value": "REGION" + }, + { + "name": "ZIP", + "value": "ZIP" + } + ] + }, + { + "name": "ENUM_FACEBOOK_INSTAGRAM", + "module": "WASmaxInBizCtwaNativeAdEnums", + "valueKind": "string", + "variants": [ + { + "name": "FACEBOOK", + "value": "FACEBOOK" + }, + { + "name": "INSTAGRAM", + "value": "INSTAGRAM" + } + ] + }, + { + "name": "ENUM_FAIL_PAUSED_SUCCESS_WARNING", + "module": "WASmaxInBizMarketingMessageEnums", + "valueKind": "string", + "variants": [ + { + "name": "FAIL", + "value": "FAIL" + }, + { + "name": "PAUSED", + "value": "PAUSED" + }, + { + "name": "SUCCESS", + "value": "SUCCESS" + }, + { + "name": "WARNING", + "value": "WARNING" + } + ] + }, + { + "name": "ENUM_FAIL_SUCCESS", + "module": "WASmaxInBizMarketingMessageEnums", + "valueKind": "string", + "variants": [ + { + "name": "FAIL", + "value": "FAIL" + }, + { + "name": "SUCCESS", + "value": "SUCCESS" + } + ] + }, + { + "name": "ENUM_DISCOVERABLE_HIDDEN_UNDEFINED", + "module": "WASmaxInBizSettingsEnums", + "valueKind": "string", + "variants": [ + { + "name": "DISCOVERABLE", + "value": "DISCOVERABLE" + }, + { + "name": "HIDDEN", + "value": "HIDDEN" + }, + { + "name": "UNDEFINED", + "value": "UNDEFINED" + } + ] + }, + { + "name": "ENUM_ACCOUNTPENDINGLINKING_ACTIVE_EXTERNALLYDISABLED_HARDBLOCKED_INACTIVE_INITED_INTEGRITYBLOCKED_PENDING_SOFTBLOCKED", + "module": "WASmaxInBrPaymentEnums", + "valueKind": "string", + "variants": [ + { + "name": "ACCOUNT_PENDING_LINKING", + "value": "ACCOUNT_PENDING_LINKING" + }, + { + "name": "ACTIVE", + "value": "ACTIVE" + }, + { + "name": "EXTERNALLY_DISABLED", + "value": "EXTERNALLY_DISABLED" + }, + { + "name": "HARD_BLOCKED", + "value": "HARD_BLOCKED" + }, + { + "name": "INACTIVE", + "value": "INACTIVE" + }, + { + "name": "INITED", + "value": "INITED" + }, + { + "name": "INTEGRITY_BLOCKED", + "value": "INTEGRITY_BLOCKED" + }, + { + "name": "PENDING", + "value": "PENDING" + }, + { + "name": "SOFT_BLOCKED", + "value": "SOFT_BLOCKED" + } + ] + }, + { + "name": "ENUM_ACTIVE_DELETED_INACTIVE_NEEDSRETOKENIZATION_NEEDSRETOKENIZATIONDELETED_SUSPENDED", + "module": "WASmaxInBrPaymentEnums", + "valueKind": "string", + "variants": [ + { + "name": "ACTIVE", + "value": "ACTIVE" + }, + { + "name": "DELETED", + "value": "DELETED" + }, + { + "name": "INACTIVE", + "value": "INACTIVE" + }, + { + "name": "NEEDS_RETOKENIZATION", + "value": "NEEDS_RETOKENIZATION" + }, + { + "name": "NEEDS_RETOKENIZATION_DELETED", + "value": "NEEDS_RETOKENIZATION_DELETED" + }, + { + "name": "SUSPENDED", + "value": "SUSPENDED" + } + ] + }, + { + "name": "ENUM_ACTIVE_EXPIRED_SUSPENDED_VOIDED", + "module": "WASmaxInBrPaymentEnums", + "valueKind": "string", + "variants": [ + { + "name": "ACTIVE", + "value": "ACTIVE" + }, + { + "name": "EXPIRED", + "value": "EXPIRED" + }, + { + "name": "SUSPENDED", + "value": "SUSPENDED" + }, + { + "name": "VOIDED", + "value": "VOIDED" + } + ] + }, + { + "name": "ENUM_ACTIVE_INACTIVE", + "module": "WASmaxInBrPaymentEnums", + "valueKind": "string", + "variants": [ + { + "name": "ACTIVE", + "value": "ACTIVE" + }, + { + "name": "INACTIVE", + "value": "INACTIVE" + } + ] + }, + { + "name": "ENUM_BANK_PREPAID_SUPPORT", + "module": "WASmaxInBrPaymentEnums", + "valueKind": "string", + "variants": [ + { + "name": "BANK", + "value": "BANK" + }, + { + "name": "PREPAID", + "value": "PREPAID" + }, + { + "name": "SUPPORT", + "value": "SUPPORT" + } + ] + }, + { + "name": "ENUM_DISABLED_ENABLED_REQUIRESVERIFICATION", + "module": "WASmaxInBrPaymentEnums", + "valueKind": "string", + "variants": [ + { + "name": "DISABLED", + "value": "DISABLED" + }, + { + "name": "ENABLED", + "value": "ENABLED" + }, + { + "name": "REQUIRES_VERIFICATION", + "value": "REQUIRES_VERIFICATION" + } + ] + }, + { + "name": "ENUM_ELO_MASTERCARD_VISA", + "module": "WASmaxInBrPaymentEnums", + "valueKind": "string", + "variants": [ + { + "name": "ELO", + "value": "ELO" + }, + { + "name": "MASTERCARD", + "value": "MASTERCARD" + }, + { + "name": "VISA", + "value": "VISA" + } + ] + }, + { + "name": "ENUM_EMAIL_PUSH_SMS_VACAT", + "module": "WASmaxInBrPaymentEnums", + "valueKind": "string", + "variants": [ + { + "name": "EMAIL", + "value": "EMAIL" + }, + { + "name": "PUSH", + "value": "PUSH" + }, + { + "name": "SMS", + "value": "SMS" + }, + { + "name": "VACAT", + "value": "VACAT" + } + ] + }, + { + "name": "ENUM_FAILED_PENDING_VERIFIED", + "module": "WASmaxInBrPaymentEnums", + "valueKind": "string", + "variants": [ + { + "name": "FAILED", + "value": "FAILED" + }, + { + "name": "PENDING", + "value": "PENDING" + }, + { + "name": "VERIFIED", + "value": "VERIFIED" + } + ] + }, + { + "name": "ENUM_MASTERCARD_VISA", + "module": "WASmaxInBrPaymentEnums", + "valueKind": "string", + "variants": [ + { + "name": "MASTERCARD", + "value": "MASTERCARD" + }, + { + "name": "VISA", + "value": "VISA" + } + ] + }, + { + "name": "ENUM_ACCEPT_REJECT_UNKNOWN", + "module": "WASmaxInMessageDeliverEnums", + "valueKind": "string", + "variants": [ + { + "name": "ACCEPT", + "value": "ACCEPT" + }, + { + "name": "REJECT", + "value": "REJECT" + }, + { + "name": "UNKNOWN", + "value": "UNKNOWN" + } + ] + }, + { + "name": "ENUM_ASPRESENTED_BIMONTHLY_DAILY_FORTNIGHTLY_HALFYEARLY_MONTHLY_ONETIME_QUARTERLY_UNKNOWN_WEEKLY_YEARLY", + "module": "WASmaxInMessageDeliverEnums", + "valueKind": "string", + "variants": [ + { + "name": "ASPRESENTED", + "value": "ASPRESENTED" + }, + { + "name": "BIMONTHLY", + "value": "BIMONTHLY" + }, + { + "name": "DAILY", + "value": "DAILY" + }, + { + "name": "FORTNIGHTLY", + "value": "FORTNIGHTLY" + }, + { + "name": "HALFYEARLY", + "value": "HALFYEARLY" + }, + { + "name": "MONTHLY", + "value": "MONTHLY" + }, + { + "name": "ONETIME", + "value": "ONETIME" + }, + { + "name": "QUARTERLY", + "value": "QUARTERLY" + }, + { + "name": "UNKNOWN", + "value": "UNKNOWN" + }, + { + "name": "WEEKLY", + "value": "WEEKLY" + }, + { + "name": "YEARLY", + "value": "YEARLY" + } + ] + }, + { + "name": "ENUM_DEREGISTER_INITTOPUP_PAY_TOPUP", + "module": "WASmaxInMessageDeliverEnums", + "valueKind": "string", + "variants": [ + { + "name": "DEREGISTER", + "value": "DEREGISTER" + }, + { + "name": "INIT_TOP_UP", + "value": "INIT_TOP_UP" + }, + { + "name": "PAY", + "value": "PAY" + }, + { + "name": "TOP_UP", + "value": "TOP_UP" + } + ] + }, + { + "name": "ENUM_EXACT_MAX", + "module": "WASmaxInMessageDeliverEnums", + "valueKind": "string", + "variants": [ + { + "name": "EXACT", + "value": "EXACT" + }, + { + "name": "MAX", + "value": "MAX" + } + ] + }, + { + "name": "ENUM_FAILED_PENDING_SUCCESS", + "module": "WASmaxInMessageDeliverEnums", + "valueKind": "string", + "variants": [ + { + "name": "FAILED", + "value": "FAILED" + }, + { + "name": "PENDING", + "value": "PENDING" + }, + { + "name": "SUCCESS", + "value": "SUCCESS" + } + ] + }, + { + "name": "ENUM_FAILURE_INIT_SUCCESS", + "module": "WASmaxInMessageDeliverEnums", + "valueKind": "string", + "variants": [ + { + "name": "FAILURE", + "value": "FAILURE" + }, + { + "name": "INIT", + "value": "INIT" + }, + { + "name": "SUCCESS", + "value": "SUCCESS" + } + ] + }, + { + "name": "ENUM_FBPAY_UPI", + "module": "WASmaxInMessageDeliverEnums", + "valueKind": "string", + "variants": [ + { + "name": "FBPAY", + "value": "FBPAY" + }, + { + "name": "UPI", + "value": "UPI" + } + ] + }, + { + "name": "ENUM_FULL_MISSINGFIELDNOTPARTIAL_PARTIAL", + "module": "WASmaxInMessageDeliverEnums", + "valueKind": "string", + "variants": [ + { + "name": "FULL", + "value": "FULL" + }, + { + "name": "MISSING_FIELD_NOT_PARTIAL", + "value": "MISSING_FIELD_NOT_PARTIAL" + }, + { + "name": "PARTIAL", + "value": "PARTIAL" + } + ] + }, + { + "name": "ENUM_CBP_NBP_PMP", + "module": "WASmaxInMessagePublishEnums", + "valueKind": "string", + "variants": [ + { + "name": "CBP", + "value": "CBP" + }, + { + "name": "NBP", + "value": "NBP" + }, + { + "name": "PMP", + "value": "PMP" + } + ] + }, + { + "name": "ENUM_CBP_NBP_PMP", + "module": "WASmaxInReceiptEnums", + "valueKind": "string", + "variants": [ + { + "name": "CBP", + "value": "CBP" + }, + { + "name": "NBP", + "value": "NBP" + }, + { + "name": "PMP", + "value": "PMP" + } + ] + }, + { + "name": "ENUM_INTEGRITYNOTCLEARED_OK", + "module": "WASmaxInSmbMeteredMessagesCampaignEnums", + "valueKind": "string", + "variants": [ + { + "name": "INTEGRITY_NOT_CLEARED", + "value": "INTEGRITY_NOT_CLEARED" + }, + { + "name": "OK", + "value": "OK" + } + ] + }, { "name": "SmaxRunnerFunctionName", "module": "WASmaxMockRunner", @@ -1209,6 +1845,127 @@ } ] }, + { + "name": "ACK", + "module": "WAWebAck", + "valueKind": "int", + "variants": [ + { + "name": "INACTIVE", + "value": -6 + }, + { + "name": "CONTENT_UNUPLOADABLE", + "value": -5 + }, + { + "name": "CONTENT_TOO_BIG", + "value": -4 + }, + { + "name": "CONTENT_GONE", + "value": -3 + }, + { + "name": "EXPIRED", + "value": -2 + }, + { + "name": "FAILED", + "value": -1 + }, + { + "name": "CLOCK", + "value": 0 + }, + { + "name": "SENT", + "value": 1 + }, + { + "name": "RECEIVED", + "value": 2 + }, + { + "name": "READ", + "value": 3 + }, + { + "name": "PLAYED", + "value": 4 + }, + { + "name": "PEER", + "value": 5 + } + ] + }, + { + "name": "ACK_STRING", + "module": "WAWebAck", + "valueKind": "string", + "variants": [ + { + "name": "SENDER", + "value": "sender" + }, + { + "name": "DELIVERY", + "value": "delivery" + }, + { + "name": "READ", + "value": "read" + }, + { + "name": "PLAYED", + "value": "played" + }, + { + "name": "INACTIVE", + "value": "inactive" + }, + { + "name": "READ_SELF", + "value": "read-self" + }, + { + "name": "PLAYED_SELF", + "value": "played-self" + } + ] + }, + { + "name": "EDIT_ATTR", + "module": "WAWebAck", + "valueKind": "int", + "variants": [ + { + "name": "NONE", + "value": -1 + }, + { + "name": "MESSAGE_EDIT", + "value": 1 + }, + { + "name": "PIN_IN_CHAT", + "value": 2 + }, + { + "name": "NEWSLETTER_MSG_EDIT", + "value": 3 + }, + { + "name": "SENDER_REVOKE", + "value": 7 + }, + { + "name": "ADMIN_REVOKE", + "value": 8 + } + ] + }, { "name": "DualEncryptionValidationErrorCode", "module": "WAWebAddonEncryptionError", diff --git a/generated/iq/index.json b/generated/iq/index.json index 03ac7f8..cf03c2d 100644 --- a/generated/iq/index.json +++ b/generated/iq/index.json @@ -32758,7 +32758,37 @@ "namespace": "urn:xmpp:whatsapp:account", "iqType": "get", "target": "s.whatsapp.net", - "children": [] + "children": [ + { + "tag": "gdpr", + "attrs": [ + { + "name": "action", + "kind": "dynamic", + "required": true + }, + { + "name": "report_type", + "kind": "dynamic", + "required": true + } + ], + "children": [], + "repeats": false + }, + { + "tag": "gdpr", + "attrs": [ + { + "name": "action", + "kind": "dynamic", + "required": true + } + ], + "children": [], + "repeats": false + } + ] }, "response": { "parserName": "unknown", @@ -36123,7 +36153,241 @@ "required": true } ], - "children": [], + "children": [ + { + "tag": "address", + "attrs": [], + "children": [ + { + "tag": "iq", + "attrs": [ + { + "name": "to", + "kind": "dynamic", + "required": true + }, + { + "name": "xmlns", + "kind": "const", + "value": "w:biz", + "required": true + }, + { + "name": "id", + "kind": "generated_id", + "required": true + }, + { + "name": "type", + "kind": "const", + "value": "set", + "required": true + } + ], + "children": [ + { + "tag": "business_profile", + "attrs": [ + { + "name": "v", + "kind": "const", + "value": "3", + "required": true + }, + { + "name": "mutation_type", + "kind": "const", + "value": "delta", + "required": true + } + ], + "children": [ + { + "tag": "cover_photo", + "attrs": [ + { + "name": "op", + "kind": "const", + "value": "delete", + "required": true + }, + { + "name": "id", + "kind": "string", + "required": true + } + ], + "children": [], + "repeats": false + } + ], + "repeats": false + } + ], + "repeats": false + } + ], + "repeats": false + }, + { + "tag": "latitude", + "attrs": [], + "children": [], + "repeats": false + }, + { + "tag": "longitude", + "attrs": [], + "children": [], + "repeats": false + }, + { + "tag": "description", + "attrs": [], + "children": [], + "repeats": false + }, + { + "tag": "email", + "attrs": [], + "children": [], + "repeats": false + }, + { + "tag": "website", + "attrs": [], + "children": [], + "repeats": false + }, + { + "tag": "website", + "attrs": [], + "children": [], + "content": { + "kind": "dynamic" + }, + "repeats": false + }, + { + "tag": "website", + "attrs": [], + "children": [], + "content": { + "kind": "dynamic" + }, + "repeats": false + }, + { + "tag": "categories", + "attrs": [], + "children": [ + { + "tag": "category", + "attrs": [ + { + "name": "id", + "kind": "string", + "required": true + } + ], + "children": [], + "repeats": true + } + ], + "repeats": false + }, + { + "tag": "business_hours_note", + "attrs": [], + "children": [], + "repeats": false + }, + { + "tag": "business_hours_config", + "attrs": [ + { + "name": "day_of_week", + "kind": "string", + "required": true + }, + { + "name": "mode", + "kind": "string", + "required": true + }, + { + "name": "open_time", + "kind": "optional", + "required": false + }, + { + "name": "close_time", + "kind": "optional", + "required": false + } + ], + "children": [], + "repeats": false + }, + { + "tag": "business_hours", + "attrs": [ + { + "name": "timezone", + "kind": "optional", + "required": false + } + ], + "children": [], + "repeats": false + }, + { + "tag": "service_areas", + "attrs": [], + "children": [ + { + "tag": "service_area", + "attrs": [], + "children": [], + "repeats": true + }, + { + "tag": "area_description", + "attrs": [], + "children": [], + "content": { + "kind": "dynamic" + }, + "repeats": true + }, + { + "tag": "area_radius_meters", + "attrs": [], + "children": [], + "repeats": true + }, + { + "tag": "area_center", + "attrs": [], + "children": [], + "repeats": true + }, + { + "tag": "latitude", + "attrs": [], + "children": [], + "repeats": true + }, + { + "tag": "longitude", + "attrs": [], + "children": [], + "repeats": true + } + ], + "repeats": false + } + ], "repeats": false } ] @@ -76305,7 +76569,21 @@ "namespace": "w:profile:picture", "iqType": "set", "target": "s.whatsapp.net", - "children": [] + "children": [ + { + "tag": "picture", + "attrs": [ + { + "name": "type", + "kind": "const", + "value": "image", + "required": true + } + ], + "children": [], + "repeats": false + } + ] }, "response": { "parserName": "photoResponseParser", diff --git a/generated/manifest.json b/generated/manifest.json index 70da13e..5597b7c 100644 --- a/generated/manifest.json +++ b/generated/manifest.json @@ -39,7 +39,7 @@ "enums": { "file": "enums/index.json", "schema": "schema/enums.schema.json", - "sha256": "2ba237d3d2284038a0e0bf69a30246a56f764051623f1ed372518c0ca905a5ae" + "sha256": "bb380e5c92b6db125d329369014618ea64203df259cfa735f941aae6186dc80b" }, "incoming": { "file": "incoming/index.json", @@ -49,7 +49,7 @@ "iq": { "file": "iq/index.json", "schema": "schema/iq.schema.json", - "sha256": "2b7f2b993f2f9e29a4f15942d65d50d748d698ba0d8a954d3477c2223deb3c77" + "sha256": "ed1005774897100c39444903b6c050dc0583bff96c9a79ffec408af7226ac5f7" }, "mex": { "file": "mex/index.json", @@ -73,7 +73,7 @@ "stanza": { "file": "stanza/index.json", "schema": "schema/stanza.schema.json", - "sha256": "0090b71e4cc5f17b4d321fbe5881e230727294d4aef481d2bc2c0b9b6b48b4e9" + "sha256": "2cbead85dca203f02b6c6b76fce9a69bf30db9ff6a16da1658f91d7125bd705a" }, "tokens": { "file": "tokens/index.json", @@ -86,7 +86,7 @@ "sha256": "8f1b34fb608679ad4cb3a09303291842d0e4c7b4fd50c0e378a4eb481f290069" } }, - "enumDefs": 257, + "enumDefs": 288, "generatorVersion": "0.1.0", "incomingDefs": 11, "iqModules": 33, @@ -95,7 +95,7 @@ "protoEntities": 257, "schemaVersion": "1.0.0", "serverRequestDefs": 22, - "stanzaDefs": 84, + "stanzaDefs": 174, "tokenDoubleByte": 1024, "tokenSingleByte": 236, "waVersion": "2.3000.1042654758", diff --git a/generated/schema/stanza.schema.json b/generated/schema/stanza.schema.json index 88a0909..31e3ed5 100644 --- a/generated/schema/stanza.schema.json +++ b/generated/schema/stanza.schema.json @@ -467,6 +467,10 @@ "null" ] }, + "fragment": { + "description": "True for a `merge…Mixin` fragment: a partial stanza (e.g. a message\ncontent-type mixin `smax(\"message\",{type:\"reaction\"})`) that WA folds into a\nconcrete stanza via `mergeStanzas`, not a standalone sendable stanza. Catalogued\nso the full set of message/receipt content types is visible; consumers building a\nstanza to send should filter these out.", + "type": "boolean" + }, "moduleName": { "type": "string" }, diff --git a/generated/stanza/index.json b/generated/stanza/index.json index 28af84c..f22d671 100644 --- a/generated/stanza/index.json +++ b/generated/stanza/index.json @@ -5,202 +5,224 @@ { "stanzaType": "message", "direction": "outgoing", - "moduleName": "WASmaxOutMessagePublishCtwaAttributionMixin", + "moduleName": "WASmaxOutMessagePublishAdminEditMixin", "exportedFunction": null, "allExports": [ - "makeCtwaAttributionCtwaAttribution", - "mergeCtwaAttributionMixin" + "mergeAdminEditMixin" ], "namespace": null, "subtype": null, "target": null, - "attrs": [], - "children": [ + "attrs": [ { - "tag": "ctwa_attribution", - "attrs": [], - "children": [], - "repeats": false + "name": "edit", + "kind": "const", + "value": "3", + "required": true } ], - "response": null + "children": [], + "response": null, + "fragment": true }, { "stanzaType": "message", "direction": "outgoing", - "moduleName": "WASmaxOutMessagePublishNewsletterPollVoteMixin", + "moduleName": "WASmaxOutMessagePublishAdminRevokeMixin", "exportedFunction": null, "allExports": [ - "makeNewsletterPollVoteVotesVote", - "mergeNewsletterPollVoteMixin" + "mergeAdminRevokeMixin" ], "namespace": null, "subtype": null, "target": null, - "attrs": [], - "children": [ + "attrs": [ { - "tag": "votes", - "attrs": [], - "children": [ - { - "tag": "vote", - "attrs": [], - "children": [], - "repeats": true - } - ], - "repeats": false + "name": "edit", + "kind": "const", + "value": "8", + "required": true } ], - "response": null + "children": [], + "response": null, + "fragment": true }, { "stanzaType": "message", "direction": "outgoing", - "moduleName": "WASmaxOutMessagePublishNewsletterRequest", + "moduleName": "WASmaxOutMessagePublishContentTypeMediaMixin", "exportedFunction": null, "allExports": [ - "makeNewsletterRequest" + "mergeContentTypeMediaMixin" ], "namespace": null, - "subtype": null, + "subtype": "media", "target": null, "attrs": [ { - "name": "to", - "kind": "user_jid", + "name": "type", + "kind": "const", + "value": "media", "required": true } ], "children": [], - "response": null + "response": null, + "fragment": true }, { "stanzaType": "message", "direction": "outgoing", - "moduleName": "WASmaxOutSpamExtensionScreenDataMixin", + "moduleName": "WASmaxOutMessagePublishContentTypePollCreationMixin", "exportedFunction": null, "allExports": [ - "makeExtensionScreenDataExtensionScreen", - "mergeExtensionScreenDataMixin" + "mergeContentTypePollCreationMixin" ], "namespace": null, - "subtype": null, + "subtype": "poll", "target": null, - "attrs": [], + "attrs": [ + { + "name": "type", + "kind": "const", + "value": "poll", + "required": true + } + ], "children": [ { - "tag": "extension_screen", - "attrs": [], + "tag": "meta", + "attrs": [ + { + "name": "polltype", + "kind": "const", + "value": "creation", + "required": true + }, + { + "name": "contenttype", + "kind": "optional", + "required": false + } + ], "children": [], - "repeats": true + "repeats": false } ], - "response": null + "response": null, + "fragment": true }, { "stanzaType": "message", "direction": "outgoing", - "moduleName": "WASmaxOutSpamGroupReportRequest", + "moduleName": "WASmaxOutMessagePublishContentTypePollResultSnapshotMixin", "exportedFunction": null, "allExports": [ - "makeGroupReportRequestSpamListMessage", - "makeGroupReportRequestSpamListCall", - "makeGroupReportRequest" + "mergeContentTypePollResultSnapshotMixin" ], "namespace": null, - "subtype": null, + "subtype": "poll", "target": null, "attrs": [ { - "name": "from", - "kind": "group_jid", + "name": "type", + "kind": "const", + "value": "poll", "required": true - }, + } + ], + "children": [ { - "name": "phash", - "kind": "optional", - "required": false + "tag": "meta", + "attrs": [ + { + "name": "polltype", + "kind": "const", + "value": "result_snapshot", + "required": true + } + ], + "children": [], + "repeats": false } ], - "children": [], - "response": null + "response": null, + "fragment": true }, { "stanzaType": "message", "direction": "outgoing", - "moduleName": "WASmaxOutSpamMessageFrankingMixin", + "moduleName": "WASmaxOutMessagePublishContentTypePollVoteMixin", "exportedFunction": null, "allExports": [ - "makeMessageFrankingRaw", - "mergeMessageFrankingMixin" + "mergeContentTypePollVoteMixin" ], "namespace": null, - "subtype": null, + "subtype": "poll", "target": null, - "attrs": [], + "attrs": [ + { + "name": "type", + "kind": "const", + "value": "poll", + "required": true + } + ], "children": [ { - "tag": "raw", - "attrs": [], + "tag": "meta", + "attrs": [ + { + "name": "polltype", + "kind": "const", + "value": "vote", + "required": true + }, + { + "name": "contenttype", + "kind": "optional", + "required": false + } + ], "children": [], "repeats": false } ], - "response": null + "response": null, + "fragment": true }, { "stanzaType": "message", "direction": "outgoing", - "moduleName": "WASmaxOutSpamMessageMixin", + "moduleName": "WASmaxOutMessagePublishContentTypeQuizCreationMixin", "exportedFunction": null, "allExports": [ - "makeMessageRaw", - "makeMessageEnc", - "mergeMessageMixin" + "mergeContentTypeQuizCreationMixin" ], "namespace": null, - "subtype": null, + "subtype": "poll", "target": null, "attrs": [ { - "name": "t", - "kind": "integer", - "required": true - }, - { - "name": "id", - "kind": "string", + "name": "type", + "kind": "const", + "value": "poll", "required": true - }, - { - "name": "selected", - "kind": "optional", - "required": false - }, - { - "name": "unsent", - "kind": "optional", - "required": false - }, - { - "name": "deleted_reason", - "kind": "optional", - "required": false } ], "children": [ { - "tag": "raw", + "tag": "meta", "attrs": [ { - "name": "mediatype", - "kind": "optional", - "required": false + "name": "polltype", + "kind": "const", + "value": "quiz_creation", + "required": true }, { - "name": "local_message_type", + "name": "contenttype", "kind": "optional", "required": false } @@ -209,59 +231,63 @@ "repeats": false } ], - "response": null + "response": null, + "fragment": true }, { "stanzaType": "message", "direction": "outgoing", - "moduleName": "WASmaxOutSpamNewsletterReportRequest", + "moduleName": "WASmaxOutMessagePublishContentTypeReactionMixin", "exportedFunction": null, "allExports": [ - "makeNewsletterReportRequestSpamListMessage", - "makeNewsletterReportRequest" + "mergeContentTypeReactionMixin" ], "namespace": null, - "subtype": null, + "subtype": "reaction", "target": null, "attrs": [ { - "name": "from", - "kind": "user_jid", + "name": "type", + "kind": "const", + "value": "reaction", "required": true } ], "children": [], - "response": null + "response": null, + "fragment": true }, { "stanzaType": "message", "direction": "outgoing", - "moduleName": "WASmaxOutSpamStatusReportRequest", + "moduleName": "WASmaxOutMessagePublishContentTypeTextMixin", "exportedFunction": null, "allExports": [ - "makeStatusReportRequest" + "mergeContentTypeTextMixin" ], "namespace": null, - "subtype": null, + "subtype": "text", "target": null, "attrs": [ { - "name": "from", - "kind": "user_jid", + "name": "type", + "kind": "const", + "value": "text", "required": true } ], "children": [], - "response": null + "response": null, + "fragment": true }, { "stanzaType": "message", "direction": "outgoing", - "moduleName": "WASmaxOutSpamWaMessageReportingMixin", + "moduleName": "WASmaxOutMessagePublishCtwaAttributionMixin", "exportedFunction": null, "allExports": [ - "makeWaMessageReportingRaw", - "mergeWaMessageReportingMixin" + "makeCtwaAttributionCtwaAttribution", + "mergeCtwaAttributionMixin" ], "namespace": null, "subtype": null, @@ -269,90 +295,109 @@ "attrs": [], "children": [ { - "tag": "raw", + "tag": "ctwa_attribution", "attrs": [], "children": [], "repeats": false } ], - "response": null + "response": null, + "fragment": true }, { "stanzaType": "message", "direction": "outgoing", - "moduleName": "WASmaxOutSupportMessageFeedbackSendFeedbackRequest", + "moduleName": "WASmaxOutMessagePublishMediaMetaMixin", "exportedFunction": null, "allExports": [ - "makeSendFeedbackRequestFeedbackListFeedback", - "makeSendFeedbackRequest" + "mergeMediaMetaMixin" ], "namespace": null, "subtype": null, "target": null, - "attrs": [ + "attrs": [], + "children": [ { - "name": "id", - "kind": "string", - "required": true + "tag": "meta", + "attrs": [ + { + "name": "contenttype", + "kind": "optional", + "required": false + } + ], + "children": [], + "repeats": false } ], - "children": [], - "response": null + "response": null, + "fragment": true }, { "stanzaType": "message", "direction": "outgoing", - "moduleName": "WAWebBroadcastMessageRPC", + "moduleName": "WASmaxOutMessagePublishMessageAssociationTypeMixin", "exportedFunction": null, "allExports": [ - "sendBroadcastMessageRPC" + "mergeMessageAssociationTypeMixin" ], "namespace": null, "subtype": null, "target": null, - "attrs": [ - { - "name": "id", - "kind": "string", - "required": true - }, - { - "name": "to", - "kind": "dynamic", - "required": true - }, - { - "name": "phash", - "kind": "string", - "required": true - }, - { - "name": "type", - "kind": "string", - "required": true - } - ], + "attrs": [], "children": [ { - "tag": "biz", - "attrs": [], + "tag": "meta", + "attrs": [ + { + "name": "message_association_type", + "kind": "string", + "required": true + } + ], "children": [], "repeats": false } ], - "response": null + "response": null, + "fragment": true }, { "stanzaType": "message", "direction": "outgoing", - "moduleName": "WAWebEncryptAndSendStatusMsg", + "moduleName": "WASmaxOutMessagePublishMsgMetaOriginMixin", "exportedFunction": null, "allExports": [ - "calculateRevokeSenderList", - "encryptAndSendStatusMsg", - "genMessageBody", - "maybeApplyStatusTag", - "encryptAndSendStatusDirectMsg" + "mergeMsgMetaOriginMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [], + "children": [ + { + "tag": "meta", + "attrs": [ + { + "name": "origin", + "kind": "string", + "required": true + } + ], + "children": [], + "repeats": false + } + ], + "response": null, + "fragment": true + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WASmaxOutMessagePublishNewsletterClientAndServerIDMixin", + "exportedFunction": null, + "allExports": [ + "mergeNewsletterClientAndServerIDMixin" ], "namespace": null, "subtype": null, @@ -364,31 +409,22 @@ "required": true }, { - "name": "to", - "kind": "dynamic", - "required": true - }, - { - "name": "type", - "kind": "dynamic", - "required": true - }, - { - "name": "edit", - "kind": "dynamic", + "name": "server_id", + "kind": "integer", "required": true } ], "children": [], - "response": null + "response": null, + "fragment": true }, { "stanzaType": "message", "direction": "outgoing", - "moduleName": "WAWebGroupHistoryReportingTokenUtils", + "moduleName": "WASmaxOutMessagePublishNewsletterClientIDMixin", "exportedFunction": null, "allExports": [ - "buildGroupHistoryReportingMessageStanza" + "mergeNewsletterClientIDMixin" ], "namespace": null, "subtype": null, @@ -400,150 +436,251 @@ "required": true } ], + "children": [], + "response": null, + "fragment": true + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WASmaxOutMessagePublishNewsletterMediaMixin", + "exportedFunction": null, + "allExports": [ + "mergeNewsletterMediaMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [], "children": [ { - "tag": "reporting_token", + "tag": "plaintext", "attrs": [ { - "name": "v", + "name": "mediatype", "kind": "string", "required": true } ], "children": [], - "content": { - "kind": "dynamic" - }, "repeats": false } ], - "response": null + "response": null, + "fragment": true }, { "stanzaType": "message", "direction": "outgoing", - "moduleName": "WAWebGroupHistoryReportingTokenUtils", + "moduleName": "WASmaxOutMessagePublishNewsletterMediaPublishMixin", "exportedFunction": null, "allExports": [ - "buildGroupHistoryReportingMessageStanza" + "mergeNewsletterMediaPublishMixin" ], "namespace": null, "subtype": null, "target": null, "attrs": [ { - "name": "id", - "kind": "string", - "required": true + "name": "media_id", + "kind": "optional", + "required": false } ], "children": [], - "response": null + "response": null, + "fragment": true }, { "stanzaType": "message", "direction": "outgoing", - "moduleName": "WAWebResendBroadcastMsg", + "moduleName": "WASmaxOutMessagePublishNewsletterPollCreationMixin", "exportedFunction": null, "allExports": [ - "createBroadcastDeviceMsgStanza" + "mergeNewsletterPollCreationMixin" ], "namespace": null, "subtype": null, "target": null, - "attrs": [ - { - "name": "id", - "kind": "string", - "required": true - }, + "attrs": [], + "children": [ { - "name": "to", - "kind": "user_jid", - "required": true - }, + "tag": "plaintext", + "attrs": [], + "children": [], + "repeats": false + } + ], + "response": null, + "fragment": true + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WASmaxOutMessagePublishNewsletterPollResultSnapshotMixin", + "exportedFunction": null, + "allExports": [ + "mergeNewsletterPollResultSnapshotMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [], + "children": [ { - "name": "participant", - "kind": "device_jid", - "required": true - }, + "tag": "plaintext", + "attrs": [], + "children": [], + "repeats": false + } + ], + "response": null, + "fragment": true + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WASmaxOutMessagePublishNewsletterPollVoteMixin", + "exportedFunction": null, + "allExports": [ + "makeNewsletterPollVoteVotesVote", + "mergeNewsletterPollVoteMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [], + "children": [ { - "name": "type", - "kind": "dynamic", - "required": true - }, + "tag": "votes", + "attrs": [], + "children": [ + { + "tag": "vote", + "attrs": [], + "children": [], + "repeats": true + } + ], + "repeats": false + } + ], + "response": null, + "fragment": true + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WASmaxOutMessagePublishNewsletterQuestionResponsePublishMixin", + "exportedFunction": null, + "allExports": [ + "mergeNewsletterQuestionResponsePublishMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [], + "children": [ { - "name": "edit", - "kind": "dynamic", - "required": true - }, + "tag": "plaintext", + "attrs": [], + "children": [], + "repeats": false + } + ], + "response": null, + "fragment": true + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WASmaxOutMessagePublishNewsletterQuizCreationMixin", + "exportedFunction": null, + "allExports": [ + "mergeNewsletterQuizCreationMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [], + "children": [ { - "name": "eph_setting", - "kind": "optional", - "required": false + "tag": "plaintext", + "attrs": [], + "children": [], + "repeats": false } ], + "response": null, + "fragment": true + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WASmaxOutMessagePublishNewsletterReactionMixin", + "exportedFunction": null, + "allExports": [ + "mergeNewsletterReactionMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [], "children": [ { - "tag": "enc", + "tag": "reaction", "attrs": [ { - "name": "v", - "kind": "string", - "required": true - }, - { - "name": "type", + "name": "code", "kind": "string", "required": true - }, - { - "name": "count", - "kind": "optional", - "required": false - }, - { - "name": "mediatype", - "kind": "dynamic", - "required": true } ], "children": [], "repeats": false } ], - "response": null + "response": null, + "fragment": true }, { "stanzaType": "message", "direction": "outgoing", - "moduleName": "WAWebResendStatusMsg", + "moduleName": "WASmaxOutMessagePublishNewsletterReactionRevokeMixin", "exportedFunction": null, "allExports": [ - "createStatusDeviceMsgStanza" + "mergeNewsletterReactionRevokeMixin" ], "namespace": null, "subtype": null, "target": null, - "attrs": [ + "attrs": [], + "children": [ { - "name": "id", - "kind": "string", - "required": true - }, + "tag": "reaction", + "attrs": [], + "children": [], + "repeats": false + } + ], + "response": null, + "fragment": true + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WASmaxOutMessagePublishNewsletterRequest", + "exportedFunction": null, + "allExports": [ + "makeNewsletterRequest" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [ { "name": "to", - "kind": "dynamic", - "required": true - }, - { - "name": "type", - "kind": "dynamic", - "required": true - }, - { - "name": "edit", - "kind": "dynamic", + "kind": "user_jid", "required": true } ], @@ -553,31 +690,2961 @@ { "stanzaType": "message", "direction": "outgoing", - "moduleName": "WAWebSendGroupSkmsgJob", + "moduleName": "WASmaxOutMessagePublishNewsletterRevokeMixin", "exportedFunction": null, "allExports": [ - "sendPerfReporter", - "sendReporter", - "encryptAndSendSenderKeyMsg" + "mergeNewsletterRevokeMixin" ], "namespace": null, "subtype": null, "target": null, - "attrs": [ + "attrs": [], + "children": [ { - "name": "id", + "tag": "plaintext", + "attrs": [], + "children": [], + "repeats": false + } + ], + "response": null, + "fragment": true + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WASmaxOutMessagePublishNewsletterTextMixin", + "exportedFunction": null, + "allExports": [ + "mergeNewsletterTextMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [], + "children": [ + { + "tag": "plaintext", + "attrs": [], + "children": [], + "repeats": false + } + ], + "response": null, + "fragment": true + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WASmaxOutMessagePublishParentAndResponseServerIDMixin", + "exportedFunction": null, + "allExports": [ + "mergeParentAndResponseServerIDMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [], + "children": [ + { + "tag": "meta", + "attrs": [ + { + "name": "parent_server_id", + "kind": "integer", + "required": true + }, + { + "name": "response_server_id", + "kind": "string", + "required": true + } + ], + "children": [], + "repeats": false + } + ], + "response": null, + "fragment": true + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WASmaxOutMessagePublishQuestionTypeQuestionMixin", + "exportedFunction": null, + "allExports": [ + "mergeQuestionTypeQuestionMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [], + "children": [ + { + "tag": "meta", + "attrs": [ + { + "name": "questiontype", + "kind": "const", + "value": "question", + "required": true + } + ], + "children": [], + "repeats": false + } + ], + "response": null, + "fragment": true + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WASmaxOutMessagePublishQuestionTypeReplyMixin", + "exportedFunction": null, + "allExports": [ + "mergeQuestionTypeReplyMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [], + "children": [ + { + "tag": "meta", + "attrs": [ + { + "name": "questiontype", + "kind": "const", + "value": "reply", + "required": true + } + ], + "children": [], + "repeats": false + } + ], + "response": null, + "fragment": true + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WASmaxOutMessagePublishQuestionTypeResponseMixin", + "exportedFunction": null, + "allExports": [ + "mergeQuestionTypeResponseMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [], + "children": [ + { + "tag": "meta", + "attrs": [ + { + "name": "questiontype", + "kind": "const", + "value": "response", + "required": true + } + ], + "children": [], + "repeats": false + } + ], + "response": null, + "fragment": true + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WASmaxOutMessagePublishRevokeMixin", + "exportedFunction": null, + "allExports": [ + "mergeRevokeMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [ + { + "name": "edit", + "kind": "const", + "value": "7", + "required": true + } + ], + "children": [], + "response": null, + "fragment": true + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WASmaxOutMessagePublishSenderContentTypeMediaRCATMixin", + "exportedFunction": null, + "allExports": [ + "mergeSenderContentTypeMediaRCATMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [], + "children": [ + { + "tag": "plaintext", + "attrs": [ + { + "name": "mediatype", + "kind": "const", + "value": "url", + "required": true + }, + { + "name": "content_id", + "kind": "optional", + "required": false + } + ], + "children": [], + "repeats": false + } + ], + "response": null, + "fragment": true + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WASmaxOutMessagePublishWAMOSubMixin", + "exportedFunction": null, + "allExports": [ + "mergeWAMOSubMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [], + "children": [ + { + "tag": "meta", + "attrs": [ + { + "name": "is_wamo_sub", + "kind": "const", + "value": "true", + "required": true + } + ], + "children": [], + "repeats": false + } + ], + "response": null, + "fragment": true + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WASmaxOutSpamAdminRevokeMixin", + "exportedFunction": null, + "allExports": [ + "mergeAdminRevokeMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [ + { + "name": "edit", + "kind": "const", + "value": "8", + "required": true + } + ], + "children": [], + "response": null, + "fragment": true + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WASmaxOutSpamAutomatedMixin", + "exportedFunction": null, + "allExports": [ + "mergeAutomatedMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [], + "children": [ + { + "tag": "automated", + "attrs": [], + "children": [], + "repeats": false + } + ], + "response": null, + "fragment": true + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WASmaxOutSpamContentTypeMediaMixin", + "exportedFunction": null, + "allExports": [ + "mergeContentTypeMediaMixin" + ], + "namespace": null, + "subtype": "media", + "target": null, + "attrs": [ + { + "name": "type", + "kind": "const", + "value": "media", + "required": true + } + ], + "children": [], + "response": null, + "fragment": true + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WASmaxOutSpamContentTypePayMixin", + "exportedFunction": null, + "allExports": [ + "mergeContentTypePayMixin" + ], + "namespace": null, + "subtype": "pay", + "target": null, + "attrs": [ + { + "name": "type", + "kind": "const", + "value": "pay", + "required": true + } + ], + "children": [], + "response": null, + "fragment": true + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WASmaxOutSpamContentTypePollCreationMixin", + "exportedFunction": null, + "allExports": [ + "mergeContentTypePollCreationMixin" + ], + "namespace": null, + "subtype": "poll", + "target": null, + "attrs": [ + { + "name": "type", + "kind": "const", + "value": "poll", + "required": true + } + ], + "children": [ + { + "tag": "meta", + "attrs": [ + { + "name": "polltype", + "kind": "const", + "value": "creation", + "required": true + }, + { + "name": "contenttype", + "kind": "optional", + "required": false + } + ], + "children": [], + "repeats": false + } + ], + "response": null, + "fragment": true + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WASmaxOutSpamContentTypeTextMixin", + "exportedFunction": null, + "allExports": [ + "mergeContentTypeTextMixin" + ], + "namespace": null, + "subtype": "text", + "target": null, + "attrs": [ + { + "name": "type", + "kind": "const", + "value": "text", + "required": true + } + ], + "children": [], + "response": null, + "fragment": true + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WASmaxOutSpamExtensionScreenDataMixin", + "exportedFunction": null, + "allExports": [ + "makeExtensionScreenDataExtensionScreen", + "mergeExtensionScreenDataMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [], + "children": [ + { + "tag": "extension_screen", + "attrs": [], + "children": [], + "repeats": true + } + ], + "response": null, + "fragment": true + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WASmaxOutSpamGroupReportRequest", + "exportedFunction": null, + "allExports": [ + "makeGroupReportRequestSpamListMessage", + "makeGroupReportRequestSpamListCall", + "makeGroupReportRequest" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [ + { + "name": "from", + "kind": "group_jid", + "required": true + }, + { + "name": "phash", + "kind": "optional", + "required": false + } + ], + "children": [], + "response": null + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WASmaxOutSpamIABReportLinkMixin", + "exportedFunction": null, + "allExports": [ + "mergeIABReportLinkMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [], + "children": [ + { + "tag": "iab", + "attrs": [ + { + "name": "reported_link", + "kind": "string", + "required": true + } + ], + "children": [], + "repeats": false + } + ], + "response": null, + "fragment": true + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WASmaxOutSpamMessageEditMixin", + "exportedFunction": null, + "allExports": [ + "mergeMessageEditMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [ + { + "name": "edit", + "kind": "const", + "value": "1", + "required": true + } + ], + "children": [], + "response": null, + "fragment": true + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WASmaxOutSpamMessageFrankingMixin", + "exportedFunction": null, + "allExports": [ + "makeMessageFrankingRaw", + "mergeMessageFrankingMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [], + "children": [ + { + "tag": "raw", + "attrs": [], + "children": [], + "repeats": false + } + ], + "response": null, + "fragment": true + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WASmaxOutSpamMessageMixin", + "exportedFunction": null, + "allExports": [ + "makeMessageRaw", + "makeMessageEnc", + "mergeMessageMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [ + { + "name": "t", + "kind": "integer", + "required": true + }, + { + "name": "id", + "kind": "string", + "required": true + }, + { + "name": "selected", + "kind": "optional", + "required": false + }, + { + "name": "unsent", + "kind": "optional", + "required": false + }, + { + "name": "deleted_reason", + "kind": "optional", + "required": false + } + ], + "children": [ + { + "tag": "raw", + "attrs": [ + { + "name": "mediatype", + "kind": "optional", + "required": false + }, + { + "name": "local_message_type", + "kind": "optional", + "required": false + } + ], + "children": [], + "repeats": false + } + ], + "response": null, + "fragment": true + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WASmaxOutSpamMessageParticipantMixin", + "exportedFunction": null, + "allExports": [ + "mergeMessageParticipantMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [ + { + "name": "participant", + "kind": "user_jid", + "required": true + }, + { + "name": "participant_type", + "kind": "optional", + "required": false + }, + { + "name": "member_tag", + "kind": "optional", + "required": false + }, + { + "name": "member_tag_ts_s", + "kind": "optional", + "required": false + } + ], + "children": [], + "response": null, + "fragment": true + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WASmaxOutSpamMessagePlaceholderMixin", + "exportedFunction": null, + "allExports": [ + "mergeMessagePlaceholderMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [], + "children": [ + { + "tag": "meta", + "attrs": [ + { + "name": "placeholder_type", + "kind": "const", + "value": "call", + "required": true + } + ], + "children": [], + "repeats": false + } + ], + "response": null, + "fragment": true + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WASmaxOutSpamMessageRecipientMixin", + "exportedFunction": null, + "allExports": [ + "mergeMessageRecipientMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [ + { + "name": "to", + "kind": "user_jid", + "required": true + } + ], + "children": [], + "response": null, + "fragment": true + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WASmaxOutSpamMessageSenderMixin", + "exportedFunction": null, + "allExports": [ + "mergeMessageSenderMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [ + { + "name": "from", + "kind": "user_jid", + "required": true + } + ], + "children": [], + "response": null, + "fragment": true + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WASmaxOutSpamMessageWithHsmTemplateMixin", + "exportedFunction": null, + "allExports": [ + "mergeMessageWithHsmTemplateMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [], + "children": [ + { + "tag": "hsm", + "attrs": [ + { + "name": "tid", + "kind": "string", + "required": true + } + ], + "children": [], + "repeats": false + } + ], + "response": null, + "fragment": true + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WASmaxOutSpamMessageWithNewsletterQuestionResponseMixin", + "exportedFunction": null, + "allExports": [ + "mergeMessageWithNewsletterQuestionResponseMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [ + { + "name": "server_id", + "kind": "integer", + "required": true + }, + { + "name": "response_server_id", + "kind": "string", + "required": true + } + ], + "children": [], + "response": null, + "fragment": true + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WASmaxOutSpamMessageWithPaymentReportMixin", + "exportedFunction": null, + "allExports": [ + "mergeMessageWithPaymentReportMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [], + "children": [ + { + "tag": "pay", + "attrs": [], + "children": [], + "repeats": false + } + ], + "response": null, + "fragment": true + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WASmaxOutSpamMulticastMixin", + "exportedFunction": null, + "allExports": [ + "mergeMulticastMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [], + "children": [ + { + "tag": "multicast", + "attrs": [], + "children": [], + "repeats": false + } + ], + "response": null, + "fragment": true + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WASmaxOutSpamNewsletterReportRequest", + "exportedFunction": null, + "allExports": [ + "makeNewsletterReportRequestSpamListMessage", + "makeNewsletterReportRequest" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [ + { + "name": "from", + "kind": "user_jid", + "required": true + } + ], + "children": [], + "response": null + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WASmaxOutSpamPreFilledNumberMixin", + "exportedFunction": null, + "allExports": [ + "mergePreFilledNumberMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [], + "children": [ + { + "tag": "url_number", + "attrs": [], + "children": [], + "repeats": false + } + ], + "response": null, + "fragment": true + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WASmaxOutSpamPreFilledTextMixin", + "exportedFunction": null, + "allExports": [ + "mergePreFilledTextMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [], + "children": [ + { + "tag": "url_text", + "attrs": [], + "children": [], + "repeats": false + } + ], + "response": null, + "fragment": true + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WASmaxOutSpamReportedPushNameMixin", + "exportedFunction": null, + "allExports": [ + "mergeReportedPushNameMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [ + { + "name": "reported_push_name", + "kind": "string", + "required": true + } + ], + "children": [], + "response": null, + "fragment": true + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WASmaxOutSpamRevokeMixin", + "exportedFunction": null, + "allExports": [ + "mergeRevokeMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [ + { + "name": "edit", + "kind": "const", + "value": "7", + "required": true + } + ], + "children": [], + "response": null, + "fragment": true + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WASmaxOutSpamSMBBroadcastSourceMixin", + "exportedFunction": null, + "allExports": [ + "mergeSMBBroadcastSourceMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [], + "children": [ + { + "tag": "meta", + "attrs": [ + { + "name": "biz_source", + "kind": "string", + "required": true + } + ], + "children": [], + "repeats": false + } + ], + "response": null, + "fragment": true + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WASmaxOutSpamStatusReportRequest", + "exportedFunction": null, + "allExports": [ + "makeStatusReportRequest" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [ + { + "name": "from", + "kind": "user_jid", + "required": true + } + ], + "children": [], + "response": null + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WASmaxOutSpamWaMessageReportingMixin", + "exportedFunction": null, + "allExports": [ + "makeWaMessageReportingRaw", + "mergeWaMessageReportingMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [], + "children": [ + { + "tag": "raw", + "attrs": [], + "children": [], + "repeats": false + } + ], + "response": null, + "fragment": true + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WASmaxOutSupportMessageFeedbackSendFeedbackRequest", + "exportedFunction": null, + "allExports": [ + "makeSendFeedbackRequestFeedbackListFeedback", + "makeSendFeedbackRequest" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [ + { + "name": "id", + "kind": "string", + "required": true + } + ], + "children": [], + "response": null + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WAWebBroadcastMessageRPC", + "exportedFunction": null, + "allExports": [ + "sendBroadcastMessageRPC" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [ + { + "name": "id", + "kind": "string", + "required": true + }, + { + "name": "to", + "kind": "dynamic", + "required": true + }, + { + "name": "phash", + "kind": "string", + "required": true + }, + { + "name": "type", + "kind": "string", + "required": true + } + ], + "children": [ + { + "tag": "meta", + "attrs": [ + { + "name": "metering_type", + "kind": "string", + "required": true + } + ], + "children": [], + "repeats": false + }, + { + "tag": "biz", + "attrs": [], + "children": [ + { + "tag": "interactive", + "attrs": [ + { + "name": "type", + "kind": "string", + "required": true + }, + { + "name": "v", + "kind": "string", + "required": true + } + ], + "children": [ + { + "tag": "native_flow", + "attrs": [ + { + "name": "name", + "kind": "string", + "required": true + } + ], + "children": [], + "repeats": false + } + ], + "repeats": false + } + ], + "repeats": false + }, + { + "tag": "interactive", + "attrs": [ + { + "name": "type", + "kind": "string", + "required": true + }, + { + "name": "v", + "kind": "string", + "required": true + } + ], + "children": [ + { + "tag": "native_flow", + "attrs": [ + { + "name": "name", + "kind": "string", + "required": true + } + ], + "children": [], + "repeats": false + } + ], + "repeats": false + } + ], + "response": null + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WAWebEncryptAndSendStatusMsg", + "exportedFunction": null, + "allExports": [ + "calculateRevokeSenderList", + "encryptAndSendStatusMsg", + "genMessageBody", + "maybeApplyStatusTag", + "encryptAndSendStatusDirectMsg" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [ + { + "name": "id", + "kind": "string", + "required": true + }, + { + "name": "to", + "kind": "dynamic", + "required": true + }, + { + "name": "type", + "kind": "dynamic", + "required": true + }, + { + "name": "edit", + "kind": "dynamic", + "required": true + } + ], + "children": [], + "response": null + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WAWebGroupHistoryReportingTokenUtils", + "exportedFunction": null, + "allExports": [ + "buildGroupHistoryReportingMessageStanza" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [ + { + "name": "id", + "kind": "string", + "required": true + } + ], + "children": [ + { + "tag": "reporting_token", + "attrs": [ + { + "name": "v", + "kind": "string", + "required": true + } + ], + "children": [], + "content": { + "kind": "dynamic" + }, + "repeats": false + } + ], + "response": null + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WAWebGroupHistoryReportingTokenUtils", + "exportedFunction": null, + "allExports": [ + "buildGroupHistoryReportingMessageStanza" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [ + { + "name": "id", + "kind": "string", + "required": true + } + ], + "children": [], + "response": null + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WAWebResendBroadcastMsg", + "exportedFunction": null, + "allExports": [ + "createBroadcastDeviceMsgStanza" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [ + { + "name": "id", + "kind": "string", + "required": true + }, + { + "name": "to", + "kind": "user_jid", + "required": true + }, + { + "name": "participant", + "kind": "device_jid", + "required": true + }, + { + "name": "type", + "kind": "dynamic", + "required": true + }, + { + "name": "edit", + "kind": "dynamic", + "required": true + }, + { + "name": "eph_setting", + "kind": "optional", + "required": false + } + ], + "children": [ + { + "tag": "meta", + "attrs": [ + { + "name": "metering_type", + "kind": "string", + "required": true + } + ], + "children": [], + "repeats": false + }, + { + "tag": "enc", + "attrs": [ + { + "name": "v", + "kind": "string", + "required": true + }, + { + "name": "type", + "kind": "string", + "required": true + }, + { + "name": "count", + "kind": "optional", + "required": false + }, + { + "name": "mediatype", + "kind": "dynamic", + "required": true + } + ], + "children": [], + "repeats": false + } + ], + "response": null + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WAWebResendStatusMsg", + "exportedFunction": null, + "allExports": [ + "createStatusDeviceMsgStanza" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [ + { + "name": "id", + "kind": "string", + "required": true + }, + { + "name": "to", + "kind": "dynamic", + "required": true + }, + { + "name": "type", + "kind": "dynamic", + "required": true + }, + { + "name": "edit", + "kind": "dynamic", + "required": true + } + ], + "children": [], + "response": null + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WAWebSendGroupSkmsgJob", + "exportedFunction": null, + "allExports": [ + "sendPerfReporter", + "sendReporter", + "encryptAndSendSenderKeyMsg" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [ + { + "name": "id", + "kind": "string", + "required": true + }, + { + "name": "to", + "kind": "dynamic", + "required": true + }, + { + "name": "phash", + "kind": "optional", + "required": false + }, + { + "name": "type", + "kind": "dynamic", + "required": true + }, + { + "name": "edit", + "kind": "dynamic", + "required": true + }, + { + "name": "addressing_mode", + "kind": "string", + "required": true + } + ], + "children": [ + { + "tag": "biz", + "attrs": [], + "children": [ + { + "tag": "interactive", + "attrs": [ + { + "name": "v", + "kind": "const", + "value": "1", + "required": true + }, + { + "name": "type", + "kind": "string", + "required": true + } + ], + "children": [ + { + "tag": "native_flow", + "attrs": [ + { + "name": "name", + "kind": "string", + "required": true + } + ], + "children": [], + "repeats": false + } + ], + "repeats": false + } + ], + "repeats": false + }, + { + "tag": "meta", + "attrs": [ + { + "name": "origin", + "kind": "optional", + "required": false + }, + { + "name": "destination_id", + "kind": "optional", + "required": false + }, + { + "name": "sender_intent", + "kind": "optional", + "required": false + }, + { + "name": "polltype", + "kind": "optional", + "required": false + }, + { + "name": "event_type", + "kind": "optional", + "required": false + }, + { + "name": "thread_msg_id", + "kind": "optional", + "required": false + }, + { + "name": "thread_msg_sender_jid", + "kind": "optional", + "required": false + }, + { + "name": "appdata", + "kind": "optional", + "required": false + }, + { + "name": "view_once", + "kind": "optional", + "required": false + }, + { + "name": "conversation_thread_id", + "kind": "optional", + "required": false + }, + { + "name": "tag_reason", + "kind": "optional", + "required": false + } + ], + "children": [], + "repeats": false + }, + { + "tag": "meta", + "attrs": [ + { + "name": "type", + "kind": "string", + "required": true + }, + { + "name": "st", + "kind": "dynamic", + "required": true + } + ], + "children": [ + { + "tag": "key", + "attrs": [ + { + "name": "rkid", + "kind": "string", + "required": true + } + ], + "children": [], + "content": { + "kind": "dynamic" + }, + "repeats": false + }, + { + "tag": "key", + "attrs": [ + { + "name": "rkid", + "kind": "string", + "required": true + } + ], + "children": [], + "repeats": false + } + ], + "repeats": false + }, + { + "tag": "sender_content_binding", + "attrs": [], + "children": [], + "repeats": false + } + ], + "response": null + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WAWebSendMsgCreateDeviceStanza", + "exportedFunction": null, + "allExports": [ + "MsgType", + "PrivacySensitiveType", + "createUserDeviceMsgStanza", + "createGroupDeviceMsgStanza" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [ + { + "name": "id", + "kind": "string", + "required": true + }, + { + "name": "to", + "kind": "user_jid", + "required": true + }, + { + "name": "participant", + "kind": "optional", + "required": false + }, + { + "name": "recipient", + "kind": "optional", + "required": false + }, + { + "name": "type", + "kind": "dynamic", + "required": true + }, + { + "name": "peer_recipient_pn", + "kind": "optional", + "required": false + }, + { + "name": "peer_recipient_lid", + "kind": "optional", + "required": false + }, + { + "name": "peer_recipient_username", + "kind": "optional", + "required": false + }, + { + "name": "edit", + "kind": "dynamic", + "required": true + }, + { + "name": "category", + "kind": "optional", + "required": false + }, + { + "name": "push_priority", + "kind": "dynamic", + "required": true + }, + { + "name": "privacy_sensitive", + "kind": "optional", + "required": false + }, + { + "name": "addressing_mode", + "kind": "optional", + "required": false + } + ], + "children": [ + { + "tag": "enc", + "attrs": [ + { + "name": "v", + "kind": "string", + "required": true + }, + { + "name": "type", + "kind": "string", + "required": true + }, + { + "name": "session_type", + "kind": "optional", + "required": false + }, + { + "name": "state", + "kind": "optional", + "required": false + }, + { + "name": "count", + "kind": "optional", + "required": false + }, + { + "name": "mediatype", + "kind": "dynamic", + "required": true + } + ], + "children": [], + "repeats": false + }, + { + "tag": "meta", + "attrs": [ + { + "name": "origin", + "kind": "optional", + "required": false + }, + { + "name": "destination_id", + "kind": "optional", + "required": false + }, + { + "name": "sender_intent", + "kind": "optional", + "required": false + }, + { + "name": "polltype", + "kind": "optional", + "required": false + }, + { + "name": "event_type", + "kind": "optional", + "required": false + }, + { + "name": "thread_msg_id", + "kind": "optional", + "required": false + }, + { + "name": "thread_msg_sender_jid", + "kind": "optional", + "required": false + }, + { + "name": "appdata", + "kind": "optional", + "required": false + }, + { + "name": "view_once", + "kind": "optional", + "required": false + }, + { + "name": "conversation_thread_id", + "kind": "optional", + "required": false + }, + { + "name": "tag_reason", + "kind": "optional", + "required": false + } + ], + "children": [], + "repeats": false + } + ], + "response": null + }, + { + "stanzaType": "message", + "direction": "outgoing", + "moduleName": "WAWebSendMsgCreateFanoutStanza", + "exportedFunction": null, + "allExports": [ + "getBotAgentEngagementType", + "createFanoutMsgStanza", + "genCsTokenBody" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [ + { + "name": "id", + "kind": "string", + "required": true + }, + { + "name": "to", + "kind": "dynamic", + "required": true + }, + { + "name": "type", + "kind": "dynamic", + "required": true + }, + { + "name": "peer_recipient_lid", + "kind": "optional", + "required": false + }, + { + "name": "peer_recipient_pn", + "kind": "optional", + "required": false + }, + { + "name": "peer_recipient_username", + "kind": "optional", + "required": false + }, + { + "name": "edit", + "kind": "dynamic", + "required": true + }, + { + "name": "device_fanout", + "kind": "optional", + "required": false + }, + { + "name": "recipient_pn", + "kind": "optional", + "required": false + }, + { + "name": "addressing_mode", + "kind": "optional", + "required": false + } + ], + "children": [ + { + "tag": "meta", + "attrs": [ + { + "name": "origin", + "kind": "optional", + "required": false + }, + { + "name": "destination_id", + "kind": "optional", + "required": false + }, + { + "name": "sender_intent", + "kind": "optional", + "required": false + }, + { + "name": "polltype", + "kind": "optional", + "required": false + }, + { + "name": "event_type", + "kind": "optional", + "required": false + }, + { + "name": "thread_msg_id", + "kind": "optional", + "required": false + }, + { + "name": "thread_msg_sender_jid", + "kind": "optional", + "required": false + }, + { + "name": "appdata", + "kind": "optional", + "required": false + }, + { + "name": "view_once", + "kind": "optional", + "required": false + }, + { + "name": "conversation_thread_id", + "kind": "optional", + "required": false + }, + { + "name": "tag_reason", + "kind": "optional", + "required": false + } + ], + "children": [], + "repeats": false + }, + { + "tag": "meta", + "attrs": [ + { + "name": "type", + "kind": "string", + "required": true + }, + { + "name": "st", + "kind": "dynamic", + "required": true + } + ], + "children": [ + { + "tag": "key", + "attrs": [ + { + "name": "rkid", + "kind": "string", + "required": true + } + ], + "children": [], + "content": { + "kind": "dynamic" + }, + "repeats": false + }, + { + "tag": "key", + "attrs": [ + { + "name": "rkid", + "kind": "string", + "required": true + } + ], + "children": [], + "repeats": false + } + ], + "repeats": false + }, + { + "tag": "sender_content_binding", + "attrs": [], + "children": [], + "repeats": false + } + ], + "response": null + }, + { + "stanzaType": "receipt", + "direction": "outgoing", + "moduleName": "WASmaxOutReceiptNewsletterMixin", + "exportedFunction": null, + "allExports": [ + "mergeNewsletterMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [ + { + "name": "to", + "kind": "user_jid", + "required": true + } + ], + "children": [], + "response": null, + "fragment": true + }, + { + "stanzaType": "receipt", + "direction": "outgoing", + "moduleName": "WASmaxOutReceiptSenderAggregatedViewPublishMixin", + "exportedFunction": null, + "allExports": [ + "makeSenderAggregatedViewPublishListItem", + "mergeSenderAggregatedViewPublishMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [ + { + "name": "id", + "kind": "string", + "required": true + } + ], + "children": [ + { + "tag": "list", + "attrs": [], + "children": [ + { + "tag": "item", + "attrs": [ + { + "name": "server_id", + "kind": "integer", + "required": true + } + ], + "children": [], + "repeats": true + } + ], + "repeats": false + } + ], + "response": null, + "fragment": true + }, + { + "stanzaType": "receipt", + "direction": "outgoing", + "moduleName": "WASmaxOutReceiptStatusClassMixin", + "exportedFunction": null, + "allExports": [ + "mergeStatusClassMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [ + { + "name": "class", + "kind": "const", + "value": "status", + "required": true + } + ], + "children": [], + "response": null, + "fragment": true + }, + { + "stanzaType": "receipt", + "direction": "outgoing", + "moduleName": "WASmaxOutReceiptViewTypeMixin", + "exportedFunction": null, + "allExports": [ + "mergeViewTypeMixin" + ], + "namespace": null, + "subtype": "view", + "target": null, + "attrs": [ + { + "name": "type", + "kind": "const", + "value": "view", + "required": true + } + ], + "children": [], + "response": null, + "fragment": true + }, + { + "stanzaType": "receipt", + "direction": "outgoing", + "moduleName": "WAWebHandleVoipCall", + "exportedFunction": null, + "allExports": [ + "canUseVoipStackForCallMessage", + "handleCall" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [ + { + "name": "to", + "kind": "user_jid", + "required": true + }, + { + "name": "id", + "kind": "string", + "required": true + } + ], + "children": [], + "response": null + }, + { + "stanzaType": "receipt", + "direction": "outgoing", + "moduleName": "WAWebSendDeliveryReceiptJob", + "exportedFunction": null, + "allExports": [ + "sendDeliveryReceiptsAfterDecryption" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [ + { + "name": "id", + "kind": "string", + "required": true + }, + { + "name": "to", + "kind": "user_jid", + "required": true + }, + { + "name": "participant", + "kind": "optional", + "required": false + }, + { + "name": "recipient", + "kind": "optional", + "required": false + }, + { + "name": "type", + "kind": "dynamic", + "required": true + }, + { + "name": "class", + "kind": "dynamic", + "required": true + } + ], + "children": [ + { + "tag": "meta", + "attrs": [ + { + "name": "mode", + "kind": "integer", + "required": true + } + ], + "children": [], + "repeats": false + } + ], + "response": null + }, + { + "stanzaType": "receipt", + "direction": "outgoing", + "moduleName": "WAWebSendHistSyncServerErrorReceiptJob", + "exportedFunction": null, + "allExports": [ + "default" + ], + "namespace": null, + "subtype": "server-error", + "target": null, + "attrs": [ + { + "name": "type", + "kind": "const", + "value": "server-error", + "required": true + }, + { + "name": "to", + "kind": "user_jid", + "required": true + }, + { + "name": "id", + "kind": "string", + "required": true + }, + { + "name": "category", + "kind": "const", + "value": "peer", + "required": true + } + ], + "children": [ + { + "tag": "encrypt", + "attrs": [], + "children": [ + { + "tag": "enc_p", + "attrs": [], + "children": [], + "repeats": false + }, + { + "tag": "enc_iv", + "attrs": [], + "children": [], + "repeats": false + } + ], + "repeats": false + } + ], + "response": null + }, + { + "stanzaType": "receipt", + "direction": "outgoing", + "moduleName": "WAWebSendPlayedReceiptJob", + "exportedFunction": null, + "allExports": [ + "default" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [ + { + "name": "to", + "kind": "dynamic", + "required": true + }, + { + "name": "type", + "kind": "dynamic", + "required": true + }, + { + "name": "id", + "kind": "string", + "required": true + }, + { + "name": "t", + "kind": "string", + "required": true + }, + { + "name": "participant", + "kind": "optional", + "required": false + } + ], + "children": [], + "response": null + }, + { + "stanzaType": "receipt", + "direction": "outgoing", + "moduleName": "WAWebSendReceiptJobCommon", + "exportedFunction": null, + "allExports": [ + "RECEIPT_TYPE", + "ReceiptModeBitPosition", + "genReceiptMetaModeNode", + "sendBotInvokeResponseAcks", + "sendAggregateReceipts" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [ + { + "name": "to", + "kind": "user_jid", + "required": true + }, + { + "name": "type", + "kind": "optional", + "required": false + }, + { + "name": "class", + "kind": "optional", + "required": false + }, + { + "name": "id", + "kind": "string", + "required": true + }, + { + "name": "t", + "kind": "optional", + "required": false + }, + { + "name": "participant", + "kind": "optional", + "required": false + }, + { + "name": "peer_participant_pn", + "kind": "optional", + "required": false + }, + { + "name": "recipient", + "kind": "optional", + "required": false + }, + { + "name": "sts", + "kind": "optional", + "required": false + } + ], + "children": [ + { + "tag": "bot", + "attrs": [ + { + "name": "client_thread_id", + "kind": "string", + "required": true + } + ], + "children": [], + "repeats": false + } + ], + "response": null + }, + { + "stanzaType": "receipt", + "direction": "outgoing", + "moduleName": "WAWebSendRetryReceiptJob", + "exportedFunction": null, + "allExports": [ + "RetryReason", + "sendRetryReceipt", + "getRetryReasonFromError" + ], + "namespace": null, + "subtype": "retry", + "target": null, + "attrs": [ + { + "name": "id", + "kind": "string", + "required": true + }, + { + "name": "to", + "kind": "dynamic", + "required": true + }, + { + "name": "participant", + "kind": "dynamic", + "required": true + }, + { + "name": "recipient", + "kind": "dynamic", + "required": true + }, + { + "name": "type", + "kind": "const", + "value": "retry", + "required": true + }, + { + "name": "category", + "kind": "dynamic", + "required": true + } + ], + "children": [ + { + "tag": "retry", + "attrs": [ + { + "name": "v", + "kind": "const", + "value": "1", + "required": true + }, + { + "name": "count", + "kind": "integer", + "required": true + }, + { + "name": "id", + "kind": "string", + "required": true + }, + { + "name": "t", + "kind": "string", + "required": true + }, + { + "name": "error", + "kind": "optional", + "required": false + } + ], + "children": [], + "repeats": false + }, + { + "tag": "registration", + "attrs": [], + "children": [], + "content": { + "kind": "bytes" + }, + "repeats": false + }, + { + "tag": "meta", + "attrs": [ + { + "name": "mode", + "kind": "integer", + "required": true + } + ], + "children": [], + "repeats": false + } + ], + "response": null + }, + { + "stanzaType": "receipt", + "direction": "outgoing", + "moduleName": "WAWebSendServerErrorReceiptJob", + "exportedFunction": null, + "allExports": [ + "default" + ], + "namespace": null, + "subtype": "server-error", + "target": null, + "attrs": [ + { + "name": "type", + "kind": "const", + "value": "server-error", + "required": true + }, + { + "name": "to", + "kind": "user_jid", + "required": true + }, + { + "name": "id", + "kind": "string", + "required": true + } + ], + "children": [ + { + "tag": "encrypt", + "attrs": [], + "children": [ + { + "tag": "enc_p", + "attrs": [], + "children": [], + "repeats": false + }, + { + "tag": "enc_iv", + "attrs": [], + "children": [], + "repeats": false + } + ], + "repeats": false + }, + { + "tag": "rmr", + "attrs": [ + { + "name": "jid", + "kind": "dynamic", + "required": true + }, + { + "name": "from_me", + "kind": "string", + "required": true + }, + { + "name": "participant", + "kind": "dynamic", + "required": true + } + ], + "children": [], + "repeats": false + } + ], + "response": null + }, + { + "stanzaType": "receipt", + "direction": "outgoing", + "moduleName": "WAWebVoipSendGroupCallRekeyRetryReceiptJob", + "exportedFunction": null, + "allExports": [ + "default" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [ + { + "name": "to", + "kind": "device_jid", + "required": true + }, + { + "name": "id", + "kind": "string", + "required": true + }, + { + "name": "type", + "kind": "string", + "required": true, + "enumRef": { + "name": "ENC_RETRY_RECEIPT_ATTRS", + "module": "WAWebVoipSignalingEnums", + "variants": [ + { + "name": "SINGLE_PARTICIPANT", + "value": "enc" + }, + { + "name": "GROUP_CALL", + "value": "enc_rekey_retry" + } + ] + } + } + ], + "children": [ + { + "tag": "enc_rekey", + "attrs": [ + { + "name": "count", + "kind": "integer", + "required": true + } + ], + "children": [], + "repeats": false + }, + { + "tag": "registration", + "attrs": [], + "children": [], + "content": { + "kind": "bytes" + }, + "repeats": false + } + ], + "response": null + }, + { + "stanzaType": "ack", + "direction": "outgoing", + "moduleName": "WASmaxOutGroupsNotificationClientAckMixin", + "exportedFunction": null, + "allExports": [ + "mergeNotificationClientAckMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [ + { + "name": "id", + "kind": "string", + "required": true + }, + { + "name": "to", + "kind": "user_jid", + "required": true + }, + { + "name": "class", + "kind": "const", + "value": "notification", + "required": true + }, + { + "name": "type", + "kind": "string", + "required": true + } + ], + "children": [], + "response": null, + "fragment": true + }, + { + "stanzaType": "ack", + "direction": "outgoing", + "moduleName": "WASmaxOutMdNotificationClientAckMixin", + "exportedFunction": null, + "allExports": [ + "mergeNotificationClientAckMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [ + { + "name": "id", + "kind": "string", + "required": true + }, + { + "name": "to", + "kind": "user_jid", + "required": true + }, + { + "name": "class", + "kind": "const", + "value": "notification", + "required": true + }, + { + "name": "type", + "kind": "string", + "required": true + } + ], + "children": [], + "response": null, + "fragment": true + }, + { + "stanzaType": "ack", + "direction": "outgoing", + "moduleName": "WASmaxOutMessageDeliverCommonAckMixin", + "exportedFunction": null, + "allExports": [ + "mergeCommonAckMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [ + { + "name": "to", + "kind": "user_jid", + "required": true + }, + { + "name": "class", + "kind": "const", + "value": "message", + "required": true + }, + { + "name": "id", + "kind": "string", + "required": true + }, + { + "name": "type", + "kind": "string", + "required": true + } + ], + "children": [], + "response": null, + "fragment": true + }, + { + "stanzaType": "ack", + "direction": "outgoing", + "moduleName": "WASmaxOutMessageDeliverNewsletterResponseError", + "exportedFunction": null, + "allExports": [ + "makeNewsletterResponseError" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [ + { + "name": "error", + "kind": "const", + "value": "406", + "required": true + } + ], + "children": [], + "response": null + }, + { + "stanzaType": "ack", + "direction": "outgoing", + "moduleName": "WASmaxOutMessageFallbackDeliverResponseBadStanza", + "exportedFunction": null, + "allExports": [ + "makeDeliverResponseBadStanza" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [ + { + "name": "class", + "kind": "const", + "value": "message", + "required": true + }, + { + "name": "id", + "kind": "string", + "required": true + }, + { + "name": "to", + "kind": "user_jid", + "required": true + }, + { + "name": "participant", + "kind": "optional", + "required": false + }, + { + "name": "type", + "kind": "optional", + "required": false + }, + { + "name": "error", + "kind": "integer", + "required": true + } + ], + "children": [], + "response": null + }, + { + "stanzaType": "ack", + "direction": "outgoing", + "moduleName": "WASmaxOutNewslettersNotificationClientAckMixin", + "exportedFunction": null, + "allExports": [ + "mergeNotificationClientAckMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [ + { + "name": "id", + "kind": "string", + "required": true + }, + { + "name": "to", + "kind": "user_jid", + "required": true + }, + { + "name": "class", + "kind": "const", + "value": "notification", + "required": true + }, + { + "name": "type", + "kind": "string", + "required": true + } + ], + "children": [], + "response": null, + "fragment": true + }, + { + "stanzaType": "ack", + "direction": "outgoing", + "moduleName": "WASmaxOutPsaNotificationClientAckMixin", + "exportedFunction": null, + "allExports": [ + "mergeNotificationClientAckMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [ + { + "name": "id", + "kind": "string", + "required": true + }, + { + "name": "to", + "kind": "user_jid", + "required": true + }, + { + "name": "class", + "kind": "const", + "value": "notification", + "required": true + }, + { + "name": "type", + "kind": "string", + "required": true + } + ], + "children": [], + "response": null, + "fragment": true + }, + { + "stanzaType": "ack", + "direction": "outgoing", + "moduleName": "WASmaxOutQpSurfacesNotificationClientAckMixin", + "exportedFunction": null, + "allExports": [ + "mergeNotificationClientAckMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [ + { + "name": "id", + "kind": "string", + "required": true + }, + { + "name": "to", + "kind": "user_jid", + "required": true + }, + { + "name": "class", + "kind": "const", + "value": "notification", + "required": true + }, + { + "name": "type", + "kind": "string", + "required": true + } + ], + "children": [], + "response": null, + "fragment": true + }, + { + "stanzaType": "ack", + "direction": "outgoing", + "moduleName": "WASmaxOutStatusDeliverStatusAckMixin", + "exportedFunction": null, + "allExports": [ + "mergeStatusAckMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [ + { + "name": "to", + "kind": "user_jid", + "required": true + }, + { + "name": "class", + "kind": "const", + "value": "status", + "required": true + }, + { + "name": "id", + "kind": "string", + "required": true + }, + { + "name": "type", + "kind": "string", + "required": true + } + ], + "children": [], + "response": null, + "fragment": true + }, + { + "stanzaType": "ack", + "direction": "outgoing", + "moduleName": "WAWebCreateNackFromStanza", + "exportedFunction": null, + "allExports": [ + "NackReason", + "createNackFromStanza" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [ + { + "name": "class", "kind": "string", "required": true }, + { + "name": "id", + "kind": "dynamic", + "required": true + }, { "name": "to", "kind": "dynamic", "required": true }, { - "name": "phash", - "kind": "optional", - "required": false + "name": "type", + "kind": "dynamic", + "required": true + }, + { + "name": "participant", + "kind": "dynamic", + "required": true + }, + { + "name": "error", + "kind": "integer", + "required": true + } + ], + "children": [], + "response": null + }, + { + "stanzaType": "ack", + "direction": "outgoing", + "moduleName": "WAWebCreateNackFromStanza", + "exportedFunction": null, + "allExports": [ + "NackReason", + "createNackFromStanza" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [ + { + "name": "class", + "kind": "const", + "value": "notification", + "required": true + }, + { + "name": "id", + "kind": "dynamic", + "required": true + }, + { + "name": "to", + "kind": "dynamic", + "required": true }, { "name": "type", @@ -585,296 +3652,274 @@ "required": true }, { - "name": "edit", + "name": "participant", "kind": "dynamic", "required": true }, { - "name": "addressing_mode", - "kind": "string", + "name": "error", + "kind": "integer", "required": true } ], - "children": [ + "children": [], + "response": null + }, + { + "stanzaType": "ack", + "direction": "outgoing", + "moduleName": "WAWebCreateNackFromStanza", + "exportedFunction": null, + "allExports": [ + "NackReason", + "createNackFromStanza" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [ { - "tag": "biz", - "attrs": [], - "children": [ - { - "tag": "interactive", - "attrs": [ - { - "name": "v", - "kind": "const", - "value": "1", - "required": true - }, - { - "name": "type", - "kind": "string", - "required": true - } - ], - "children": [ - { - "tag": "native_flow", - "attrs": [ - { - "name": "name", - "kind": "string", - "required": true - } - ], - "children": [], - "repeats": false - } - ], - "repeats": false - } - ], - "repeats": false + "name": "class", + "kind": "const", + "value": "message", + "required": true }, { - "tag": "meta", - "attrs": [ - { - "name": "origin", - "kind": "optional", - "required": false - }, - { - "name": "destination_id", - "kind": "optional", - "required": false - }, - { - "name": "sender_intent", - "kind": "optional", - "required": false - }, - { - "name": "polltype", - "kind": "optional", - "required": false - }, - { - "name": "event_type", - "kind": "optional", - "required": false - }, - { - "name": "thread_msg_id", - "kind": "optional", - "required": false - }, - { - "name": "thread_msg_sender_jid", - "kind": "optional", - "required": false - }, - { - "name": "appdata", - "kind": "optional", - "required": false - }, - { - "name": "view_once", - "kind": "optional", - "required": false - }, - { - "name": "conversation_thread_id", - "kind": "optional", - "required": false - }, - { - "name": "tag_reason", - "kind": "optional", - "required": false - } - ], - "children": [], - "repeats": false + "name": "id", + "kind": "dynamic", + "required": true + }, + { + "name": "to", + "kind": "dynamic", + "required": true + }, + { + "name": "type", + "kind": "dynamic", + "required": true + }, + { + "name": "participant", + "kind": "dynamic", + "required": true + }, + { + "name": "error", + "kind": "integer", + "required": true } ], + "children": [], "response": null }, { - "stanzaType": "message", + "stanzaType": "ack", "direction": "outgoing", - "moduleName": "WAWebSendMsgCreateDeviceStanza", + "moduleName": "WAWebCreateNackFromStanza", "exportedFunction": null, "allExports": [ - "MsgType", - "PrivacySensitiveType", - "createUserDeviceMsgStanza", - "createGroupDeviceMsgStanza" + "NackReason", + "createNackFromStanza" ], "namespace": null, "subtype": null, "target": null, "attrs": [ + { + "name": "class", + "kind": "const", + "value": "receipt", + "required": true + }, { "name": "id", - "kind": "string", + "kind": "dynamic", "required": true }, { "name": "to", - "kind": "user_jid", + "kind": "dynamic", + "required": true + }, + { + "name": "type", + "kind": "dynamic", "required": true }, { "name": "participant", - "kind": "optional", - "required": false + "kind": "dynamic", + "required": true }, { - "name": "recipient", - "kind": "optional", - "required": false + "name": "error", + "kind": "integer", + "required": true + } + ], + "children": [], + "response": null + }, + { + "stanzaType": "ack", + "direction": "outgoing", + "moduleName": "WAWebHandleAboutNotification", + "exportedFunction": null, + "allExports": [ + "handleAboutNotification" + ], + "namespace": null, + "subtype": "status", + "target": null, + "attrs": [ + { + "name": "id", + "kind": "string", + "required": true }, { - "name": "type", + "name": "to", "kind": "dynamic", "required": true }, { - "name": "peer_recipient_pn", - "kind": "optional", - "required": false + "name": "class", + "kind": "const", + "value": "notification", + "required": true }, { - "name": "peer_recipient_lid", - "kind": "optional", - "required": false + "name": "type", + "kind": "const", + "value": "status", + "required": true + } + ], + "children": [], + "response": null + }, + { + "stanzaType": "ack", + "direction": "outgoing", + "moduleName": "WAWebHandleAccountSyncNotification", + "exportedFunction": null, + "allExports": [ + "getAndUpdateStatus", + "handleAccountSyncNotification" + ], + "namespace": null, + "subtype": "account_sync", + "target": null, + "attrs": [ + { + "name": "id", + "kind": "string", + "required": true }, { - "name": "peer_recipient_username", - "kind": "optional", - "required": false + "name": "to", + "kind": "user_jid", + "required": true }, { - "name": "edit", - "kind": "dynamic", + "name": "class", + "kind": "const", + "value": "notification", "required": true }, { - "name": "category", - "kind": "optional", - "required": false + "name": "type", + "kind": "const", + "value": "account_sync", + "required": true + } + ], + "children": [], + "response": null + }, + { + "stanzaType": "ack", + "direction": "outgoing", + "moduleName": "WAWebHandleBotProfileNotification", + "exportedFunction": null, + "allExports": [ + "handleBotProfileNotification" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [ + { + "name": "id", + "kind": "string", + "required": true }, { - "name": "push_priority", + "name": "to", "kind": "dynamic", "required": true }, { - "name": "privacy_sensitive", - "kind": "optional", - "required": false + "name": "class", + "kind": "const", + "value": "notification", + "required": true }, { - "name": "addressing_mode", - "kind": "optional", - "required": false + "name": "type", + "kind": "string", + "required": true } ], - "children": [ - { - "tag": "enc", - "attrs": [ - { - "name": "v", - "kind": "string", - "required": true - }, - { - "name": "type", - "kind": "string", - "required": true - }, - { - "name": "session_type", - "kind": "optional", - "required": false - }, - { - "name": "state", - "kind": "optional", - "required": false - }, - { - "name": "count", - "kind": "optional", - "required": false - }, - { - "name": "mediatype", - "kind": "dynamic", - "required": true - } - ], - "children": [], - "repeats": false - }, + "children": [], + "response": null + }, + { + "stanzaType": "ack", + "direction": "outgoing", + "moduleName": "WAWebHandleBusinessNotification", + "exportedFunction": null, + "allExports": [ + "handleBusinessNotification", + "handleBusinessNotificationJob" + ], + "namespace": null, + "subtype": "business", + "target": null, + "attrs": [ { - "tag": "meta", - "attrs": [ - { - "name": "origin", - "kind": "optional", - "required": false - }, - { - "name": "destination_id", - "kind": "optional", - "required": false - }, - { - "name": "sender_intent", - "kind": "optional", - "required": false - }, - { - "name": "polltype", - "kind": "optional", - "required": false - }, - { - "name": "event_type", - "kind": "optional", - "required": false - }, - { - "name": "thread_msg_id", - "kind": "optional", - "required": false - }, - { - "name": "thread_msg_sender_jid", - "kind": "optional", - "required": false - }, - { - "name": "appdata", - "kind": "optional", - "required": false - }, - { - "name": "view_once", - "kind": "optional", - "required": false - }, - { - "name": "conversation_thread_id", - "kind": "optional", - "required": false - }, + "name": "id", + "kind": "string", + "required": true + }, + { + "name": "to", + "kind": "dynamic", + "required": true + }, + { + "name": "class", + "kind": "const", + "value": "notification", + "required": true + }, + { + "name": "type", + "kind": "const", + "value": "business", + "required": true + } + ], + "children": [ + { + "tag": "user", + "attrs": [ { - "name": "tag_reason", - "kind": "optional", - "required": false + "name": "side_list", + "kind": "const", + "value": "out", + "required": true } ], "children": [], @@ -884,17 +3929,16 @@ "response": null }, { - "stanzaType": "message", + "stanzaType": "ack", "direction": "outgoing", - "moduleName": "WAWebSendMsgCreateFanoutStanza", + "moduleName": "WAWebHandleBusinessNotification", "exportedFunction": null, "allExports": [ - "getBotAgentEngagementType", - "createFanoutMsgStanza", - "genCsTokenBody" + "handleBusinessNotification", + "handleBusinessNotificationJob" ], "namespace": null, - "subtype": null, + "subtype": "business", "target": null, "attrs": [ { @@ -908,162 +3952,104 @@ "required": true }, { - "name": "type", - "kind": "dynamic", + "name": "class", + "kind": "const", + "value": "notification", "required": true }, { - "name": "peer_recipient_lid", - "kind": "optional", - "required": false - }, - { - "name": "peer_recipient_pn", - "kind": "optional", - "required": false - }, - { - "name": "peer_recipient_username", - "kind": "optional", - "required": false - }, + "name": "type", + "kind": "const", + "value": "business", + "required": true + } + ], + "children": [], + "response": null + }, + { + "stanzaType": "ack", + "direction": "outgoing", + "moduleName": "WAWebHandleCompanionReqRefreshNotification", + "exportedFunction": null, + "allExports": [ + "handleCompanionReqRefreshNotification" + ], + "namespace": null, + "subtype": "companion_reg_refresh", + "target": null, + "attrs": [ { - "name": "edit", - "kind": "dynamic", + "name": "id", + "kind": "string", "required": true }, { - "name": "device_fanout", - "kind": "optional", - "required": false + "name": "class", + "kind": "const", + "value": "notification", + "required": true }, { - "name": "recipient_pn", - "kind": "optional", - "required": false + "name": "type", + "kind": "const", + "value": "companion_reg_refresh", + "required": true }, { - "name": "addressing_mode", - "kind": "optional", - "required": false - } - ], - "children": [ - { - "tag": "meta", - "attrs": [ - { - "name": "origin", - "kind": "optional", - "required": false - }, - { - "name": "destination_id", - "kind": "optional", - "required": false - }, - { - "name": "sender_intent", - "kind": "optional", - "required": false - }, - { - "name": "polltype", - "kind": "optional", - "required": false - }, - { - "name": "event_type", - "kind": "optional", - "required": false - }, - { - "name": "thread_msg_id", - "kind": "optional", - "required": false - }, - { - "name": "thread_msg_sender_jid", - "kind": "optional", - "required": false - }, - { - "name": "appdata", - "kind": "optional", - "required": false - }, - { - "name": "view_once", - "kind": "optional", - "required": false - }, - { - "name": "conversation_thread_id", - "kind": "optional", - "required": false - }, - { - "name": "tag_reason", - "kind": "optional", - "required": false - } - ], - "children": [], - "repeats": false + "name": "to", + "kind": "dynamic", + "required": true } ], + "children": [], "response": null }, { - "stanzaType": "receipt", + "stanzaType": "ack", "direction": "outgoing", - "moduleName": "WASmaxOutReceiptSenderAggregatedViewPublishMixin", + "moduleName": "WAWebHandleContactNotification", "exportedFunction": null, "allExports": [ - "makeSenderAggregatedViewPublishListItem", - "mergeSenderAggregatedViewPublishMixin" + "default" ], "namespace": null, - "subtype": null, + "subtype": "contacts", "target": null, "attrs": [ { "name": "id", "kind": "string", "required": true - } - ], - "children": [ + }, { - "tag": "list", - "attrs": [], - "children": [ - { - "tag": "item", - "attrs": [ - { - "name": "server_id", - "kind": "integer", - "required": true - } - ], - "children": [], - "repeats": true - } - ], - "repeats": false + "name": "to", + "kind": "dynamic", + "required": true + }, + { + "name": "class", + "kind": "const", + "value": "notification", + "required": true + }, + { + "name": "type", + "kind": "const", + "value": "contacts", + "required": true } ], + "children": [], "response": null }, { - "stanzaType": "receipt", + "stanzaType": "ack", "direction": "outgoing", - "moduleName": "WAWebHandleVoipCall", + "moduleName": "WAWebHandleDeviceNotification", "exportedFunction": null, "allExports": [ - "canUseVoipStackForCallMessage", - "handleCall" + "handleDevicesNotification" ], "namespace": null, "subtype": null, @@ -1078,21 +4064,27 @@ "name": "id", "kind": "string", "required": true + }, + { + "name": "class", + "kind": "const", + "value": "notification", + "required": true } ], "children": [], "response": null }, { - "stanzaType": "receipt", + "stanzaType": "ack", "direction": "outgoing", - "moduleName": "WAWebSendDeliveryReceiptJob", + "moduleName": "WAWebHandleDeviceSwitchingNotification", "exportedFunction": null, "allExports": [ - "sendDeliveryReceiptsAfterDecryption" + "default" ], "namespace": null, - "subtype": null, + "subtype": "registration", "target": null, "attrs": [ { @@ -1101,27 +4093,19 @@ "required": true }, { - "name": "to", - "kind": "user_jid", + "name": "class", + "kind": "const", + "value": "notification", "required": true }, - { - "name": "participant", - "kind": "optional", - "required": false - }, - { - "name": "recipient", - "kind": "optional", - "required": false - }, { "name": "type", - "kind": "dynamic", + "kind": "const", + "value": "registration", "required": true }, { - "name": "class", + "name": "to", "kind": "dynamic", "required": true } @@ -1130,26 +4114,20 @@ "response": null }, { - "stanzaType": "receipt", + "stanzaType": "ack", "direction": "outgoing", - "moduleName": "WAWebSendHistSyncServerErrorReceiptJob", + "moduleName": "WAWebHandleDigestKey", "exportedFunction": null, "allExports": [ "default" ], "namespace": null, - "subtype": "server-error", + "subtype": null, "target": null, "attrs": [ - { - "name": "type", - "kind": "const", - "value": "server-error", - "required": true - }, { "name": "to", - "kind": "user_jid", + "kind": "dynamic", "required": true }, { @@ -1158,311 +4136,184 @@ "required": true }, { - "name": "category", + "name": "class", "kind": "const", - "value": "peer", + "value": "notification", "required": true } ], - "children": [ - { - "tag": "encrypt", - "attrs": [], - "children": [ - { - "tag": "enc_p", - "attrs": [], - "children": [], - "repeats": false - }, - { - "tag": "enc_iv", - "attrs": [], - "children": [], - "repeats": false - } - ], - "repeats": false - } - ], + "children": [], "response": null }, { - "stanzaType": "receipt", + "stanzaType": "ack", "direction": "outgoing", - "moduleName": "WAWebSendPlayedReceiptJob", + "moduleName": "WAWebHandleDigitalCommerceSubscriptionNotification", "exportedFunction": null, "allExports": [ - "default" + "handleDigitalCommerceSubscriptionNotification", + "handleDigitalCommerceSubscriptionNotificationJob" ], "namespace": null, - "subtype": null, + "subtype": "digital_commerce_subscription", "target": null, "attrs": [ { - "name": "to", - "kind": "dynamic", + "name": "id", + "kind": "string", "required": true }, { - "name": "type", + "name": "to", "kind": "dynamic", "required": true }, { - "name": "id", - "kind": "string", + "name": "class", + "kind": "const", + "value": "notification", "required": true }, { - "name": "t", - "kind": "string", + "name": "type", + "kind": "const", + "value": "digital_commerce_subscription", "required": true - }, - { - "name": "participant", - "kind": "optional", - "required": false } ], "children": [], "response": null }, { - "stanzaType": "receipt", + "stanzaType": "ack", "direction": "outgoing", - "moduleName": "WAWebSendReceiptJobCommon", + "moduleName": "WAWebHandleDisappearingModeNotification", "exportedFunction": null, "allExports": [ - "RECEIPT_TYPE", - "ReceiptModeBitPosition", - "genReceiptMetaModeNode", - "sendBotInvokeResponseAcks", - "sendAggregateReceipts" + "handleDisappearingModeNotificationJob" ], "namespace": null, - "subtype": null, + "subtype": "disappearing_mode", "target": null, "attrs": [ - { - "name": "to", - "kind": "user_jid", - "required": true - }, - { - "name": "type", - "kind": "optional", - "required": false - }, - { - "name": "class", - "kind": "optional", - "required": false - }, { "name": "id", "kind": "string", "required": true }, { - "name": "t", - "kind": "optional", - "required": false - }, - { - "name": "participant", - "kind": "optional", - "required": false - }, - { - "name": "peer_participant_pn", - "kind": "optional", - "required": false + "name": "to", + "kind": "user_jid", + "required": true }, { - "name": "recipient", - "kind": "optional", - "required": false + "name": "class", + "kind": "const", + "value": "notification", + "required": true }, { - "name": "sts", - "kind": "optional", - "required": false + "name": "type", + "kind": "const", + "value": "disappearing_mode", + "required": true } ], "children": [], "response": null }, { - "stanzaType": "receipt", + "stanzaType": "ack", "direction": "outgoing", - "moduleName": "WAWebSendRetryReceiptJob", + "moduleName": "WAWebHandleGroupNotification", "exportedFunction": null, "allExports": [ - "RetryReason", - "sendRetryReceipt", - "getRetryReasonFromError" + "handleGroupNotification", + "handleParsedGroupNotification" ], "namespace": null, - "subtype": "retry", + "subtype": "w:gp2", "target": null, "attrs": [ - { - "name": "id", - "kind": "string", - "required": true - }, { "name": "to", - "kind": "dynamic", + "kind": "group_jid", "required": true }, { - "name": "participant", - "kind": "dynamic", + "name": "id", + "kind": "string", "required": true }, { - "name": "recipient", - "kind": "dynamic", + "name": "class", + "kind": "const", + "value": "notification", "required": true }, { "name": "type", "kind": "const", - "value": "retry", - "required": true - }, - { - "name": "category", - "kind": "dynamic", + "value": "w:gp2", "required": true - } - ], - "children": [ - { - "tag": "retry", - "attrs": [ - { - "name": "v", - "kind": "const", - "value": "1", - "required": true - }, - { - "name": "count", - "kind": "integer", - "required": true - }, - { - "name": "id", - "kind": "string", - "required": true - }, - { - "name": "t", - "kind": "string", - "required": true - }, - { - "name": "error", - "kind": "optional", - "required": false - } - ], - "children": [], - "repeats": false }, { - "tag": "registration", - "attrs": [], - "children": [], - "content": { - "kind": "bytes" - }, - "repeats": false + "name": "participant", + "kind": "optional", + "required": false } ], + "children": [], "response": null }, { - "stanzaType": "receipt", + "stanzaType": "ack", "direction": "outgoing", - "moduleName": "WAWebSendServerErrorReceiptJob", + "moduleName": "WAWebHandleGroupNotificationV2", "exportedFunction": null, "allExports": [ - "default" + "isGroupNotificationOptimizationEligible", + "handleGroupNotificationV2" ], "namespace": null, - "subtype": "server-error", + "subtype": "w:gp2", "target": null, "attrs": [ - { - "name": "type", - "kind": "const", - "value": "server-error", - "required": true - }, { "name": "to", - "kind": "user_jid", + "kind": "group_jid", "required": true }, { "name": "id", "kind": "string", "required": true - } - ], - "children": [ + }, { - "tag": "encrypt", - "attrs": [], - "children": [ - { - "tag": "enc_p", - "attrs": [], - "children": [], - "repeats": false - }, - { - "tag": "enc_iv", - "attrs": [], - "children": [], - "repeats": false - } - ], - "repeats": false + "name": "class", + "kind": "const", + "value": "notification", + "required": true + }, + { + "name": "type", + "kind": "const", + "value": "w:gp2", + "required": true }, { - "tag": "rmr", - "attrs": [ - { - "name": "jid", - "kind": "dynamic", - "required": true - }, - { - "name": "from_me", - "kind": "string", - "required": true - }, - { - "name": "participant", - "kind": "dynamic", - "required": true - } - ], - "children": [], - "repeats": false + "name": "participant", + "kind": "optional", + "required": false } ], + "children": [], "response": null }, { - "stanzaType": "receipt", + "stanzaType": "ack", "direction": "outgoing", - "moduleName": "WAWebVoipSendGroupCallRekeyRetryReceiptJob", + "moduleName": "WAWebHandleGrowthNotification", "exportedFunction": null, "allExports": [ "default" @@ -1472,76 +4323,56 @@ "target": null, "attrs": [ { - "name": "to", - "kind": "device_jid", + "name": "id", + "kind": "string", "required": true }, { - "name": "id", - "kind": "string", + "name": "class", + "kind": "const", + "value": "notification", "required": true }, { "name": "type", - "kind": "string", - "required": true, - "enumRef": { - "name": "ENC_RETRY_RECEIPT_ATTRS", - "module": "WAWebVoipSignalingEnums", - "variants": [ - { - "name": "SINGLE_PARTICIPANT", - "value": "enc" - }, - { - "name": "GROUP_CALL", - "value": "enc_rekey_retry" - } - ] - } - } - ], - "children": [ - { - "tag": "enc_rekey", - "attrs": [ - { - "name": "count", - "kind": "integer", - "required": true - } - ], - "children": [], - "repeats": false + "kind": "dynamic", + "required": true }, { - "tag": "registration", - "attrs": [], - "children": [], - "content": { - "kind": "bytes" - }, - "repeats": false + "name": "to", + "kind": "dynamic", + "required": true } ], + "children": [], "response": null }, { "stanzaType": "ack", "direction": "outgoing", - "moduleName": "WASmaxOutMessageDeliverNewsletterResponseError", + "moduleName": "WAWebHandleIdentityChange", "exportedFunction": null, "allExports": [ - "makeNewsletterResponseError" + "handleE2eIdentityChange" ], "namespace": null, "subtype": null, "target": null, "attrs": [ { - "name": "error", + "name": "to", + "kind": "device_jid", + "required": true + }, + { + "name": "id", + "kind": "string", + "required": true + }, + { + "name": "class", "kind": "const", - "value": "406", + "value": "notification", "required": true } ], @@ -1551,21 +4382,58 @@ { "stanzaType": "ack", "direction": "outgoing", - "moduleName": "WASmaxOutMessageFallbackDeliverResponseBadStanza", + "moduleName": "WAWebHandleMediaRetryNotification", "exportedFunction": null, "allExports": [ - "makeDeliverResponseBadStanza" + "default" ], "namespace": null, - "subtype": null, + "subtype": "mediaretry", "target": null, "attrs": [ + { + "name": "id", + "kind": "string", + "required": true + }, { "name": "class", "kind": "const", - "value": "message", + "value": "notification", + "required": true + }, + { + "name": "type", + "kind": "const", + "value": "mediaretry", "required": true }, + { + "name": "to", + "kind": "dynamic", + "required": true + }, + { + "name": "participant", + "kind": "dynamic", + "required": true + } + ], + "children": [], + "response": null + }, + { + "stanzaType": "ack", + "direction": "outgoing", + "moduleName": "WAWebHandleMessageRetryRequest", + "exportedFunction": null, + "allExports": [ + "handleMessageRetryRequest" + ], + "namespace": null, + "subtype": "retry", + "target": null, + "attrs": [ { "name": "id", "kind": "string", @@ -1582,13 +4450,15 @@ "required": false }, { - "name": "type", - "kind": "optional", - "required": false + "name": "class", + "kind": "const", + "value": "receipt", + "required": true }, { - "name": "error", - "kind": "integer", + "name": "type", + "kind": "const", + "value": "retry", "required": true } ], @@ -1598,24 +4468,22 @@ { "stanzaType": "ack", "direction": "outgoing", - "moduleName": "WAWebCreateNackFromStanza", + "moduleName": "WAWebHandleMexNotification", "exportedFunction": null, "allExports": [ - "NackReason", - "createNackFromStanza" + "name", + "operationName", + "toString", + "handleMexNotification", + "MissingMEXNotificationHandler" ], "namespace": null, - "subtype": null, + "subtype": "mex", "target": null, "attrs": [ - { - "name": "class", - "kind": "string", - "required": true - }, { "name": "id", - "kind": "dynamic", + "kind": "string", "required": true }, { @@ -1624,18 +4492,15 @@ "required": true }, { - "name": "type", - "kind": "dynamic", - "required": true - }, - { - "name": "participant", - "kind": "dynamic", + "name": "class", + "kind": "const", + "value": "notification", "required": true }, { - "name": "error", - "kind": "integer", + "name": "type", + "kind": "const", + "value": "mex", "required": true } ], @@ -1645,46 +4510,40 @@ { "stanzaType": "ack", "direction": "outgoing", - "moduleName": "WAWebCreateNackFromStanza", + "moduleName": "WAWebHandleMsgSendAck", "exportedFunction": null, "allExports": [ - "NackReason", - "createNackFromStanza" + "sendAck", + "sendNack" ], "namespace": null, "subtype": null, "target": null, "attrs": [ - { - "name": "class", - "kind": "const", - "value": "notification", - "required": true - }, { "name": "id", - "kind": "dynamic", + "kind": "string", "required": true }, { - "name": "to", - "kind": "dynamic", + "name": "class", + "kind": "string", "required": true }, { - "name": "type", - "kind": "dynamic", - "required": true + "name": "to", + "kind": "optional", + "required": false }, { "name": "participant", - "kind": "dynamic", - "required": true + "kind": "optional", + "required": false }, { - "name": "error", - "kind": "integer", - "required": true + "name": "type", + "kind": "optional", + "required": false } ], "children": [], @@ -1693,41 +4552,40 @@ { "stanzaType": "ack", "direction": "outgoing", - "moduleName": "WAWebCreateNackFromStanza", + "moduleName": "WAWebHandleMsgSendAck", "exportedFunction": null, "allExports": [ - "NackReason", - "createNackFromStanza" + "sendAck", + "sendNack" ], "namespace": null, "subtype": null, "target": null, "attrs": [ { - "name": "class", - "kind": "const", - "value": "message", + "name": "id", + "kind": "string", "required": true }, { - "name": "id", - "kind": "dynamic", + "name": "class", + "kind": "string", "required": true }, { "name": "to", - "kind": "dynamic", - "required": true + "kind": "optional", + "required": false }, { - "name": "type", - "kind": "dynamic", - "required": true + "name": "participant", + "kind": "optional", + "required": false }, { - "name": "participant", - "kind": "dynamic", - "required": true + "name": "type", + "kind": "optional", + "required": false }, { "name": "error", @@ -1741,45 +4599,29 @@ { "stanzaType": "ack", "direction": "outgoing", - "moduleName": "WAWebCreateNackFromStanza", + "moduleName": "WAWebHandlePreKeyLow", "exportedFunction": null, "allExports": [ - "NackReason", - "createNackFromStanza" + "default" ], "namespace": null, "subtype": null, "target": null, "attrs": [ - { - "name": "class", - "kind": "const", - "value": "receipt", - "required": true - }, - { - "name": "id", - "kind": "dynamic", - "required": true - }, { "name": "to", "kind": "dynamic", "required": true }, { - "name": "type", - "kind": "dynamic", - "required": true - }, - { - "name": "participant", - "kind": "dynamic", + "name": "id", + "kind": "string", "required": true }, { - "name": "error", - "kind": "integer", + "name": "class", + "kind": "const", + "value": "notification", "required": true } ], @@ -1789,13 +4631,13 @@ { "stanzaType": "ack", "direction": "outgoing", - "moduleName": "WAWebHandleAboutNotification", + "moduleName": "WAWebHandlePrivacyTokensNotification", "exportedFunction": null, "allExports": [ - "handleAboutNotification" + "default" ], "namespace": null, - "subtype": "status", + "subtype": "privacy_token", "target": null, "attrs": [ { @@ -1803,21 +4645,21 @@ "kind": "string", "required": true }, - { - "name": "to", - "kind": "dynamic", - "required": true - }, { "name": "class", "kind": "const", "value": "notification", "required": true }, + { + "name": "to", + "kind": "user_jid", + "required": true + }, { "name": "type", "kind": "const", - "value": "status", + "value": "privacy_token", "required": true } ], @@ -1827,14 +4669,13 @@ { "stanzaType": "ack", "direction": "outgoing", - "moduleName": "WAWebHandleAccountSyncNotification", + "moduleName": "WAWebHandleProfilePicNotification", "exportedFunction": null, "allExports": [ - "getAndUpdateStatus", - "handleAccountSyncNotification" + "handleProfilePicNotificationJob" ], "namespace": null, - "subtype": "account_sync", + "subtype": "picture", "target": null, "attrs": [ { @@ -1856,7 +4697,7 @@ { "name": "type", "kind": "const", - "value": "account_sync", + "value": "picture", "required": true } ], @@ -1866,13 +4707,13 @@ { "stanzaType": "ack", "direction": "outgoing", - "moduleName": "WAWebHandleBotProfileNotification", + "moduleName": "WAWebHandlePsa", "exportedFunction": null, "allExports": [ - "handleBotProfileNotification" + "default" ], "namespace": null, - "subtype": null, + "subtype": "psa", "target": null, "attrs": [ { @@ -1881,8 +4722,8 @@ "required": true }, { - "name": "to", - "kind": "dynamic", + "name": "participant", + "kind": "user_jid", "required": true }, { @@ -1893,7 +4734,13 @@ }, { "name": "type", - "kind": "string", + "kind": "const", + "value": "psa", + "required": true + }, + { + "name": "to", + "kind": "user_jid", "required": true } ], @@ -1903,14 +4750,13 @@ { "stanzaType": "ack", "direction": "outgoing", - "moduleName": "WAWebHandleBusinessNotification", + "moduleName": "WAWebHandleServerNotification", "exportedFunction": null, "allExports": [ - "handleBusinessNotification", - "handleBusinessNotificationJob" + "handleServerNotification" ], "namespace": null, - "subtype": "business", + "subtype": "server", "target": null, "attrs": [ { @@ -1918,11 +4764,6 @@ "kind": "string", "required": true }, - { - "name": "to", - "kind": "dynamic", - "required": true - }, { "name": "class", "kind": "const", @@ -1932,38 +4773,28 @@ { "name": "type", "kind": "const", - "value": "business", + "value": "server", "required": true - } - ], - "children": [ + }, { - "tag": "user", - "attrs": [ - { - "name": "side_list", - "kind": "const", - "value": "out", - "required": true - } - ], - "children": [], - "repeats": false + "name": "to", + "kind": "dynamic", + "required": true } ], + "children": [], "response": null }, { "stanzaType": "ack", "direction": "outgoing", - "moduleName": "WAWebHandleBusinessNotification", + "moduleName": "WAWebHandleServerSyncNotification", "exportedFunction": null, "allExports": [ - "handleBusinessNotification", - "handleBusinessNotificationJob" + "handleServerSyncNotification" ], "namespace": null, - "subtype": "business", + "subtype": "server_sync", "target": null, "attrs": [ { @@ -1971,11 +4802,6 @@ "kind": "string", "required": true }, - { - "name": "to", - "kind": "dynamic", - "required": true - }, { "name": "class", "kind": "const", @@ -1985,7 +4811,12 @@ { "name": "type", "kind": "const", - "value": "business", + "value": "server_sync", + "required": true + }, + { + "name": "to", + "kind": "dynamic", "required": true } ], @@ -1995,15 +4826,21 @@ { "stanzaType": "ack", "direction": "outgoing", - "moduleName": "WAWebHandleCompanionReqRefreshNotification", + "moduleName": "WAWebHandleVoipCall", "exportedFunction": null, "allExports": [ - "handleCompanionReqRefreshNotification" + "canUseVoipStackForCallMessage", + "handleCall" ], "namespace": null, - "subtype": "companion_reg_refresh", + "subtype": null, "target": null, "attrs": [ + { + "name": "to", + "kind": "user_jid", + "required": true + }, { "name": "id", "kind": "string", @@ -2012,17 +4849,11 @@ { "name": "class", "kind": "const", - "value": "notification", + "value": "call", "required": true }, { "name": "type", - "kind": "const", - "value": "companion_reg_refresh", - "required": true - }, - { - "name": "to", "kind": "dynamic", "required": true } @@ -2033,13 +4864,13 @@ { "stanzaType": "ack", "direction": "outgoing", - "moduleName": "WAWebHandleContactNotification", + "moduleName": "WAWebHandleVoipCallReceipt", "exportedFunction": null, "allExports": [ - "default" + "handleCallReceipt" ], "namespace": null, - "subtype": "contacts", + "subtype": null, "target": null, "attrs": [ { @@ -2049,19 +4880,18 @@ }, { "name": "to", - "kind": "dynamic", + "kind": "user_jid", "required": true }, { "name": "class", "kind": "const", - "value": "notification", + "value": "receipt", "required": true }, { "name": "type", - "kind": "const", - "value": "contacts", + "kind": "dynamic", "required": true } ], @@ -2071,10 +4901,10 @@ { "stanzaType": "ack", "direction": "outgoing", - "moduleName": "WAWebHandleDeviceNotification", + "moduleName": "WAWebHandleVoipOfferNotice", "exportedFunction": null, "allExports": [ - "handleDevicesNotification" + "default" ], "namespace": null, "subtype": null, @@ -2093,7 +4923,12 @@ { "name": "class", "kind": "const", - "value": "notification", + "value": "call", + "required": true + }, + { + "name": "type", + "kind": "string", "required": true } ], @@ -2103,13 +4938,13 @@ { "stanzaType": "ack", "direction": "outgoing", - "moduleName": "WAWebHandleDeviceSwitchingNotification", + "moduleName": "WAWebHandleWaChat", "exportedFunction": null, "allExports": [ "default" ], "namespace": null, - "subtype": "registration", + "subtype": "psa", "target": null, "attrs": [ { @@ -2126,12 +4961,12 @@ { "name": "type", "kind": "const", - "value": "registration", + "value": "psa", "required": true }, { "name": "to", - "kind": "dynamic", + "kind": "user_jid", "required": true } ], @@ -2141,30 +4976,45 @@ { "stanzaType": "ack", "direction": "outgoing", - "moduleName": "WAWebHandleDigestKey", + "moduleName": "WAWebOfflineResumePreAckHandler", "exportedFunction": null, "allExports": [ - "default" + "parseAndSerializeOfflinePreAck", + "sendOfflinePreAck" ], "namespace": null, "subtype": null, "target": null, "attrs": [ { - "name": "to", - "kind": "dynamic", + "name": "id", + "kind": "string", "required": true }, { - "name": "id", + "name": "class", "kind": "string", "required": true }, { - "name": "class", - "kind": "const", - "value": "notification", + "name": "to", + "kind": "dynamic", + "required": true + }, + { + "name": "type", + "kind": "dynamic", "required": true + }, + { + "name": "participant", + "kind": "optional", + "required": false + }, + { + "name": "error", + "kind": "optional", + "required": false } ], "children": [], @@ -2173,16 +5023,31 @@ { "stanzaType": "ack", "direction": "outgoing", - "moduleName": "WAWebHandleDigitalCommerceSubscriptionNotification", + "moduleName": "WAWebPaymentNotificationHandler", "exportedFunction": null, "allExports": [ - "handleDigitalCommerceSubscriptionNotification", - "handleDigitalCommerceSubscriptionNotificationJob" + "handlePaymentNotification", + "processOrphanPaymentNotifications", + "processAllOrphanPaymentNotifications", + "getMessageFromCollection", + "getMessageFromDb" ], "namespace": null, - "subtype": "digital_commerce_subscription", + "subtype": "pay", "target": null, "attrs": [ + { + "name": "class", + "kind": "const", + "value": "notification", + "required": true + }, + { + "name": "type", + "kind": "const", + "value": "pay", + "required": true + }, { "name": "id", "kind": "string", @@ -2192,18 +5057,48 @@ "name": "to", "kind": "dynamic", "required": true + } + ], + "children": [], + "response": null + }, + { + "stanzaType": "ack", + "direction": "outgoing", + "moduleName": "WAWebReceiptAck", + "exportedFunction": null, + "allExports": [ + "buildReceiptAck" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [ + { + "name": "to", + "kind": "user_jid", + "required": true + }, + { + "name": "id", + "kind": "string", + "required": true }, { "name": "class", "kind": "const", - "value": "notification", + "value": "receipt", "required": true }, { "name": "type", - "kind": "const", - "value": "digital_commerce_subscription", + "kind": "dynamic", "required": true + }, + { + "name": "participant", + "kind": "optional", + "required": false } ], "children": [], @@ -2212,13 +5107,17 @@ { "stanzaType": "ack", "direction": "outgoing", - "moduleName": "WAWebHandleDisappearingModeNotification", + "moduleName": "WAWebSendReceiptJobCommon", "exportedFunction": null, "allExports": [ - "handleDisappearingModeNotificationJob" + "RECEIPT_TYPE", + "ReceiptModeBitPosition", + "genReceiptMetaModeNode", + "sendBotInvokeResponseAcks", + "sendAggregateReceipts" ], "namespace": null, - "subtype": "disappearing_mode", + "subtype": "text", "target": null, "attrs": [ { @@ -2234,114 +5133,229 @@ { "name": "class", "kind": "const", - "value": "notification", + "value": "message", "required": true }, { "name": "type", "kind": "const", - "value": "disappearing_mode", + "value": "text", "required": true } ], - "children": [], + "children": [ + { + "tag": "list", + "attrs": [], + "children": [ + { + "tag": "item", + "attrs": [ + { + "name": "id", + "kind": "string", + "required": true + } + ], + "children": [], + "repeats": true + } + ], + "repeats": false + } + ], "response": null }, { "stanzaType": "ack", "direction": "outgoing", - "moduleName": "WAWebHandleGroupNotification", + "moduleName": "WAWebSendReceiptJobCommon", "exportedFunction": null, "allExports": [ - "handleGroupNotification", - "handleParsedGroupNotification" + "RECEIPT_TYPE", + "ReceiptModeBitPosition", + "genReceiptMetaModeNode", + "sendBotInvokeResponseAcks", + "sendAggregateReceipts" ], "namespace": null, - "subtype": "w:gp2", + "subtype": "text", "target": null, "attrs": [ { - "name": "to", - "kind": "group_jid", + "name": "id", + "kind": "string", "required": true }, { - "name": "id", - "kind": "string", + "name": "to", + "kind": "user_jid", "required": true }, + { + "name": "recipient", + "kind": "optional", + "required": false + }, + { + "name": "participant", + "kind": "optional", + "required": false + }, { "name": "class", "kind": "const", - "value": "notification", + "value": "message", "required": true }, { "name": "type", "kind": "const", - "value": "w:gp2", + "value": "text", "required": true - }, + } + ], + "children": [ { - "name": "participant", - "kind": "optional", - "required": false + "tag": "ack", + "attrs": [ + { + "name": "id", + "kind": "string", + "required": true + }, + { + "name": "to", + "kind": "user_jid", + "required": true + }, + { + "name": "class", + "kind": "const", + "value": "message", + "required": true + }, + { + "name": "type", + "kind": "const", + "value": "text", + "required": true + } + ], + "children": [ + { + "tag": "list", + "attrs": [], + "children": [ + { + "tag": "item", + "attrs": [ + { + "name": "id", + "kind": "string", + "required": true + } + ], + "children": [], + "repeats": true + } + ], + "repeats": false + } + ], + "repeats": false } ], - "children": [], "response": null }, { - "stanzaType": "ack", + "stanzaType": "call", "direction": "outgoing", - "moduleName": "WAWebHandleGroupNotificationV2", + "moduleName": "WASmaxOutSpamCallReportMixin", "exportedFunction": null, "allExports": [ - "isGroupNotificationOptimizationEligible", - "handleGroupNotificationV2" + "mergeCallReportMixin" ], "namespace": null, - "subtype": "w:gp2", + "subtype": null, "target": null, "attrs": [ { "name": "to", - "kind": "group_jid", - "required": true - }, - { - "name": "id", - "kind": "string", + "kind": "user_jid", "required": true }, { - "name": "class", - "kind": "const", - "value": "notification", + "name": "from", + "kind": "user_jid", "required": true }, { - "name": "type", - "kind": "const", - "value": "w:gp2", + "name": "id", + "kind": "string", "required": true - }, + } + ], + "children": [ { - "name": "participant", - "kind": "optional", - "required": false + "tag": "call_info", + "attrs": [ + { + "name": "duration", + "kind": "integer", + "required": true + }, + { + "name": "terminate_reason", + "kind": "optional", + "required": false + }, + { + "name": "reason", + "kind": "optional", + "required": false + }, + { + "name": "terminator", + "kind": "optional", + "required": false + }, + { + "name": "start_time", + "kind": "optional", + "required": false + }, + { + "name": "adder", + "kind": "optional", + "required": false + }, + { + "name": "creator", + "kind": "optional", + "required": false + }, + { + "name": "mediatype", + "kind": "optional", + "required": false + } + ], + "children": [], + "repeats": false } ], - "children": [], - "response": null + "response": null, + "fragment": true }, { - "stanzaType": "ack", + "stanzaType": "call", "direction": "outgoing", - "moduleName": "WAWebHandleGrowthNotification", + "moduleName": "WASmaxOutVoipLinkCreateRequest", "exportedFunction": null, "allExports": [ - "default" + "makeLinkCreateRequestLinkCreateEvent", + "makeLinkCreateRequest" ], "namespace": null, "subtype": null, @@ -2349,183 +5363,211 @@ "attrs": [ { "name": "id", - "kind": "string", - "required": true - }, - { - "name": "class", - "kind": "const", - "value": "notification", - "required": true - }, - { - "name": "type", - "kind": "dynamic", + "kind": "generated_id", "required": true }, { "name": "to", - "kind": "dynamic", + "kind": "user_jid", "required": true } ], - "children": [], + "children": [ + { + "tag": "link_create", + "attrs": [ + { + "name": "media", + "kind": "optional", + "required": false + }, + { + "name": "link_creator_username", + "kind": "optional", + "required": false + }, + { + "name": "waiting_room_enabled", + "kind": "optional", + "required": false + } + ], + "children": [ + { + "tag": "event", + "attrs": [ + { + "name": "start_time", + "kind": "integer", + "required": true + } + ], + "children": [], + "repeats": false + } + ], + "repeats": false + } + ], "response": null }, { - "stanzaType": "ack", + "stanzaType": "call", "direction": "outgoing", - "moduleName": "WAWebHandleIdentityChange", + "moduleName": "WASmaxOutVoipLinkQueryRequest", "exportedFunction": null, "allExports": [ - "handleE2eIdentityChange" + "makeLinkQueryRequest" ], "namespace": null, "subtype": null, "target": null, "attrs": [ - { - "name": "to", - "kind": "device_jid", - "required": true - }, { "name": "id", - "kind": "string", + "kind": "generated_id", "required": true }, { - "name": "class", - "kind": "const", - "value": "notification", + "name": "to", + "kind": "user_jid", "required": true } ], - "children": [], + "children": [ + { + "tag": "link_query", + "attrs": [ + { + "name": "token", + "kind": "string", + "required": true + }, + { + "name": "media", + "kind": "string", + "required": true + }, + { + "name": "action", + "kind": "optional", + "required": false + } + ], + "children": [], + "repeats": false + } + ], "response": null }, { - "stanzaType": "ack", + "stanzaType": "call", "direction": "outgoing", - "moduleName": "WAWebHandleMediaRetryNotification", + "moduleName": "WASmaxOutVoipWaitingRoomToggleCallLinkRequest", "exportedFunction": null, "allExports": [ - "default" + "makeWaitingRoomToggleCallLinkRequest" ], "namespace": null, - "subtype": "mediaretry", + "subtype": null, "target": null, "attrs": [ { "name": "id", - "kind": "string", - "required": true - }, - { - "name": "class", - "kind": "const", - "value": "notification", - "required": true - }, - { - "name": "type", - "kind": "const", - "value": "mediaretry", + "kind": "generated_id", "required": true }, { "name": "to", - "kind": "dynamic", + "kind": "user_jid", "required": true - }, + } + ], + "children": [ { - "name": "participant", - "kind": "dynamic", - "required": true + "tag": "waiting_room_toggle", + "attrs": [ + { + "name": "enabled", + "kind": "string", + "required": true + }, + { + "name": "media", + "kind": "string", + "required": true + } + ], + "children": [], + "repeats": false } ], - "children": [], "response": null }, { - "stanzaType": "ack", + "stanzaType": "call", "direction": "outgoing", - "moduleName": "WAWebHandleMessageRetryRequest", + "moduleName": "WAWebVoipSendSignalingXmpp", "exportedFunction": null, "allExports": [ - "handleMessageRetryRequest" + "sendWAWebVoipSignalingXmpp" ], "namespace": null, - "subtype": "retry", + "subtype": null, "target": null, "attrs": [ - { - "name": "id", - "kind": "string", - "required": true - }, { "name": "to", - "kind": "user_jid", + "kind": "dynamic", "required": true }, { - "name": "participant", - "kind": "optional", - "required": false - }, - { - "name": "class", - "kind": "const", - "value": "receipt", + "name": "id", + "kind": "dynamic", "required": true - }, + } + ], + "children": [ { - "name": "type", - "kind": "const", - "value": "retry", - "required": true + "tag": "enc", + "attrs": [ + { + "name": "v", + "kind": "string", + "required": true + }, + { + "name": "type", + "kind": "string", + "required": true + }, + { + "name": "count", + "kind": "integer", + "required": true + } + ], + "children": [], + "repeats": false } ], - "children": [], "response": null }, { - "stanzaType": "ack", + "stanzaType": "chatstate", "direction": "outgoing", - "moduleName": "WAWebHandleMexNotification", + "moduleName": "WASmaxOutChatstateClientNotificationRequest", "exportedFunction": null, "allExports": [ - "name", - "operationName", - "toString", - "handleMexNotification", - "MissingMEXNotificationHandler" + "makeClientNotificationRequest" ], "namespace": null, - "subtype": "mex", + "subtype": null, "target": null, "attrs": [ - { - "name": "id", - "kind": "string", - "required": true - }, { "name": "to", - "kind": "dynamic", - "required": true - }, - { - "name": "class", - "kind": "const", - "value": "notification", - "required": true - }, - { - "name": "type", - "kind": "const", - "value": "mex", + "kind": "user_jid", "required": true } ], @@ -2533,147 +5575,99 @@ "response": null }, { - "stanzaType": "ack", + "stanzaType": "chatstate", "direction": "outgoing", - "moduleName": "WAWebHandleMsgSendAck", + "moduleName": "WASmaxOutChatstateComposingMixin", "exportedFunction": null, "allExports": [ - "sendAck", - "sendNack" + "mergeComposingMixin" ], "namespace": null, "subtype": null, "target": null, - "attrs": [ - { - "name": "id", - "kind": "string", - "required": true - }, - { - "name": "class", - "kind": "string", - "required": true - }, - { - "name": "to", - "kind": "optional", - "required": false - }, - { - "name": "participant", - "kind": "optional", - "required": false - }, + "attrs": [], + "children": [ { - "name": "type", - "kind": "optional", - "required": false + "tag": "composing", + "attrs": [ + { + "name": "media", + "kind": "optional", + "required": false + } + ], + "children": [], + "repeats": false } ], - "children": [], - "response": null + "response": null, + "fragment": true }, { - "stanzaType": "ack", + "stanzaType": "chatstate", "direction": "outgoing", - "moduleName": "WAWebHandleMsgSendAck", + "moduleName": "WASmaxOutChatstatePausedMixin", "exportedFunction": null, "allExports": [ - "sendAck", - "sendNack" + "mergePausedMixin" ], "namespace": null, - "subtype": null, - "target": null, - "attrs": [ - { - "name": "id", - "kind": "string", - "required": true - }, - { - "name": "class", - "kind": "string", - "required": true - }, - { - "name": "to", - "kind": "optional", - "required": false - }, - { - "name": "participant", - "kind": "optional", - "required": false - }, - { - "name": "type", - "kind": "optional", - "required": false - }, + "subtype": null, + "target": null, + "attrs": [], + "children": [ { - "name": "error", - "kind": "integer", - "required": true + "tag": "paused", + "attrs": [], + "children": [], + "repeats": false } ], - "children": [], - "response": null + "response": null, + "fragment": true }, { - "stanzaType": "ack", + "stanzaType": "presence", "direction": "outgoing", - "moduleName": "WAWebHandlePreKeyLow", + "moduleName": "WASmaxOutPresenceAvailabilityRequest", "exportedFunction": null, "allExports": [ - "default" + "makeAvailabilityRequest" ], "namespace": null, "subtype": null, "target": null, "attrs": [ { - "name": "to", - "kind": "dynamic", - "required": true - }, - { - "name": "id", - "kind": "string", - "required": true + "name": "type", + "kind": "optional", + "required": false }, { - "name": "class", - "kind": "const", - "value": "notification", - "required": true + "name": "name", + "kind": "optional", + "required": false } ], "children": [], "response": null }, { - "stanzaType": "ack", + "stanzaType": "presence", "direction": "outgoing", - "moduleName": "WAWebHandlePrivacyTokensNotification", + "moduleName": "WASmaxOutPresenceSubscribeRequest", "exportedFunction": null, "allExports": [ - "default" + "makeSubscribeRequest" ], "namespace": null, - "subtype": "privacy_token", + "subtype": "subscribe", "target": null, "attrs": [ { - "name": "id", - "kind": "string", - "required": true - }, - { - "name": "class", + "name": "type", "kind": "const", - "value": "notification", + "value": "subscribe", "required": true }, { @@ -2682,217 +5676,151 @@ "required": true }, { - "name": "type", - "kind": "const", - "value": "privacy_token", - "required": true + "name": "name", + "kind": "optional", + "required": false + }, + { + "name": "context", + "kind": "optional", + "required": false } ], "children": [], "response": null }, { - "stanzaType": "ack", + "stanzaType": "status", "direction": "outgoing", - "moduleName": "WAWebHandleProfilePicNotification", + "moduleName": "WASmaxOutSpamReportableNewsletterStatusMixin", "exportedFunction": null, "allExports": [ - "handleProfilePicNotificationJob" + "mergeReportableNewsletterStatusMixin" ], "namespace": null, - "subtype": "picture", + "subtype": null, "target": null, "attrs": [ { - "name": "id", - "kind": "string", - "required": true - }, - { - "name": "to", - "kind": "user_jid", - "required": true - }, - { - "name": "class", - "kind": "const", - "value": "notification", + "name": "server_id", + "kind": "integer", "required": true }, { - "name": "type", - "kind": "const", - "value": "picture", + "name": "t", + "kind": "integer", "required": true } ], "children": [], - "response": null + "response": null, + "fragment": true }, { - "stanzaType": "ack", + "stanzaType": "status", "direction": "outgoing", - "moduleName": "WAWebHandlePsa", + "moduleName": "WASmaxOutSpamStatusContentTypeMediaMixin", "exportedFunction": null, "allExports": [ - "default" + "mergeStatusContentTypeMediaMixin" ], "namespace": null, - "subtype": "psa", + "subtype": "media", "target": null, "attrs": [ - { - "name": "id", - "kind": "string", - "required": true - }, - { - "name": "participant", - "kind": "user_jid", - "required": true - }, - { - "name": "class", - "kind": "const", - "value": "notification", - "required": true - }, { "name": "type", "kind": "const", - "value": "psa", - "required": true - }, - { - "name": "to", - "kind": "user_jid", + "value": "media", "required": true } ], "children": [], - "response": null + "response": null, + "fragment": true }, { - "stanzaType": "ack", + "stanzaType": "status", "direction": "outgoing", - "moduleName": "WAWebHandleServerNotification", + "moduleName": "WASmaxOutSpamStatusContentTypeTextMixin", "exportedFunction": null, "allExports": [ - "handleServerNotification" + "mergeStatusContentTypeTextMixin" ], "namespace": null, - "subtype": "server", + "subtype": "text", "target": null, "attrs": [ - { - "name": "id", - "kind": "string", - "required": true - }, - { - "name": "class", - "kind": "const", - "value": "notification", - "required": true - }, { "name": "type", "kind": "const", - "value": "server", - "required": true - }, - { - "name": "to", - "kind": "dynamic", + "value": "text", "required": true } ], "children": [], - "response": null + "response": null, + "fragment": true }, { - "stanzaType": "ack", + "stanzaType": "status", "direction": "outgoing", - "moduleName": "WAWebHandleServerSyncNotification", + "moduleName": "WASmaxOutSpamStatusNewsletterMediaMixin", "exportedFunction": null, "allExports": [ - "handleServerSyncNotification" + "mergeStatusNewsletterMediaMixin" ], "namespace": null, - "subtype": "server_sync", + "subtype": null, "target": null, - "attrs": [ - { - "name": "id", - "kind": "string", - "required": true - }, - { - "name": "class", - "kind": "const", - "value": "notification", - "required": true - }, - { - "name": "type", - "kind": "const", - "value": "server_sync", - "required": true - }, + "attrs": [], + "children": [ { - "name": "to", - "kind": "dynamic", - "required": true + "tag": "plaintext", + "attrs": [ + { + "name": "mediatype", + "kind": "string", + "required": true + } + ], + "children": [], + "repeats": false } ], - "children": [], - "response": null + "response": null, + "fragment": true }, { - "stanzaType": "ack", + "stanzaType": "status", "direction": "outgoing", - "moduleName": "WAWebHandleVoipCall", + "moduleName": "WASmaxOutSpamStatusNewsletterTextMixin", "exportedFunction": null, "allExports": [ - "canUseVoipStackForCallMessage", - "handleCall" + "mergeStatusNewsletterTextMixin" ], "namespace": null, "subtype": null, "target": null, - "attrs": [ - { - "name": "to", - "kind": "user_jid", - "required": true - }, - { - "name": "id", - "kind": "string", - "required": true - }, - { - "name": "class", - "kind": "const", - "value": "call", - "required": true - }, + "attrs": [], + "children": [ { - "name": "type", - "kind": "dynamic", - "required": true + "tag": "plaintext", + "attrs": [], + "children": [], + "repeats": false } ], - "children": [], - "response": null + "response": null, + "fragment": true }, { - "stanzaType": "ack", + "stanzaType": "status", "direction": "outgoing", - "moduleName": "WAWebHandleVoipCallReceipt", + "moduleName": "WASmaxOutStatusPublishPostNewsletterStatusClientAndServerIDMixin", "exportedFunction": null, "allExports": [ - "handleCallReceipt" + "mergePostNewsletterStatusClientAndServerIDMixin" ], "namespace": null, "subtype": null, @@ -2904,91 +5832,49 @@ "required": true }, { - "name": "to", - "kind": "user_jid", - "required": true - }, - { - "name": "class", - "kind": "const", - "value": "receipt", - "required": true - }, - { - "name": "type", - "kind": "dynamic", + "name": "server_id", + "kind": "integer", "required": true } ], "children": [], - "response": null + "response": null, + "fragment": true }, { - "stanzaType": "ack", + "stanzaType": "status", "direction": "outgoing", - "moduleName": "WAWebHandleVoipOfferNotice", + "moduleName": "WASmaxOutStatusPublishPostNewsletterStatusClientIDMixin", "exportedFunction": null, "allExports": [ - "default" + "mergePostNewsletterStatusClientIDMixin" ], "namespace": null, "subtype": null, "target": null, - "attrs": [ - { - "name": "to", - "kind": "user_jid", - "required": true - }, - { - "name": "id", - "kind": "string", - "required": true - }, - { - "name": "class", - "kind": "const", - "value": "call", - "required": true - }, + "attrs": [ { - "name": "type", + "name": "id", "kind": "string", "required": true } ], "children": [], - "response": null + "response": null, + "fragment": true }, { - "stanzaType": "ack", + "stanzaType": "status", "direction": "outgoing", - "moduleName": "WAWebHandleWaChat", + "moduleName": "WASmaxOutStatusPublishPostNewsletterStatusRequest", "exportedFunction": null, "allExports": [ - "default" + "makePostNewsletterStatusRequest" ], "namespace": null, - "subtype": "psa", + "subtype": null, "target": null, "attrs": [ - { - "name": "id", - "kind": "string", - "required": true - }, - { - "name": "class", - "kind": "const", - "value": "notification", - "required": true - }, - { - "name": "type", - "kind": "const", - "value": "psa", - "required": true - }, { "name": "to", "kind": "user_jid", @@ -2999,168 +5885,86 @@ "response": null }, { - "stanzaType": "ack", + "stanzaType": "status", "direction": "outgoing", - "moduleName": "WAWebOfflineResumePreAckHandler", + "moduleName": "WASmaxOutStatusPublishStatusAdminRevokeMixin", "exportedFunction": null, "allExports": [ - "parseAndSerializeOfflinePreAck", - "sendOfflinePreAck" + "mergeStatusAdminRevokeMixin" ], "namespace": null, "subtype": null, "target": null, "attrs": [ { - "name": "id", - "kind": "string", - "required": true - }, - { - "name": "class", - "kind": "string", - "required": true - }, - { - "name": "to", - "kind": "dynamic", - "required": true - }, - { - "name": "type", - "kind": "dynamic", + "name": "edit", + "kind": "const", + "value": "8", "required": true - }, - { - "name": "participant", - "kind": "optional", - "required": false - }, - { - "name": "error", - "kind": "optional", - "required": false } ], "children": [], - "response": null + "response": null, + "fragment": true }, { - "stanzaType": "ack", + "stanzaType": "status", "direction": "outgoing", - "moduleName": "WAWebPaymentNotificationHandler", + "moduleName": "WASmaxOutStatusPublishStatusContentTypeMediaMixin", "exportedFunction": null, "allExports": [ - "handlePaymentNotification", - "processOrphanPaymentNotifications", - "processAllOrphanPaymentNotifications", - "getMessageFromCollection", - "getMessageFromDb" + "mergeStatusContentTypeMediaMixin" ], "namespace": null, - "subtype": "pay", + "subtype": "media", "target": null, "attrs": [ - { - "name": "class", - "kind": "const", - "value": "notification", - "required": true - }, { "name": "type", "kind": "const", - "value": "pay", - "required": true - }, - { - "name": "id", - "kind": "string", - "required": true - }, - { - "name": "to", - "kind": "dynamic", + "value": "media", "required": true } ], "children": [], - "response": null + "response": null, + "fragment": true }, { - "stanzaType": "ack", + "stanzaType": "status", "direction": "outgoing", - "moduleName": "WAWebReceiptAck", + "moduleName": "WASmaxOutStatusPublishStatusContentTypeReactionMixin", "exportedFunction": null, "allExports": [ - "buildReceiptAck" + "mergeStatusContentTypeReactionMixin" ], "namespace": null, - "subtype": null, + "subtype": "reaction", "target": null, "attrs": [ - { - "name": "to", - "kind": "user_jid", - "required": true - }, - { - "name": "id", - "kind": "string", - "required": true - }, - { - "name": "class", - "kind": "const", - "value": "receipt", - "required": true - }, { "name": "type", - "kind": "dynamic", + "kind": "const", + "value": "reaction", "required": true - }, - { - "name": "participant", - "kind": "optional", - "required": false } ], "children": [], - "response": null + "response": null, + "fragment": true }, { - "stanzaType": "ack", + "stanzaType": "status", "direction": "outgoing", - "moduleName": "WAWebSendReceiptJobCommon", + "moduleName": "WASmaxOutStatusPublishStatusContentTypeTextMixin", "exportedFunction": null, "allExports": [ - "RECEIPT_TYPE", - "ReceiptModeBitPosition", - "genReceiptMetaModeNode", - "sendBotInvokeResponseAcks", - "sendAggregateReceipts" + "mergeStatusContentTypeTextMixin" ], "namespace": null, "subtype": "text", "target": null, "attrs": [ - { - "name": "id", - "kind": "string", - "required": true - }, - { - "name": "to", - "kind": "user_jid", - "required": true - }, - { - "name": "class", - "kind": "const", - "value": "message", - "required": true - }, { "name": "type", "kind": "const", @@ -3169,81 +5973,69 @@ } ], "children": [], - "response": null + "response": null, + "fragment": true }, { - "stanzaType": "ack", + "stanzaType": "status", "direction": "outgoing", - "moduleName": "WAWebSendReceiptJobCommon", + "moduleName": "WASmaxOutStatusPublishStatusNewsletterInteractionTypeQuestionMixin", "exportedFunction": null, "allExports": [ - "RECEIPT_TYPE", - "ReceiptModeBitPosition", - "genReceiptMetaModeNode", - "sendBotInvokeResponseAcks", - "sendAggregateReceipts" + "mergeStatusNewsletterInteractionTypeQuestionMixin" ], "namespace": null, - "subtype": "text", + "subtype": null, "target": null, - "attrs": [ - { - "name": "id", - "kind": "string", - "required": true - }, - { - "name": "to", - "kind": "user_jid", - "required": true - }, - { - "name": "recipient", - "kind": "optional", - "required": false - }, - { - "name": "participant", - "kind": "optional", - "required": false - }, - { - "name": "class", - "kind": "const", - "value": "message", - "required": true - }, + "attrs": [], + "children": [ { - "name": "type", - "kind": "const", - "value": "text", - "required": true + "tag": "meta", + "attrs": [ + { + "name": "interaction_type", + "kind": "const", + "value": "question", + "required": true + } + ], + "children": [], + "repeats": false } ], + "response": null, + "fragment": true + }, + { + "stanzaType": "status", + "direction": "outgoing", + "moduleName": "WASmaxOutStatusPublishStatusNewsletterInteractionTypeQuestionReshareMixin", + "exportedFunction": null, + "allExports": [ + "mergeStatusNewsletterInteractionTypeQuestionReshareMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [], "children": [ { - "tag": "ack", + "tag": "meta", "attrs": [ { - "name": "id", - "kind": "string", - "required": true - }, - { - "name": "to", - "kind": "user_jid", + "name": "interaction_type", + "kind": "const", + "value": "question_reshare", "required": true }, { - "name": "class", - "kind": "const", - "value": "message", + "name": "parent_server_id", + "kind": "integer", "required": true }, { - "name": "type", - "kind": "const", - "value": "text", + "name": "response_server_id", + "kind": "string", "required": true } ], @@ -3251,154 +6043,142 @@ "repeats": false } ], - "response": null + "response": null, + "fragment": true }, { - "stanzaType": "call", + "stanzaType": "status", "direction": "outgoing", - "moduleName": "WASmaxOutVoipLinkCreateRequest", + "moduleName": "WASmaxOutStatusPublishStatusNewsletterInteractionTypeQuestionResponseMixin", "exportedFunction": null, "allExports": [ - "makeLinkCreateRequestLinkCreateEvent", - "makeLinkCreateRequest" + "mergeStatusNewsletterInteractionTypeQuestionResponseMixin" ], "namespace": null, "subtype": null, "target": null, - "attrs": [ - { - "name": "id", - "kind": "generated_id", - "required": true - }, - { - "name": "to", - "kind": "user_jid", - "required": true - } - ], + "attrs": [], "children": [ { - "tag": "link_create", + "tag": "meta", "attrs": [ { - "name": "media", - "kind": "optional", - "required": false - }, - { - "name": "link_creator_username", - "kind": "optional", - "required": false + "name": "interaction_type", + "kind": "const", + "value": "question_response", + "required": true }, { - "name": "waiting_room_enabled", + "name": "response_server_id", "kind": "optional", "required": false } ], - "children": [ - { - "tag": "event", - "attrs": [ - { - "name": "start_time", - "kind": "integer", - "required": true - } - ], - "children": [], - "repeats": false - } - ], + "children": [], "repeats": false } ], - "response": null + "response": null, + "fragment": true }, { - "stanzaType": "call", + "stanzaType": "status", "direction": "outgoing", - "moduleName": "WASmaxOutVoipLinkQueryRequest", + "moduleName": "WASmaxOutStatusPublishStatusNewsletterMediaMixin", "exportedFunction": null, "allExports": [ - "makeLinkQueryRequest" + "mergeStatusNewsletterMediaMixin" ], "namespace": null, "subtype": null, "target": null, - "attrs": [ - { - "name": "id", - "kind": "generated_id", - "required": true - }, - { - "name": "to", - "kind": "user_jid", - "required": true - } - ], + "attrs": [], "children": [ { - "tag": "link_query", + "tag": "plaintext", "attrs": [ { - "name": "token", - "kind": "string", - "required": true - }, - { - "name": "media", + "name": "mediatype", "kind": "string", "required": true - }, - { - "name": "action", - "kind": "optional", - "required": false } ], "children": [], "repeats": false } ], - "response": null + "response": null, + "fragment": true }, { - "stanzaType": "call", + "stanzaType": "status", "direction": "outgoing", - "moduleName": "WASmaxOutVoipWaitingRoomToggleCallLinkRequest", + "moduleName": "WASmaxOutStatusPublishStatusNewsletterMediaPublishMixin", "exportedFunction": null, "allExports": [ - "makeWaitingRoomToggleCallLinkRequest" + "mergeStatusNewsletterMediaPublishMixin" ], "namespace": null, "subtype": null, "target": null, "attrs": [ { - "name": "id", - "kind": "generated_id", - "required": true - }, + "name": "media_id", + "kind": "optional", + "required": false + } + ], + "children": [], + "response": null, + "fragment": true + }, + { + "stanzaType": "status", + "direction": "outgoing", + "moduleName": "WASmaxOutStatusPublishStatusNewsletterQuestionResponseMixin", + "exportedFunction": null, + "allExports": [ + "mergeStatusNewsletterQuestionResponseMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [ { - "name": "to", - "kind": "user_jid", + "name": "server_id", + "kind": "integer", "required": true } ], "children": [ { - "tag": "waiting_room_toggle", + "tag": "plaintext", + "attrs": [], + "children": [], + "repeats": false + } + ], + "response": null, + "fragment": true + }, + { + "stanzaType": "status", + "direction": "outgoing", + "moduleName": "WASmaxOutStatusPublishStatusNewsletterReactionMixin", + "exportedFunction": null, + "allExports": [ + "mergeStatusNewsletterReactionMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [], + "children": [ + { + "tag": "reaction", "attrs": [ { - "name": "enabled", - "kind": "string", - "required": true - }, - { - "name": "media", + "name": "code", "kind": "string", "required": true } @@ -3407,161 +6187,190 @@ "repeats": false } ], - "response": null + "response": null, + "fragment": true }, { - "stanzaType": "call", + "stanzaType": "status", "direction": "outgoing", - "moduleName": "WAWebVoipSendSignalingXmpp", + "moduleName": "WASmaxOutStatusPublishStatusNewsletterReactionRevokeMixin", "exportedFunction": null, "allExports": [ - "sendWAWebVoipSignalingXmpp" + "mergeStatusNewsletterReactionRevokeMixin" ], "namespace": null, "subtype": null, "target": null, - "attrs": [ + "attrs": [], + "children": [ { - "name": "to", - "kind": "dynamic", - "required": true - }, + "tag": "reaction", + "attrs": [], + "children": [], + "repeats": false + } + ], + "response": null, + "fragment": true + }, + { + "stanzaType": "status", + "direction": "outgoing", + "moduleName": "WASmaxOutStatusPublishStatusNewsletterRevokeMixin", + "exportedFunction": null, + "allExports": [ + "mergeStatusNewsletterRevokeMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [], + "children": [ { - "name": "id", - "kind": "dynamic", - "required": true + "tag": "plaintext", + "attrs": [], + "children": [], + "repeats": false } ], + "response": null, + "fragment": true + }, + { + "stanzaType": "status", + "direction": "outgoing", + "moduleName": "WASmaxOutStatusPublishStatusNewsletterTextMixin", + "exportedFunction": null, + "allExports": [ + "mergeStatusNewsletterTextMixin" + ], + "namespace": null, + "subtype": null, + "target": null, + "attrs": [], "children": [ { - "tag": "enc", - "attrs": [ - { - "name": "v", - "kind": "string", - "required": true - }, - { - "name": "type", - "kind": "string", - "required": true - }, - { - "name": "count", - "kind": "integer", - "required": true - } - ], + "tag": "plaintext", + "attrs": [], "children": [], "repeats": false } ], - "response": null + "response": null, + "fragment": true }, { - "stanzaType": "chatstate", + "stanzaType": "status", "direction": "outgoing", - "moduleName": "WASmaxOutChatstateClientNotificationRequest", + "moduleName": "WASmaxOutStatusPublishStatusRevokeMixin", "exportedFunction": null, "allExports": [ - "makeClientNotificationRequest" + "mergeStatusRevokeMixin" ], "namespace": null, "subtype": null, "target": null, "attrs": [ { - "name": "to", - "kind": "user_jid", + "name": "edit", + "kind": "const", + "value": "7", "required": true } ], "children": [], - "response": null + "response": null, + "fragment": true }, { - "stanzaType": "presence", + "stanzaType": "privacy", "direction": "outgoing", - "moduleName": "WASmaxOutPresenceAvailabilityRequest", + "moduleName": "WASmaxOutBizSettingsSmbDataSharingSettingMixin", "exportedFunction": null, "allExports": [ - "makeAvailabilityRequest" + "mergeSmbDataSharingSettingMixin" ], "namespace": null, "subtype": null, "target": null, - "attrs": [ - { - "name": "type", - "kind": "optional", - "required": false - }, + "attrs": [], + "children": [ { - "name": "name", - "kind": "optional", - "required": false + "tag": "smb_data_sharing_with_meta_consent", + "attrs": [], + "children": [], + "repeats": false } ], - "children": [], - "response": null + "response": null, + "fragment": true }, { - "stanzaType": "presence", + "stanzaType": "privacy", "direction": "outgoing", - "moduleName": "WASmaxOutPresenceSubscribeRequest", + "moduleName": "WASmaxOutPrivacyGetContactBlacklistGetContactBlacklistLIDMixin", "exportedFunction": null, "allExports": [ - "makeSubscribeRequest" + "mergeGetContactBlacklistGetContactBlacklistLIDMixin" ], "namespace": null, - "subtype": "subscribe", + "subtype": null, "target": null, "attrs": [ { - "name": "type", + "name": "addressing_mode", "kind": "const", - "value": "subscribe", - "required": true - }, - { - "name": "to", - "kind": "user_jid", + "value": "lid", "required": true - }, - { - "name": "name", - "kind": "optional", - "required": false - }, + } + ], + "children": [ { - "name": "context", - "kind": "optional", - "required": false + "tag": "list", + "attrs": [ + { + "name": "value", + "kind": "const", + "value": "contact_blacklist", + "required": true + } + ], + "children": [], + "repeats": false } ], - "children": [], - "response": null + "response": null, + "fragment": true }, { - "stanzaType": "status", + "stanzaType": "privacy", "direction": "outgoing", - "moduleName": "WASmaxOutStatusPublishPostNewsletterStatusRequest", + "moduleName": "WASmaxOutPrivacyGetContactBlacklistGetContactBlacklistPNMixin", "exportedFunction": null, "allExports": [ - "makePostNewsletterStatusRequest" + "mergeGetContactBlacklistGetContactBlacklistPNMixin" ], "namespace": null, "subtype": null, "target": null, - "attrs": [ + "attrs": [], + "children": [ { - "name": "to", - "kind": "user_jid", - "required": true + "tag": "list", + "attrs": [ + { + "name": "value", + "kind": "const", + "value": "contact_blacklist", + "required": true + } + ], + "children": [], + "repeats": false } ], - "children": [], - "response": null + "response": null, + "fragment": true }, { "stanzaType": "privacy",