@radzztnzx/rbail
Version:
Pro Bails based by Whiskeysockets, Modified by RadzzOffc
54 lines • 1.98 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