create-report.js 1.4 KB

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