naruyaizumi
Version:
A WebSockets library for interacting with WhatsApp Web
57 lines (56 loc) • 2.03 kB
JavaScript
import { assertNodeErrorFree, getBinaryNodeChild } from "../../WABinary/index.js";
export class USyncDeviceProtocol {
constructor() {
this.name = "devices";
}
getQueryElement() {
return {
tag: "devices",
attrs: {
version: "2",
},
};
}
getUserElement(/* user: USyncUser */) {
//TODO: Implement device phashing, ts and expectedTs
//TODO: if all are not present, return null <- current behavior
//TODO: otherwise return a node w tag 'devices' w those as attrs
return null;
}
parser(node) {
const deviceList = [];
let keyIndex = undefined;
if (node.tag === "devices") {
assertNodeErrorFree(node);
const deviceListNode = getBinaryNodeChild(node, "device-list");
const keyIndexNode = getBinaryNodeChild(node, "key-index-list");
if (Array.isArray(deviceListNode?.content)) {
for (const { tag, attrs } of deviceListNode.content) {
const id = +attrs.id;
const keyIndex = +attrs["key-index"];
if (tag === "device") {
deviceList.push({
id,
keyIndex,
isHosted: !!(attrs["is_hosted"] && attrs["is_hosted"] === "true"),
});
}
}
}
if (keyIndexNode?.tag === "key-index-list") {
keyIndex = {
timestamp: +keyIndexNode.attrs["ts"],
signedKeyIndex: keyIndexNode?.content,
expectedTimestamp: keyIndexNode.attrs["expected_ts"]
? +keyIndexNode.attrs["expected_ts"]
: undefined,
};
}
}
return {
deviceList,
keyIndex,
};
}
}
//# sourceMappingURL=USyncDeviceProtocol.js.map