Merge branch 'master' into claude/evaluate-workflow-errors-PDDoJ

This commit is contained in:
Renato Alcara
2026-02-14 08:12:09 -03:00
committed by GitHub
13 changed files with 2173 additions and 2998 deletions
+6 -4
View File
@@ -28,10 +28,9 @@ jobs:
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
# Force git to use HTTPS instead of SSH for GitHub repositories
git config --global url."https://github.com/".insteadOf "ssh://git@github.com/"
git config --global url."https://github.com/".insteadOf "git@github.com:"
# Configure git to use GITHUB_TOKEN for authentication
# Force git to use HTTPS with token instead of SSH for GitHub repositories
git config --global url."https://x-access-token:${GITHUB_TOKEN}@github.com/".insteadOf "ssh://git@github.com/"
git config --global url."https://x-access-token:${GITHUB_TOKEN}@github.com/".insteadOf "git@github.com:"
git config --global url."https://x-access-token:${GITHUB_TOKEN}@github.com/".insteadOf "https://github.com/"
- name: Restore Yarn Cache
@@ -46,6 +45,9 @@ jobs:
${{ runner.os }}-yarn-
- name: Install dependencies
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GIT_TERMINAL_PROMPT: 0
run: yarn install --immutable
- name: Build project
+6 -4
View File
@@ -28,10 +28,9 @@ jobs:
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
# Force git to use HTTPS instead of SSH for GitHub repositories
git config --global url."https://github.com/".insteadOf "ssh://git@github.com/"
git config --global url."https://github.com/".insteadOf "git@github.com:"
# Configure git to use GITHUB_TOKEN for authentication
# Force git to use HTTPS with token instead of SSH for GitHub repositories
git config --global url."https://x-access-token:${GITHUB_TOKEN}@github.com/".insteadOf "ssh://git@github.com/"
git config --global url."https://x-access-token:${GITHUB_TOKEN}@github.com/".insteadOf "git@github.com:"
git config --global url."https://x-access-token:${GITHUB_TOKEN}@github.com/".insteadOf "https://github.com/"
- name: Restore Yarn Cache
@@ -46,6 +45,9 @@ jobs:
${{ runner.os }}-yarn-
- name: Install packages
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GIT_TERMINAL_PROMPT: 0
run: yarn install --immutable
- name: Check linting
+1 -1
View File
@@ -18,7 +18,7 @@ jobs:
- uses: mshick/add-pr-comment@v2
with:
repo-token: ${{ secrets.PERSONAL_TOKEN }}
repo-token: ${{ secrets.GITHUB_TOKEN }}
message-id: pr-test
message: |
Thanks for opening this pull request and contributing to the project!
+6 -4
View File
@@ -29,10 +29,9 @@ jobs:
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
# Force git to use HTTPS instead of SSH for GitHub repositories
git config --global url."https://github.com/".insteadOf "ssh://git@github.com/"
git config --global url."https://github.com/".insteadOf "git@github.com:"
# Configure git to use GITHUB_TOKEN for authentication
# Force git to use HTTPS with token instead of SSH for GitHub repositories
git config --global url."https://x-access-token:${GITHUB_TOKEN}@github.com/".insteadOf "ssh://git@github.com/"
git config --global url."https://x-access-token:${GITHUB_TOKEN}@github.com/".insteadOf "git@github.com:"
git config --global url."https://x-access-token:${GITHUB_TOKEN}@github.com/".insteadOf "https://github.com/"
- name: Restore Yarn Cache
@@ -47,6 +46,9 @@ jobs:
${{ runner.os }}-yarn-
- name: Install dependencies
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GIT_TERMINAL_PROMPT: 0
run: yarn install --immutable
- name: Run tests
+42 -10
View File
@@ -1,7 +1,7 @@
syntax = "proto3";
package proto;
/// WhatsApp Version: 2.3000.1033381705
/// WhatsApp Version: 2.3000.1033472679
message ADVDeviceIdentity {
optional uint32 rawId = 1;
@@ -342,14 +342,6 @@ message BotAgeCollectionMetadata {
}
}
message BotAvatarMetadata {
optional uint32 sentiment = 1;
optional string behaviorGraph = 2;
optional uint32 action = 3;
optional uint32 intensity = 4;
optional uint32 wordCount = 5;
}
message BotCapabilityMetadata {
repeated BotCapabilityType capabilities = 1;
enum BotCapabilityType {
@@ -608,7 +600,6 @@ message BotMessageSharingInfo {
}
message BotMetadata {
optional BotAvatarMetadata avatarMetadata = 1;
optional string personaId = 2;
optional BotPluginMetadata pluginMetadata = 3;
optional BotSuggestedPromptMetadata suggestedPromptMetadata = 4;
@@ -2407,6 +2398,7 @@ message Message {
optional string nativeFlowCallButtonPayload = 8;
optional string deeplinkPayload = 9;
optional MessageContextInfo messageContextInfo = 10;
optional uint32 callEntryPoint = 11;
}
message CallLogMessage {
@@ -2621,8 +2613,15 @@ message Message {
}
}
message FullHistorySyncOnDemandConfig {
optional uint64 historyFromTimestamp = 1;
optional uint32 historyDurationDays = 2;
}
message FullHistorySyncOnDemandRequestMetadata {
optional string requestId = 1;
optional string businessProduct = 2;
optional bytes opaqueClientData = 3;
}
message FutureProofMessage {
@@ -3158,14 +3157,18 @@ message Message {
message FullHistorySyncOnDemandRequest {
optional Message.FullHistorySyncOnDemandRequestMetadata requestMetadata = 1;
optional DeviceProps.HistorySyncConfig historySyncConfig = 2;
optional Message.FullHistorySyncOnDemandConfig fullHistorySyncOnDemandConfig = 3;
}
message GalaxyFlowAction {
optional GalaxyFlowActionType type = 1;
optional string flowId = 2;
optional string stanzaId = 3;
optional string galaxyFlowDownloadRequestId = 4;
optional string agmId = 5;
enum GalaxyFlowActionType {
NOTIFY_LAUNCH = 1;
DOWNLOAD_RESPONSES = 2;
}
}
@@ -3220,6 +3223,7 @@ message Message {
optional SyncDSnapshotFatalRecoveryResponse syncdSnapshotFatalRecoveryResponse = 8;
optional CompanionCanonicalUserNonceFetchResponse companionCanonicalUserNonceFetchRequestResponse = 9;
optional HistorySyncChunkRetryResponse historySyncChunkRetryResponse = 10;
optional FlowResponsesCsvBundle flowResponsesCsvBundle = 11;
message CompanionCanonicalUserNonceFetchResponse {
optional string nonce = 1;
optional string waFbid = 2;
@@ -3230,6 +3234,19 @@ message Message {
optional string nonce = 1;
}
message FlowResponsesCsvBundle {
optional string flowId = 1;
optional string galaxyFlowDownloadRequestId = 2;
optional string fileName = 3;
optional string mimetype = 4;
optional bytes fileSha256 = 5;
optional bytes mediaKey = 6;
optional bytes fileEncSha256 = 7;
optional string directPath = 8;
optional int64 mediaKeyTimestamp = 9;
optional uint64 fileLength = 10;
}
message FullHistorySyncOnDemandRequestResponse {
optional Message.FullHistorySyncOnDemandRequestMetadata requestMetadata = 1;
optional Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FullHistorySyncOnDemandResponseCode responseCode = 2;
@@ -3453,6 +3470,7 @@ message Message {
optional AIQueryFanout aiQueryFanout = 26;
optional MemberLabel memberLabel = 27;
optional AIMediaCollectionMessage aiMediaCollectionMessage = 28;
optional uint32 afterReadDurationMs = 29;
enum Type {
REVOKE = 0;
EPHEMERAL_SETTING = 3;
@@ -4025,6 +4043,8 @@ enum MutationProps {
AI_THREAD_RENAME_ACTION = 76;
INTERACTIVE_MESSAGE_ACTION = 77;
SETTINGS_SYNC_ACTION = 78;
OUT_CONTACT_ACTION = 79;
NCT_SALT_SYNC_ACTION = 80;
SHARE_OWN_PN = 10001;
BUSINESS_BROADCAST_ACTION = 10002;
AI_THREAD_DELETE_ACTION = 10003;
@@ -4655,6 +4675,8 @@ message SyncActionValue {
optional AiThreadRenameAction aiThreadRenameAction = 76;
optional InteractiveMessageAction interactiveMessageAction = 77;
optional SettingsSyncAction settingsSyncAction = 78;
optional OutContactAction outContactAction = 79;
optional NctSaltSyncAction nctSaltSyncAction = 80;
message AgentAction {
optional string name = 1;
optional int32 deviceID = 2;
@@ -4781,6 +4803,7 @@ message SyncActionValue {
message InteractiveMessageAction {
optional InteractiveMessageActionMode type = 1;
optional string agmId = 2;
enum InteractiveMessageActionMode {
DISABLE_CTA = 1;
}
@@ -4890,6 +4913,10 @@ message SyncActionValue {
optional int64 muteEveryoneMentionEndTimestamp = 4;
}
message NctSaltSyncAction {
optional bytes salt = 1;
}
message NewsletterSavedInterestsAction {
optional string newsletterSavedInterests = 1;
}
@@ -4920,6 +4947,11 @@ message SyncActionValue {
optional bool acknowledged = 1;
}
message OutContactAction {
optional string fullName = 1;
optional string firstName = 2;
}
message PaymentInfoAction {
optional string cpi = 1;
}
+112 -27
View File
@@ -976,30 +976,6 @@ export namespace proto {
}
}
interface IBotAvatarMetadata {
sentiment?: (number|null);
behaviorGraph?: (string|null);
action?: (number|null);
intensity?: (number|null);
wordCount?: (number|null);
}
class BotAvatarMetadata implements IBotAvatarMetadata {
constructor(p?: proto.IBotAvatarMetadata);
public sentiment?: (number|null);
public behaviorGraph?: (string|null);
public action?: (number|null);
public intensity?: (number|null);
public wordCount?: (number|null);
public static create(properties?: proto.IBotAvatarMetadata): proto.BotAvatarMetadata;
public static encode(m: proto.IBotAvatarMetadata, w?: $protobuf.Writer): $protobuf.Writer;
public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.BotAvatarMetadata;
public static fromObject(d: { [k: string]: any }): proto.BotAvatarMetadata;
public static toObject(m: proto.BotAvatarMetadata, o?: $protobuf.IConversionOptions): { [k: string]: any };
public toJSON(): { [k: string]: any };
public static getTypeUrl(typeUrlPrefix?: string): string;
}
interface IBotCapabilityMetadata {
capabilities?: (proto.BotCapabilityMetadata.BotCapabilityType[]|null);
}
@@ -1627,7 +1603,6 @@ export namespace proto {
}
interface IBotMetadata {
avatarMetadata?: (proto.IBotAvatarMetadata|null);
personaId?: (string|null);
pluginMetadata?: (proto.IBotPluginMetadata|null);
suggestedPromptMetadata?: (proto.IBotSuggestedPromptMetadata|null);
@@ -1670,7 +1645,6 @@ export namespace proto {
class BotMetadata implements IBotMetadata {
constructor(p?: proto.IBotMetadata);
public avatarMetadata?: (proto.IBotAvatarMetadata|null);
public personaId?: (string|null);
public pluginMetadata?: (proto.IBotPluginMetadata|null);
public suggestedPromptMetadata?: (proto.IBotSuggestedPromptMetadata|null);
@@ -6036,6 +6010,7 @@ export namespace proto {
nativeFlowCallButtonPayload?: (string|null);
deeplinkPayload?: (string|null);
messageContextInfo?: (proto.IMessageContextInfo|null);
callEntryPoint?: (number|null);
}
class Call implements ICall {
@@ -6050,6 +6025,7 @@ export namespace proto {
public nativeFlowCallButtonPayload?: (string|null);
public deeplinkPayload?: (string|null);
public messageContextInfo?: (proto.IMessageContextInfo|null);
public callEntryPoint?: (number|null);
public static create(properties?: proto.Message.ICall): proto.Message.Call;
public static encode(m: proto.Message.ICall, w?: $protobuf.Writer): $protobuf.Writer;
public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.Call;
@@ -6596,13 +6572,35 @@ export namespace proto {
}
}
interface IFullHistorySyncOnDemandConfig {
historyFromTimestamp?: (number|Long|null);
historyDurationDays?: (number|null);
}
class FullHistorySyncOnDemandConfig implements IFullHistorySyncOnDemandConfig {
constructor(p?: proto.Message.IFullHistorySyncOnDemandConfig);
public historyFromTimestamp?: (number|Long|null);
public historyDurationDays?: (number|null);
public static create(properties?: proto.Message.IFullHistorySyncOnDemandConfig): proto.Message.FullHistorySyncOnDemandConfig;
public static encode(m: proto.Message.IFullHistorySyncOnDemandConfig, w?: $protobuf.Writer): $protobuf.Writer;
public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.FullHistorySyncOnDemandConfig;
public static fromObject(d: { [k: string]: any }): proto.Message.FullHistorySyncOnDemandConfig;
public static toObject(m: proto.Message.FullHistorySyncOnDemandConfig, o?: $protobuf.IConversionOptions): { [k: string]: any };
public toJSON(): { [k: string]: any };
public static getTypeUrl(typeUrlPrefix?: string): string;
}
interface IFullHistorySyncOnDemandRequestMetadata {
requestId?: (string|null);
businessProduct?: (string|null);
opaqueClientData?: (Uint8Array|null);
}
class FullHistorySyncOnDemandRequestMetadata implements IFullHistorySyncOnDemandRequestMetadata {
constructor(p?: proto.Message.IFullHistorySyncOnDemandRequestMetadata);
public requestId?: (string|null);
public businessProduct?: (string|null);
public opaqueClientData?: (Uint8Array|null);
public static create(properties?: proto.Message.IFullHistorySyncOnDemandRequestMetadata): proto.Message.FullHistorySyncOnDemandRequestMetadata;
public static encode(m: proto.Message.IFullHistorySyncOnDemandRequestMetadata, w?: $protobuf.Writer): $protobuf.Writer;
public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.FullHistorySyncOnDemandRequestMetadata;
@@ -8083,12 +8081,14 @@ export namespace proto {
interface IFullHistorySyncOnDemandRequest {
requestMetadata?: (proto.Message.IFullHistorySyncOnDemandRequestMetadata|null);
historySyncConfig?: (proto.DeviceProps.IHistorySyncConfig|null);
fullHistorySyncOnDemandConfig?: (proto.Message.IFullHistorySyncOnDemandConfig|null);
}
class FullHistorySyncOnDemandRequest implements IFullHistorySyncOnDemandRequest {
constructor(p?: proto.Message.PeerDataOperationRequestMessage.IFullHistorySyncOnDemandRequest);
public requestMetadata?: (proto.Message.IFullHistorySyncOnDemandRequestMetadata|null);
public historySyncConfig?: (proto.DeviceProps.IHistorySyncConfig|null);
public fullHistorySyncOnDemandConfig?: (proto.Message.IFullHistorySyncOnDemandConfig|null);
public static create(properties?: proto.Message.PeerDataOperationRequestMessage.IFullHistorySyncOnDemandRequest): proto.Message.PeerDataOperationRequestMessage.FullHistorySyncOnDemandRequest;
public static encode(m: proto.Message.PeerDataOperationRequestMessage.IFullHistorySyncOnDemandRequest, w?: $protobuf.Writer): $protobuf.Writer;
public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.PeerDataOperationRequestMessage.FullHistorySyncOnDemandRequest;
@@ -8102,6 +8102,8 @@ export namespace proto {
type?: (proto.Message.PeerDataOperationRequestMessage.GalaxyFlowAction.GalaxyFlowActionType|null);
flowId?: (string|null);
stanzaId?: (string|null);
galaxyFlowDownloadRequestId?: (string|null);
agmId?: (string|null);
}
class GalaxyFlowAction implements IGalaxyFlowAction {
@@ -8109,6 +8111,8 @@ export namespace proto {
public type?: (proto.Message.PeerDataOperationRequestMessage.GalaxyFlowAction.GalaxyFlowActionType|null);
public flowId?: (string|null);
public stanzaId?: (string|null);
public galaxyFlowDownloadRequestId?: (string|null);
public agmId?: (string|null);
public static create(properties?: proto.Message.PeerDataOperationRequestMessage.IGalaxyFlowAction): proto.Message.PeerDataOperationRequestMessage.GalaxyFlowAction;
public static encode(m: proto.Message.PeerDataOperationRequestMessage.IGalaxyFlowAction, w?: $protobuf.Writer): $protobuf.Writer;
public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.PeerDataOperationRequestMessage.GalaxyFlowAction;
@@ -8121,7 +8125,8 @@ export namespace proto {
namespace GalaxyFlowAction {
enum GalaxyFlowActionType {
NOTIFY_LAUNCH = 1
NOTIFY_LAUNCH = 1,
DOWNLOAD_RESPONSES = 2
}
}
@@ -8275,6 +8280,7 @@ export namespace proto {
syncdSnapshotFatalRecoveryResponse?: (proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ISyncDSnapshotFatalRecoveryResponse|null);
companionCanonicalUserNonceFetchRequestResponse?: (proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ICompanionCanonicalUserNonceFetchResponse|null);
historySyncChunkRetryResponse?: (proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IHistorySyncChunkRetryResponse|null);
flowResponsesCsvBundle?: (proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IFlowResponsesCsvBundle|null);
}
class PeerDataOperationResult implements IPeerDataOperationResult {
@@ -8289,6 +8295,7 @@ export namespace proto {
public syncdSnapshotFatalRecoveryResponse?: (proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ISyncDSnapshotFatalRecoveryResponse|null);
public companionCanonicalUserNonceFetchRequestResponse?: (proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.ICompanionCanonicalUserNonceFetchResponse|null);
public historySyncChunkRetryResponse?: (proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IHistorySyncChunkRetryResponse|null);
public flowResponsesCsvBundle?: (proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IFlowResponsesCsvBundle|null);
public static create(properties?: proto.Message.PeerDataOperationRequestResponseMessage.IPeerDataOperationResult): proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult;
public static encode(m: proto.Message.PeerDataOperationRequestResponseMessage.IPeerDataOperationResult, w?: $protobuf.Writer): $protobuf.Writer;
public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult;
@@ -8336,6 +8343,40 @@ export namespace proto {
public static getTypeUrl(typeUrlPrefix?: string): string;
}
interface IFlowResponsesCsvBundle {
flowId?: (string|null);
galaxyFlowDownloadRequestId?: (string|null);
fileName?: (string|null);
mimetype?: (string|null);
fileSha256?: (Uint8Array|null);
mediaKey?: (Uint8Array|null);
fileEncSha256?: (Uint8Array|null);
directPath?: (string|null);
mediaKeyTimestamp?: (number|Long|null);
fileLength?: (number|Long|null);
}
class FlowResponsesCsvBundle implements IFlowResponsesCsvBundle {
constructor(p?: proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IFlowResponsesCsvBundle);
public flowId?: (string|null);
public galaxyFlowDownloadRequestId?: (string|null);
public fileName?: (string|null);
public mimetype?: (string|null);
public fileSha256?: (Uint8Array|null);
public mediaKey?: (Uint8Array|null);
public fileEncSha256?: (Uint8Array|null);
public directPath?: (string|null);
public mediaKeyTimestamp?: (number|Long|null);
public fileLength?: (number|Long|null);
public static create(properties?: proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IFlowResponsesCsvBundle): proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FlowResponsesCsvBundle;
public static encode(m: proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.IFlowResponsesCsvBundle, w?: $protobuf.Writer): $protobuf.Writer;
public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FlowResponsesCsvBundle;
public static fromObject(d: { [k: string]: any }): proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FlowResponsesCsvBundle;
public static toObject(m: proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FlowResponsesCsvBundle, o?: $protobuf.IConversionOptions): { [k: string]: any };
public toJSON(): { [k: string]: any };
public static getTypeUrl(typeUrlPrefix?: string): string;
}
interface IFullHistorySyncOnDemandRequestResponse {
requestMetadata?: (proto.Message.IFullHistorySyncOnDemandRequestMetadata|null);
responseCode?: (proto.Message.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FullHistorySyncOnDemandResponseCode|null);
@@ -8895,6 +8936,7 @@ export namespace proto {
aiQueryFanout?: (proto.IAIQueryFanout|null);
memberLabel?: (proto.IMemberLabel|null);
aiMediaCollectionMessage?: (proto.IAIMediaCollectionMessage|null);
afterReadDurationMs?: (number|null);
}
class ProtocolMessage implements IProtocolMessage {
@@ -8924,6 +8966,7 @@ export namespace proto {
public aiQueryFanout?: (proto.IAIQueryFanout|null);
public memberLabel?: (proto.IMemberLabel|null);
public aiMediaCollectionMessage?: (proto.IAIMediaCollectionMessage|null);
public afterReadDurationMs?: (number|null);
public static create(properties?: proto.Message.IProtocolMessage): proto.Message.ProtocolMessage;
public static encode(m: proto.Message.IProtocolMessage, w?: $protobuf.Writer): $protobuf.Writer;
public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.Message.ProtocolMessage;
@@ -10233,6 +10276,8 @@ export namespace proto {
AI_THREAD_RENAME_ACTION = 76,
INTERACTIVE_MESSAGE_ACTION = 77,
SETTINGS_SYNC_ACTION = 78,
OUT_CONTACT_ACTION = 79,
NCT_SALT_SYNC_ACTION = 80,
SHARE_OWN_PN = 10001,
BUSINESS_BROADCAST_ACTION = 10002,
AI_THREAD_DELETE_ACTION = 10003
@@ -11821,6 +11866,8 @@ export namespace proto {
aiThreadRenameAction?: (proto.SyncActionValue.IAiThreadRenameAction|null);
interactiveMessageAction?: (proto.SyncActionValue.IInteractiveMessageAction|null);
settingsSyncAction?: (proto.SyncActionValue.ISettingsSyncAction|null);
outContactAction?: (proto.SyncActionValue.IOutContactAction|null);
nctSaltSyncAction?: (proto.SyncActionValue.INctSaltSyncAction|null);
}
class SyncActionValue implements ISyncActionValue {
@@ -11894,6 +11941,8 @@ export namespace proto {
public aiThreadRenameAction?: (proto.SyncActionValue.IAiThreadRenameAction|null);
public interactiveMessageAction?: (proto.SyncActionValue.IInteractiveMessageAction|null);
public settingsSyncAction?: (proto.SyncActionValue.ISettingsSyncAction|null);
public outContactAction?: (proto.SyncActionValue.IOutContactAction|null);
public nctSaltSyncAction?: (proto.SyncActionValue.INctSaltSyncAction|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;
@@ -12357,11 +12406,13 @@ export namespace proto {
interface IInteractiveMessageAction {
type?: (proto.SyncActionValue.InteractiveMessageAction.InteractiveMessageActionMode|null);
agmId?: (string|null);
}
class InteractiveMessageAction implements IInteractiveMessageAction {
constructor(p?: proto.SyncActionValue.IInteractiveMessageAction);
public type?: (proto.SyncActionValue.InteractiveMessageAction.InteractiveMessageActionMode|null);
public agmId?: (string|null);
public static create(properties?: proto.SyncActionValue.IInteractiveMessageAction): proto.SyncActionValue.InteractiveMessageAction;
public static encode(m: proto.SyncActionValue.IInteractiveMessageAction, w?: $protobuf.Writer): $protobuf.Writer;
public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.InteractiveMessageAction;
@@ -12690,6 +12741,22 @@ export namespace proto {
public static getTypeUrl(typeUrlPrefix?: string): string;
}
interface INctSaltSyncAction {
salt?: (Uint8Array|null);
}
class NctSaltSyncAction implements INctSaltSyncAction {
constructor(p?: proto.SyncActionValue.INctSaltSyncAction);
public salt?: (Uint8Array|null);
public static create(properties?: proto.SyncActionValue.INctSaltSyncAction): proto.SyncActionValue.NctSaltSyncAction;
public static encode(m: proto.SyncActionValue.INctSaltSyncAction, w?: $protobuf.Writer): $protobuf.Writer;
public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.NctSaltSyncAction;
public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.NctSaltSyncAction;
public static toObject(m: proto.SyncActionValue.NctSaltSyncAction, o?: $protobuf.IConversionOptions): { [k: string]: any };
public toJSON(): { [k: string]: any };
public static getTypeUrl(typeUrlPrefix?: string): string;
}
interface INewsletterSavedInterestsAction {
newsletterSavedInterests?: (string|null);
}
@@ -12780,6 +12847,24 @@ export namespace proto {
public static getTypeUrl(typeUrlPrefix?: string): string;
}
interface IOutContactAction {
fullName?: (string|null);
firstName?: (string|null);
}
class OutContactAction implements IOutContactAction {
constructor(p?: proto.SyncActionValue.IOutContactAction);
public fullName?: (string|null);
public firstName?: (string|null);
public static create(properties?: proto.SyncActionValue.IOutContactAction): proto.SyncActionValue.OutContactAction;
public static encode(m: proto.SyncActionValue.IOutContactAction, w?: $protobuf.Writer): $protobuf.Writer;
public static decode(r: ($protobuf.Reader|Uint8Array), l?: number): proto.SyncActionValue.OutContactAction;
public static fromObject(d: { [k: string]: any }): proto.SyncActionValue.OutContactAction;
public static toObject(m: proto.SyncActionValue.OutContactAction, o?: $protobuf.IConversionOptions): { [k: string]: any };
public toJSON(): { [k: string]: any };
public static getTypeUrl(typeUrlPrefix?: string): string;
}
interface IPaymentInfoAction {
cpi?: (string|null);
}
+874 -195
View File
File diff suppressed because it is too large Load Diff
+31 -67
View File
@@ -11,14 +11,14 @@
"license": "MIT",
"dependencies": {
"@cacheable/node-cache": "^1.4.0",
"@hapi/boom": "^9.1.3",
"@hapi/boom": "^10.0.1",
"async-mutex": "^0.5.0",
"fflate": "^0.8.2",
"libsignal": "git+https://github.com/whiskeysockets/libsignal-node",
"libsignal": "github:whiskeysockets/libsignal-node",
"lru-cache": "^11.1.0",
"music-metadata": "^11.7.0",
"p-queue": "^9.0.0",
"pino": "^9.6",
"pino": "^10.3.1",
"prom-client": "^15.1.3",
"protobufjs": "^7.2.4",
"whatsapp-rust-bridge": "0.5.2",
@@ -43,7 +43,7 @@
"jimp": "^1.6.0",
"jiti": "^2.4.2",
"json": "^11.0.0",
"link-preview-js": "^3.0.0",
"link-preview-js": "^4.0.0",
"lru-cache": "^11.1.0",
"open": "^8.4.2",
"pino-pretty": "^13.1.1",
@@ -61,9 +61,9 @@
"node": ">=20.0.0"
},
"peerDependencies": {
"audio-decode": "^2.1.3",
"audio-decode": "^2.2.3",
"jimp": "^1.6.0",
"link-preview-js": "^3.0.0",
"link-preview-js": "^4.0.0",
"sharp": "*"
},
"peerDependenciesMeta": {
@@ -1296,18 +1296,18 @@
}
},
"node_modules/@hapi/boom": {
"version": "9.1.4",
"resolved": "https://registry.npmjs.org/@hapi/boom/-/boom-9.1.4.tgz",
"integrity": "sha512-Ls1oH8jaN1vNsqcaHVYJrKmgMcKsC1wcp8bujvXrHaAqD2iDYq3HoOwsxwo09Cuda5R5nC0o0IxlrlTuvPuzSw==",
"version": "10.0.1",
"resolved": "https://registry.npmjs.org/@hapi/boom/-/boom-10.0.1.tgz",
"integrity": "sha512-ERcCZaEjdH3OgSJlyjVk8pHIFeus91CjKP3v+MpgBNp5IvGzP2l/bRiD78nqYcKPaZdbKkK5vDBVPd2ohHBlsA==",
"license": "BSD-3-Clause",
"dependencies": {
"@hapi/hoek": "9.x.x"
"@hapi/hoek": "^11.0.2"
}
},
"node_modules/@hapi/hoek": {
"version": "9.3.0",
"resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz",
"integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==",
"version": "11.0.7",
"resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-11.0.7.tgz",
"integrity": "sha512-HV5undWkKzcB4RZUusqOpcgxOaq6VOAH7zhhIr2g3G8NF/MlFO75SjOr2NfuSx0Mh40+1FqCkagKLJRykUWoFQ==",
"license": "BSD-3-Clause"
},
"node_modules/@humanfs/core": {
@@ -10222,14 +10222,13 @@
"license": "MIT"
},
"node_modules/link-preview-js": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/link-preview-js/-/link-preview-js-3.2.0.tgz",
"integrity": "sha512-FvrLltjOPGbTzt+RugbzM7g8XuUNLPO2U/INSLczrYdAA32E7nZVUrVL1gr61DGOArGJA2QkPGMEvNMLLsXREA==",
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/link-preview-js/-/link-preview-js-4.0.0.tgz",
"integrity": "sha512-KYYiMVOAguIFNdoVGVjd+6cgknv5XHbr1IuRdj3T5EkN7JNaqUh4a1NSCi5FX6zyZzILI55OQA6+YxBAcPY2wA==",
"dev": true,
"license": "MIT",
"dependencies": {
"cheerio": "1.0.0-rc.11",
"url": "0.11.0"
"cheerio": "1.0.0-rc.11"
},
"engines": {
"node": ">=18"
@@ -11546,31 +11545,31 @@
}
},
"node_modules/pino": {
"version": "9.14.0",
"resolved": "https://registry.npmjs.org/pino/-/pino-9.14.0.tgz",
"integrity": "sha512-8OEwKp5juEvb/MjpIc4hjqfgCNysrS94RIOMXYvpYCdm/jglrKEiAYmiumbmGhCvs+IcInsphYDFwqrjr7398w==",
"version": "10.3.1",
"resolved": "https://registry.npmjs.org/pino/-/pino-10.3.1.tgz",
"integrity": "sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg==",
"license": "MIT",
"dependencies": {
"@pinojs/redact": "^0.4.0",
"atomic-sleep": "^1.0.0",
"on-exit-leak-free": "^2.1.0",
"pino-abstract-transport": "^2.0.0",
"pino-abstract-transport": "^3.0.0",
"pino-std-serializers": "^7.0.0",
"process-warning": "^5.0.0",
"quick-format-unescaped": "^4.0.3",
"real-require": "^0.2.0",
"safe-stable-stringify": "^2.3.1",
"sonic-boom": "^4.0.1",
"thread-stream": "^3.0.0"
"thread-stream": "^4.0.0"
},
"bin": {
"pino": "bin.js"
}
},
"node_modules/pino-abstract-transport": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz",
"integrity": "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==",
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-3.0.0.tgz",
"integrity": "sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==",
"license": "MIT",
"dependencies": {
"split2": "^4.0.0"
@@ -11601,16 +11600,6 @@
"pino-pretty": "bin.js"
}
},
"node_modules/pino-pretty/node_modules/pino-abstract-transport": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-3.0.0.tgz",
"integrity": "sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==",
"dev": true,
"license": "MIT",
"dependencies": {
"split2": "^4.0.0"
}
},
"node_modules/pino-pretty/node_modules/strip-json-comments": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.3.tgz",
@@ -12121,16 +12110,6 @@
"node": ">=20"
}
},
"node_modules/querystring": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
"integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==",
"deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.",
"dev": true,
"engines": {
"node": ">=0.4.x"
}
},
"node_modules/queue-microtask": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
@@ -13735,12 +13714,15 @@
}
},
"node_modules/thread-stream": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-3.1.0.tgz",
"integrity": "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==",
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-4.0.0.tgz",
"integrity": "sha512-4iMVL6HAINXWf1ZKZjIPcz5wYaOdPhtO8ATvZ+Xqp3BTdaqtAwQkNmKORqcIo5YkQqGXq5cwfswDwMqqQNrpJA==",
"license": "MIT",
"dependencies": {
"real-require": "^0.2.0"
},
"engines": {
"node": ">=20"
}
},
"node_modules/through": {
@@ -14434,17 +14416,6 @@
"punycode": "^2.1.0"
}
},
"node_modules/url": {
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
"integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"punycode": "1.3.2",
"querystring": "0.2.0"
}
},
"node_modules/url-join": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz",
@@ -14455,13 +14426,6 @@
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
}
},
"node_modules/url/node_modules/punycode": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
"integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==",
"dev": true,
"license": "MIT"
},
"node_modules/utif2": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/utif2/-/utif2-4.1.0.tgz",
+15 -9
View File
@@ -41,15 +41,18 @@
"update:version": "tsx ./scripts/update-version.ts"
},
"dependencies": {
"@cacheable/node-cache": "^1.4.0",
"@hapi/boom": "^9.1.3",
"@cacheable/node-cache": "^2.0.1",
"@hapi/boom": "^10.0.1",
"async-mutex": "^0.5.0",
"fflate": "^0.8.2",
"libsignal": "github:whiskeysockets/libsignal-node",
"lru-cache": "^11.2.6",
"music-metadata": "^11.12.0",
"libsignal": "https://github.com/whiskeysockets/libsignal-node.git",
"lru-cache": "^11.1.0",
"music-metadata": "^11.7.0",
"p-queue": "^9.0.0",
"pino": "^9.6",
"pino": "^10.3.1",
"prom-client": "^15.1.3",
"protobufjs": "^7.2.4",
"whatsapp-rust-bridge": "0.5.2",
@@ -59,7 +62,7 @@
"@eslint/eslintrc": "^3.3.1",
"@eslint/js": "^9.31.0",
"@types/jest": "^30.0.0",
"@types/node": "^20.9.0",
"@types/node": "^20.19.33",
"@types/ws": "^8.0.0",
"@typescript-eslint/eslint-plugin": "^8.55.0",
"@typescript-eslint/parser": "^8.55.0",
@@ -77,21 +80,24 @@
"link-preview-js": "^3.0.0",
"lru-cache": "^11.2.6",
"open": "^8.4.2",
"link-preview-js": "^4.0.0",
"lru-cache": "^11.1.0",
"open": "^11.0.0",
"pino-pretty": "^13.1.1",
"prettier": "^3.8.1",
"protobufjs-cli": "^1.1.3",
"release-it": "^15.10.3",
"release-it": "^19.2.4",
"ts-jest": "^29.4.0",
"tsc-esm-fix": "^3.1.2",
"tsx": "^4.20.3",
"typedoc": "^0.27.9",
"typedoc-plugin-markdown": "4.4.2",
"typedoc": "^0.28.17",
"typedoc-plugin-markdown": "^4.10.0",
"typescript": "^5.8.2"
},
"peerDependencies": {
"audio-decode": "^2.1.3",
"audio-decode": "^2.2.3",
"jimp": "^1.6.0",
"link-preview-js": "^3.0.0",
"link-preview-js": "^4.0.0",
"sharp": "*"
},
"peerDependenciesMeta": {
+6 -1
View File
@@ -499,7 +499,12 @@ async function findAppModules() {
const decodedProto = Object.keys(decodedProtoMap).sort();
const sortedStr = decodedProto.map((d) => decodedProtoMap[d]).join('\n');
const decodedProtoStr = `syntax = "proto3";\npackage proto;\n\n/// WhatsApp Version: ${whatsAppVersion}\n\n${sortedStr}`;
let decodedProtoStr = `syntax = "proto3";\npackage proto;\n\n/// WhatsApp Version: ${whatsAppVersion}\n\n${sortedStr}`;
// Fix: proto3 doesn't support 'required' keyword (only proto2 does)
// Convert all 'required' fields to 'optional' for proto3 compatibility
decodedProtoStr = decodedProtoStr.replace(/(\n\s+)required /g, '$1optional ');
const destinationPath = '../WAProto/WAProto.proto';
await fs.writeFile(destinationPath, decodedProtoStr);
+1 -3
View File
@@ -1,3 +1 @@
{
"version": [2, 3000, 1033381705]
}
{"version":[2,3000,1033479614]}
+21 -12
View File
@@ -271,24 +271,33 @@ describe('SessionCleanup', () => {
}
it('should handle exactly 24h for LID orphan (boundary)', async () => {
const now = Date.now()
const lastActivity = now - 24 * HOUR_MS // Exactly 24h
const fixedNow = 1700000000000 // Fixed timestamp to avoid race conditions
const lastActivity = fixedNow - 24 * HOUR_MS // Exactly 24h
// @ts-ignore
mockKeys.get.mockResolvedValue({
'123456789_2.0': Buffer.from('session-data')
})
// Mock Date.now() to return consistent value
const originalDateNow = Date.now
Date.now = jest.fn(() => fixedNow)
mockLidMapping.getPNForLID.mockResolvedValue(null)
try {
// @ts-ignore
mockKeys.get.mockResolvedValue({
'123456789_2.0': Buffer.from('session-data')
})
mockActivityTracker.getAllActivities.mockResolvedValue(new Map([['123456789@lid', lastActivity]]))
mockLidMapping.getPNForLID.mockResolvedValue(null)
const cleanup = makeSessionCleanup(mockKeys, mockLidMapping as any, mockActivityTracker as any, logger, config)
mockActivityTracker.getAllActivities.mockResolvedValue(new Map([['123456789@lid', lastActivity]]))
const stats = await cleanup.runCleanup()
const cleanup = makeSessionCleanup(mockKeys, mockLidMapping as any, mockActivityTracker as any, logger, config)
// Exactly 24h should NOT delete (> threshold, not >=)
expect(stats.lidOrphansDeleted).toBe(0)
const stats = await cleanup.runCleanup()
// Exactly 24h should NOT delete (> threshold, not >=)
expect(stats.lidOrphansDeleted).toBe(0)
} finally {
// Restore original Date.now
Date.now = originalDateNow
}
})
it('should handle empty session list', async () => {
+1052 -2661
View File
File diff suppressed because it is too large Load Diff