cancel-party-registration.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. 'use strict';
  2. const { parseXML, childAttr, required } = require('../parser');
  3. const { create, fragment } = 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. const calendarNs = 'urn:ietf:params:xml:ns:icalendar-2.0';
  10. async function parse(input) {
  11. const json = await parseXML(input);
  12. const o =
  13. json['oadrPayload']['$$']['oadrSignedObject'][0]['$$'][
  14. 'oadrCancelPartyRegistration'
  15. ][0]['$$'];
  16. const result = {
  17. _type: 'oadrCancelPartyRegistration',
  18. requestId: required(childAttr(o, 'requestID'), 'requestID'),
  19. registrationId: required(childAttr(o, 'registrationID'), 'registrationID'),
  20. };
  21. const venId = childAttr(o, 'venID');
  22. if (venId != null) result.venId = venId;
  23. return result;
  24. }
  25. function serialize(obj) {
  26. const venId =
  27. obj.venId != null
  28. ? fragment()
  29. .ele(energyInteropNs, 'ei:venID')
  30. .txt(obj.venId)
  31. : fragment();
  32. const doc = create({
  33. namespaceAlias: {
  34. ns: oadrPayloadNs,
  35. oadr2b: oadrNs,
  36. ei: energyInteropNs,
  37. pyld: energyInteropPayloadsNs,
  38. cal: calendarNs,
  39. },
  40. })
  41. .ele('@oadr2b', 'oadr2b:oadrPayload')
  42. .ele('oadr2b:oadrSignedObject')
  43. .ele('oadr2b:oadrCancelPartyRegistration')
  44. .att(energyInteropNs, 'ei:schemaVersion', '2.0b')
  45. .ele('@pyld', 'pyld:requestID')
  46. .txt(obj.requestId)
  47. .up()
  48. .ele('@ei', 'ei:registrationID')
  49. .txt(obj.registrationId)
  50. .up()
  51. .import(venId)
  52. .doc();
  53. return doc.end({ headless: true, prettyPrint: false });
  54. }
  55. module.exports = {
  56. parse,
  57. serialize,
  58. };