'use strict'; const { parseXML, childAttr, boolean, required } = require('../parser'); const { create, fragment } = require('xmlbuilder2'); const oadrPayloadNs = 'http://www.w3.org/2000/09/xmldsig#'; const oadrNs = 'http://openadr.org/oadr-2.0b/2012/07'; const energyInteropNs = 'http://docs.oasis-open.org/ns/energyinterop/201110'; const energyInteropPayloadsNs = 'http://docs.oasis-open.org/ns/energyinterop/201110/payloads'; const calendarNs = 'urn:ietf:params:xml:ns:icalendar-2.0'; async function parse(input) { const json = await parseXML(input); const o = json['oadrPayload']['$$']['oadrSignedObject'][0]['$$'][ 'oadrCreatePartyRegistration' ][0]['$$']; const result = { _type: 'oadrCreatePartyRegistration', requestId: required(childAttr(o, 'requestID'), 'requestID'), oadrProfileName: required( childAttr(o, 'oadrProfileName'), 'oadrProfileName', ), oadrTransportName: required( childAttr(o, 'oadrTransportName'), 'oadrTransportName', ), oadrReportOnly: required( boolean(childAttr(o, 'oadrReportOnly')), 'oadrReportOnly', ), oadrXmlSignature: required( boolean(childAttr(o, 'oadrXmlSignature')), 'oadrXmlSignature', ), }; const registrationId = childAttr(o, 'registrationID'); const venId = childAttr(o, 'venID'); const oadrTransportAddress = childAttr(o, 'oadrTransportAddress'); const oadrVenName = childAttr(o, 'oadrVenName'); const oadrHttpPullModel = boolean(childAttr(o, 'oadrHttpPullModel')); if (registrationId != null) result.registrationId = registrationId; if (venId != null) result.venId = venId; if (oadrTransportAddress != null) result.oadrTransportAddress = oadrTransportAddress; if (oadrVenName != null) result.oadrVenName = oadrVenName; if (oadrHttpPullModel != null) result.oadrHttpPullModel = oadrHttpPullModel; return result; } function serialize(obj) { const registrationId = obj.registrationId != null ? fragment() .ele(energyInteropNs, 'ei:registrationID') .txt(obj.registrationId) : fragment(); const venId = obj.venId != null ? fragment() .ele(energyInteropNs, 'ei:venID') .txt(obj.venId) : fragment(); const oadrTransportAddress = obj.oadrTransportAddress != null ? fragment() .ele(oadrNs, 'oadr2b:oadrTransportAddress') .txt(obj.oadrTransportAddress) : fragment(); const oadrVenName = obj.oadrVenName != null ? fragment() .ele(oadrNs, 'oadr2b:oadrVenName') .txt(obj.oadrVenName) : fragment(); const oadrHttpPullModel = obj.oadrHttpPullModel != null ? fragment() .ele(oadrNs, 'oadr2b:oadrHttpPullModel') .txt(obj.oadrHttpPullModel) : fragment(); const doc = create({ namespaceAlias: { ns: oadrPayloadNs, oadr2b: oadrNs, ei: energyInteropNs, pyld: energyInteropPayloadsNs, cal: calendarNs, }, }) .ele('@oadr2b', 'oadr2b:oadrPayload') .ele('oadr2b:oadrSignedObject') .ele('oadr2b:oadrCreatePartyRegistration') .att(energyInteropNs, 'ei:schemaVersion', '2.0b') .ele('@pyld', 'pyld:requestID') .txt(obj.requestId) .up() .import(venId) .import(registrationId) .ele('oadr2b:oadrProfileName') .txt(obj.oadrProfileName) .up() .ele('oadr2b:oadrTransportName') .txt(obj.oadrTransportName) .up() .import(oadrTransportAddress) .ele('oadr2b:oadrReportOnly') .txt(obj.oadrReportOnly) .up() .ele('oadr2b:oadrXmlSignature') .txt(obj.oadrXmlSignature) .up() .import(oadrVenName) .import(oadrHttpPullModel) .doc(); return doc.end({ headless: true, prettyPrint: false }); } module.exports = { parse, serialize, };