Compare commits

...
10 Commits
Author SHA1 Message Date
Alexandre Possebom e89b8b1d18 client: ack channel <status> stanzas to stop 50-minute stream recycling
Go / Build (latest) (push) Failing after 5m18s
Go / Build (old) (push) Failing after 6m45s
The server delivers channel status updates as <status> stanzas. Without a
registered node handler they were dropped unacked, so the server redelivered
them on every connect and closed the stream every 50 minutes with
<stream:error><ack class="status" .../></stream:error>.
2026-07-15 17:08:53 -03:00
Tulir Asokan c551a4055c proto: update to v1039406452 2026-05-13 17:03:10 +03:00
Tulir Asokan 9b5c655669 msgsecret: include params when failing to decrypt 2026-05-13 17:02:25 +03:00
Tulir Asokan eb05d94dea pair-code: fix platform ID type
Fixes #1140
2026-05-11 18:57:11 +03:00
Tulir Asokan 81f8702130 pair: add macOS pair client constant 2026-05-11 14:23:14 +03:00
Tulir Asokan 59cfb6cce1 pair: update PairClientType to a string 2026-05-11 14:08:38 +03:00
Tulir Asokan 876de1e965 pair: update QR code format
Closes #1110
2026-05-11 13:41:18 +03:00
Tulir Asokan 3b5b4fea22 notification: fix handling own device list changes 2026-05-11 13:17:13 +03:00
Tulir Asokan 6a7198d94d types/sticker: use pointer for sticker pack items 2026-05-06 15:21:47 +03:00
Tulir Asokan 8d5b5f49a8 store/clientpayload: remove redundant init function 2026-05-06 14:13:07 +03:00
11 changed files with 290 additions and 131 deletions

No files matched your search

+2
View File
@@ -171,6 +171,7 @@ type Client struct {
// GetClientPayload is called to get the client payload for connecting to the server.
// This should NOT be used for WhatsApp (to change the OS name, update fields in store.BaseClientPayload directly).
GetClientPayload func() *waWa6.ClientPayload
QRClientType PairClientType
// Should untrusted identity errors be handled automatically? If true, the stored identity and existing signal
// sessions will be removed on untrusted identity errors, and an events.IdentityChange will be dispatched.
@@ -289,6 +290,7 @@ func NewClient(deviceStore *store.Device, log waLog.Logger) *Client {
"chatstate": cli.handleChatState,
"presence": cli.handlePresence,
"notification": cli.handleNotification,
"status": cli.handleStatusUpdate,
"success": cli.handleConnectSuccess,
"failure": cli.handleConnectFailure,
"stream:error": cli.handleStreamError,
Generated
+8 -4
View File
@@ -431,8 +431,8 @@ func (int *DangerousInternalClient) HandleFBDeviceNotification(ctx context.Conte
int.c.handleFBDeviceNotification(ctx, node)
}
func (int *DangerousInternalClient) HandleOwnDevicesNotification(ctx context.Context, node *waBinary.Node) {
int.c.handleOwnDevicesNotification(ctx, node)
func (int *DangerousInternalClient) HandleOwnDevicesNotification(ctx context.Context, node *waBinary.Node, fromJID types.JID) {
int.c.handleOwnDevicesNotification(ctx, node, fromJID)
}
func (int *DangerousInternalClient) HandleBlocklist(ctx context.Context, node *waBinary.Node) {
@@ -483,8 +483,12 @@ func (int *DangerousInternalClient) HandlePairDevice(ctx context.Context, node *
int.c.handlePairDevice(ctx, node)
}
func (int *DangerousInternalClient) MakeQRData(ref string) string {
return int.c.makeQRData(ref)
func (int *DangerousInternalClient) GetQRClientType() PairClientType {
return int.c.getQRClientType()
}
func (int *DangerousInternalClient) MakeQRData(ref []byte, clientType PairClientType) string {
return int.c.makeQRData(ref, clientType)
}
func (int *DangerousInternalClient) HandlePairSuccess(ctx context.Context, node *waBinary.Node) {
+2 -2
View File
@@ -119,7 +119,7 @@ func (cli *Client) decryptMsgSecret(ctx context.Context, msg *events.Message, us
plaintext, err = gcmutil.Decrypt(secretKey, encrypted.GetEncIV(), encrypted.GetEncPayload(), additionalData)
}
if err != nil {
return nil, fmt.Errorf("failed to decrypt secret message: %w", err)
return nil, fmt.Errorf("failed to decrypt secret message: %w (sender: %s, orig sender: %s and %s)", err, msg.Info.Sender, origSender, storedOrigSender)
}
}
return plaintext, nil
@@ -263,7 +263,7 @@ func (cli *Client) DecryptSecretEncryptedMessage(ctx context.Context, evt *event
}
plaintext, err := cli.decryptMsgSecret(ctx, evt, secretType, encMessage, encMessage.GetTargetMessageKey())
if err != nil {
return nil, fmt.Errorf("failed to decrypt message: %w", err)
return nil, err
}
var msg waE2E.Message
err = proto.Unmarshal(plaintext, &msg)
+25 -10
View File
@@ -194,35 +194,50 @@ func (cli *Client) handleFBDeviceNotification(ctx context.Context, node *waBinar
cli.userDevicesCache[jid] = userDevices
}
func (cli *Client) handleOwnDevicesNotification(ctx context.Context, node *waBinary.Node) {
func (cli *Client) handleOwnDevicesNotification(ctx context.Context, node *waBinary.Node, fromJID types.JID) {
cli.userDevicesCacheLock.Lock()
defer cli.userDevicesCacheLock.Unlock()
ownLID := cli.getOwnLID().ToNonAD()
ownID := cli.getOwnID().ToNonAD()
if ownID.IsEmpty() {
cli.Log.Debugf("Ignoring own device change notification, session was deleted")
return
}
cached, ok := cli.userDevicesCache[ownID]
if !ok {
cli.Log.Debugf("Ignoring own device change notification, device list not cached")
fromJIDPlain := fromJID.ToNonAD()
var altJID types.JID
switch fromJIDPlain {
case ownID:
altJID = ownLID
case ownLID:
altJID = ownID
default:
cli.Log.Warnf("Unexpected own device notification sender %s", fromJID)
return
}
oldHash := participantListHashV2(cached.devices)
var oldHash string
if cached, ok := cli.userDevicesCache[fromJIDPlain]; ok {
oldHash = participantListHashV2(cached.devices)
}
expectedNewHash := node.AttrGetter().String("dhash")
var newDeviceList []types.JID
var newDeviceList, altDeviceList []types.JID
for _, child := range node.GetChildren() {
jid := child.AttrGetter().JID("jid")
if child.Tag == "device" && !jid.IsEmpty() {
newDeviceList = append(newDeviceList, jid)
altDeviceJID := altJID
altDeviceJID.Device = jid.Device
altDeviceList = append(altDeviceList, altDeviceJID)
}
}
newHash := participantListHashV2(newDeviceList)
if newHash != expectedNewHash {
cli.Log.Debugf("Received own device list change notification %s -> %s, but expected hash was %s", oldHash, newHash, expectedNewHash)
cli.Log.Debugf("Received own device list change notification %s -> %s from %s, but expected hash was %s", oldHash, newHash, fromJID, expectedNewHash)
delete(cli.userDevicesCache, ownID)
delete(cli.userDevicesCache, ownLID)
} else {
cli.Log.Debugf("Received own device list change notification %s -> %s", oldHash, newHash)
cli.userDevicesCache[ownID] = deviceCache{devices: newDeviceList, dhash: expectedNewHash}
cli.Log.Debugf("Received own device list change notification %s -> %s from %s", oldHash, newHash, fromJID)
cli.userDevicesCache[fromJIDPlain] = deviceCache{devices: newDeviceList, dhash: expectedNewHash}
cli.userDevicesCache[altJID] = deviceCache{devices: altDeviceList, dhash: participantListHashV2(altDeviceList)}
}
}
@@ -254,7 +269,7 @@ func (cli *Client) handleAccountSyncNotification(ctx context.Context, node *waBi
case "privacy":
cli.handlePrivacySettingsNotification(ctx, &child)
case "devices":
cli.handleOwnDevicesNotification(ctx, &child)
cli.handleOwnDevicesNotification(ctx, &child, node.AttrGetter().JID("from"))
case "picture":
cli.dispatchEvent(&events.Picture{
Timestamp: node.AttrGetter().UnixTime("t"),
+14 -12
View File
@@ -29,19 +29,21 @@ import (
// PairClientType is the type of client to use with PairCode.
// The type is automatically filled based on store.DeviceProps.PlatformType (which is what QR login uses).
type PairClientType int
type PairClientType string
const (
PairClientUnknown PairClientType = iota
PairClientChrome
PairClientEdge
PairClientFirefox
PairClientIE
PairClientOpera
PairClientSafari
PairClientElectron
PairClientUWP
PairClientOtherWebClient
PairClientUnknown PairClientType = "0"
PairClientChrome PairClientType = "1"
PairClientEdge PairClientType = "2"
PairClientFirefox PairClientType = "3"
PairClientIE PairClientType = "4"
PairClientOpera PairClientType = "5"
PairClientSafari PairClientType = "6"
PairClientElectron PairClientType = "7"
PairClientUWP PairClientType = "8"
PairClientOtherWebClient PairClientType = "9"
PairClientMacOS PairClientType = "c"
PairClientAndroid PairClientType = "e"
)
var notNumbers = regexp.MustCompile("[^0-9]")
@@ -114,7 +116,7 @@ func (cli *Client) PairPhone(ctx context.Context, phone string, showPushNotifica
Content: []waBinary.Node{
{Tag: "link_code_pairing_wrapped_companion_ephemeral_pub", Content: ephemeralKey},
{Tag: "companion_server_auth_key_pub", Content: cli.Store.NoiseKey.Pub[:]},
{Tag: "companion_platform_id", Content: strconv.Itoa(int(clientType))},
{Tag: "companion_platform_id", Content: string(clientType)},
{Tag: "companion_platform_display", Content: clientDisplayName},
{Tag: "link_code_pairing_nonce", Content: []byte{0}},
},
+38 -4
View File
@@ -12,7 +12,6 @@ import (
"crypto/sha256"
"encoding/base64"
"fmt"
"strings"
"time"
"go.mau.fi/libsignal/ecc"
@@ -20,6 +19,9 @@ import (
waBinary "go.mau.fi/whatsmeow/binary"
"go.mau.fi/whatsmeow/proto/waAdv"
"go.mau.fi/whatsmeow/proto/waCompanionReg"
"go.mau.fi/whatsmeow/proto/waWa6"
"go.mau.fi/whatsmeow/store"
"go.mau.fi/whatsmeow/types"
"go.mau.fi/whatsmeow/types/events"
"go.mau.fi/whatsmeow/util/keys"
@@ -71,17 +73,49 @@ func (cli *Client) handlePairDevice(ctx context.Context, node *waBinary.Node) {
cli.Log.Warnf("pair-device node contains unexpected child content type %T at index %d", child, i)
continue
}
evt.Codes = append(evt.Codes, cli.makeQRData(string(content)))
evt.Codes = append(evt.Codes, cli.makeQRData(content, cli.getQRClientType()))
}
cli.dispatchEvent(evt)
}
func (cli *Client) makeQRData(ref string) string {
func (cli *Client) getQRClientType() PairClientType {
if cli.QRClientType != "" {
return cli.QRClientType
}
switch store.DeviceProps.GetPlatformType() {
case waCompanionReg.DeviceProps_CHROME:
return PairClientChrome
case waCompanionReg.DeviceProps_FIREFOX:
return PairClientFirefox
case waCompanionReg.DeviceProps_EDGE:
return PairClientEdge
case waCompanionReg.DeviceProps_IE:
return PairClientIE
case waCompanionReg.DeviceProps_OPERA:
return PairClientOpera
case waCompanionReg.DeviceProps_SAFARI:
return PairClientSafari
case waCompanionReg.DeviceProps_UWP:
return PairClientUWP
case waCompanionReg.DeviceProps_ANDROID_PHONE:
return PairClientAndroid
}
switch store.BaseClientPayload.UserAgent.GetPlatform() {
case waWa6.ClientPayload_UserAgent_WEB:
return PairClientOtherWebClient
case waWa6.ClientPayload_UserAgent_MACOS:
return PairClientMacOS
default:
return PairClientUnknown
}
}
func (cli *Client) makeQRData(ref []byte, clientType PairClientType) string {
noise := base64.StdEncoding.EncodeToString(cli.Store.NoiseKey.Pub[:])
identity := base64.StdEncoding.EncodeToString(cli.Store.IdentityKey.Pub[:])
adv := base64.StdEncoding.EncodeToString(cli.Store.AdvSecretKey)
return strings.Join([]string{ref, noise, identity, adv}, ",")
return fmt.Sprintf("https://wa.me/settings/linked_devices#%s,%s,%s,%s,%s", ref, noise, identity, adv, clientType)
}
func (cli *Client) handlePairSuccess(ctx context.Context, node *waBinary.Node) {
+158 -81
View File
@@ -7105,16 +7105,77 @@ func (x *RecentEmojiWeightsAction) GetWeights() []*RecentEmojiWeight {
return nil
}
type ModelMetadata struct {
state protoimpl.MessageState `protogen:"open.v1"`
ModelName *string `protobuf:"bytes,1,opt,name=modelName" json:"modelName,omitempty"`
IsLatestModel *bool `protobuf:"varint,2,opt,name=isLatestModel" json:"isLatestModel,omitempty"`
IsDetected *bool `protobuf:"varint,3,opt,name=isDetected" json:"isDetected,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *ModelMetadata) Reset() {
*x = ModelMetadata{}
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[77]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
func (x *ModelMetadata) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ModelMetadata) ProtoMessage() {}
func (x *ModelMetadata) ProtoReflect() protoreflect.Message {
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[77]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ModelMetadata.ProtoReflect.Descriptor instead.
func (*ModelMetadata) Descriptor() ([]byte, []int) {
return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{77}
}
func (x *ModelMetadata) GetModelName() string {
if x != nil && x.ModelName != nil {
return *x.ModelName
}
return ""
}
func (x *ModelMetadata) GetIsLatestModel() bool {
if x != nil && x.IsLatestModel != nil {
return *x.IsLatestModel
}
return false
}
func (x *ModelMetadata) GetIsDetected() bool {
if x != nil && x.IsDetected != nil {
return *x.IsDetected
}
return false
}
type LabelAssociationAction struct {
state protoimpl.MessageState `protogen:"open.v1"`
Labeled *bool `protobuf:"varint,1,opt,name=labeled" json:"labeled,omitempty"`
ModelMetaData []*ModelMetadata `protobuf:"bytes,2,rep,name=modelMetaData" json:"modelMetaData,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
func (x *LabelAssociationAction) Reset() {
*x = LabelAssociationAction{}
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[77]
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[78]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -7126,7 +7187,7 @@ func (x *LabelAssociationAction) String() string {
func (*LabelAssociationAction) ProtoMessage() {}
func (x *LabelAssociationAction) ProtoReflect() protoreflect.Message {
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[77]
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[78]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -7139,7 +7200,7 @@ func (x *LabelAssociationAction) ProtoReflect() protoreflect.Message {
// Deprecated: Use LabelAssociationAction.ProtoReflect.Descriptor instead.
func (*LabelAssociationAction) Descriptor() ([]byte, []int) {
return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{77}
return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{78}
}
func (x *LabelAssociationAction) GetLabeled() bool {
@@ -7149,6 +7210,13 @@ func (x *LabelAssociationAction) GetLabeled() bool {
return false
}
func (x *LabelAssociationAction) GetModelMetaData() []*ModelMetadata {
if x != nil {
return x.ModelMetaData
}
return nil
}
type QuickReplyAction struct {
state protoimpl.MessageState `protogen:"open.v1"`
Shortcut *string `protobuf:"bytes,1,opt,name=shortcut" json:"shortcut,omitempty"`
@@ -7163,7 +7231,7 @@ type QuickReplyAction struct {
func (x *QuickReplyAction) Reset() {
*x = QuickReplyAction{}
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[78]
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[79]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -7175,7 +7243,7 @@ func (x *QuickReplyAction) String() string {
func (*QuickReplyAction) ProtoMessage() {}
func (x *QuickReplyAction) ProtoReflect() protoreflect.Message {
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[78]
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[79]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -7188,7 +7256,7 @@ func (x *QuickReplyAction) ProtoReflect() protoreflect.Message {
// Deprecated: Use QuickReplyAction.ProtoReflect.Descriptor instead.
func (*QuickReplyAction) Descriptor() ([]byte, []int) {
return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{78}
return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{79}
}
func (x *QuickReplyAction) GetShortcut() string {
@@ -7242,7 +7310,7 @@ type LocaleSetting struct {
func (x *LocaleSetting) Reset() {
*x = LocaleSetting{}
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[79]
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[80]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -7254,7 +7322,7 @@ func (x *LocaleSetting) String() string {
func (*LocaleSetting) ProtoMessage() {}
func (x *LocaleSetting) ProtoReflect() protoreflect.Message {
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[79]
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[80]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -7267,7 +7335,7 @@ func (x *LocaleSetting) ProtoReflect() protoreflect.Message {
// Deprecated: Use LocaleSetting.ProtoReflect.Descriptor instead.
func (*LocaleSetting) Descriptor() ([]byte, []int) {
return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{79}
return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{80}
}
func (x *LocaleSetting) GetLocale() string {
@@ -7286,7 +7354,7 @@ type PushNameSetting struct {
func (x *PushNameSetting) Reset() {
*x = PushNameSetting{}
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[80]
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[81]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -7298,7 +7366,7 @@ func (x *PushNameSetting) String() string {
func (*PushNameSetting) ProtoMessage() {}
func (x *PushNameSetting) ProtoReflect() protoreflect.Message {
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[80]
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[81]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -7311,7 +7379,7 @@ func (x *PushNameSetting) ProtoReflect() protoreflect.Message {
// Deprecated: Use PushNameSetting.ProtoReflect.Descriptor instead.
func (*PushNameSetting) Descriptor() ([]byte, []int) {
return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{80}
return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{81}
}
func (x *PushNameSetting) GetName() string {
@@ -7330,7 +7398,7 @@ type PinAction struct {
func (x *PinAction) Reset() {
*x = PinAction{}
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[81]
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[82]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -7342,7 +7410,7 @@ func (x *PinAction) String() string {
func (*PinAction) ProtoMessage() {}
func (x *PinAction) ProtoReflect() protoreflect.Message {
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[81]
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[82]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -7355,7 +7423,7 @@ func (x *PinAction) ProtoReflect() protoreflect.Message {
// Deprecated: Use PinAction.ProtoReflect.Descriptor instead.
func (*PinAction) Descriptor() ([]byte, []int) {
return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{81}
return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{82}
}
func (x *PinAction) GetPinned() bool {
@@ -7377,7 +7445,7 @@ type MuteAction struct {
func (x *MuteAction) Reset() {
*x = MuteAction{}
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[82]
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[83]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -7389,7 +7457,7 @@ func (x *MuteAction) String() string {
func (*MuteAction) ProtoMessage() {}
func (x *MuteAction) ProtoReflect() protoreflect.Message {
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[82]
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[83]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -7402,7 +7470,7 @@ func (x *MuteAction) ProtoReflect() protoreflect.Message {
// Deprecated: Use MuteAction.ProtoReflect.Descriptor instead.
func (*MuteAction) Descriptor() ([]byte, []int) {
return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{82}
return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{83}
}
func (x *MuteAction) GetMuted() bool {
@@ -7447,7 +7515,7 @@ type ContactAction struct {
func (x *ContactAction) Reset() {
*x = ContactAction{}
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[83]
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[84]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -7459,7 +7527,7 @@ func (x *ContactAction) String() string {
func (*ContactAction) ProtoMessage() {}
func (x *ContactAction) ProtoReflect() protoreflect.Message {
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[83]
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[84]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -7472,7 +7540,7 @@ func (x *ContactAction) ProtoReflect() protoreflect.Message {
// Deprecated: Use ContactAction.ProtoReflect.Descriptor instead.
func (*ContactAction) Descriptor() ([]byte, []int) {
return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{83}
return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{84}
}
func (x *ContactAction) GetFullName() string {
@@ -7526,7 +7594,7 @@ type StarAction struct {
func (x *StarAction) Reset() {
*x = StarAction{}
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[84]
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[85]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -7538,7 +7606,7 @@ func (x *StarAction) String() string {
func (*StarAction) ProtoMessage() {}
func (x *StarAction) ProtoReflect() protoreflect.Message {
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[84]
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[85]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -7551,7 +7619,7 @@ func (x *StarAction) ProtoReflect() protoreflect.Message {
// Deprecated: Use StarAction.ProtoReflect.Descriptor instead.
func (*StarAction) Descriptor() ([]byte, []int) {
return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{84}
return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{85}
}
func (x *StarAction) GetStarred() bool {
@@ -7573,7 +7641,7 @@ type SyncActionData struct {
func (x *SyncActionData) Reset() {
*x = SyncActionData{}
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[85]
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[86]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -7585,7 +7653,7 @@ func (x *SyncActionData) String() string {
func (*SyncActionData) ProtoMessage() {}
func (x *SyncActionData) ProtoReflect() protoreflect.Message {
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[85]
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[86]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -7598,7 +7666,7 @@ func (x *SyncActionData) ProtoReflect() protoreflect.Message {
// Deprecated: Use SyncActionData.ProtoReflect.Descriptor instead.
func (*SyncActionData) Descriptor() ([]byte, []int) {
return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{85}
return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{86}
}
func (x *SyncActionData) GetIndex() []byte {
@@ -7639,7 +7707,7 @@ type CallLogRecord_ParticipantInfo struct {
func (x *CallLogRecord_ParticipantInfo) Reset() {
*x = CallLogRecord_ParticipantInfo{}
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[86]
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[87]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -7651,7 +7719,7 @@ func (x *CallLogRecord_ParticipantInfo) String() string {
func (*CallLogRecord_ParticipantInfo) ProtoMessage() {}
func (x *CallLogRecord_ParticipantInfo) ProtoReflect() protoreflect.Message {
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[86]
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[87]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -7694,7 +7762,7 @@ type StatusPrivacyAction_CustomList struct {
func (x *StatusPrivacyAction_CustomList) Reset() {
*x = StatusPrivacyAction_CustomList{}
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[87]
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[88]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -7706,7 +7774,7 @@ func (x *StatusPrivacyAction_CustomList) String() string {
func (*StatusPrivacyAction_CustomList) ProtoMessage() {}
func (x *StatusPrivacyAction_CustomList) ProtoReflect() protoreflect.Message {
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[87]
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[88]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -7769,7 +7837,7 @@ type SubscriptionsSyncV2Action_PaidFeature struct {
func (x *SubscriptionsSyncV2Action_PaidFeature) Reset() {
*x = SubscriptionsSyncV2Action_PaidFeature{}
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[88]
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[89]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -7781,7 +7849,7 @@ func (x *SubscriptionsSyncV2Action_PaidFeature) String() string {
func (*SubscriptionsSyncV2Action_PaidFeature) ProtoMessage() {}
func (x *SubscriptionsSyncV2Action_PaidFeature) ProtoReflect() protoreflect.Message {
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[88]
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[89]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -7841,7 +7909,7 @@ type SubscriptionsSyncV2Action_SubscriptionInfo struct {
func (x *SubscriptionsSyncV2Action_SubscriptionInfo) Reset() {
*x = SubscriptionsSyncV2Action_SubscriptionInfo{}
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[89]
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[90]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -7853,7 +7921,7 @@ func (x *SubscriptionsSyncV2Action_SubscriptionInfo) String() string {
func (*SubscriptionsSyncV2Action_SubscriptionInfo) ProtoMessage() {}
func (x *SubscriptionsSyncV2Action_SubscriptionInfo) ProtoReflect() protoreflect.Message {
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[89]
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[90]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -7934,7 +8002,7 @@ type FavoritesAction_Favorite struct {
func (x *FavoritesAction_Favorite) Reset() {
*x = FavoritesAction_Favorite{}
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[90]
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[91]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
@@ -7946,7 +8014,7 @@ func (x *FavoritesAction_Favorite) String() string {
func (*FavoritesAction_Favorite) ProtoMessage() {}
func (x *FavoritesAction_Favorite) ProtoReflect() protoreflect.Message {
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[90]
mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[91]
if x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
@@ -8586,9 +8654,16 @@ const file_waSyncAction_WAWebProtobufSyncAction_proto_rawDesc = "" +
"\barchived\x18\x01 \x01(\bR\barchived\x12S\n" +
"\fmessageRange\x18\x02 \x01(\v2/.WAWebProtobufSyncAction.SyncActionMessageRangeR\fmessageRange\"`\n" +
"\x18RecentEmojiWeightsAction\x12D\n" +
"\aweights\x18\x01 \x03(\v2*.WAWebProtobufSyncAction.RecentEmojiWeightR\aweights\"2\n" +
"\aweights\x18\x01 \x03(\v2*.WAWebProtobufSyncAction.RecentEmojiWeightR\aweights\"s\n" +
"\rModelMetadata\x12\x1c\n" +
"\tmodelName\x18\x01 \x01(\tR\tmodelName\x12$\n" +
"\risLatestModel\x18\x02 \x01(\bR\risLatestModel\x12\x1e\n" +
"\n" +
"isDetected\x18\x03 \x01(\bR\n" +
"isDetected\"\x80\x01\n" +
"\x16LabelAssociationAction\x12\x18\n" +
"\alabeled\x18\x01 \x01(\bR\alabeled\"\xc4\x01\n" +
"\alabeled\x18\x01 \x01(\bR\alabeled\x12L\n" +
"\rmodelMetaData\x18\x02 \x03(\v2&.WAWebProtobufSyncAction.ModelMetadataR\rmodelMetaData\"\xc4\x01\n" +
"\x10QuickReplyAction\x12\x1a\n" +
"\bshortcut\x18\x01 \x01(\tR\bshortcut\x12\x18\n" +
"\amessage\x18\x02 \x01(\tR\amessage\x12\x1a\n" +
@@ -8739,7 +8814,7 @@ func file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP() []byte {
}
var file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes = make([]protoimpl.EnumInfo, 25)
var file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes = make([]protoimpl.MessageInfo, 91)
var file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes = make([]protoimpl.MessageInfo, 92)
var file_waSyncAction_WAWebProtobufSyncAction_proto_goTypes = []any{
(CollectionName)(0), // 0: WAWebProtobufSyncAction.CollectionName
(MutationProps)(0), // 1: WAWebProtobufSyncAction.MutationProps
@@ -8843,28 +8918,29 @@ var file_waSyncAction_WAWebProtobufSyncAction_proto_goTypes = []any{
(*DeleteMessageForMeAction)(nil), // 99: WAWebProtobufSyncAction.DeleteMessageForMeAction
(*ArchiveChatAction)(nil), // 100: WAWebProtobufSyncAction.ArchiveChatAction
(*RecentEmojiWeightsAction)(nil), // 101: WAWebProtobufSyncAction.RecentEmojiWeightsAction
(*LabelAssociationAction)(nil), // 102: WAWebProtobufSyncAction.LabelAssociationAction
(*QuickReplyAction)(nil), // 103: WAWebProtobufSyncAction.QuickReplyAction
(*LocaleSetting)(nil), // 104: WAWebProtobufSyncAction.LocaleSetting
(*PushNameSetting)(nil), // 105: WAWebProtobufSyncAction.PushNameSetting
(*PinAction)(nil), // 106: WAWebProtobufSyncAction.PinAction
(*MuteAction)(nil), // 107: WAWebProtobufSyncAction.MuteAction
(*ContactAction)(nil), // 108: WAWebProtobufSyncAction.ContactAction
(*StarAction)(nil), // 109: WAWebProtobufSyncAction.StarAction
(*SyncActionData)(nil), // 110: WAWebProtobufSyncAction.SyncActionData
(*CallLogRecord_ParticipantInfo)(nil), // 111: WAWebProtobufSyncAction.CallLogRecord.ParticipantInfo
(*StatusPrivacyAction_CustomList)(nil), // 112: WAWebProtobufSyncAction.StatusPrivacyAction.CustomList
(*SubscriptionsSyncV2Action_PaidFeature)(nil), // 113: WAWebProtobufSyncAction.SubscriptionsSyncV2Action.PaidFeature
(*SubscriptionsSyncV2Action_SubscriptionInfo)(nil), // 114: WAWebProtobufSyncAction.SubscriptionsSyncV2Action.SubscriptionInfo
(*FavoritesAction_Favorite)(nil), // 115: WAWebProtobufSyncAction.FavoritesAction.Favorite
(*waChatLockSettings.ChatLockSettings)(nil), // 116: WAWebProtobufsChatLockSettings.ChatLockSettings
(*waDeviceCapabilities.DeviceCapabilities)(nil), // 117: WAWebProtobufsDeviceCapabilities.DeviceCapabilities
(*waCommon.MessageKey)(nil), // 118: WACommon.MessageKey
(*ModelMetadata)(nil), // 102: WAWebProtobufSyncAction.ModelMetadata
(*LabelAssociationAction)(nil), // 103: WAWebProtobufSyncAction.LabelAssociationAction
(*QuickReplyAction)(nil), // 104: WAWebProtobufSyncAction.QuickReplyAction
(*LocaleSetting)(nil), // 105: WAWebProtobufSyncAction.LocaleSetting
(*PushNameSetting)(nil), // 106: WAWebProtobufSyncAction.PushNameSetting
(*PinAction)(nil), // 107: WAWebProtobufSyncAction.PinAction
(*MuteAction)(nil), // 108: WAWebProtobufSyncAction.MuteAction
(*ContactAction)(nil), // 109: WAWebProtobufSyncAction.ContactAction
(*StarAction)(nil), // 110: WAWebProtobufSyncAction.StarAction
(*SyncActionData)(nil), // 111: WAWebProtobufSyncAction.SyncActionData
(*CallLogRecord_ParticipantInfo)(nil), // 112: WAWebProtobufSyncAction.CallLogRecord.ParticipantInfo
(*StatusPrivacyAction_CustomList)(nil), // 113: WAWebProtobufSyncAction.StatusPrivacyAction.CustomList
(*SubscriptionsSyncV2Action_PaidFeature)(nil), // 114: WAWebProtobufSyncAction.SubscriptionsSyncV2Action.PaidFeature
(*SubscriptionsSyncV2Action_SubscriptionInfo)(nil), // 115: WAWebProtobufSyncAction.SubscriptionsSyncV2Action.SubscriptionInfo
(*FavoritesAction_Favorite)(nil), // 116: WAWebProtobufSyncAction.FavoritesAction.Favorite
(*waChatLockSettings.ChatLockSettings)(nil), // 117: WAWebProtobufsChatLockSettings.ChatLockSettings
(*waDeviceCapabilities.DeviceCapabilities)(nil), // 118: WAWebProtobufsDeviceCapabilities.DeviceCapabilities
(*waCommon.MessageKey)(nil), // 119: WACommon.MessageKey
}
var file_waSyncAction_WAWebProtobufSyncAction_proto_depIdxs = []int32{
5, // 0: WAWebProtobufSyncAction.CallLogRecord.callResult:type_name -> WAWebProtobufSyncAction.CallLogRecord.CallResult
4, // 1: WAWebProtobufSyncAction.CallLogRecord.silenceReason:type_name -> WAWebProtobufSyncAction.CallLogRecord.SilenceReason
111, // 2: WAWebProtobufSyncAction.CallLogRecord.participants:type_name -> WAWebProtobufSyncAction.CallLogRecord.ParticipantInfo
112, // 2: WAWebProtobufSyncAction.CallLogRecord.participants:type_name -> WAWebProtobufSyncAction.CallLogRecord.ParticipantInfo
3, // 3: WAWebProtobufSyncAction.CallLogRecord.callType:type_name -> WAWebProtobufSyncAction.CallLogRecord.CallType
7, // 4: WAWebProtobufSyncAction.SettingsSyncAction.bannerNotificationDisplayMode:type_name -> WAWebProtobufSyncAction.SettingsSyncAction.DisplayMode
7, // 5: WAWebProtobufSyncAction.SettingsSyncAction.unreadCounterBadgeDisplayMode:type_name -> WAWebProtobufSyncAction.SettingsSyncAction.DisplayMode
@@ -8881,22 +8957,22 @@ var file_waSyncAction_WAWebProtobufSyncAction_proto_depIdxs = []int32{
18, // 16: WAWebProtobufSyncAction.MerchantPaymentPartnerAction.status:type_name -> WAWebProtobufSyncAction.MerchantPaymentPartnerAction.Status
19, // 17: WAWebProtobufSyncAction.NoteEditAction.type:type_name -> WAWebProtobufSyncAction.NoteEditAction.NoteType
20, // 18: WAWebProtobufSyncAction.StatusPrivacyAction.mode:type_name -> WAWebProtobufSyncAction.StatusPrivacyAction.StatusDistributionMode
112, // 19: WAWebProtobufSyncAction.StatusPrivacyAction.customLists:type_name -> WAWebProtobufSyncAction.StatusPrivacyAction.CustomList
113, // 19: WAWebProtobufSyncAction.StatusPrivacyAction.customLists:type_name -> WAWebProtobufSyncAction.StatusPrivacyAction.CustomList
20, // 20: WAWebProtobufSyncAction.StatusPrivacyAction.modes:type_name -> WAWebProtobufSyncAction.StatusPrivacyAction.StatusDistributionMode
21, // 21: WAWebProtobufSyncAction.MarketingMessageAction.type:type_name -> WAWebProtobufSyncAction.MarketingMessageAction.MarketingMessagePrototypeType
22, // 22: WAWebProtobufSyncAction.UsernameChatStartModeAction.chatStartMode:type_name -> WAWebProtobufSyncAction.UsernameChatStartModeAction.ChatStartMode
23, // 23: WAWebProtobufSyncAction.LabelEditAction.type:type_name -> WAWebProtobufSyncAction.LabelEditAction.ListType
24, // 24: WAWebProtobufSyncAction.PatchDebugData.senderPlatform:type_name -> WAWebProtobufSyncAction.PatchDebugData.Platform
109, // 25: WAWebProtobufSyncAction.SyncActionValue.starAction:type_name -> WAWebProtobufSyncAction.StarAction
108, // 26: WAWebProtobufSyncAction.SyncActionValue.contactAction:type_name -> WAWebProtobufSyncAction.ContactAction
107, // 27: WAWebProtobufSyncAction.SyncActionValue.muteAction:type_name -> WAWebProtobufSyncAction.MuteAction
106, // 28: WAWebProtobufSyncAction.SyncActionValue.pinAction:type_name -> WAWebProtobufSyncAction.PinAction
105, // 29: WAWebProtobufSyncAction.SyncActionValue.pushNameSetting:type_name -> WAWebProtobufSyncAction.PushNameSetting
103, // 30: WAWebProtobufSyncAction.SyncActionValue.quickReplyAction:type_name -> WAWebProtobufSyncAction.QuickReplyAction
110, // 25: WAWebProtobufSyncAction.SyncActionValue.starAction:type_name -> WAWebProtobufSyncAction.StarAction
109, // 26: WAWebProtobufSyncAction.SyncActionValue.contactAction:type_name -> WAWebProtobufSyncAction.ContactAction
108, // 27: WAWebProtobufSyncAction.SyncActionValue.muteAction:type_name -> WAWebProtobufSyncAction.MuteAction
107, // 28: WAWebProtobufSyncAction.SyncActionValue.pinAction:type_name -> WAWebProtobufSyncAction.PinAction
106, // 29: WAWebProtobufSyncAction.SyncActionValue.pushNameSetting:type_name -> WAWebProtobufSyncAction.PushNameSetting
104, // 30: WAWebProtobufSyncAction.SyncActionValue.quickReplyAction:type_name -> WAWebProtobufSyncAction.QuickReplyAction
101, // 31: WAWebProtobufSyncAction.SyncActionValue.recentEmojiWeightsAction:type_name -> WAWebProtobufSyncAction.RecentEmojiWeightsAction
40, // 32: WAWebProtobufSyncAction.SyncActionValue.labelEditAction:type_name -> WAWebProtobufSyncAction.LabelEditAction
102, // 33: WAWebProtobufSyncAction.SyncActionValue.labelAssociationAction:type_name -> WAWebProtobufSyncAction.LabelAssociationAction
104, // 34: WAWebProtobufSyncAction.SyncActionValue.localeSetting:type_name -> WAWebProtobufSyncAction.LocaleSetting
103, // 33: WAWebProtobufSyncAction.SyncActionValue.labelAssociationAction:type_name -> WAWebProtobufSyncAction.LabelAssociationAction
105, // 34: WAWebProtobufSyncAction.SyncActionValue.localeSetting:type_name -> WAWebProtobufSyncAction.LocaleSetting
100, // 35: WAWebProtobufSyncAction.SyncActionValue.archiveChatAction:type_name -> WAWebProtobufSyncAction.ArchiveChatAction
99, // 36: WAWebProtobufSyncAction.SyncActionValue.deleteMessageForMeAction:type_name -> WAWebProtobufSyncAction.DeleteMessageForMeAction
92, // 37: WAWebProtobufSyncAction.SyncActionValue.keyExpiration:type_name -> WAWebProtobufSyncAction.KeyExpiration
@@ -8930,10 +9006,10 @@ var file_waSyncAction_WAWebProtobufSyncAction_proto_depIdxs = []int32{
67, // 65: WAWebProtobufSyncAction.SyncActionValue.paymentInfoAction:type_name -> WAWebProtobufSyncAction.PaymentInfoAction
64, // 66: WAWebProtobufSyncAction.SyncActionValue.customPaymentMethodsAction:type_name -> WAWebProtobufSyncAction.CustomPaymentMethodsAction
63, // 67: WAWebProtobufSyncAction.SyncActionValue.lockChatAction:type_name -> WAWebProtobufSyncAction.LockChatAction
116, // 68: WAWebProtobufSyncAction.SyncActionValue.chatLockSettings:type_name -> WAWebProtobufsChatLockSettings.ChatLockSettings
117, // 68: WAWebProtobufSyncAction.SyncActionValue.chatLockSettings:type_name -> WAWebProtobufsChatLockSettings.ChatLockSettings
62, // 69: WAWebProtobufSyncAction.SyncActionValue.wamoUserIdentifierAction:type_name -> WAWebProtobufSyncAction.WamoUserIdentifierAction
61, // 70: WAWebProtobufSyncAction.SyncActionValue.privacySettingDisableLinkPreviewsAction:type_name -> WAWebProtobufSyncAction.PrivacySettingDisableLinkPreviewsAction
117, // 71: WAWebProtobufSyncAction.SyncActionValue.deviceCapabilities:type_name -> WAWebProtobufsDeviceCapabilities.DeviceCapabilities
118, // 71: WAWebProtobufSyncAction.SyncActionValue.deviceCapabilities:type_name -> WAWebProtobufsDeviceCapabilities.DeviceCapabilities
36, // 72: WAWebProtobufSyncAction.SyncActionValue.noteEditAction:type_name -> WAWebProtobufSyncAction.NoteEditAction
59, // 73: WAWebProtobufSyncAction.SyncActionValue.favoritesAction:type_name -> WAWebProtobufSyncAction.FavoritesAction
35, // 74: WAWebProtobufSyncAction.SyncActionValue.merchantPaymentPartnerAction:type_name -> WAWebProtobufSyncAction.MerchantPaymentPartnerAction
@@ -8964,28 +9040,29 @@ var file_waSyncAction_WAWebProtobufSyncAction_proto_depIdxs = []int32{
49, // 99: WAWebProtobufSyncAction.SyncActionValue.threadPinAction:type_name -> WAWebProtobufSyncAction.ThreadPinAction
47, // 100: WAWebProtobufSyncAction.SyncActionValue.autoOrganizeBusinessChatSetting:type_name -> WAWebProtobufSyncAction.AutoOrganizeBusinessChatSetting
30, // 101: WAWebProtobufSyncAction.SyncActionValue.bizAiSettingsNudgeAction:type_name -> WAWebProtobufSyncAction.BizAISettingsNudgeAction
114, // 102: WAWebProtobufSyncAction.SubscriptionsSyncV2Action.subscriptions:type_name -> WAWebProtobufSyncAction.SubscriptionsSyncV2Action.SubscriptionInfo
113, // 103: WAWebProtobufSyncAction.SubscriptionsSyncV2Action.paidFeature:type_name -> WAWebProtobufSyncAction.SubscriptionsSyncV2Action.PaidFeature
115, // 102: WAWebProtobufSyncAction.SubscriptionsSyncV2Action.subscriptions:type_name -> WAWebProtobufSyncAction.SubscriptionsSyncV2Action.SubscriptionInfo
114, // 103: WAWebProtobufSyncAction.SubscriptionsSyncV2Action.paidFeature:type_name -> WAWebProtobufSyncAction.SubscriptionsSyncV2Action.PaidFeature
2, // 104: WAWebProtobufSyncAction.BusinessBroadcastCampaignAction.status:type_name -> WAWebProtobufSyncAction.BusinessBroadcastCampaignStatus
52, // 105: WAWebProtobufSyncAction.BusinessBroadcastListAction.participants:type_name -> WAWebProtobufSyncAction.BroadcastListParticipant
115, // 106: WAWebProtobufSyncAction.FavoritesAction.favorites:type_name -> WAWebProtobufSyncAction.FavoritesAction.Favorite
116, // 106: WAWebProtobufSyncAction.FavoritesAction.favorites:type_name -> WAWebProtobufSyncAction.FavoritesAction.Favorite
65, // 107: WAWebProtobufSyncAction.CustomPaymentMethodsAction.customPaymentMethods:type_name -> WAWebProtobufSyncAction.CustomPaymentMethod
66, // 108: WAWebProtobufSyncAction.CustomPaymentMethod.metadata:type_name -> WAWebProtobufSyncAction.CustomPaymentMethodMetadata
25, // 109: WAWebProtobufSyncAction.CallLogAction.callLogRecord:type_name -> WAWebProtobufSyncAction.CallLogRecord
118, // 110: WAWebProtobufSyncAction.SyncActionMessage.key:type_name -> WACommon.MessageKey
119, // 110: WAWebProtobufSyncAction.SyncActionMessage.key:type_name -> WACommon.MessageKey
93, // 111: WAWebProtobufSyncAction.SyncActionMessageRange.messages:type_name -> WAWebProtobufSyncAction.SyncActionMessage
94, // 112: WAWebProtobufSyncAction.DeleteChatAction.messageRange:type_name -> WAWebProtobufSyncAction.SyncActionMessageRange
94, // 113: WAWebProtobufSyncAction.ClearChatAction.messageRange:type_name -> WAWebProtobufSyncAction.SyncActionMessageRange
94, // 114: WAWebProtobufSyncAction.MarkChatAsReadAction.messageRange:type_name -> WAWebProtobufSyncAction.SyncActionMessageRange
94, // 115: WAWebProtobufSyncAction.ArchiveChatAction.messageRange:type_name -> WAWebProtobufSyncAction.SyncActionMessageRange
42, // 116: WAWebProtobufSyncAction.RecentEmojiWeightsAction.weights:type_name -> WAWebProtobufSyncAction.RecentEmojiWeight
43, // 117: WAWebProtobufSyncAction.SyncActionData.value:type_name -> WAWebProtobufSyncAction.SyncActionValue
5, // 118: WAWebProtobufSyncAction.CallLogRecord.ParticipantInfo.callResult:type_name -> WAWebProtobufSyncAction.CallLogRecord.CallResult
119, // [119:119] is the sub-list for method output_type
119, // [119:119] is the sub-list for method input_type
119, // [119:119] is the sub-list for extension type_name
119, // [119:119] is the sub-list for extension extendee
0, // [0:119] is the sub-list for field type_name
102, // 117: WAWebProtobufSyncAction.LabelAssociationAction.modelMetaData:type_name -> WAWebProtobufSyncAction.ModelMetadata
43, // 118: WAWebProtobufSyncAction.SyncActionData.value:type_name -> WAWebProtobufSyncAction.SyncActionValue
5, // 119: WAWebProtobufSyncAction.CallLogRecord.ParticipantInfo.callResult:type_name -> WAWebProtobufSyncAction.CallLogRecord.CallResult
120, // [120:120] is the sub-list for method output_type
120, // [120:120] is the sub-list for method input_type
120, // [120:120] is the sub-list for extension type_name
120, // [120:120] is the sub-list for extension extendee
0, // [0:120] is the sub-list for field type_name
}
func init() { file_waSyncAction_WAWebProtobufSyncAction_proto_init() }
@@ -8999,7 +9076,7 @@ func file_waSyncAction_WAWebProtobufSyncAction_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: unsafe.Slice(unsafe.StringData(file_waSyncAction_WAWebProtobufSyncAction_proto_rawDesc), len(file_waSyncAction_WAWebProtobufSyncAction_proto_rawDesc)),
NumEnums: 25,
NumMessages: 91,
NumMessages: 92,
NumExtensions: 0,
NumServices: 0,
},
@@ -972,8 +972,15 @@ message RecentEmojiWeightsAction {
repeated RecentEmojiWeight weights = 1;
}
message ModelMetadata {
optional string modelName = 1;
optional bool isLatestModel = 2;
optional bool isDetected = 3;
}
message LabelAssociationAction {
optional bool labeled = 1;
repeated ModelMetadata modelMetaData = 2;
}
message QuickReplyAction {
+22
View File
@@ -0,0 +1,22 @@
// Copyright (c) 2026 Tulir Asokan
//
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
package whatsmeow
import (
"context"
waBinary "go.mau.fi/whatsmeow/binary"
)
// handleStatusUpdate acknowledges <status> stanzas (channel status updates).
// The content isn't parsed into events yet, but the stanza must be acked:
// otherwise the server redelivers it on every connect and recycles the
// connection every 50 minutes with
// <stream:error><ack class="status" id="..." type="..."/></stream:error>.
func (cli *Client) handleStatusUpdate(ctx context.Context, node *waBinary.Node) {
defer cli.maybeDeferredAck(ctx, node)()
}
+2 -6
View File
@@ -76,14 +76,10 @@ func (vc WAVersionContainer) ProtoAppVersion() *waWa6.ClientPayload_UserAgent_Ap
}
// waVersion is the WhatsApp web client version
var waVersion = WAVersionContainer{2, 3000, 1038839325}
var waVersion = WAVersionContainer{2, 3000, 1039406452}
// waVersionHash is the md5 hash of a dot-separated waVersion
var waVersionHash [16]byte
func init() {
waVersionHash = waVersion.Hash()
}
var waVersionHash = waVersion.Hash()
// GetWAVersion gets the current WhatsApp web client version.
func GetWAVersion() WAVersionContainer {
+12 -12
View File
@@ -1,18 +1,18 @@
package types
type StickerPack struct {
StickerPackID string `json:"sticker-pack-id"`
Name string `json:"name"`
Publisher string `json:"publisher"`
Description string `json:"description"`
FileSize string `json:"file-size"`
ImageDataHash string `json:"image-data-hash"`
Stickers []StickerPackItem `json:"stickers"`
Animated int `json:"animated"`
Lottie int `json:"lottie"`
PreviewImageIDs []string `json:"preview-image-ids"`
TrayImageID string `json:"tray-image-id"`
TrayImagePreview string `json:"tray-image-preview"`
StickerPackID string `json:"sticker-pack-id"`
Name string `json:"name"`
Publisher string `json:"publisher"`
Description string `json:"description"`
FileSize string `json:"file-size"`
ImageDataHash string `json:"image-data-hash"`
Stickers []*StickerPackItem `json:"stickers"`
Animated int `json:"animated"`
Lottie int `json:"lottie"`
PreviewImageIDs []string `json:"preview-image-ids"`
TrayImageID string `json:"tray-image-id"`
TrayImagePreview string `json:"tray-image-preview"`
}
type StickerPackItem struct {