[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
0

Configure Feed

Select the types of activity you want to include in your feed.

more fixes to get all tests passing

FoxxMD (Jul 9, 2026, 12:17 PM UTC) 66db4d01 15e55dc6

+25 -34
+1 -1
src/backend/common/vendor/teal/TealApiClient.ts
··· 1 - import dayjs, { Dayjs, type ManipulateType } from "dayjs"; 1 + import dayjs, { type Dayjs, type ManipulateType } from "dayjs"; 2 2 import { type PlayObject, type PlayObjectMinimal, type BrainzMeta, type MBID, type ScrobbleActionResult, type UnixTimestamp } from "../../../../core/Atomic.ts"; 3 3 import { getRoot } from "../../../ioc.ts"; 4 4 import { removeUndefinedKeys } from '../../../../core/DataUtils.ts';
+21 -30
src/backend/sources/JellyfinApiSource.ts
··· 1 - import { type Logger } from "@foxxmd/logging"; 2 1 import { WS } from "iso-websocket"; 3 2 // @ts-expect-error weird typings? 4 3 import { Api, Jellyfin } from "@jellyfin/sdk"; 5 4 import { 6 5 // @ts-expect-error weird typings? 7 - AuthenticationResult, 6 + type BaseItemDto, 8 7 // @ts-expect-error weird typings? 9 - BaseItemDto, 8 + type CollectionType, 10 9 // @ts-expect-error weird typings? 11 - BaseItemKind, 12 - // @ts-expect-error weird typings? 13 - ItemSortBy, 10 + type ImageUrlsApi, 14 11 // @ts-expect-error weird typings? 15 12 MediaType, 16 13 // @ts-expect-error weird typings? 17 - SessionInfo, 14 + type SessionInfo, 18 15 // @ts-expect-error weird typings? 19 - SortOrder, UserDto, VirtualFolderInfo, CollectionType, CollectionTypeOptions, ImageUrlsApi 16 + type UserDto, 17 + // @ts-expect-error weird typings? 18 + type VirtualFolderInfo 20 19 } from "@jellyfin/sdk/lib/generated-client/index.js"; 21 20 import { 22 21 // @ts-expect-error weird typings? 23 - getItemsApi, 22 + SystemInfoIssue 23 + } from "@jellyfin/sdk/lib/index.js"; 24 + import { 25 + // @ts-expect-error weird typings? 26 + getImageApi, 27 + // @ts-expect-error weird typings? 28 + getLibraryStructureApi, 24 29 // @ts-expect-error weird typings? 25 30 getSessionApi, 26 31 // @ts-expect-error weird typings? 27 32 getSystemApi, 28 33 // @ts-expect-error weird typings? 29 - getUserApi, 30 - // @ts-expect-error weird typings? 31 - getApiKeyApi, 32 - // @ts-expect-error weird typings? 33 - getLibraryStructureApi, 34 - // @ts-expect-error weird typings? 35 - getImageApi, 36 - 34 + getUserApi 37 35 } from "@jellyfin/sdk/lib/utils/api/index.js"; 38 - import { 39 - // @ts-expect-error weird typings? 40 - SystemInfoIssue 41 - } 42 - from "@jellyfin/sdk/lib/index.js"; 43 36 import dayjs from "dayjs"; 44 37 import EventEmitter from "events"; 38 + import { FixedSizeList } from "fixed-size-list"; 45 39 import { type ArtistCredit, type BrainzMeta, type PlayObject, type PlayObjectMinimal } from "../../core/Atomic.ts"; 46 - import { artistNamesToCredits, artistNameToCredit, buildTrackString, combinePartsToString, truncateStringToLength } from "../../core/StringUtils.ts"; 40 + import { genGroupIdStr } from '../../core/PlayUtils.ts'; 41 + import { artistNameToCredit, buildTrackString, combinePartsToString, truncateStringToLength } from "../../core/StringUtils.ts"; 47 42 import { 48 43 type FormatPlayObjectOptions, 49 44 type InternalConfig, 50 - type PlayerStateData, 51 45 type PlayerStateDataMaybePlay, 52 46 REPORTED_PLAYER_STATUSES 53 47 } from "../common/infrastructure/Atomic.ts"; 54 - import { type PlayPlatformId } from '../../core/Atomic.ts'; 55 48 import { type JellyApiSourceConfig } from "../common/infrastructure/config/source/jellyfin.ts"; 56 - import { getPlatformIdFromData, isDebugMode, parseBool, } from "../utils.ts"; 57 - import { genGroupIdStr } from '../../core/PlayUtils.ts'; 49 + import { getPlatformIdFromData, isDebugMode } from "../utils.ts"; 50 + import { noCasePropObj } from "../utils/DataUtils.ts"; 58 51 import { joinedUrl } from "../utils/NetworkUtils.ts"; 52 + import { baseFormatPlayObj } from "../utils/PlayTransformUtils.ts"; 59 53 import { hashObject, parseArrayFromMaybeString } from "../utils/StringUtils.ts"; 60 54 import { MemoryPositionalSource } from "./MemoryPositionalSource.ts"; 61 - import { FixedSizeList } from "fixed-size-list"; 62 - import { baseFormatPlayObj } from "../utils/PlayTransformUtils.ts"; 63 - import { noCasePropObj } from "../utils/DataUtils.ts"; 64 55 65 56 const shortDeviceId = truncateStringToLength(10, ''); 66 57
+1 -1
src/backend/sources/MopidySource.ts
··· 1 1 import { loggerTest } from "@foxxmd/logging"; 2 2 import dayjs from "dayjs"; 3 3 import { EventEmitter } from "events"; 4 - import Mopidy, { models } from "mopidy"; 4 + import Mopidy, { type models } from "mopidy"; 5 5 import normalizeUrl from 'normalize-url'; 6 6 import pEvent from 'p-event'; 7 7 import { URL } from "url";
+2 -2
src/backend/tests/jellyfin/jellyfin.test.ts
··· 2 2 import { assert, expect } from 'chai'; 3 3 import EventEmitter from "events"; 4 4 import { describe, it } from 'mocha'; 5 - import { type JsonPlayObject, type PlayMeta, type PlayObject } from "../../../core/Atomic.ts"; 5 + import { type JsonPlayObject, type PlayMeta } from "../../../core/Atomic.ts"; 6 6 7 7 import JellyfinApiSource from "../../sources/JellyfinApiSource.ts"; 8 8 import validSession from './validSession.json' with { type: "json" }; 9 9 import { type JellyApiData } from "../../common/infrastructure/config/source/jellyfin.ts"; 10 10 import { generatePlay } from "../../../core/PlayTestUtils.ts"; 11 11 import { faker, fakerJA } from "@faker-js/faker"; 12 - import { 12 + import type { 13 13 // @ts-expect-error weird typings? 14 14 SessionInfo, 15 15 // @ts-expect-error weird typings?