'use strict'; const { parseXML, childAttr, required } = require('../parser'); const { fragment } = require('xmlbuilder2'); const { createDoc, energyInteropNs, serializeEiResponse, serializeDuration, parseEiResponse, } = require('../shared'); async function parse(input) { const json = await parseXML(input); const o = json['oadrPayload']['$$']['oadrSignedObject'][0]['$$'][ 'oadrCreatedPartyRegistration' ][0]['$$']; const { code, description, requestId } = parseEiResponse( o['eiResponse'][0]['$$'], ); const result = { _type: 'oadrCreatedPartyRegistration', responseCode: code, responseRequestId: requestId, }; if (description != null) { result.responseDescription = description; } if (code < 200 || code >= 300) { return result; } const registrationId = childAttr(o, 'registrationID'); if (registrationId != null) result.registrationId = registrationId; const venId = childAttr(o, 'venID'); if (venId != null) result.venId = venId; const vtnId = required(childAttr(o, 'vtnID'), 'vtnID'); if (vtnId != null) result.vtnId = vtnId; const oadrRequestedOadrPollFreq = childAttr(o, 'oadrRequestedOadrPollFreq'); if (oadrRequestedOadrPollFreq != null) { const oadrRequestedOadrPollFreqDuration = required( childAttr(oadrRequestedOadrPollFreq['$$'], 'duration'), 'duration', ); if (oadrRequestedOadrPollFreqDuration != null) result.pollFreqDuration = oadrRequestedOadrPollFreqDuration; } return result; } function validate(obj) { if (!obj.responseCode) { throw new Error('Missing responseCode'); } if (!obj.responseRequestId) { throw new Error('Missing responseRequestId'); } } function serialize(obj) { validate(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 vtnId = obj.vtnId != null ? fragment() .ele(energyInteropNs, 'ei:vtnID') .txt(obj.vtnId) : fragment(); const doc = createDoc() .ele('@oadr2b', 'oadr2b:oadrPayload') .ele('oadr2b:oadrSignedObject') .ele('oadr2b:oadrCreatedPartyRegistration') .att('@ei', 'ei:schemaVersion', '2.0b') .import(serializeEiResponse(obj)) .import(registrationId) .import(venId) .import(vtnId) .ele('oadr2b:oadrProfiles') .ele('oadr2b:oadrProfile') .ele('oadr2b:oadrProfileName') .txt('2.0b') .up() .ele('oadr2b:oadrTransports') .ele('oadr2b:oadrTransport') .ele('oadr2b:oadrTransportName') .txt('simpleHttp') .up() .up() .up() .up() .up() .ele('oadr2b:oadrRequestedOadrPollFreq') .import(serializeDuration(obj.pollFreqDuration)) .doc(); return doc.end({ headless: true, prettyPrint: false }); } async function canParse(input) { const json = await parseXML(input); const o = json['oadrPayload']['$$']['oadrSignedObject'][0]['$$']; return o['oadrCreatedPartyRegistration'] != null; } function canSerialize(message) { return message._type === 'oadrCreatedPartyRegistration'; } module.exports = { parse, serialize, canParse, canSerialize, };