updated-report.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. 'use strict';
  2. const { parseXML, childAttr } = require('../parser');
  3. const {
  4. createDoc,
  5. parseEiResponse,
  6. serializeEiResponse,
  7. energyInteropNs,
  8. } = require('../shared');
  9. const { fragment } = require('xmlbuilder2');
  10. async function parse(input) {
  11. const json = await parseXML(input);
  12. const o =
  13. json['oadrPayload']['$$']['oadrSignedObject'][0]['$$'][
  14. 'oadrUpdatedReport'
  15. ][0]['$$'];
  16. const { code, description, requestId } = parseEiResponse(
  17. o['eiResponse'][0]['$$'],
  18. );
  19. const result = {
  20. _type: 'oadrUpdatedReport',
  21. responseCode: code,
  22. responseRequestId: requestId,
  23. };
  24. if (description != null) result.responseDescription = description;
  25. const venId = childAttr(o, 'venID');
  26. if (venId != null) {
  27. result.venId = venId;
  28. }
  29. return result;
  30. }
  31. function serialize(obj) {
  32. const venId =
  33. obj.venId != null
  34. ? fragment()
  35. .ele(energyInteropNs, 'ei:venID')
  36. .txt(obj.venId)
  37. : fragment();
  38. const doc = createDoc()
  39. .ele('@oadr2b', 'oadr2b:oadrPayload')
  40. .ele('oadr2b:oadrSignedObject')
  41. .ele('oadr2b:oadrUpdatedReport')
  42. .import(serializeEiResponse(obj))
  43. .import(venId)
  44. .doc();
  45. return doc.end({ headless: true, prettyPrint: false });
  46. }
  47. async function canParse(input) {
  48. const json = await parseXML(input);
  49. const o = json['oadrPayload']['$$']['oadrSignedObject'][0]['$$'];
  50. return o['oadrUpdatedReport'] != null;
  51. }
  52. function canSerialize(message) {
  53. return message._type === 'oadrUpdatedReport';
  54. }
  55. module.exports = {
  56. parse,
  57. serialize,
  58. canParse,
  59. canSerialize,
  60. };