create-party-registration.js 3.7 KB

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