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.9 kB · 47 lines
TypeScript
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748import type {Logger} from "@foxxmd/logging";import type {Request} from "express";import { IngressNotifier } from "./IngressNotifier.ts";import { parseIdentifiersFromRequest } from "../../utils/RequestUtils.ts";import { requestMatchers } from "../EndpointListenbrainzSource.ts";
export class LZEndpointNotifier extends IngressNotifier {
constructor(logger: Logger) { super('Listenbrainz Endpoint', logger); }
seenSlugs: Record<string, boolean> = {}; notifyBySource(req: Request, isRaw: boolean): [boolean, (string | undefined)] {
if(!isRaw) {
const [slug, token] = parseIdentifiersFromRequest(req, requestMatchers); if(slug === false) { return [false, `Request URL was not valid: ${req.baseUrl}`]; } const slugStr = slug ?? '(no slug)';
if(token === false) { return [false, `Request URL was valid and 'Authorization' header was present but invalid. Authorization header should be 'Token tokenValue' but was '${req.header('Authorization')}'`]; } const tokenStr = token ?? '(no token)'; const redactedToken = token !== undefined ? `${(token as string).substring(0,3)}****` : '(no token)';
const identifier = `${slugStr}-${tokenStr}`;
if(this.seenSlugs[identifier] === undefined) { this.seenSlugs[identifier] = true; return [true, `Received a well formed request to endpoint with -- Slug: ${slugStr} | Token: ${redactedToken} -- for the first time.`]; } }
return [true, undefined]; }
notifyByRequest(req: Request, isRaw: boolean): string | undefined { if(req.method !== 'POST') { return `Expected POST request (submit-listen payload) but received ${req.method}`; } return; }}