sim800
Version:
A modern and opiniated module for SIM800 GSM modems ( SIM800 / SIM800L ).
32 lines • 2.74 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.deliveryReportStreamSubscriberFactory = void 0;
const sim800_outgoing_sms_interface_1 = require("../interfaces/sim800-outgoing-sms.interface");
const deliveryReportStreamSubscriberFactory = (client, logger) => (event) => {
var _a, _b;
// trying to find the message in the queue
const existingSms = client.outboxSpooler.find((sms) => sms.parts.some((part) => part.messageReference === event.messageReference));
if (existingSms) {
// we know this part exists, as the first find() would have returned false otherwise
const part = existingSms.parts.find((part) => part.messageReference === event.messageReference);
part.status = event.status;
part.detail = event.detail;
if (event.status === sim800_outgoing_sms_interface_1.Sim800OutgoingSmsStatus.Delivered) {
part.deliveryDate = new Date();
}
// If this is not delivered, we can update the global message status
if (event.status !== sim800_outgoing_sms_interface_1.Sim800OutgoingSmsStatus.Delivered) {
existingSms.status = event.status;
(_a = logger.verbose) === null || _a === void 0 ? void 0 : _a.call(logger, `SMS ${existingSms.parts.map((existingPart) => existingPart.messageReference)} is now "${existingSms.status}", details : ${existingSms.parts.map((existingPart) => `- Part: ${existingPart.messageReference} - ${existingPart.detail} -`)}`);
client.eventEmitter.emit('delivery-report', existingSms.parts.map((existingPart) => existingPart.messageReference), existingSms.status, event.detail);
}
// If all parts are delivered, we can update the global message status
if (existingSms.parts.every((part) => part.status === sim800_outgoing_sms_interface_1.Sim800OutgoingSmsStatus.Delivered)) {
existingSms.status = sim800_outgoing_sms_interface_1.Sim800OutgoingSmsStatus.Delivered;
(_b = logger.verbose) === null || _b === void 0 ? void 0 : _b.call(logger, `SMS ${existingSms.parts.map((existingPart) => existingPart.messageReference)} is now "Delivered"`);
client.eventEmitter.emit('delivery-report', existingSms.parts.map((existingPart) => existingPart.messageReference), existingSms.status, existingSms.parts.map((existingPart) => (Object.assign({ messageReference: existingPart.messageReference, status: existingPart.status, detail: existingPart.detail }, (existingPart.deliveryDate ? { deliveryDate: existingPart.deliveryDate } : {})))));
}
}
};
exports.deliveryReportStreamSubscriberFactory = deliveryReportStreamSubscriberFactory;
//# sourceMappingURL=delivery-report-stream-subscriber.js.map