create-party-registration.js 3.6 KB

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