Compare commits

...

10 Commits

Author SHA1 Message Date
Renato Alcara c36c32c229 fix(chats): use abt xmlns and protocol 1 for fetchProps to avoid bad-request
Aligns with Baileys upstream PR #2473. Server rejects the previous
combination (xmlns=w, protocol=2, hash=''), returning bad-request and
dropping AB props on connect. Switches to xmlns=abt with protocol=1 and
omits the hash attr entirely when empty.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-25 11:02:03 -03:00
Renato Alcara 104d2c47f5 chore: update WhatsApp Web version to v2.3000.1038147544 (#380)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-25 06:17:10 -03:00
Renato Alcara 924c54f1f8 chore: update WhatsApp Web version to v2.3000.1038063777 (#378)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-24 06:31:31 -03:00
github-actions[bot] e34ef5479d chore: update proto/version to v2.3000.1038024963 (#377)
Co-authored-by: rsalcara <rsalcara@users.noreply.github.com>
2026-04-24 01:03:36 -03:00
Renato Alcara 5e8d30d709 chore: update WhatsApp Web version to v2.3000.1037968143 (#376)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-23 06:31:41 -03:00
github-actions[bot] ac93080595 chore: update proto/version to v2.3000.1037953056 (#375)
Co-authored-by: rsalcara <rsalcara@users.noreply.github.com>
2026-04-23 01:01:23 -03:00
Renato Alcara 37d1bdfb76 chore: update WhatsApp Web version to v2.3000.1037878879 (#374)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-22 06:29:59 -03:00
github-actions[bot] 76b2007f27 chore: update proto/version to v2.3000.1037847281 (#373)
Co-authored-by: rsalcara <rsalcara@users.noreply.github.com>
2026-04-22 01:00:13 -03:00
Renato Alcara 676912c295 Fix/remove vo raw debug logs (#372)
* chore: remove temporary [VO_RAW] debug logs from handleMessage

* chore: remove temporary VO_TRACE debug logger.info from handleMessage
2026-04-21 15:09:00 -03:00
Renato Alcara 06d9f35ca9 chore: remove temporary [VO_RAW] debug logs from handleMessage (#371)
chore: remove temporary [VO_RAW] debug logs from handleMessage (#371)
2026-04-21 15:00:00 -03:00
6 changed files with 471 additions and 24 deletions
+24 -1
View File
@@ -1,7 +1,7 @@
syntax = "proto3";
package proto;
/// WhatsApp Version: 2.3000.1037753511
/// WhatsApp Version: 2.3000.1038024963
message ADVDeviceIdentity {
optional uint32 rawId = 1;
@@ -4221,6 +4221,8 @@ enum MutationProps {
CUSTOMER_DATA_ACTION = 83;
SUBSCRIPTIONS_SYNC_V2_ACTION = 84;
THREAD_PIN_ACTION = 85;
AUTO_ORGANIZE_BUSINESS_CHAT_SETTING = 86;
BIZ_AI_SETTINGS_NUDGE_ACTION = 87;
SHARE_OWN_PN = 10001;
BUSINESS_BROADCAST_ACTION = 10002;
AI_THREAD_DELETE_ACTION = 10003;
@@ -4866,6 +4868,8 @@ message SyncActionValue {
optional CustomerDataAction customerDataAction = 83;
optional SubscriptionsSyncV2Action subscriptionsSyncV2Action = 84;
optional ThreadPinAction threadPinAction = 85;
optional AutoOrganizeBusinessChatSetting autoOrganizeBusinessChatSetting = 86;
optional BizAISettingsNudgeAction bizAiSettingsNudgeAction = 87;
message AgentAction {
optional string name = 1;
optional int32 deviceID = 2;
@@ -4885,6 +4889,10 @@ message SyncActionValue {
optional SyncActionValue.SyncActionMessageRange messageRange = 2;
}
message AutoOrganizeBusinessChatSetting {
optional bool autoOrganize = 1;
}
message AvatarUpdatedAction {
optional AvatarEventType eventType = 1;
repeated SyncActionValue.StickerAction recentAvatarStickers = 2;
@@ -4895,6 +4903,20 @@ message SyncActionValue {
}
}
message BizAISettingsNudgeAction {
optional BizAISettingsCategory category = 1;
optional int64 version = 2;
optional int64 updatedAtMs = 3;
enum BizAISettingsCategory {
UNKNOWN = 0;
INSTRUCTIONS = 1;
RESPONSE_SETTINGS = 2;
EXAMPLE_RESPONSES = 3;
KNOWLEDGE = 4;
LEAD_GEN = 5;
}
}
message BotWelcomeRequestAction {
optional bool isSent = 1;
}
@@ -5358,6 +5380,7 @@ message SyncActionValue {
optional bool shareToFB = 3;
optional bool shareToIG = 4;
repeated CustomList customLists = 5;
repeated StatusDistributionMode modes = 6;
message CustomList {
optional string listId = 1;
optional string name = 2;
+56
View File
@@ -10692,6 +10692,8 @@ export namespace proto {
CUSTOMER_DATA_ACTION = 83,
SUBSCRIPTIONS_SYNC_V2_ACTION = 84,
THREAD_PIN_ACTION = 85,
AUTO_ORGANIZE_BUSINESS_CHAT_SETTING = 86,
BIZ_AI_SETTINGS_NUDGE_ACTION = 87,
SHARE_OWN_PN = 10001,
BUSINESS_BROADCAST_ACTION = 10002,
AI_THREAD_DELETE_ACTION = 10003
@@ -12309,6 +12311,8 @@ export namespace proto {
customerDataAction?: (proto.SyncActionValue.ICustomerDataAction|null);
subscriptionsSyncV2Action?: (proto.SyncActionValue.ISubscriptionsSyncV2Action|null);
threadPinAction?: (proto.SyncActionValue.IThreadPinAction|null);
autoOrganizeBusinessChatSetting?: (proto.SyncActionValue.IAutoOrganizeBusinessChatSetting|null);
bizAiSettingsNudgeAction?: (proto.SyncActionValue.IBizAISettingsNudgeAction|null);
}
class SyncActionValue implements ISyncActionValue {
@@ -12389,6 +12393,8 @@ export namespace proto {
public customerDataAction?: (proto.SyncActionValue.ICustomerDataAction|null);
public subscriptionsSyncV2Action?: (proto.SyncActionValue.ISubscriptionsSyncV2Action|null);
public threadPinAction?: (proto.SyncActionValue.IThreadPinAction|null);
public autoOrganizeBusinessChatSetting?: (proto.SyncActionValue.IAutoOrganizeBusinessChatSetting|null);
public bizAiSettingsNudgeAction?: (proto.SyncActionValue.IBizAISettingsNudgeAction|null);
public static create(properties?: proto.ISyncActionValue): proto.SyncActionValue;
public static encode(m: proto.ISyncActionValue, w?: $protobuf.Writer): $protobuf.Writer;
public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue;
@@ -12470,6 +12476,22 @@ export namespace proto {
public static getTypeUrl(typeUrlPrefix?: string): string;
}
interface IAutoOrganizeBusinessChatSetting {
autoOrganize?: (boolean|null);
}
class AutoOrganizeBusinessChatSetting implements IAutoOrganizeBusinessChatSetting {
constructor(p?: proto.SyncActionValue.IAutoOrganizeBusinessChatSetting);
public autoOrganize?: (boolean|null);
public static create(properties?: proto.SyncActionValue.IAutoOrganizeBusinessChatSetting): proto.SyncActionValue.AutoOrganizeBusinessChatSetting;
public static encode(m: proto.SyncActionValue.IAutoOrganizeBusinessChatSetting, w?: $protobuf.Writer): $protobuf.Writer;
public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.AutoOrganizeBusinessChatSetting;
public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.AutoOrganizeBusinessChatSetting;
public static toObject(m: proto.SyncActionValue.AutoOrganizeBusinessChatSetting, o?: $protobuf.IConversionOptions): { [k: string]: any };
public toJSON(): { [k: string]: any };
public static getTypeUrl(typeUrlPrefix?: string): string;
}
interface IAvatarUpdatedAction {
eventType?: (proto.SyncActionValue.AvatarUpdatedAction.AvatarEventType|null);
recentAvatarStickers?: (proto.SyncActionValue.IStickerAction[]|null);
@@ -12497,6 +12519,38 @@ export namespace proto {
}
}
interface IBizAISettingsNudgeAction {
category?: (proto.SyncActionValue.BizAISettingsNudgeAction.BizAISettingsCategory|null);
version?: (number|Long|null);
updatedAtMs?: (number|Long|null);
}
class BizAISettingsNudgeAction implements IBizAISettingsNudgeAction {
constructor(p?: proto.SyncActionValue.IBizAISettingsNudgeAction);
public category?: (proto.SyncActionValue.BizAISettingsNudgeAction.BizAISettingsCategory|null);
public version?: (number|Long|null);
public updatedAtMs?: (number|Long|null);
public static create(properties?: proto.SyncActionValue.IBizAISettingsNudgeAction): proto.SyncActionValue.BizAISettingsNudgeAction;
public static encode(m: proto.SyncActionValue.IBizAISettingsNudgeAction, w?: $protobuf.Writer): $protobuf.Writer;
public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.BizAISettingsNudgeAction;
public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.BizAISettingsNudgeAction;
public static toObject(m: proto.SyncActionValue.BizAISettingsNudgeAction, o?: $protobuf.IConversionOptions): { [k: string]: any };
public toJSON(): { [k: string]: any };
public static getTypeUrl(typeUrlPrefix?: string): string;
}
namespace BizAISettingsNudgeAction {
enum BizAISettingsCategory {
UNKNOWN = 0,
INSTRUCTIONS = 1,
RESPONSE_SETTINGS = 2,
EXAMPLE_RESPONSES = 3,
KNOWLEDGE = 4,
LEAD_GEN = 5
}
}
interface IBotWelcomeRequestAction {
isSent?: (boolean|null);
}
@@ -13844,6 +13898,7 @@ export namespace proto {
shareToFB?: (boolean|null);
shareToIG?: (boolean|null);
customLists?: (proto.SyncActionValue.StatusPrivacyAction.ICustomList[]|null);
modes?: (proto.SyncActionValue.StatusPrivacyAction.StatusDistributionMode[]|null);
}
class StatusPrivacyAction implements IStatusPrivacyAction {
@@ -13853,6 +13908,7 @@ export namespace proto {
public shareToFB?: (boolean|null);
public shareToIG?: (boolean|null);
public customLists: proto.SyncActionValue.StatusPrivacyAction.ICustomList[];
public modes: proto.SyncActionValue.StatusPrivacyAction.StatusDistributionMode[];
public static create(properties?: proto.SyncActionValue.IStatusPrivacyAction): proto.SyncActionValue.StatusPrivacyAction;
public static encode(m: proto.SyncActionValue.IStatusPrivacyAction, w?: $protobuf.Writer): $protobuf.Writer;
public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.StatusPrivacyAction;
+386
View File
@@ -75158,6 +75158,8 @@ export const proto = $root.proto = (() => {
values[valuesById[83] = "CUSTOMER_DATA_ACTION"] = 83;
values[valuesById[84] = "SUBSCRIPTIONS_SYNC_V2_ACTION"] = 84;
values[valuesById[85] = "THREAD_PIN_ACTION"] = 85;
values[valuesById[86] = "AUTO_ORGANIZE_BUSINESS_CHAT_SETTING"] = 86;
values[valuesById[87] = "BIZ_AI_SETTINGS_NUDGE_ACTION"] = 87;
values[valuesById[10001] = "SHARE_OWN_PN"] = 10001;
values[valuesById[10002] = "BUSINESS_BROADCAST_ACTION"] = 10002;
values[valuesById[10003] = "AI_THREAD_DELETE_ACTION"] = 10003;
@@ -85556,6 +85558,8 @@ export const proto = $root.proto = (() => {
SyncActionValue.prototype.customerDataAction = null;
SyncActionValue.prototype.subscriptionsSyncV2Action = null;
SyncActionValue.prototype.threadPinAction = null;
SyncActionValue.prototype.autoOrganizeBusinessChatSetting = null;
SyncActionValue.prototype.bizAiSettingsNudgeAction = null;
let $oneOfFields;
@@ -86015,6 +86019,18 @@ export const proto = $root.proto = (() => {
set: $util.oneOfSetter($oneOfFields)
});
// Virtual OneOf for proto3 optional field
Object.defineProperty(SyncActionValue.prototype, "_autoOrganizeBusinessChatSetting", {
get: $util.oneOfGetter($oneOfFields = ["autoOrganizeBusinessChatSetting"]),
set: $util.oneOfSetter($oneOfFields)
});
// Virtual OneOf for proto3 optional field
Object.defineProperty(SyncActionValue.prototype, "_bizAiSettingsNudgeAction", {
get: $util.oneOfGetter($oneOfFields = ["bizAiSettingsNudgeAction"]),
set: $util.oneOfSetter($oneOfFields)
});
SyncActionValue.create = function create(properties) {
return new SyncActionValue(properties);
};
@@ -86174,6 +86190,10 @@ export const proto = $root.proto = (() => {
$root.proto.SyncActionValue.SubscriptionsSyncV2Action.encode(m.subscriptionsSyncV2Action, w.uint32(674).fork()).ldelim();
if (m.threadPinAction != null && Object.hasOwnProperty.call(m, "threadPinAction"))
$root.proto.SyncActionValue.ThreadPinAction.encode(m.threadPinAction, w.uint32(682).fork()).ldelim();
if (m.autoOrganizeBusinessChatSetting != null && Object.hasOwnProperty.call(m, "autoOrganizeBusinessChatSetting"))
$root.proto.SyncActionValue.AutoOrganizeBusinessChatSetting.encode(m.autoOrganizeBusinessChatSetting, w.uint32(690).fork()).ldelim();
if (m.bizAiSettingsNudgeAction != null && Object.hasOwnProperty.call(m, "bizAiSettingsNudgeAction"))
$root.proto.SyncActionValue.BizAISettingsNudgeAction.encode(m.bizAiSettingsNudgeAction, w.uint32(698).fork()).ldelim();
return w;
};
@@ -86490,6 +86510,14 @@ export const proto = $root.proto = (() => {
m.threadPinAction = $root.proto.SyncActionValue.ThreadPinAction.decode(r, r.uint32());
break;
}
case 86: {
m.autoOrganizeBusinessChatSetting = $root.proto.SyncActionValue.AutoOrganizeBusinessChatSetting.decode(r, r.uint32());
break;
}
case 87: {
m.bizAiSettingsNudgeAction = $root.proto.SyncActionValue.BizAISettingsNudgeAction.decode(r, r.uint32());
break;
}
default:
r.skipType(t & 7);
break;
@@ -86887,6 +86915,16 @@ export const proto = $root.proto = (() => {
throw TypeError(".proto.SyncActionValue.threadPinAction: object expected");
m.threadPinAction = $root.proto.SyncActionValue.ThreadPinAction.fromObject(d.threadPinAction);
}
if (d.autoOrganizeBusinessChatSetting != null) {
if (typeof d.autoOrganizeBusinessChatSetting !== "object")
throw TypeError(".proto.SyncActionValue.autoOrganizeBusinessChatSetting: object expected");
m.autoOrganizeBusinessChatSetting = $root.proto.SyncActionValue.AutoOrganizeBusinessChatSetting.fromObject(d.autoOrganizeBusinessChatSetting);
}
if (d.bizAiSettingsNudgeAction != null) {
if (typeof d.bizAiSettingsNudgeAction !== "object")
throw TypeError(".proto.SyncActionValue.bizAiSettingsNudgeAction: object expected");
m.bizAiSettingsNudgeAction = $root.proto.SyncActionValue.BizAISettingsNudgeAction.fromObject(d.bizAiSettingsNudgeAction);
}
return m;
};
@@ -87277,6 +87315,16 @@ export const proto = $root.proto = (() => {
if (o.oneofs)
d._threadPinAction = "threadPinAction";
}
if (m.autoOrganizeBusinessChatSetting != null && m.hasOwnProperty("autoOrganizeBusinessChatSetting")) {
d.autoOrganizeBusinessChatSetting = $root.proto.SyncActionValue.AutoOrganizeBusinessChatSetting.toObject(m.autoOrganizeBusinessChatSetting, o);
if (o.oneofs)
d._autoOrganizeBusinessChatSetting = "autoOrganizeBusinessChatSetting";
}
if (m.bizAiSettingsNudgeAction != null && m.hasOwnProperty("bizAiSettingsNudgeAction")) {
d.bizAiSettingsNudgeAction = $root.proto.SyncActionValue.BizAISettingsNudgeAction.toObject(m.bizAiSettingsNudgeAction, o);
if (o.oneofs)
d._bizAiSettingsNudgeAction = "bizAiSettingsNudgeAction";
}
return d;
};
@@ -87708,6 +87756,94 @@ export const proto = $root.proto = (() => {
return ArchiveChatAction;
})();
SyncActionValue.AutoOrganizeBusinessChatSetting = (function() {
function AutoOrganizeBusinessChatSetting(p) {
if (p)
for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)
if (p[ks[i]] != null)
this[ks[i]] = p[ks[i]];
}
AutoOrganizeBusinessChatSetting.prototype.autoOrganize = null;
let $oneOfFields;
// Virtual OneOf for proto3 optional field
Object.defineProperty(AutoOrganizeBusinessChatSetting.prototype, "_autoOrganize", {
get: $util.oneOfGetter($oneOfFields = ["autoOrganize"]),
set: $util.oneOfSetter($oneOfFields)
});
AutoOrganizeBusinessChatSetting.create = function create(properties) {
return new AutoOrganizeBusinessChatSetting(properties);
};
AutoOrganizeBusinessChatSetting.encode = function encode(m, w) {
if (!w)
w = $Writer.create();
if (m.autoOrganize != null && Object.hasOwnProperty.call(m, "autoOrganize"))
w.uint32(8).bool(m.autoOrganize);
return w;
};
AutoOrganizeBusinessChatSetting.decode = function decode(r, l, e) {
if (!(r instanceof $Reader))
r = $Reader.create(r);
var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.AutoOrganizeBusinessChatSetting();
while (r.pos < c) {
var t = r.uint32();
if (t === e)
break;
switch (t >>> 3) {
case 1: {
m.autoOrganize = r.bool();
break;
}
default:
r.skipType(t & 7);
break;
}
}
return m;
};
AutoOrganizeBusinessChatSetting.fromObject = function fromObject(d) {
if (d instanceof $root.proto.SyncActionValue.AutoOrganizeBusinessChatSetting)
return d;
var m = new $root.proto.SyncActionValue.AutoOrganizeBusinessChatSetting();
if (d.autoOrganize != null) {
m.autoOrganize = Boolean(d.autoOrganize);
}
return m;
};
AutoOrganizeBusinessChatSetting.toObject = function toObject(m, o) {
if (!o)
o = {};
var d = {};
if (m.autoOrganize != null && m.hasOwnProperty("autoOrganize")) {
d.autoOrganize = m.autoOrganize;
if (o.oneofs)
d._autoOrganize = "autoOrganize";
}
return d;
};
AutoOrganizeBusinessChatSetting.prototype.toJSON = function toJSON() {
return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
};
AutoOrganizeBusinessChatSetting.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
if (typeUrlPrefix === undefined) {
typeUrlPrefix = "type.googleapis.com";
}
return typeUrlPrefix + "/proto.SyncActionValue.AutoOrganizeBusinessChatSetting";
};
return AutoOrganizeBusinessChatSetting;
})();
SyncActionValue.AvatarUpdatedAction = (function() {
function AvatarUpdatedAction(p) {
@@ -87852,6 +87988,196 @@ export const proto = $root.proto = (() => {
return AvatarUpdatedAction;
})();
SyncActionValue.BizAISettingsNudgeAction = (function() {
function BizAISettingsNudgeAction(p) {
if (p)
for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)
if (p[ks[i]] != null)
this[ks[i]] = p[ks[i]];
}
BizAISettingsNudgeAction.prototype.category = null;
BizAISettingsNudgeAction.prototype.version = null;
BizAISettingsNudgeAction.prototype.updatedAtMs = null;
let $oneOfFields;
// Virtual OneOf for proto3 optional field
Object.defineProperty(BizAISettingsNudgeAction.prototype, "_category", {
get: $util.oneOfGetter($oneOfFields = ["category"]),
set: $util.oneOfSetter($oneOfFields)
});
// Virtual OneOf for proto3 optional field
Object.defineProperty(BizAISettingsNudgeAction.prototype, "_version", {
get: $util.oneOfGetter($oneOfFields = ["version"]),
set: $util.oneOfSetter($oneOfFields)
});
// Virtual OneOf for proto3 optional field
Object.defineProperty(BizAISettingsNudgeAction.prototype, "_updatedAtMs", {
get: $util.oneOfGetter($oneOfFields = ["updatedAtMs"]),
set: $util.oneOfSetter($oneOfFields)
});
BizAISettingsNudgeAction.create = function create(properties) {
return new BizAISettingsNudgeAction(properties);
};
BizAISettingsNudgeAction.encode = function encode(m, w) {
if (!w)
w = $Writer.create();
if (m.category != null && Object.hasOwnProperty.call(m, "category"))
w.uint32(8).int32(m.category);
if (m.version != null && Object.hasOwnProperty.call(m, "version"))
w.uint32(16).int64(m.version);
if (m.updatedAtMs != null && Object.hasOwnProperty.call(m, "updatedAtMs"))
w.uint32(24).int64(m.updatedAtMs);
return w;
};
BizAISettingsNudgeAction.decode = function decode(r, l, e) {
if (!(r instanceof $Reader))
r = $Reader.create(r);
var c = l === undefined ? r.len : r.pos + l, m = new $root.proto.SyncActionValue.BizAISettingsNudgeAction();
while (r.pos < c) {
var t = r.uint32();
if (t === e)
break;
switch (t >>> 3) {
case 1: {
m.category = r.int32();
break;
}
case 2: {
m.version = r.int64();
break;
}
case 3: {
m.updatedAtMs = r.int64();
break;
}
default:
r.skipType(t & 7);
break;
}
}
return m;
};
BizAISettingsNudgeAction.fromObject = function fromObject(d) {
if (d instanceof $root.proto.SyncActionValue.BizAISettingsNudgeAction)
return d;
var m = new $root.proto.SyncActionValue.BizAISettingsNudgeAction();
switch (d.category) {
default:
if (typeof d.category === "number") {
m.category = d.category;
break;
}
break;
case "UNKNOWN":
case 0:
m.category = 0;
break;
case "INSTRUCTIONS":
case 1:
m.category = 1;
break;
case "RESPONSE_SETTINGS":
case 2:
m.category = 2;
break;
case "EXAMPLE_RESPONSES":
case 3:
m.category = 3;
break;
case "KNOWLEDGE":
case 4:
m.category = 4;
break;
case "LEAD_GEN":
case 5:
m.category = 5;
break;
}
if (d.version != null) {
if ($util.Long)
(m.version = $util.Long.fromValue(d.version)).unsigned = false;
else if (typeof d.version === "string")
m.version = parseInt(d.version, 10);
else if (typeof d.version === "number")
m.version = d.version;
else if (typeof d.version === "object")
m.version = new $util.LongBits(d.version.low >>> 0, d.version.high >>> 0).toNumber();
}
if (d.updatedAtMs != null) {
if ($util.Long)
(m.updatedAtMs = $util.Long.fromValue(d.updatedAtMs)).unsigned = false;
else if (typeof d.updatedAtMs === "string")
m.updatedAtMs = parseInt(d.updatedAtMs, 10);
else if (typeof d.updatedAtMs === "number")
m.updatedAtMs = d.updatedAtMs;
else if (typeof d.updatedAtMs === "object")
m.updatedAtMs = new $util.LongBits(d.updatedAtMs.low >>> 0, d.updatedAtMs.high >>> 0).toNumber();
}
return m;
};
BizAISettingsNudgeAction.toObject = function toObject(m, o) {
if (!o)
o = {};
var d = {};
if (m.category != null && m.hasOwnProperty("category")) {
d.category = o.enums === String ? $root.proto.SyncActionValue.BizAISettingsNudgeAction.BizAISettingsCategory[m.category] === undefined ? m.category : $root.proto.SyncActionValue.BizAISettingsNudgeAction.BizAISettingsCategory[m.category] : m.category;
if (o.oneofs)
d._category = "category";
}
if (m.version != null && m.hasOwnProperty("version")) {
if (typeof m.version === "number")
d.version = o.longs === String ? String(m.version) : m.version;
else
d.version = o.longs === String ? longToString(m.version) : o.longs === Number ? longToNumber(m.version) : m.version;
if (o.oneofs)
d._version = "version";
}
if (m.updatedAtMs != null && m.hasOwnProperty("updatedAtMs")) {
if (typeof m.updatedAtMs === "number")
d.updatedAtMs = o.longs === String ? String(m.updatedAtMs) : m.updatedAtMs;
else
d.updatedAtMs = o.longs === String ? longToString(m.updatedAtMs) : o.longs === Number ? longToNumber(m.updatedAtMs) : m.updatedAtMs;
if (o.oneofs)
d._updatedAtMs = "updatedAtMs";
}
return d;
};
BizAISettingsNudgeAction.prototype.toJSON = function toJSON() {
return this.constructor.toObject(this, $protobuf.util.toJSONOptions);
};
BizAISettingsNudgeAction.getTypeUrl = function getTypeUrl(typeUrlPrefix) {
if (typeUrlPrefix === undefined) {
typeUrlPrefix = "type.googleapis.com";
}
return typeUrlPrefix + "/proto.SyncActionValue.BizAISettingsNudgeAction";
};
BizAISettingsNudgeAction.BizAISettingsCategory = (function() {
const valuesById = {}, values = Object.create(valuesById);
values[valuesById[0] = "UNKNOWN"] = 0;
values[valuesById[1] = "INSTRUCTIONS"] = 1;
values[valuesById[2] = "RESPONSE_SETTINGS"] = 2;
values[valuesById[3] = "EXAMPLE_RESPONSES"] = 3;
values[valuesById[4] = "KNOWLEDGE"] = 4;
values[valuesById[5] = "LEAD_GEN"] = 5;
return values;
})();
return BizAISettingsNudgeAction;
})();
SyncActionValue.BotWelcomeRequestAction = (function() {
function BotWelcomeRequestAction(p) {
@@ -96080,6 +96406,7 @@ export const proto = $root.proto = (() => {
function StatusPrivacyAction(p) {
this.userJid = [];
this.customLists = [];
this.modes = [];
if (p)
for (var ks = Object.keys(p), i = 0; i < ks.length; ++i)
if (p[ks[i]] != null)
@@ -96091,6 +96418,7 @@ export const proto = $root.proto = (() => {
StatusPrivacyAction.prototype.shareToFB = null;
StatusPrivacyAction.prototype.shareToIG = null;
StatusPrivacyAction.prototype.customLists = $util.emptyArray;
StatusPrivacyAction.prototype.modes = $util.emptyArray;
let $oneOfFields;
@@ -96133,6 +96461,12 @@ export const proto = $root.proto = (() => {
for (var i = 0; i < m.customLists.length; ++i)
$root.proto.SyncActionValue.StatusPrivacyAction.CustomList.encode(m.customLists[i], w.uint32(42).fork()).ldelim();
}
if (m.modes != null && m.modes.length) {
w.uint32(50).fork();
for (var i = 0; i < m.modes.length; ++i)
w.int32(m.modes[i]);
w.ldelim();
}
return w;
};
@@ -96169,6 +96503,17 @@ export const proto = $root.proto = (() => {
m.customLists.push($root.proto.SyncActionValue.StatusPrivacyAction.CustomList.decode(r, r.uint32()));
break;
}
case 6: {
if (!(m.modes && m.modes.length))
m.modes = [];
if ((t & 7) === 2) {
var c2 = r.uint32() + r.pos;
while (r.pos < c2)
m.modes.push(r.int32());
} else
m.modes.push(r.int32());
break;
}
default:
r.skipType(t & 7);
break;
@@ -96233,6 +96578,40 @@ export const proto = $root.proto = (() => {
m.customLists[i] = $root.proto.SyncActionValue.StatusPrivacyAction.CustomList.fromObject(d.customLists[i]);
}
}
if (d.modes) {
if (!Array.isArray(d.modes))
throw TypeError(".proto.SyncActionValue.StatusPrivacyAction.modes: array expected");
m.modes = [];
for (var i = 0; i < d.modes.length; ++i) {
switch (d.modes[i]) {
default:
if (typeof d.modes[i] === "number") {
m.modes[i] = d.modes[i];
break;
}
case "ALLOW_LIST":
case 0:
m.modes[i] = 0;
break;
case "DENY_LIST":
case 1:
m.modes[i] = 1;
break;
case "CONTACTS":
case 2:
m.modes[i] = 2;
break;
case "CLOSE_FRIENDS":
case 3:
m.modes[i] = 3;
break;
case "CUSTOM_LIST":
case 4:
m.modes[i] = 4;
break;
}
}
}
return m;
};
@@ -96243,6 +96622,7 @@ export const proto = $root.proto = (() => {
if (o.arrays || o.defaults) {
d.userJid = [];
d.customLists = [];
d.modes = [];
}
if (m.mode != null && m.hasOwnProperty("mode")) {
d.mode = o.enums === String ? $root.proto.SyncActionValue.StatusPrivacyAction.StatusDistributionMode[m.mode] === undefined ? m.mode : $root.proto.SyncActionValue.StatusPrivacyAction.StatusDistributionMode[m.mode] : m.mode;
@@ -96271,6 +96651,12 @@ export const proto = $root.proto = (() => {
d.customLists[j] = $root.proto.SyncActionValue.StatusPrivacyAction.CustomList.toObject(m.customLists[j], o);
}
}
if (m.modes && m.modes.length) {
d.modes = [];
for (var j = 0; j < m.modes.length; ++j) {
d.modes[j] = o.enums === String ? $root.proto.SyncActionValue.StatusPrivacyAction.StatusDistributionMode[m.modes[j]] === undefined ? m.modes[j] : $root.proto.SyncActionValue.StatusPrivacyAction.StatusDistributionMode[m.modes[j]] : m.modes[j];
}
}
return d;
};
+1 -1
View File
@@ -1 +1 @@
{"version":[2,3000,1037786138]}
{"version":[2,3000,1038147544]}
+4 -5
View File
@@ -1060,22 +1060,21 @@ export const makeChatsSocket = (config: SocketConfig) => {
}
}
/** sending non-abt props may fix QR scan fail if server expects */
/** fetch AB props */
const fetchProps = async () => {
//TODO: implement both protocol 1 and protocol 2 prop fetching, specially for abKey for WM
const resultNode = await query({
tag: 'iq',
attrs: {
to: S_WHATSAPP_NET,
xmlns: 'w',
xmlns: 'abt',
type: 'get'
},
content: [
{
tag: 'props',
attrs: {
protocol: '2',
hash: authState?.creds?.lastPropHash || ''
protocol: '1',
...(authState?.creds?.lastPropHash ? { hash: authState.creds.lastPropHash } : {})
}
}
]
-17
View File
@@ -2241,13 +2241,7 @@ export const makeMessagesRecvSocket = (config: SocketConfig) => {
}
const handleMessage = async (node: BinaryNode) => {
const _encNode = getBinaryNodeChild(node, 'enc')
const _unavNode = getBinaryNodeChild(node, 'unavailable')
// VO_RAW: log BEFORE any filtering — captures every stanza that enters handleMessage
console.log(`[VO_RAW] id=${node.attrs.id} from=${node.attrs.from} type=${node.attrs.type} enc=${_encNode ? _encNode.attrs?.type : 'NO'} unavailable=${_unavNode ? _unavNode.attrs?.type : 'NO'} children=${Array.isArray(node.content) ? (node.content as BinaryNode[]).map(c => c.tag).join(',') : 'none'}`)
if (shouldIgnoreJid(node.attrs.from!) && node.attrs.from !== S_WHATSAPP_NET) {
console.log(`[VO_RAW] IGNORED by shouldIgnoreJid: ${node.attrs.from}`)
logger.trace({ from: node.attrs.from }, 'ignored message')
await sendMessageAck(node)
return
@@ -2256,17 +2250,6 @@ export const makeMessagesRecvSocket = (config: SocketConfig) => {
const encNode = getBinaryNodeChild(node, 'enc')
const unavailableNode = getBinaryNodeChild(node, 'unavailable')
// DEBUG: log every incoming message stanza to trace view-once delivery
logger.info({
id: node.attrs.id,
from: node.attrs.from,
type: node.attrs.type,
hasEnc: !!encNode,
encType: encNode?.attrs?.type,
hasUnavailable: !!unavailableNode,
unavailableType: unavailableNode?.attrs?.type,
}, 'VO_TRACE: incoming message stanza')
// msmsg block removed — allow msmsg decryption (required for view-once on linked devices)
if (unavailableNode?.attrs?.type === 'view_once') {
const { fullMessage: voMsg } = decryptMessageNode(