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.
2.5 kB · 57 lines
TypeScript
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657import type { Dayjs } from "dayjs";import type { DateLike, ErrorLike, LifecycleStep, PlayMatchResult, PlayObject, PlayState, QueueContext, QueueStatus, ScrobbleResult } from "./Atomic.ts";import type { Changeset } from "json-diff-ts";
export type PlayEventType = 'transform' | 'queueStateChange' | 'playStateChange' | 'dupeCheck' | 'scrobbleResult' | 'updatePlay';export const PLAY_EVENT_TYPE = { transform: 'transform', updatePlay: 'updatePlay', queueStateChange: 'queueStateChange', playStateChange: 'playStateChange', dupeCheck: 'dupeCheck', scrobbleResult: 'scrobbleResult'} as const satisfies Record<string, PlayEventType>;
export interface BasePlayEvent<K extends PlayEventType, T, D extends DateLike = Dayjs> { id?: number playId: number eventName: K error?: ErrorLike createdAt?: D data: T}
export type PlayEventTranformData = LifecycleStep[];export type PlayEventTransform<D extends DateLike = Dayjs> = BasePlayEvent<'transform', PlayEventTranformData, D>;
export interface PlayEventQueueStateChangeData { queueName: string queueStatus: QueueStatus context?: QueueContext | null retries?: number error?: ErrorLike | null}export type PlayEventQueueStateChange<D extends DateLike = Dayjs> = BasePlayEvent<'queueStateChange', PlayEventQueueStateChangeData, D>;
export interface PlayEventPlayStateChangeData { state: PlayState error?: ErrorLike | null reason?: string}export type PlayEventPlayStateChange<D extends DateLike = Dayjs> = BasePlayEvent<'playStateChange', PlayEventPlayStateChangeData, D>;
export type PlayEventDupeCheckData<D extends DateLike = Dayjs> = PlayMatchResult<D>;export type PlayEventDupeCheck<D extends DateLike = Dayjs> = BasePlayEvent<'dupeCheck', PlayEventDupeCheckData<D>, D>;
export type PlayEventScrobbleResultData<D extends DateLike = Dayjs> = ScrobbleResult<D>;export type PlayEventScrobbleResult<D extends DateLike = Dayjs> = BasePlayEvent<'scrobbleResult', PlayEventScrobbleResultData<D>, D>;
export type PlayEventUpdatePlayData = {input: Partial<PlayObject>, patch: Changeset};export type PlayEventUpdatePlay<D extends DateLike = Dayjs> = BasePlayEvent<'updatePlay', PlayEventUpdatePlayData, D>;
export type PlayEvent<D extends DateLike = Dayjs> = PlayEventTransform<D> | PlayEventQueueStateChange<D> | PlayEventPlayStateChange<D> | PlayEventDupeCheck<D> | PlayEventScrobbleResult<D> | PlayEventUpdatePlay<D>;