cancel-party-registration.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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. async function canParse(input) {
  56. const json = await parseXML(input);
  57. const o = json['oadrPayload']['$$']['oadrSignedObject'][0]['$$'];
  58. return o['oadrCancelPartyRegistration'] != null;
  59. }
  60. module.exports = {
  61. parse,
  62. serialize,
  63. canParse,
  64. };