54 lines
1.9 KiB
JavaScript
54 lines
1.9 KiB
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
|