created-party-registration.js 3.3 KB

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