create-party-registration.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. 'use strict';
  2. const { parseXML, childAttr, boolean, 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. 'oadrCreatePartyRegistration'
  15. ][0]['$$'];
  16. const result = {
  17. _type: 'oadrCreatePartyRegistration',
  18. requestId: required(childAttr(o, 'requestID'), 'requestID'),
  19. oadrProfileName: required(
  20. childAttr(o, 'oadrProfileName'),
  21. 'oadrProfileName',
  22. ),
  23. oadrTransportName: required(
  24. childAttr(o, 'oadrTransportName'),
  25. 'oadrTransportName',
  26. ),
  27. oadrReportOnly: required(
  28. boolean(childAttr(o, 'oadrReportOnly')),
  29. 'oadrReportOnly',
  30. ),
  31. oadrXmlSignature: required(
  32. boolean(childAttr(o, 'oadrXmlSignature')),
  33. 'oadrXmlSignature',
  34. ),
  35. };
  36. const registrationId = childAttr(o, 'registrationID');
  37. const venId = childAttr(o, 'venID');
  38. const oadrTransportAddress = childAttr(o, 'oadrTransportAddress');
  39. const oadrVenName = childAttr(o, 'oadrVenName');
  40. const oadrHttpPullModel = boolean(childAttr(o, 'oadrHttpPullModel'));
  41. if (registrationId != null) result.registrationId = registrationId;
  42. if (venId != null) result.venId = venId;
  43. if (oadrTransportAddress != null)
  44. result.oadrTransportAddress = oadrTransportAddress;
  45. if (oadrVenName != null) result.oadrVenName = oadrVenName;
  46. if (oadrHttpPullModel != null) result.oadrHttpPullModel = oadrHttpPullModel;
  47. return result;
  48. }
  49. function serialize(obj) {
  50. const registrationId =
  51. obj.registrationId != null
  52. ? fragment()
  53. .ele(energyInteropNs, 'ei:registrationID')
  54. .txt(obj.registrationId)
  55. : fragment();
  56. const venId =
  57. obj.venId != null
  58. ? fragment()
  59. .ele(energyInteropNs, 'ei:venID')
  60. .txt(obj.venId)
  61. : fragment();
  62. const oadrTransportAddress =
  63. obj.oadrTransportAddress != null
  64. ? fragment()
  65. .ele(oadrNs, 'oadr2b:oadrTransportAddress')
  66. .txt(obj.oadrTransportAddress)
  67. : fragment();
  68. const oadrVenName =
  69. obj.oadrVenName != null
  70. ? fragment()
  71. .ele(oadrNs, 'oadr2b:oadrVenName')
  72. .txt(obj.oadrVenName)
  73. : fragment();
  74. const oadrHttpPullModel =
  75. obj.oadrHttpPullModel != null
  76. ? fragment()
  77. .ele(oadrNs, 'oadr2b:oadrHttpPullModel')
  78. .txt(obj.oadrHttpPullModel)
  79. : fragment();
  80. const doc = create({
  81. namespaceAlias: {
  82. ns: oadrPayloadNs,
  83. oadr2b: oadrNs,
  84. ei: energyInteropNs,
  85. pyld: energyInteropPayloadsNs,
  86. cal: calendarNs,
  87. },
  88. })
  89. .ele('@oadr2b', 'oadr2b:oadrPayload')
  90. .ele('oadr2b:oadrSignedObject')
  91. .ele('oadr2b:oadrCreatePartyRegistration')
  92. .att(energyInteropNs, 'ei:schemaVersion', '2.0b')
  93. .ele('@pyld', 'pyld:requestID')
  94. .txt(obj.requestId)
  95. .up()
  96. .import(venId)
  97. .import(registrationId)
  98. .ele('oadr2b:oadrProfileName')
  99. .txt(obj.oadrProfileName)
  100. .up()
  101. .ele('oadr2b:oadrTransportName')
  102. .txt(obj.oadrTransportName)
  103. .up()
  104. .import(oadrTransportAddress)
  105. .ele('oadr2b:oadrReportOnly')
  106. .txt(obj.oadrReportOnly)
  107. .up()
  108. .ele('oadr2b:oadrXmlSignature')
  109. .txt(obj.oadrXmlSignature)
  110. .up()
  111. .import(oadrVenName)
  112. .import(oadrHttpPullModel)
  113. .doc();
  114. return doc.end({ headless: true, prettyPrint: false });
  115. }
  116. async function canParse(input) {
  117. const json = await parseXML(input);
  118. const o = json['oadrPayload']['$$']['oadrSignedObject'][0]['$$'];
  119. return o['oadrCreatePartyRegistration'] != null;
  120. }
  121. module.exports = {
  122. parse,
  123. serialize,
  124. canParse,
  125. };