| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- 'use strict';
- const { parseXML, childAttr, required } = require('../parser');
- const {
- createDoc,
- parseEiResponse,
- serializeEiResponse,
- oadrNs,
- energyInteropNs,
- } = require('../shared');
- const { fragment } = require('xmlbuilder2');
- function parsePendingReport(pendingReport) {
- return {
- reportRequestId: required(
- childAttr(pendingReport, 'reportRequestID'),
- 'reportRequestID',
- ),
- };
- }
- function parsePendingReports(pendingReports) {
- return pendingReports.map(x => parsePendingReport(x['$$']));
- }
- async function parse(input) {
- const json = await parseXML(input);
- const o =
- json['oadrPayload']['$$']['oadrSignedObject'][0]['$$'][
- 'oadrCreatedReport'
- ][0]['$$'];
- const { code, description, requestId } = parseEiResponse(
- o['eiResponse'][0]['$$'],
- );
- const result = {
- _type: 'oadrCreatedReport',
- responseCode: code,
- responseRequestId: requestId,
- pendingReports: parsePendingReports(o['oadrPendingReports']),
- };
- if (description != null) result.responseDescription = description;
- const venId = childAttr(o, 'venID');
- if (venId != null) {
- result.venId = venId;
- }
- return result;
- }
- function serializePendingReport(pendingReport) {
- return fragment()
- .ele(energyInteropNs, 'ei:reportRequestID')
- .txt(pendingReport.reportRequestId)
- .up();
- }
- function serializePendingReports(pendingReports) {
- const result = fragment();
- const responsesHolder = result.ele(oadrNs, 'oadr2b:oadrPendingReports');
- pendingReports.forEach(x =>
- responsesHolder.import(serializePendingReport(x)),
- );
- return result;
- }
- function serialize(obj) {
- const venId =
- obj.venId != null
- ? fragment()
- .ele(energyInteropNs, 'ei:venID')
- .txt(obj.venId)
- : fragment();
- const doc = createDoc()
- .ele('@oadr2b', 'oadr2b:oadrPayload')
- .ele('oadr2b:oadrSignedObject')
- .ele('oadr2b:oadrCreatedReport')
- .import(serializeEiResponse(obj))
- .import(serializePendingReports(obj.pendingReports))
- .import(venId)
- .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['oadrCreatedReport'] != null;
- }
- function canSerialize(message) {
- return message._type === 'oadrCreatedReport';
- }
- module.exports = {
- parse,
- serialize,
- canParse,
- canSerialize,
- };
|