update-report.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. 'use strict';
  2. const { parseXML, childAttr, required } = require('../parser');
  3. const { createDoc, serializeReports, parseReports } = require('../shared');
  4. async function parse(input) {
  5. const json = await parseXML(input);
  6. const o =
  7. json['oadrPayload']['$$']['oadrSignedObject'][0]['$$'][
  8. 'oadrUpdateReport'
  9. ][0]['$$'];
  10. const requestId = required(childAttr(o, 'requestID'), 'requestID');
  11. const result = {
  12. _type: 'oadrUpdateReport',
  13. requestId: requestId,
  14. };
  15. result.reports = parseReports(o['oadrReport'] || []);
  16. return result;
  17. }
  18. function validate(obj) {
  19. if (!obj.requestId) {
  20. throw new Error('Missing requestId');
  21. }
  22. }
  23. function serialize(obj) {
  24. validate(obj);
  25. const doc = createDoc()
  26. .ele('@oadr2b', 'oadr2b:oadrPayload')
  27. .ele('oadr2b:oadrSignedObject')
  28. .ele('oadr2b:oadrUpdateReport')
  29. .att('@ei', 'ei:schemaVersion', '2.0b')
  30. .ele('@pyld', 'pyld:requestID')
  31. .txt(obj.requestId)
  32. .up()
  33. .import(serializeReports(obj.reports))
  34. .up()
  35. .doc();
  36. return doc.end({ headless: true, prettyPrint: false });
  37. }
  38. async function canParse(input) {
  39. const json = await parseXML(input);
  40. const o = json['oadrPayload']['$$']['oadrSignedObject'][0]['$$'];
  41. return o['oadrUpdateReport'] != null;
  42. }
  43. function canSerialize(message) {
  44. return message._type === 'oadrUpdateReport';
  45. }
  46. module.exports = {
  47. parse,
  48. serialize,
  49. canParse,
  50. canSerialize,
  51. };