Something went wrong. Try again.
[READ-ONLY] Mirror of https://github.com/FoxxMD/multi-scrobbler. Scrobble plays from multiple sources to multiple clients docs.multi-scrobbler.app
deezer docker jellyfin koito lastfm listenbrainz maloja mopidy mpris music music-assistant plex scrobble self-hosted spotify subsonic tautulli youtube-music
Something went wrong. Try again.
1.1 kB · 34 lines
TypeScript
at strict
1234567891011121314151617181920212223242526272829303132333435import type {Logger} from "@foxxmd/logging";import type {Request} from "express";import path from "path";import { IngressNotifier } from "./IngressNotifier.ts";
export class WebhookNotifier extends IngressNotifier {
constructor(logger: Logger) { super('WebScrobbler', logger); }
seenSlugs: Record<string, boolean> = {}; notifyBySource(req: Request, isRaw: boolean): [boolean, (string | undefined)] {
if(!isRaw) { const parts = path.parse(req.path); const slug = parts.name;
if(this.seenSlugs[slug] === undefined) { this.seenSlugs[slug] = true; return [true, `Received data for API URL slug '${slug === 'webscrobbler' ? '(none)' : slug}' for the first time.`]; } }
return [true, undefined]; }
notifyByRequest(req: Request, isRaw: boolean): string | undefined { if(req.method !== 'POST' && req.method !== 'OPTIONS') { return `Expected POST or OPTIONS request (webhook payload) but received ${req.method}`; } return; }}