nicer patch API

This commit is contained in:
Adhiraj Singh
2021-09-28 19:33:21 +05:30
parent fdfe310fdf
commit 1a83a4c6d4
3 changed files with 17 additions and 18 deletions

View File

@@ -1,9 +1,8 @@
import { encodeSyncdPatch, decodePatches, extractSyncdPatches } from "../Utils/chat-utils";
import { SocketConfig, WAPresence, PresenceData, Chat, ChatModification, WAMediaUpload, ChatMutation, WAPatchName, LTHashState } from "../Types";
import { SocketConfig, WAPresence, PresenceData, Chat, WAPatchCreate, WAMediaUpload, ChatMutation, WAPatchName, LTHashState } from "../Types";
import { BinaryNode, getBinaryNodeChild, getBinaryNodeChildren, jidNormalizedUser, S_WHATSAPP_NET } from "../WABinary";
import { proto } from '../../WAProto'
import { generateProfilePicture, toNumber } from "../Utils";
import { randomBytes } from "crypto";
import { makeMessagesRecvSocket } from "./messages-recv";
export const makeChatsSocket = (config: SocketConfig) => {
@@ -327,18 +326,12 @@ export const makeChatsSocket = (config: SocketConfig) => {
ev.emit('chats.update', updates)
}
const appPatch = async(
syncAction: proto.ISyncActionValue,
index: [string, string],
name: WAPatchName,
operation: proto.SyncdMutation.SyncdMutationSyncdOperation.SET,
) => {
const appPatch = async(patchCreate: WAPatchCreate) => {
const name = patchCreate.type
await resyncState(name, false)
const { patch, state } = await encodeSyncdPatch(
syncAction,
index,
name,
operation,
patchCreate,
authState,
)
const initial = await authState.keys.getAppStateSyncVersion(name)

View File

@@ -12,6 +12,13 @@ export interface PresenceData {
export type ChatMutation = { action: proto.ISyncActionValue, index: [string, string], indexMac: Uint8Array, valueMac: Uint8Array, operation: number }
export type WAPatchCreate = {
syncAction: proto.ISyncActionValue
index: [string, string]
type: WAPatchName
apiVersion: number
}
export type Chat = Omit<proto.IConversation, 'messages'> & {
/** unix timestamp of date when mute ends, if applicable */
mute?: number | null

View File

@@ -1,6 +1,6 @@
import { Boom } from '@hapi/boom'
import { aesDecrypt, hmacSign, aesEncrypt, hkdf } from "./crypto"
import { AuthenticationState, ChatModification, ChatMutation, WAPatchName, LTHashState } from "../Types"
import { AuthenticationState, WAPatchCreate, ChatMutation, WAPatchName, LTHashState } from "../Types"
import { proto } from '../../WAProto'
import { LT_HASH_ANTI_TAMPERING } from '../WABinary/LTHash'
import { BinaryNode, getBinaryNodeChild, getBinaryNodeChildren } from '../WABinary'
@@ -92,10 +92,7 @@ const generatePatchMac = (snapshotMac: Uint8Array, valueMacs: Uint8Array[], vers
}
export const encodeSyncdPatch = async(
syncAction: proto.ISyncActionValue,
index: [string, string],
type: WAPatchName,
operation: proto.SyncdMutation.SyncdMutationSyncdOperation,
{ type, index, syncAction, apiVersion }: WAPatchCreate,
{ creds: { myAppStateKeyId }, keys }: AuthenticationState
) => {
const key = !!myAppStateKeyId ? await keys.getAppStateSyncKey(myAppStateKeyId) : undefined
@@ -104,6 +101,8 @@ export const encodeSyncdPatch = async(
}
const encKeyId = Buffer.from(myAppStateKeyId, 'base64')
const operation = proto.SyncdMutation.SyncdMutationSyncdOperation.SET
const state = { ...await keys.getAppStateSyncVersion(type) }
const indexBuffer = Buffer.from(JSON.stringify(index))
@@ -111,7 +110,7 @@ export const encodeSyncdPatch = async(
index: indexBuffer,
value: syncAction,
padding: new Uint8Array(0),
version: 2
version: apiVersion
}).finish()
const keyValue = mutationKeys(key!.keyData!)