Outbound notification webhook (MESH_NOTIFY_URL) on RX text — issue #17 (#20)
CI / build + unit (push) Successful in 36s

This commit was merged in pull request #20.
This commit is contained in:
2026-09-25 03:35:50 +02:00
parent 74f3080626
commit 024dabda97
6 changed files with 140 additions and 3 deletions
+19
View File
@@ -157,6 +157,12 @@ export class MeshService implements OnModuleInit, OnModuleDestroy {
process.env.MESH_SEND_CHANNEL ?? '3',
10,
);
// outbound notification webhook: fire-and-forget POST when an rx text lands on the notify channel; empty URL = disabled
private readonly notifyUrl = process.env.MESH_NOTIFY_URL ?? '';
private readonly notifyChannel = parseInt(
process.env.MESH_NOTIFY_CHANNEL ?? '3',
10,
);
// how often the poller re-upserts the history buffer into SQLite (ms)
private readonly pollMs = parseInt(process.env.MESH_POLL_MS ?? '1000', 10);
@@ -599,6 +605,19 @@ export class MeshService implements OnModuleInit, OnModuleDestroy {
channel: pkt.channel ?? 0,
at: Date.now(),
});
if (this.notifyUrl && (pkt.channel ?? 0) === this.notifyChannel) {
const body: Record<string, unknown> = { text };
if (pkt.from !== undefined) body.from = pkt.from;
void fetch(this.notifyUrl, {
method: 'POST',
headers: { 'content-type': 'application/json' },
body: JSON.stringify(body),
}).catch((err: unknown) =>
this.logger.warn(
'notify webhook failed: ' + (err as Error).message,
),
);
}
} else if (decoded && decoded.portnum === PORT_POSITION_APP) {
// live position update: the Position is serialized in Data.payload
let pos: Proto.Mesh.Position | undefined;