request-event.js 1.9 KB

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