Decode a receipt body before reading it and stop an unnameable state TLV overriding it

This commit is contained in:
2026-08-27 16:08:54 +02:00
parent 4c08fe8fa3
commit b9f77ec969
9 changed files with 102 additions and 49 deletions
+2 -8
View File
@@ -3,7 +3,7 @@ import type { MessageState } from './defs/constants.ts';
import type { SmppLog } from './log.ts';
import { ExpiringGroups } from './expiring-groups.ts';
export type MessageDlr = Dlr & { segments: Dlr[] };
export type MessageDlr = Dlr & { segments: Dlr[]; smsId: string };
export type DlrMergerOptions = {
log: SmppLog;
@@ -42,12 +42,6 @@ const severity: Record<MessageState, number> = {
UNDELIVERABLE: 9,
};
function severityOf(dlr: Dlr): number {
const ranked: Record<string, number | undefined> = severity;
return ranked[dlr.statusMsg] ?? severity.UNKNOWN;
}
export class DlrMerger {
private readonly groups: ExpiringGroups<Group>;
private readonly log: SmppLog;
@@ -112,7 +106,7 @@ export class DlrMerger {
this.groups.delete(base);
const segments = [...group.parts.entries()].sort(([a], [b]) => a - b).map(([, one]) => one);
const worst = segments.reduce((carry, one) => (severityOf(one) > severityOf(carry) ? one : carry));
const worst = segments.reduce((carry, one) => (severity[one.statusMsg] > severity[carry.statusMsg] ? one : carry));
return { ...worst, segments, smsId: base };
}