query-registration.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. 'use strict';
  2. const { parseXML, childAttr, required } = require('../parser');
  3. const { create } = require('xmlbuilder2');
  4. const oadrPayloadNs = 'http://www.w3.org/2000/09/xmldsig#';
  5. const oadrNs = 'http://openadr.org/oadr-2.0b/2012/07';
  6. const energyInteropNs = 'http://docs.oasis-open.org/ns/energyinterop/201110';
  7. const energyInteropPayloadsNs =
  8. 'http://docs.oasis-open.org/ns/energyinterop/201110/payloads';
  9. async function parse(input) {
  10. const json = await parseXML(input);
  11. const o =
  12. json['oadrPayload']['$$']['oadrSignedObject'][0]['$$'][
  13. 'oadrQueryRegistration'
  14. ][0]['$$'];
  15. return {
  16. _type: 'oadrQueryRegistration',
  17. requestId: required(childAttr(o, 'requestID'), 'requestID'),
  18. };
  19. }
  20. function serialize(obj) {
  21. const doc = create({
  22. namespaceAlias: {
  23. ns: oadrPayloadNs,
  24. oadr2b: oadrNs,
  25. ei: energyInteropNs,
  26. pyld: energyInteropPayloadsNs,
  27. },
  28. })
  29. .ele('@oadr2b', 'oadr2b:oadrPayload')
  30. .ele('oadr2b:oadrSignedObject')
  31. .ele('oadr2b:oadrQueryRegistration')
  32. .att(energyInteropNs, 'ei:schemaVersion', '2.0b')
  33. .ele('@pyld', 'pyld:requestID')
  34. .txt(obj.requestId)
  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['oadrQueryRegistration'] != null;
  42. }
  43. module.exports = {
  44. parse,
  45. serialize,
  46. canParse,
  47. };