diff --git a/eslint.config.js b/eslint.config.js index 73a94851..e938cd5e 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -1,6 +1,7 @@ // For more info, see https://github.com/storybookjs/eslint-plugin-storybook#configuration-flat-config-format import storybook from "eslint-plugin-storybook"; import boundaries from 'eslint-plugin-boundaries'; +import unusedImports from 'eslint-plugin-unused-imports'; import { defineConfig, globalIgnores } from "eslint/config"; @@ -35,14 +36,18 @@ export default defineConfig([ globalIgnores([ 'docsite/build', 'docsite/.docusaurus', - 'public/mockServiceWorker.js' + 'public/mockServiceWorker.js', + 'dist' ]), { plugins: { "prefer-arrow-functions": arrow, - js + js, + 'unused-imports': unusedImports + }, + rules: { + ...defaultRules, }, - rules: defaultRules, extends: [ tsEslint.configs.recommended, "js/recommended" @@ -91,8 +96,12 @@ export default defineConfig([ { // https://typescript-eslint.io/troubleshooting/faqs/eslint#i-get-errors-from-the-no-undef-rule-about-global-variables-not-being-defined-even-though-there-are-no-typescript-errors files: ['**/*.{ts,tsx,mts,cts}'], + plugins: { + 'unused-imports': unusedImports + }, rules: { - 'no-undef': 'off', + 'no-undef': 'off', + 'unused-imports/no-unused-imports': 'error' } }, // this ruleset helps keep backend, frontend, and core keep imports isolated @@ -142,7 +151,7 @@ export default defineConfig([ ], // Optional: flag any file under src/ that doesn't match one of the // three element patterns above (catches stray/misplaced files) - 'boundaries/no-unknown': 'error', + 'boundaries/no-unknown': 'error' }, } ]); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index d5462328..9b53f953 100644 --- a/package-lock.json +++ b/package-lock.json @@ -175,6 +175,7 @@ "eslint-plugin-prefer-arrow-functions": "^3.2.4", "eslint-plugin-react-hooks": "^7.1.1", "eslint-plugin-storybook": "^10.3.6", + "eslint-plugin-unused-imports": "^4.4.1", "git-cliff": "^2.12.0", "globals": "^17.7.0", "ky": "^2.0.2", @@ -11377,6 +11378,22 @@ "typescript": ">=4.8.4" } }, + "node_modules/eslint-plugin-unused-imports": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-4.4.1.tgz", + "integrity": "sha512-oZGYUz1X3sRMGUB+0cZyK2VcvRX5lm/vB56PgNNcU+7ficUCKm66oZWKUubXWnOuPjQ8PvmXtCViXBMONPe7tQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0", + "eslint": "^10.0.0 || ^9.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + } + } + }, "node_modules/eslint-scope": { "version": "9.1.2", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", diff --git a/package.json b/package.json index d1bae9ec..8025a6f7 100644 --- a/package.json +++ b/package.json @@ -214,6 +214,7 @@ "eslint-plugin-prefer-arrow-functions": "^3.2.4", "eslint-plugin-react-hooks": "^7.1.1", "eslint-plugin-storybook": "^10.3.6", + "eslint-plugin-unused-imports": "^4.4.1", "git-cliff": "^2.12.0", "globals": "^17.7.0", "ky": "^2.0.2", diff --git a/src/backend/common/AbstractComponent.ts b/src/backend/common/AbstractComponent.ts index a421ed57..9d75257b 100644 --- a/src/backend/common/AbstractComponent.ts +++ b/src/backend/common/AbstractComponent.ts @@ -31,7 +31,7 @@ import { objectsEqual } from "../utils/DataUtils.ts"; import { type RetentionOptions } from "./infrastructure/config/database.ts"; import { getRetentionCompactAfterFromEnv, getRetentionDeleteAfterFromEnv, isCompactableProperty, parseRetentionOptions, parseRetentionOptionsDurations } from "./database/Database.ts"; import { type DbConcrete } from "./database/drizzle/drizzleUtils.ts"; -import { type ComponentMinimalSelect, type ComponentSelect } from "./database/drizzle/drizzleTypes.ts"; +import { type ComponentSelect } from "./database/drizzle/drizzleTypes.ts"; import { DrizzlePlayRepository } from "./database/drizzle/repositories/PlayRepository.ts"; import { type ClientType } from "./infrastructure/config/client/clients.ts"; import { type SourceType } from "./infrastructure/config/source/sources.ts"; diff --git a/src/backend/common/Cache.ts b/src/backend/common/Cache.ts index 89412616..e69c7300 100644 --- a/src/backend/common/Cache.ts +++ b/src/backend/common/Cache.ts @@ -13,8 +13,7 @@ import { childLogger, type Logger } from '@foxxmd/logging'; import { projectDir } from './index.ts'; import path from 'path'; import { cacheFunctions } from "@foxxmd/regex-buddy-core"; -import { fileExists, fileOrDirectoryIsWriteable } from '../utils/FSUtils.ts'; -import { copyFile } from 'fs/promises'; +import { fileOrDirectoryIsWriteable } from '../utils/FSUtils.ts'; import { asCacheConfig, type CacheAuthProvider, type CacheConfig, type CacheConfigOptions, type CacheConfigUser, type CacheScrobbleProvider } from './infrastructure/Atomic.ts'; import { Typeson } from 'typeson'; import { builtin } from 'typeson-registry'; diff --git a/src/backend/common/database/Database.ts b/src/backend/common/database/Database.ts index bd01d8e5..72279498 100644 --- a/src/backend/common/database/Database.ts +++ b/src/backend/common/database/Database.ts @@ -1,15 +1,13 @@ import { configDir } from '../index.ts'; import * as path from 'path'; -import { promises as fs } from 'fs' import { childLogger, type Logger } from '@foxxmd/logging'; import { loggerNoop } from '../MaybeLogger.ts'; -import { fileExists, fileOrDirectoryIsWriteable } from '../../utils/FSUtils.ts'; -import { COMPACTABLE, compactableProperties, type CompactableProperty, DEFAULT_RETENTION_COMPACT_AFTER, DEFAULT_RETENTION_DELETE_AFTER, type RententionGranular, type RetentionConfig, type RetentionConfigValue, type RetentionOption, type RetentionValue, type RetentionValueUnparsed } from '../infrastructure/config/database.ts'; +import { COMPACTABLE, type CompactableProperty, DEFAULT_RETENTION_COMPACT_AFTER, DEFAULT_RETENTION_DELETE_AFTER, type RetentionConfigValue, type RetentionOption, type RetentionValue, type RetentionValueUnparsed } from '../infrastructure/config/database.ts'; import { type DurationValue } from '../infrastructure/Atomic.ts'; import { type Duration } from 'dayjs/plugin/duration.js'; import dayjs from 'dayjs'; import { parseDurationFromDurationValue } from '../../utils/TimeUtils.ts'; -import assert, { AssertionError } from 'node:assert'; +import assert from 'node:assert'; import * as sqlite from 'node:sqlite'; import { parseBoolStrict } from '../../utils.ts'; import { SimpleError } from '../errors/MSErrors.ts'; diff --git a/src/backend/common/database/drizzle/drizzleTypes.ts b/src/backend/common/database/drizzle/drizzleTypes.ts index 442f07ac..44351e3f 100644 --- a/src/backend/common/database/drizzle/drizzleTypes.ts +++ b/src/backend/common/database/drizzle/drizzleTypes.ts @@ -1,4 +1,4 @@ -import { type DBQueryConfig, type DBQueryConfigWith, type ExtractTablesFromSchema, type KnownKeysOnly, type RelationFieldsFilterInternals, Many, type InferSelectModel, type ExtractTablesWithRelations, type BuildQueryResult, type RelationsFilter } from "drizzle-orm"; +import { type DBQueryConfig, type DBQueryConfigWith, type KnownKeysOnly, type RelationFieldsFilterInternals, type BuildQueryResult, type RelationsFilter } from "drizzle-orm"; import { components, componentMigrations, playInputs, plays, queueStates, relations, playsHistorical } from "./schema/schema.ts"; import {type TSchema, type TableName } from "./schema/schema.ts"; diff --git a/src/backend/common/database/drizzle/drizzleUtils.ts b/src/backend/common/database/drizzle/drizzleUtils.ts index a4bb47af..33c538ad 100644 --- a/src/backend/common/database/drizzle/drizzleUtils.ts +++ b/src/backend/common/database/drizzle/drizzleUtils.ts @@ -1,17 +1,16 @@ import { drizzle } from 'drizzle-orm/node-sqlite'; import { migrate } from 'drizzle-orm/node-sqlite/migrator'; import { BaseSQLiteDatabase } from "drizzle-orm/sqlite-core"; -import { sql as dsl, type LogWriter, type Logger as DrizzleLogger } from 'drizzle-orm'; +import { sql as dsl, type Logger as DrizzleLogger } from 'drizzle-orm'; import * as fs from 'fs/promises'; import * as path from 'path'; -import { backupDb, getDbPath, getDbBackupPath, MEMORY_DB_NAME } from '../Database.ts'; +import { backupDb, getDbBackupPath, MEMORY_DB_NAME } from '../Database.ts'; import { fileExists, fileOrDirectoryIsWriteable } from '../../../utils/FSUtils.ts'; import { childLogger, type Logger, type LogLevel } from '@foxxmd/logging'; import { loggerNoop } from '../../MaybeLogger.ts'; import { projectDir } from '../../index.ts'; import { relations } from './schema/schema.ts'; import { addToContext, executeQuery } from './logContext.ts'; -import { DatabaseSync } from 'node:sqlite'; import { migrateApp, getAppMigrationStatus } from '../appMigrator.ts'; import { type MigrationStatus } from '../../infrastructure/Atomic.ts'; diff --git a/src/backend/common/database/drizzle/entityUtils.ts b/src/backend/common/database/drizzle/entityUtils.ts index 7b477fa3..95b45bde 100644 --- a/src/backend/common/database/drizzle/entityUtils.ts +++ b/src/backend/common/database/drizzle/entityUtils.ts @@ -6,7 +6,6 @@ import { type ComponentNew } from "./drizzleTypes.ts"; import type { MarkOptional } from "ts-essentials"; import { CLIENT_DEAD_QUEUE, type DeadLetterScrobble, type ErrorLike, type PlayObject } from "../../../../core/Atomic.ts"; import dayjs from "dayjs"; -import { asPlay } from "../../../../core/PlayMarshalUtils.ts"; import { playContentBasicInvariantTransform, playMbidIdentifier } from "../../../utils/PlayComparisonUtils.ts"; import { hashObject } from "../../../utils/StringUtils.ts"; import { serializeError } from "serialize-error"; diff --git a/src/backend/common/database/drizzle/repositories/BaseRepository.ts b/src/backend/common/database/drizzle/repositories/BaseRepository.ts index 831de2b1..c5e12124 100644 --- a/src/backend/common/database/drizzle/repositories/BaseRepository.ts +++ b/src/backend/common/database/drizzle/repositories/BaseRepository.ts @@ -4,7 +4,7 @@ import { type Dayjs } from "dayjs"; import { type RelationsFieldFilter, eq, inArray } from "drizzle-orm"; import { loggerNoop } from "../../../MaybeLogger.ts"; import { capitalize } from "../../../../../core/StringUtils.ts"; -import { getConfigByTableName, relations, type TableName } from "../schema/schema.ts"; +import { getConfigByTableName, type TableName } from "../schema/schema.ts"; import assert from 'node:assert'; import { Cacheable } from "cacheable"; import { type DateLike } from "../../../../../core/Atomic.ts"; diff --git a/src/backend/common/database/drizzle/repositories/ComponentRepository.ts b/src/backend/common/database/drizzle/repositories/ComponentRepository.ts index 08f34a01..68e279a7 100644 --- a/src/backend/common/database/drizzle/repositories/ComponentRepository.ts +++ b/src/backend/common/database/drizzle/repositories/ComponentRepository.ts @@ -1,7 +1,6 @@ -import { type Logger } from "drizzle-orm"; import { DrizzleBaseRepository, type DrizzleRepositoryOpts } from "./BaseRepository.ts"; import { type DbConcrete } from "../drizzleUtils.ts"; -import { type ComponentNew, type ComponentSelect, type FindWhere } from "../drizzleTypes.ts"; +import { type ComponentSelect, type FindWhere } from "../drizzleTypes.ts"; import { components } from "../schema/schema.ts"; import { generateComponentEntity } from "../entityUtils.ts"; import { type ComponentType } from "../../../../../core/Atomic.ts"; diff --git a/src/backend/common/database/drizzle/repositories/PlayHistoricalRepository.ts b/src/backend/common/database/drizzle/repositories/PlayHistoricalRepository.ts index 921bef8e..6a9a732c 100644 --- a/src/backend/common/database/drizzle/repositories/PlayHistoricalRepository.ts +++ b/src/backend/common/database/drizzle/repositories/PlayHistoricalRepository.ts @@ -1,25 +1,17 @@ -import { childLogger, type Logger, type LoggerAppExtras } from "@foxxmd/logging"; import { type DbConcrete, runTransaction } from "../drizzleUtils.ts"; -import { loggerNoop } from "../../../MaybeLogger.ts"; -import { type ErrorLike, type PlayObject, TA_CLOSE, TA_DEFAULT_ACCURACY, TA_EXACT, type TemporalAccuracy } from "../../../../../core/Atomic.ts"; -import { generateInputEntity, generatePlayEntity, type PlayEntityOpts, hydratePlaySelect, type PlayHydateOptions, type PlayHistoricalEntityOpts } from "../entityUtils.ts"; -import { playInputs, plays, playsHistorical, queueStates, relations } from "../schema/schema.ts"; -import { type PlayNew, type PlaySelect, type PlayInputNew, type FindWhere, type FindMany, type QueueStateSelect, type FindWith, type PlaySelectWithQueueStates, type WhereClause, type PlayWith, type PlayHistoricalSelect, type PlayHistoricalNew } from "../drizzleTypes.ts";; +import { type PlayObject, TA_DEFAULT_ACCURACY, type TemporalAccuracy } from "../../../../../core/Atomic.ts"; +import { generatePlayEntity, hydratePlaySelect, type PlayHydateOptions, type PlayHistoricalEntityOpts } from "../entityUtils.ts"; +import { plays, playsHistorical } from "../schema/schema.ts"; +import { type FindWhere, type FindMany, type WhereClause, type PlayHistoricalSelect, type PlayHistoricalNew } from "../drizzleTypes.ts";; import type { MarkOptional } from "ts-essentials"; -import { genGroupIdStrFromPlay, removeEmptyArrays } from "../../../../utils.ts"; import { removeUndefinedKeys } from '../../../../../core/DataUtils.ts'; -import dayjs, { type Dayjs } from "dayjs"; -import { type RelationsFieldFilter, eq, inArray, ne, notInArray, desc, asc, and, sql, Placeholder } from "drizzle-orm"; -import { type CompactableProperty, type RetentionOptions, retentionPlayTypes } from "../../../infrastructure/config/database.ts"; -import { shortTodayAwareFormat } from "../../../../../core/TimeUtils.ts"; +import { type Dayjs } from "dayjs"; +import { inArray, sql } from "drizzle-orm"; import { buildDateCompare, type CompareDateOp, type ComponentConstrainedRepoOpts, DrizzleBaseRepository, type DrizzleRepositoryOpts } from "./BaseRepository.ts"; import { type PaginatedResponse } from "../../../../../core/Api.ts"; -import { type PaginatedQueryResponse } from "../../../../../core/Api.ts"; -import { asPlay } from "../../../../../core/PlayMarshalUtils.ts"; -import assert, { Assert } from "node:assert"; -import { hashObject, parseArrayFromMaybeString } from "../../../../utils/StringUtils.ts"; +import { hashObject } from "../../../../utils/StringUtils.ts"; import { playContentBasicInvariantTransform, playMbidIdentifier } from "../../../../utils/PlayComparisonUtils.ts"; -import { comparePlayTemporally, getScrobbleTsSOCDate, getScrobbleTsSOCDateWithContext, getTemporalAccuracyCloseVal, hasAcceptableTemporalAccuracy } from "../../../../utils/TimeUtils.ts"; +import { comparePlayTemporally, getTemporalAccuracyCloseVal, hasAcceptableTemporalAccuracy } from "../../../../utils/TimeUtils.ts"; import { type SourceType } from "../../../infrastructure/config/source/sources.ts"; import { getTemporallyCloseDateCompareOp } from "./PlayRepository.ts"; diff --git a/src/backend/common/database/drizzle/schema/schema.ts b/src/backend/common/database/drizzle/schema/schema.ts index 9620cac1..8e90cb0e 100644 --- a/src/backend/common/database/drizzle/schema/schema.ts +++ b/src/backend/common/database/drizzle/schema/schema.ts @@ -1,7 +1,6 @@ import { integer, sqliteTable, text, index, uniqueIndex, customType, type AnySQLiteColumn } from "drizzle-orm/sqlite-core"; import { defineRelations } from 'drizzle-orm'; import dayjs, { type Dayjs } from "dayjs"; -import { nanoid } from "nanoid"; import { type ErrorLike, type PlayObject } from "../../../../../core/Atomic.ts"; import { asPlayCheap } from "../../../../../core/PlayMarshalUtils.ts"; import { type ExternalMetadataTerm, type PlayTransformPartsConfig, type SearchAndReplaceTerm } from "../../../../../core/Transform.ts"; diff --git a/src/backend/common/infrastructure/Atomic.ts b/src/backend/common/infrastructure/Atomic.ts index 3e5fafa8..f080f351 100644 --- a/src/backend/common/infrastructure/Atomic.ts +++ b/src/backend/common/infrastructure/Atomic.ts @@ -1,4 +1,4 @@ -import { type Logger, type LogDataPretty, type LogLevel } from '@foxxmd/logging'; +import { type Logger, type LogDataPretty } from '@foxxmd/logging'; import type { Dayjs, ManipulateType } from "dayjs"; import { type Request, type Response } from "express"; import type { NextFunction, ParamsDictionary, Query } from "express-serve-static-core"; diff --git a/src/backend/common/infrastructure/config/aioConfig.ts b/src/backend/common/infrastructure/config/aioConfig.ts index ed7881f3..dc2d7503 100644 --- a/src/backend/common/infrastructure/config/aioConfig.ts +++ b/src/backend/common/infrastructure/config/aioConfig.ts @@ -5,7 +5,7 @@ import { type RequestRetryOptions } from "./common.ts"; import { type WebhookConfig } from "./health/webhooks.ts"; import { type CommonSourceOptions, type SourceRetryOptions } from "./source/index.ts"; import { type SourceAIOConfig } from "./source/sources.ts"; -import { type CacheConfigOptions, type CacheConfigUser, type DurationValue } from "../Atomic.ts"; +import { type CacheConfigUser, type DurationValue } from "../Atomic.ts"; import { type TransformerCommonConfig } from "../../../../core/Atomic.ts"; import { type RetentionConfig } from "./database.ts"; diff --git a/src/backend/common/infrastructure/config/client/index.ts b/src/backend/common/infrastructure/config/client/index.ts index 49624029..140beb35 100644 --- a/src/backend/common/infrastructure/config/client/index.ts +++ b/src/backend/common/infrastructure/config/client/index.ts @@ -1,6 +1,6 @@ import { type DurationValue } from "../../Atomic.ts"; -import { type PlayTransformConfig, type PlayTransformOptions } from "../../../../../core/Transform.ts"; -import { type CommonConfig, type CommonData, type RequestRetryOptions } from "../common.ts"; +import { type PlayTransformOptions } from "../../../../../core/Transform.ts"; +import { type CommonConfig, type RequestRetryOptions } from "../common.ts"; import { type RetentionConfig } from "../database.ts"; /** diff --git a/src/backend/common/infrastructure/config/source/index.ts b/src/backend/common/infrastructure/config/source/index.ts index 7518a48f..ec287171 100644 --- a/src/backend/common/infrastructure/config/source/index.ts +++ b/src/backend/common/infrastructure/config/source/index.ts @@ -1,7 +1,7 @@ import { type FileLogOptions, type LogLevel } from "@foxxmd/logging"; -import { type PlayTransformConfig, type PlayTransformOptions } from "../../../../../core/Transform.ts"; -import { type CommonConfig, type CommonData, type RequestRetryOptions } from "../common.ts"; +import { type PlayTransformOptions } from "../../../../../core/Transform.ts"; +import { type CommonConfig, type RequestRetryOptions } from "../common.ts"; import { type RetentionConfig } from "../database.ts"; import { type DurationValue } from "../../Atomic.ts"; diff --git a/src/backend/common/infrastructure/config/source/koito.ts b/src/backend/common/infrastructure/config/source/koito.ts index 09f6360d..cace0007 100644 --- a/src/backend/common/infrastructure/config/source/koito.ts +++ b/src/backend/common/infrastructure/config/source/koito.ts @@ -1,5 +1,4 @@ import { type KoitoData } from "../client/koito.ts"; -import { type ListenBrainzData } from "../client/listenbrainz.ts"; import { type PollingOptions } from "../common.ts"; import { type CommonSourceConfig, type CommonSourceData } from "./index.ts"; diff --git a/src/backend/common/infrastructure/config/source/sources.ts b/src/backend/common/infrastructure/config/source/sources.ts index 493db488..32629757 100644 --- a/src/backend/common/infrastructure/config/source/sources.ts +++ b/src/backend/common/infrastructure/config/source/sources.ts @@ -2,7 +2,7 @@ import { type AzuracastSourceAIOConfig, type AzuracastSourceConfig } from "./azu import { type ChromecastSourceAIOConfig, type ChromecastSourceConfig } from "./chromecast.ts"; import { type ListenbrainzEndpointSourceAIOConfig, type ListenbrainzEndpointSourceConfig } from "./endpointlz.ts"; import { type LastFMEndpointSourceAIOConfig, type LastFMEndpointSourceConfig } from "./endpointlfm.ts"; -import { type DeezerInternalSourceConfig, type DeezerInternalAIOConfig, type DeezerSourceAIOConfig, type DeezerSourceConfig, type DeezerCompatConfig, type DeezerAIOCompatConfig } from "./deezer.ts"; +import { type DeezerInternalSourceConfig, type DeezerSourceConfig, type DeezerCompatConfig, type DeezerAIOCompatConfig } from "./deezer.ts"; import { type JellyApiSourceAIOConfig, type JellyApiSourceConfig } from "./jellyfin.ts"; import { type JRiverSourceAIOConfig, type JRiverSourceConfig } from "./jriver.ts"; import { type KodiSourceAIOConfig, type KodiSourceConfig } from "./kodi.ts"; diff --git a/src/backend/common/transforms/AbstractTransformer.ts b/src/backend/common/transforms/AbstractTransformer.ts index fff830ec..10e2de12 100644 --- a/src/backend/common/transforms/AbstractTransformer.ts +++ b/src/backend/common/transforms/AbstractTransformer.ts @@ -7,7 +7,7 @@ import { cacheFunctions, parseToRegexOrLiteralSearch, testMaybeRegex, searchAnd import { Cacheable } from "cacheable"; import { hashObject } from "../../utils/StringUtils.ts"; import { playContentInvariantTransform } from "../../utils/PlayComparisonUtils.ts"; -import { isSimpleError, SkipTransformStageError, StagePrerequisiteError } from "../errors/MSErrors.ts"; +import { SkipTransformStageError, StagePrerequisiteError } from "../errors/MSErrors.ts"; import { capitalize } from "../../../core/StringUtils.ts"; import { type StaggerOptions } from "../../utils/AsyncUtils.ts"; diff --git a/src/backend/common/transforms/MusicbrainzTransformer.ts b/src/backend/common/transforms/MusicbrainzTransformer.ts index 69d4e629..c985347f 100644 --- a/src/backend/common/transforms/MusicbrainzTransformer.ts +++ b/src/backend/common/transforms/MusicbrainzTransformer.ts @@ -1,16 +1,16 @@ -import { type ArtistCredit, asMBReleasePrimaryGroupType, asMBReleaseSecondaryGroupType, asMBReleaseStatus, DEFAULT_MISSING_TYPES, isMBReleasePrimaryGroupType, type LifecycleInput, type MBReleaseGroupPrimaryType, type MBReleaseGroupSecondaryType, type MBReleaseStatus, type MissingMbidType, type PlayObject, type TrackMeta, type TransformerCommon, type TransformOptions } from "../../../core/Atomic.ts"; +import { type ArtistCredit, asMBReleasePrimaryGroupType, asMBReleaseSecondaryGroupType, asMBReleaseStatus, DEFAULT_MISSING_TYPES, type LifecycleInput, type MBReleaseGroupPrimaryType, type MBReleaseGroupSecondaryType, type MBReleaseStatus, type MissingMbidType, type PlayObject, type TrackMeta, type TransformerCommon, type TransformOptions } from "../../../core/Atomic.ts"; import { isWhenCondition, testWhenConditions } from "../../utils/PlayTransformUtils.ts"; import { type WebhookPayload } from "../infrastructure/config/health/webhooks.ts"; import { type ExternalMetadataTerm, type PlayTransformMetadataStage } from "../../../core/Transform.ts"; import AtomicPartsTransformer from "./AtomicPartsTransformer.ts"; import { type TransformerOptions } from "./AbstractTransformer.ts"; -import { ARTIST_WEIGHT, MUSICBRAINZ_URL, type MusicbrainzApiConfigData, TITLE_WEIGHT } from "../infrastructure/Atomic.ts"; +import { ARTIST_WEIGHT, type MusicbrainzApiConfigData, TITLE_WEIGHT } from "../infrastructure/Atomic.ts"; import { DELIMITERS } from '../../../core/Atomic.ts'; import { MaybeLogger } from '../MaybeLogger.ts'; -import { childLogger, type Logger } from "@foxxmd/logging"; -import { MusicbrainzApiClient, type MusicbrainzApiConfig, recordingToPlay, type UsingTypes } from "../vendor/musicbrainz/MusicbrainzApiClient.ts"; -import { type IRecordingList, type IRecordingMatch, type IRelease, MusicBrainzApi } from "musicbrainz-api"; -import { intersect, isDebugMode, missingMbidTypes } from "../../utils.ts"; +import { childLogger } from "@foxxmd/logging"; +import { MusicbrainzApiClient, recordingToPlay, type UsingTypes } from "../vendor/musicbrainz/MusicbrainzApiClient.ts"; +import { type IRecordingList, type IRecordingMatch } from "musicbrainz-api"; +import { intersect, missingMbidTypes } from "../../utils.ts"; import { removeUndefinedKeys } from '../../../core/DataUtils.ts'; import { SimpleError, SkipTransformStageError, StagePrerequisiteError, StageTransformError } from "../errors/MSErrors.ts"; import { parseArrayFromMaybeString, scoreNormalizedStringsWeighted } from "../../utils/StringUtils.ts"; diff --git a/src/backend/common/transforms/NativeTransformer.ts b/src/backend/common/transforms/NativeTransformer.ts index 879fc606..f5e1dd11 100644 --- a/src/backend/common/transforms/NativeTransformer.ts +++ b/src/backend/common/transforms/NativeTransformer.ts @@ -1,7 +1,7 @@ import { type ArtistCredit, type PlayObject, type TransformerCommon } from "../../../core/Atomic.ts"; import { isWhenCondition, testWhenConditions } from "../../utils/PlayTransformUtils.ts"; import { type WebhookPayload } from "../infrastructure/config/health/webhooks.ts"; -import { type ExternalMetadataTerm, type PlayTransformNativeStage, type StageConfig } from "../../../core/Transform.ts"; +import { type ExternalMetadataTerm, type PlayTransformNativeStage } from "../../../core/Transform.ts"; import AtomicPartsTransformer from "./AtomicPartsTransformer.ts"; import { parseArtistCredits, parseTrackCredits, uniqueNormalizedStrArr } from "../../utils/StringUtils.ts"; import { parseRegexSingle, parseToRegexOrLiteralSearch } from "@foxxmd/regex-buddy-core"; diff --git a/src/backend/common/transforms/UserTransformer.ts b/src/backend/common/transforms/UserTransformer.ts index d1b3d2a4..09d96a2c 100644 --- a/src/backend/common/transforms/UserTransformer.ts +++ b/src/backend/common/transforms/UserTransformer.ts @@ -2,7 +2,7 @@ import { searchAndReplace } from "@foxxmd/regex-buddy-core"; import { type ArtistCredit, type PlayObject } from "../../../core/Atomic.ts"; import { configValToSearchReplace, isSearchAndReplaceTerm, isUserStage, testWhenConditions } from "../../utils/PlayTransformUtils.ts"; import { type WebhookPayload } from "../infrastructure/config/health/webhooks.ts"; -import { type ConditionalSearchAndReplaceRegExp, type PlayTransformUserStage, type StageConfig } from "../../../core/Transform.ts"; +import { type ConditionalSearchAndReplaceRegExp, type PlayTransformUserStage } from "../../../core/Transform.ts"; import AtomicPartsTransformer from "./AtomicPartsTransformer.ts"; export default class UserTransformer extends AtomicPartsTransformer { diff --git a/src/backend/common/vendor/ListenbrainzApiClient.ts b/src/backend/common/vendor/ListenbrainzApiClient.ts index a972d512..18805ee0 100644 --- a/src/backend/common/vendor/ListenbrainzApiClient.ts +++ b/src/backend/common/vendor/ListenbrainzApiClient.ts @@ -15,7 +15,7 @@ import { findDelimiters } from "../../../core/StringUtils.ts"; import { UpstreamError } from "../errors/UpstreamError.ts"; import { type AbstractApiOptions, DEFAULT_RETRY_MULTIPLIER, type FormatPlayObjectOptions, type PagelessListensTimeRangeOptions, type PagelessTimeRangeListens, type PagelessTimeRangeListensResult } from "../infrastructure/Atomic.ts"; import { DELIMITERS } from '../../../core/Atomic.ts'; -import { DEFAULT_ITEMS_PER_GET_LZ, type ListenBrainzClientData, MAX_ITEMS_PER_GET_LZ } from "../infrastructure/config/client/listenbrainz.ts"; +import { type ListenBrainzClientData, MAX_ITEMS_PER_GET_LZ } from "../infrastructure/config/client/listenbrainz.ts"; import AbstractApiClient from "./AbstractApiClient.ts"; import { getBaseFromUrl, isPortReachableConnect, joinedUrl, normalizeWebAddress } from '../../utils/NetworkUtils.ts'; import { unique } from '../../utils.ts'; diff --git a/src/backend/common/vendor/RockSkyApiClient.ts b/src/backend/common/vendor/RockSkyApiClient.ts index 61835532..0210c1f1 100644 --- a/src/backend/common/vendor/RockSkyApiClient.ts +++ b/src/backend/common/vendor/RockSkyApiClient.ts @@ -3,12 +3,11 @@ import request, { Request, Response } from 'superagent'; import { type PlayObject, type PlayObjectMinimal, type ScrobbleActionResult, type URLData } from "../../../core/Atomic.ts"; import { artistCreditsToNames, artistNamesToCredits, nonEmptyStringOrDefault } from "../../../core/StringUtils.ts"; import { UpstreamError } from "../errors/UpstreamError.ts"; -import { type AbstractApiOptions, DEFAULT_RETRY_MULTIPLIER, type FormatPlayObjectOptions } from "../infrastructure/Atomic.ts"; +import { type AbstractApiOptions, type FormatPlayObjectOptions } from "../infrastructure/Atomic.ts"; import { type RockSkyClientData, type RockSkyData, type RockSkyOptions } from "../infrastructure/config/client/rocksky.ts"; import AbstractApiClient from "./AbstractApiClient.ts"; import { isPortReachableConnect, joinedUrl, normalizeWebAddress } from '../../utils/NetworkUtils.ts'; -import { unique } from '../../utils.ts'; -import { type ListenPayload, type ListenResponse, type ListenType, type SubmitPayload } from '../../../core/vendor/listenbrainz/interfaces.ts'; +import { type ListenResponse, type ListenType, type SubmitPayload } from '../../../core/vendor/listenbrainz/interfaces.ts'; import { playToListenPayload } from './listenbrainz/lzUtils.ts'; import { type RockskyScrobble } from './rocksky/interfaces.ts'; import { type Handle } from "@atcute/lexicons"; diff --git a/src/backend/common/vendor/atproto/ATProtoAppApiClient.ts b/src/backend/common/vendor/atproto/ATProtoAppApiClient.ts index caa77a7a..dacb946f 100644 --- a/src/backend/common/vendor/atproto/ATProtoAppApiClient.ts +++ b/src/backend/common/vendor/atproto/ATProtoAppApiClient.ts @@ -1,13 +1,10 @@ -import dayjs from 'dayjs'; import { type AbstractApiOptions } from "../../infrastructure/Atomic.ts"; import { type TealClientData } from "../../infrastructure/config/client/tealfm.ts"; import { getATProtoIdentifier } from "./atUtils.ts"; import { type ATProtoAppData, type ATProtoUserIdentifierData } from "../../infrastructure/config/client/atproto.ts"; import { ATProtoAuthenticatedApiClient } from "./ATProtoAuthenticatedApiClient.ts"; import { PasswordSession, type PasswordSessionData } from '@atcute/password-session'; -import { Client, ClientResponseError, parseRateLimitHeaders } from "@atcute/client"; -import { UpstreamError } from "../../errors/UpstreamError.ts"; -import { todayAwareFormat } from '../../../../core/TimeUtils.ts'; +import { Client } from "@atcute/client"; export class ATProtoAppApiClient extends ATProtoAuthenticatedApiClient { diff --git a/src/backend/common/vendor/atproto/ATProtoUnauthenticatedApiClient.ts b/src/backend/common/vendor/atproto/ATProtoUnauthenticatedApiClient.ts index 889fa456..4120917b 100644 --- a/src/backend/common/vendor/atproto/ATProtoUnauthenticatedApiClient.ts +++ b/src/backend/common/vendor/atproto/ATProtoUnauthenticatedApiClient.ts @@ -1,7 +1,5 @@ import { UpstreamError } from "../../errors/UpstreamError.ts"; -import { type HandleData } from "../../infrastructure/config/client/atproto.ts"; import { AbstractATProtoApiClient } from "./AbstractATProtoApiClient.ts"; -import { getATProtoIdentifier, checkPds } from "./atUtils.ts"; import { Client, simpleFetchHandler } from '@atcute/client'; import type {} from '@atcute/atproto'; import { type Nsid } from "@atcute/lexicons"; diff --git a/src/backend/common/vendor/azuracast/AzuracastApiClient.ts b/src/backend/common/vendor/azuracast/AzuracastApiClient.ts index d0995b2c..60fc4e53 100644 --- a/src/backend/common/vendor/azuracast/AzuracastApiClient.ts +++ b/src/backend/common/vendor/azuracast/AzuracastApiClient.ts @@ -1,10 +1,9 @@ -import { childLogger } from "@foxxmd/logging"; import { type URLData } from "../../../../core/Atomic.ts"; import { joinedUrl, normalizeWSAddress } from "../../../utils/NetworkUtils.ts"; import { type AbstractApiOptions } from "../../infrastructure/Atomic.ts"; import { type AzuracastData, type AzuraStationResponse } from "../../infrastructure/config/source/azuracast.ts"; import AbstractApiClient from "../AbstractApiClient.ts"; -import { WS, CloseEvent, ErrorEvent, RetryEvent } from 'iso-websocket' +import { WS } from 'iso-websocket' export class AzuracastApiClient extends AbstractApiClient { diff --git a/src/backend/common/vendor/discord/DiscordUtils.ts b/src/backend/common/vendor/discord/DiscordUtils.ts index ac8f9c7a..6ab32657 100644 --- a/src/backend/common/vendor/discord/DiscordUtils.ts +++ b/src/backend/common/vendor/discord/DiscordUtils.ts @@ -1,13 +1,12 @@ import dayjs from "dayjs"; -import { isPlayObject, type PlayObject, type SourcePlayerObj } from "../../../../core/Atomic.ts"; -import { asPlayerStateData, type SourceData } from "../../infrastructure/Atomic.ts"; +import { type PlayObject, type SourcePlayerObj } from "../../../../core/Atomic.ts"; import { GatewayOpcodes, PresenceUpdateStatus } from "discord.js"; import { capitalize } from "../../../../core/StringUtils.ts"; import { urlToMusicService } from '../listenbrainz/lzUtils.ts'; -import { ACTIVITY_TYPE, type ActivityData, ActivityTypes, type DiscordData, type DiscordStrongData, type ActivityTypeString as MSActivityType, type StatusType } from "../../infrastructure/config/client/discord.ts"; +import { ACTIVITY_TYPE, type ActivityData, type DiscordData, type DiscordStrongData, type ActivityTypeString as MSActivityType, type StatusType } from "../../infrastructure/config/client/discord.ts"; import { parseBool } from "../../../utils.ts"; import { removeUndefinedKeys } from '../../../../core/DataUtils.ts'; -import { parseArrayFromMaybeString, parseBoolOrArrayFromMaybeString } from "../../../utils/StringUtils.ts"; +import { parseArrayFromMaybeString } from "../../../utils/StringUtils.ts"; export const playStateToActivityData = (data: SourcePlayerObj, opts: { useArt?: boolean } = {}): { activity: ActivityData, artUrl?: string } => { // unix timestamps in milliseconds diff --git a/src/backend/common/vendor/koito/KoitoApiClient.ts b/src/backend/common/vendor/koito/KoitoApiClient.ts index f9074ab5..2102aea5 100644 --- a/src/backend/common/vendor/koito/KoitoApiClient.ts +++ b/src/backend/common/vendor/koito/KoitoApiClient.ts @@ -1,6 +1,6 @@ import dayjs from "dayjs"; import { type PlayObject, type PlayObjectMinimal, type ScrobbleActionResult, type URLData } from "../../../../core/Atomic.ts"; -import { type AbstractApiOptions, DEFAULT_RETRY_MULTIPLIER, type PaginatedListensTimeRangeOptions, type PaginatedTimeRangeListens, type PaginatedTimeRangeListensResult } from "../../infrastructure/Atomic.ts"; +import { type AbstractApiOptions, type PaginatedListensTimeRangeOptions, type PaginatedTimeRangeListens, type PaginatedTimeRangeListensResult } from "../../infrastructure/Atomic.ts"; import { type GetListensOptions, type KoitoData, type ListenObjectResponse, type ListensResponse } from "../../infrastructure/config/client/koito.ts"; import AbstractApiClient from "../AbstractApiClient.ts"; import { getBaseFromUrl, isPortReachableConnect, joinedUrl, normalizeWebAddress } from "../../../utils/NetworkUtils.ts"; diff --git a/src/backend/common/vendor/maloja/MalojaApiClient.ts b/src/backend/common/vendor/maloja/MalojaApiClient.ts index 5493fa7f..fcdad3bf 100644 --- a/src/backend/common/vendor/maloja/MalojaApiClient.ts +++ b/src/backend/common/vendor/maloja/MalojaApiClient.ts @@ -2,16 +2,16 @@ import dayjs, { type ManipulateType } from 'dayjs'; import request, { Response, Request } from 'superagent'; import compareVersions from "compare-versions"; import AbstractApiClient from "../AbstractApiClient.ts"; -import { getBaseFromUrl, isPortReachableConnect, joinedUrl, normalizeWebAddress } from "../../../utils/NetworkUtils.ts"; +import { isPortReachableConnect, normalizeWebAddress } from "../../../utils/NetworkUtils.ts"; import { type MalojaData } from "../../infrastructure/config/client/maloja.ts"; import { type PlayObject, type PlayObjectMinimal, type ScrobbleActionResult, type URLData } from "../../../../core/Atomic.ts"; -import { type AbstractApiOptions, DEFAULT_RETRY_MULTIPLIER, type FormatPlayObjectOptions, type PaginatedListensTimeRangeOptions, type PaginatedTimeRangeListens, type PaginatedTimeRangeListensResult } from "../../infrastructure/Atomic.ts"; +import { type AbstractApiOptions, type FormatPlayObjectOptions, type PaginatedListensTimeRangeOptions, type PaginatedTimeRangeListens, type PaginatedTimeRangeListensResult } from "../../infrastructure/Atomic.ts"; import { isNodeNetworkException } from "../../errors/NodeErrors.ts"; import { isSuperAgentResponseError } from "../../errors/ErrorUtils.ts"; -import { getNonEmptyVal, parseRetryAfterSecsFromObj, sleep } from "../../../utils.ts"; +import { getNonEmptyVal } from "../../../utils.ts"; import { removeUndefinedKeys } from '../../../../core/DataUtils.ts'; import { UpstreamError } from "../../errors/UpstreamError.ts"; -import { getMalojaResponseError, isMalojaAPIErrorBody, type MalojaResponseV3CommonData, type MalojaScrobbleData, type MalojaScrobbleRequestData, type MalojaScrobbleV3RequestData, type MalojaScrobbleV3ResponseData, type MalojaScrobbleWarning } from "./interfaces.ts"; +import { getMalojaResponseError, isMalojaAPIErrorBody, type MalojaResponseV3CommonData, type MalojaScrobbleData, type MalojaScrobbleV3RequestData, type MalojaScrobbleV3ResponseData, type MalojaScrobbleWarning } from "./interfaces.ts"; import { getScrobbleTsSOCDate, getScrobbleTsSOCDateWithContext } from '../../../utils/TimeUtils.ts'; import { artistCreditsToNames, artistNamesToCredits, buildTrackString } from '../../../../core/StringUtils.ts'; import { baseFormatPlayObj } from '../../../utils/PlayTransformUtils.ts'; diff --git a/src/backend/common/vendor/musicbrainz/CoverArtApiClient.ts b/src/backend/common/vendor/musicbrainz/CoverArtApiClient.ts index e6d85ffe..750b3da1 100644 --- a/src/backend/common/vendor/musicbrainz/CoverArtApiClient.ts +++ b/src/backend/common/vendor/musicbrainz/CoverArtApiClient.ts @@ -1,13 +1,11 @@ import { Cacheable } from "cacheable"; import { type AbstractApiOptions } from "../../infrastructure/Atomic.ts"; import AbstractApiClient from "../AbstractApiClient.ts"; -import request, { type ResponseError } from 'superagent'; +import request from 'superagent'; import { isSuperAgentResponseError } from "../../errors/ErrorUtils.ts"; import { UpstreamError } from "../../errors/UpstreamError.ts"; import { initMemoryCache } from "../../Cache.ts"; import { joinedUrl } from "../../../utils/NetworkUtils.ts"; -import { hasNodeNetworkException } from "../../errors/NodeErrors.ts"; -import { sleep } from "../../../utils.ts"; import { type RequestRetryOptions } from "../../infrastructure/config/common.ts"; import { type RetryContext } from "p-retry"; import { NO_RETRY_HTTP_STATUS, tryApiCall } from "../../../utils/RequestUtils.ts"; diff --git a/src/backend/common/vendor/musicbrainz/MusicbrainzApiClient.ts b/src/backend/common/vendor/musicbrainz/MusicbrainzApiClient.ts index 1e226f47..0ccd4af4 100644 --- a/src/backend/common/vendor/musicbrainz/MusicbrainzApiClient.ts +++ b/src/backend/common/vendor/musicbrainz/MusicbrainzApiClient.ts @@ -5,18 +5,18 @@ import { type AbstractApiOptions, type FormatPlayObjectOptions, MUSICBRAINZ_URL, import AbstractApiClient from "../AbstractApiClient.ts"; import { isPortReachableConnect, normalizeWebAddress } from '../../../utils/NetworkUtils.ts'; import { MusicBrainzApi, type IRecording, type IRecordingList, type IRelease } from 'musicbrainz-api'; -import { difference, isDebugMode, isEmptyArrayOrUndefined, sleep } from "../../../utils.ts"; +import { difference, isDebugMode, sleep } from "../../../utils.ts"; import {SequentialRoundRobin} from 'round-robin-js'; import { Cacheable } from "cacheable"; import { getRoot } from "../../../ioc.ts"; import { version } from "../../../version.ts"; import { hashObject } from "../../../utils/StringUtils.ts"; import { playContentInvariantTransform } from "../../../utils/PlayComparisonUtils.ts"; -import { childLogger } from "@foxxmd/logging";; +; import { AsyncLocalStorage } from "async_hooks"; import { nanoid } from "nanoid"; import { stripIndents } from "common-tags"; -import { getNodeNetworkException, hasNodeNetworkException, isNodeNetworkException } from '../../errors/NodeErrors.ts'; +import { hasNodeNetworkException } from '../../errors/NodeErrors.ts'; import { SimpleError } from '../../errors/MSErrors.ts'; import { baseFormatPlayObj } from '../../../utils/PlayTransformUtils.ts'; import { type IRecordingMSList } from '../../transforms/MusicbrainzTransformer.ts'; diff --git a/src/backend/index.ts b/src/backend/index.ts index aefdd961..beac704b 100644 --- a/src/backend/index.ts +++ b/src/backend/index.ts @@ -16,7 +16,7 @@ import { appLogger, initLogger as getInitLogger } from "./common/logging.ts"; import { getRoot } from "./ioc.ts"; import { parseVersion } from "./version.ts"; import { initServer } from "./server/index.ts"; -import { isDebugMode, parseBool, retry, sleep } from "./utils.ts"; +import { isDebugMode, parseBool, sleep } from "./utils.ts"; import { readJson } from './utils/DataUtils.ts'; import ScrobbleClients from './scrobblers/ScrobbleClients.ts'; import ScrobbleSources from './sources/ScrobbleSources.ts'; diff --git a/src/backend/ioc.ts b/src/backend/ioc.ts index 26bef175..99984a39 100644 --- a/src/backend/ioc.ts +++ b/src/backend/ioc.ts @@ -11,10 +11,9 @@ import { type CacheConfigOptions, type MusicBrainzSingletonMap } from "./common/ import { MSCache } from "./common/Cache.ts"; import TransformerManager from "./common/transforms/TransformerManager.ts"; import { type TransformerCommonConfig } from "../core/Atomic.ts"; -import prom, { Counter, Gauge } from 'prom-client'; +import prom from 'prom-client'; import { CoverArtApiClient } from "./common/vendor/musicbrainz/CoverArtApiClient.ts"; import { version } from "./version.ts"; -import { type StaggerOptions } from "./utils/AsyncUtils.ts"; import { type DbConcrete } from "./common/database/drizzle/drizzleUtils.ts"; let root: ReturnType; diff --git a/src/backend/scrobblers/AbstractScrobbleClient.ts b/src/backend/scrobblers/AbstractScrobbleClient.ts index 9ee54615..cf769b69 100644 --- a/src/backend/scrobblers/AbstractScrobbleClient.ts +++ b/src/backend/scrobblers/AbstractScrobbleClient.ts @@ -8,12 +8,7 @@ import { type DeadLetterScrobble, type NowPlayingUpdateThreshold, type PlayObject, - type PlayObjectMinimal, - type QueuedScrobble, type ScrobbleActionResult, type PlayMatchResult, type SourcePlayerObj, TA_DURING, - TA_FUZZY, - type TrackStringOptions, - TA_EXACT, - SOURCE_SOT, + type QueuedScrobble, type ScrobbleActionResult, type PlayMatchResult, type SourcePlayerObj, type ErrorLike, CLIENT_INGRESS_QUEUE, CLIENT_DEAD_QUEUE, @@ -26,27 +21,22 @@ import { artistNamesToCredits, buildTrackString, capitalize, truncateStringToLen import AbstractComponent from "../common/AbstractComponent.ts"; import { hasUpstreamError } from "../common/errors/UpstreamError.ts"; import { - ARTIST_WEIGHT, type Authenticatable, CALCULATED_PLAYER_STATUSES, DEFAULT_RETRY_MULTIPLIER, - DUP_SCORE_THRESHOLD, type FormatPlayObjectOptions, type PaginatedTimeRangeOptions, REFRESH_STALE_DEFAULT, type ReportedPlayerStatus, type ScrobbledPlayObject, type SourceIdentifier, - TIME_WEIGHT, type TimeRangeListensFetcher, - TITLE_WEIGHT, } from "../common/infrastructure/Atomic.ts"; import { type ClientType } from '../common/infrastructure/config/client/clients.ts'; import { type CommonClientConfig, type NowPlayingOptions, type UpstreamRefreshOptions } from "../common/infrastructure/config/client/index.ts"; import { TRANSFORM_HOOK } from "../../core/Transform.ts"; import { Notifiers } from "../notifier/Notifiers.ts"; import { - comparingMultipleArtists, isDebugMode, parseBool, playObjDataMatch, @@ -56,36 +46,31 @@ import { } from "../utils.ts"; import { removeUndefinedKeys } from '../../core/DataUtils.ts'; import { findCauseByReference } from "../utils/ErrorUtils.ts"; -import { type ErrorIsh, messageWithCausesTruncatedDefault } from "../../core/ErrorUtils.ts"; -import { messageWithCauses } from "../../core/ErrorUtils.ts"; +import { messageWithCausesTruncatedDefault } from "../../core/ErrorUtils.ts"; import { comparePlayTemporally, - getTemporalAccuracyCloseVal, hasAcceptableTemporalAccuracy, - temporalAccuracyToString, - temporalPlayComparisonSummary, } from "../utils/TimeUtils.ts"; import { todayAwareFormat } from "../../core/TimeUtils.ts"; -import { type WebhookPayload } from "../common/infrastructure/config/health/webhooks.ts"; -import { AsyncTask, SimpleIntervalJob, Task, ToadScheduler } from "toad-scheduler"; +import { AsyncTask, SimpleIntervalJob, ToadScheduler } from "toad-scheduler"; import { getRoot } from "../ioc.ts"; -import { findAsyncSequential, staggerMapper, type StaggerOptions } from "../utils/AsyncUtils.ts"; +import { staggerMapper, type StaggerOptions } from "../utils/AsyncUtils.ts"; import pMap, { pMapIterable } from "p-map"; -import { comparePlayArtistsNormalized, comparePlayTracksNormalized, existingScrobble, type ExistingScrobbleOpts } from "../utils/PlayComparisonUtils.ts"; +import { existingScrobble, type ExistingScrobbleOpts } from "../utils/PlayComparisonUtils.ts"; import { statefulInvariantTransform } from "../../core/PlayUtils.ts"; import { normalizeStr } from "../utils/StringUtils.ts"; -import prom, { Counter, Gauge } from 'prom-client'; +import { Counter, Gauge } from 'prom-client'; import { generateLoggableAbortReason, ScrobbleSubmitError, SimpleError } from "../common/errors/MSErrors.ts"; import {isErrorLike, serializeError} from 'serialize-error'; import { DEFAULT_NEW_PADDING, groupPlaysToTimeRanges } from "../utils/ListenFetchUtils.ts"; -import { spawn, catchAbortError, isAbortError, rethrowAbortError, delay, forever, AbortError, throwIfAborted } from 'abort-controller-x'; +import { spawn, isAbortError, delay } from 'abort-controller-x'; import { DrizzlePlayRepository, playToRepositoryCreatePlayOpts, type QueryPlaysOpts, type WithPlayRelation } from "../common/database/drizzle/repositories/PlayRepository.ts"; import { type ComponentMigrationNew, type PlaySelect, type PlaySelectWithQueueStates, type QueueStateNew, type QueueStateSelect } from "../common/database/drizzle/drizzleTypes.ts"; import { asPlay } from "../../core/PlayMarshalUtils.ts"; import { DrizzleQueueRepository } from "../common/database/drizzle/repositories/QueueRepository.ts"; import { GenericRepository } from "../common/database/drizzle/repositories/BaseRepository.ts"; import assert from "node:assert"; -import { COMPONENT_STATE, type ComponentClientApi, type ComponentClientApiJson, type PlayApiCommonDetailed } from "../../core/Api.ts"; +import { COMPONENT_STATE, type ComponentClientApiJson, type PlayApiCommonDetailed } from "../../core/Api.ts"; import { type ComponentState } from "react"; type PlatformMappedPlays = Map; diff --git a/src/backend/scrobblers/DiscordScrobbler.ts b/src/backend/scrobblers/DiscordScrobbler.ts index 6b7bdac5..31afdc6a 100644 --- a/src/backend/scrobblers/DiscordScrobbler.ts +++ b/src/backend/scrobblers/DiscordScrobbler.ts @@ -1,8 +1,7 @@ import { type Logger, type LogLevel } from "@foxxmd/logging"; import EventEmitter from "events"; import { type PlayMatchResult, type PlayObject, type SourcePlayerObj } from "../../core/Atomic.ts"; -import { CALCULATED_PLAYER_STATUSES, type FormatPlayObjectOptions, REPORTED_PLAYER_STATUSES, type ReportedPlayerStatus, SINGLE_USER_PLATFORM_ID_STR, type TimeRangeListensFetcher } from "../common/infrastructure/Atomic.ts"; -import { Notifiers } from "../notifier/Notifiers.ts"; +import { CALCULATED_PLAYER_STATUSES, type FormatPlayObjectOptions, REPORTED_PLAYER_STATUSES, SINGLE_USER_PLATFORM_ID_STR } from "../common/infrastructure/Atomic.ts"; import AbstractScrobbleClient, { nowPlayingUpdateByPlayDuration, shouldClearNPStatus } from "./AbstractScrobbleClient.ts"; import { type DiscordClientConfig, type DiscordStrongData } from "../common/infrastructure/config/client/discord.ts"; diff --git a/src/backend/scrobblers/KoitoScrobbler.ts b/src/backend/scrobblers/KoitoScrobbler.ts index f231dccd..0a36df67 100644 --- a/src/backend/scrobblers/KoitoScrobbler.ts +++ b/src/backend/scrobblers/KoitoScrobbler.ts @@ -5,7 +5,6 @@ import { buildTrackString, capitalize } from "../../core/StringUtils.ts"; import { isNodeNetworkException } from "../common/errors/NodeErrors.ts"; import { type FormatPlayObjectOptions, type TimeRangeListensFetcher } from "../common/infrastructure/Atomic.ts"; import { playToListenPayload } from '../common/vendor/listenbrainz/lzUtils.ts'; -import { Notifiers } from "../notifier/Notifiers.ts"; import AbstractScrobbleClient, { nowPlayingUpdateByPlayDuration } from "./AbstractScrobbleClient.ts"; import { isDebugMode } from "../utils.ts"; diff --git a/src/backend/scrobblers/LastfmScrobbler.ts b/src/backend/scrobblers/LastfmScrobbler.ts index 3f16cc72..977a2e96 100644 --- a/src/backend/scrobblers/LastfmScrobbler.ts +++ b/src/backend/scrobblers/LastfmScrobbler.ts @@ -1,5 +1,4 @@ import { type Logger } from "@foxxmd/logging"; -import dayjs, { type Dayjs } from "dayjs"; import EventEmitter from "events"; import { type PlayObject, type SourcePlayerObj } from "../../core/Atomic.ts"; import { buildTrackString, capitalize } from "../../core/StringUtils.ts"; @@ -7,8 +6,7 @@ import { isNodeNetworkException } from "../common/errors/NodeErrors.ts"; import { type FormatPlayObjectOptions, type InternalConfigOptional, type TimeRangeListensFetcher } from "../common/infrastructure/Atomic.ts"; import { type LastfmClientConfig } from "../common/infrastructure/config/client/lastfm.ts"; import LastfmApiClient, { LastFMIgnoredScrobble, playToClientPayload, formatPlayObj } from "../common/vendor/LastfmApiClient.ts"; -import { Notifiers } from "../notifier/Notifiers.ts"; -import AbstractScrobbleClient, { nowPlayingUpdateByPlayDuration, playerInNPPlayingOnlyState } from "./AbstractScrobbleClient.ts"; +import AbstractScrobbleClient, { nowPlayingUpdateByPlayDuration } from "./AbstractScrobbleClient.ts"; import { findCauseByReference } from "../utils/ErrorUtils.ts"; import { createGetScrobblesForTimeRangeFunc } from "../utils/ListenFetchUtils.ts"; diff --git a/src/backend/scrobblers/LibrefmScrobbler.ts b/src/backend/scrobblers/LibrefmScrobbler.ts index a2dc64dc..8c910363 100644 --- a/src/backend/scrobblers/LibrefmScrobbler.ts +++ b/src/backend/scrobblers/LibrefmScrobbler.ts @@ -1,7 +1,6 @@ import { type EventEmitter } from "events"; import { type Logger } from "@foxxmd/logging"; import LastfmScrobbler from "./LastfmScrobbler.ts"; -import { Notifiers } from "../notifier/Notifiers.ts"; import { type LibrefmClientConfig } from "../common/infrastructure/config/client/librefm.ts"; import { formatPlayObj, LIBREFM_HOST, LIBREFM_PATH } from "../common/vendor/LastfmApiClient.ts"; import { type LastfmClientConfig, type LastfmData } from "../common/infrastructure/config/client/lastfm.ts"; diff --git a/src/backend/scrobblers/ListenbrainzScrobbler.ts b/src/backend/scrobblers/ListenbrainzScrobbler.ts index 5f9c0acb..80999e06 100644 --- a/src/backend/scrobblers/ListenbrainzScrobbler.ts +++ b/src/backend/scrobblers/ListenbrainzScrobbler.ts @@ -1,18 +1,15 @@ import { type Logger } from "@foxxmd/logging"; -import dayjs, { type Dayjs } from "dayjs"; import EventEmitter from "events"; import { type PlayObject, type SourcePlayerObj } from "../../core/Atomic.ts"; import { buildTrackString, capitalize } from "../../core/StringUtils.ts"; import { isNodeNetworkException } from "../common/errors/NodeErrors.ts"; -import { hasUpstreamError, UpstreamError } from "../common/errors/UpstreamError.ts"; import { type FormatPlayObjectOptions, type TimeRangeListensFetcher } from "../common/infrastructure/Atomic.ts"; import { DEFAULT_MS_ITEMS_PER_GET_LZ, type ListenBrainzClientConfig } from "../common/infrastructure/config/client/listenbrainz.ts"; import { ListenbrainzApiClient } from "../common/vendor/ListenbrainzApiClient.ts"; import { playToListenPayload } from '../common/vendor/listenbrainz/lzUtils.ts'; import { type ListenPayload } from '../../core/vendor/listenbrainz/interfaces.ts'; -import { Notifiers } from "../notifier/Notifiers.ts"; -import AbstractScrobbleClient, { nowPlayingUpdateByPlayDuration, playerInNPPlayingOnlyState } from "./AbstractScrobbleClient.ts"; +import AbstractScrobbleClient, { nowPlayingUpdateByPlayDuration } from "./AbstractScrobbleClient.ts"; import { isDebugMode } from "../utils.ts"; import { createGetScrobblesForTimeRangeFunc } from "../utils/ListenFetchUtils.ts"; diff --git a/src/backend/scrobblers/MalojaScrobbler.ts b/src/backend/scrobblers/MalojaScrobbler.ts index cdb815e6..e64def83 100644 --- a/src/backend/scrobblers/MalojaScrobbler.ts +++ b/src/backend/scrobblers/MalojaScrobbler.ts @@ -9,12 +9,9 @@ import { type MalojaClientConfig } from "../common/infrastructure/config/client/ import { type MalojaScrobbleRequestData, } from "../common/vendor/maloja/interfaces.ts"; -import { Notifiers } from "../notifier/Notifiers.ts"; import AbstractScrobbleClient from "./AbstractScrobbleClient.ts"; import { MalojaApiClient, formatPlayObj as formatMalojaScrobbleToPlay, playToScrobblePayload } from "../common/vendor/maloja/MalojaApiClient.ts"; -import { ScrobbleSubmitError } from "../common/errors/MSErrors.ts"; import { createGetScrobblesForTimeRangeFunc } from "../utils/ListenFetchUtils.ts"; -import dayjs from "dayjs"; const feat = ["ft.", "ft", "feat.", "feat", "featuring", "Ft.", "Ft", "Feat.", "Feat", "Featuring"]; diff --git a/src/backend/scrobblers/RockskyScrobbler.ts b/src/backend/scrobblers/RockskyScrobbler.ts index eb16b03f..ecc69806 100644 --- a/src/backend/scrobblers/RockskyScrobbler.ts +++ b/src/backend/scrobblers/RockskyScrobbler.ts @@ -7,7 +7,6 @@ import { type FormatPlayObjectOptions, type InternalConfigOptional } from "../co import { ListenbrainzApiClient } from "../common/vendor/ListenbrainzApiClient.ts"; import { playToListenPayload } from '../common/vendor/listenbrainz/lzUtils.ts'; import { type ListenPayload } from '../../core/vendor/listenbrainz/interfaces.ts'; -import { Notifiers } from "../notifier/Notifiers.ts"; import { isDebugMode } from "../utils.ts"; import { durationToHuman } from '../../core/TimeUtils.ts'; diff --git a/src/backend/scrobblers/ScrobbleClients.ts b/src/backend/scrobblers/ScrobbleClients.ts index e635ba1e..0a10b436 100644 --- a/src/backend/scrobblers/ScrobbleClients.ts +++ b/src/backend/scrobblers/ScrobbleClients.ts @@ -1,4 +1,4 @@ -/* eslint-disable no-case-declarations */ + import { childLogger, type Logger } from '@foxxmd/logging'; import dayjs, { type Dayjs } from "dayjs"; import { type PlayObject, type SourcePlayerObj } from "../../core/Atomic.ts"; @@ -11,7 +11,7 @@ import { type ListenBrainzClientConfig, type ListenBrainzData } from "../common/ import { type MalojaClientConfig, type MalojaData } from "../common/infrastructure/config/client/maloja.ts"; import { WildcardEmitter } from "../common/WildcardEmitter.ts"; import { Notifiers } from "../notifier/Notifiers.ts"; -import { isDebugMode, nonEmptyObj, parseBool } from "../utils.ts"; +import { isDebugMode, nonEmptyObj } from "../utils.ts"; import { removeUndefinedKeys } from '../../core/DataUtils.ts'; import { getCommonComponentEnvConfig, readJson } from '../utils/DataUtils.ts'; import { validateJson } from "../utils/ValidationUtils.ts"; diff --git a/src/backend/scrobblers/TealfmScrobbler.ts b/src/backend/scrobblers/TealfmScrobbler.ts index be3726c2..a218c420 100644 --- a/src/backend/scrobblers/TealfmScrobbler.ts +++ b/src/backend/scrobblers/TealfmScrobbler.ts @@ -1,4 +1,4 @@ -import { childLogger, type Logger, type LogLevel } from "@foxxmd/logging"; +import { childLogger, type Logger } from "@foxxmd/logging"; import EventEmitter from "events"; import fsPromise from 'node:fs/promises'; import fs from 'node:fs'; @@ -8,18 +8,16 @@ import { Readable } from 'stream'; import { type PlayObject, type SourcePlayerObj } from "../../core/Atomic.ts"; import { buildTrackString, capitalize } from "../../core/StringUtils.ts"; import { isNodeNetworkException } from "../common/errors/NodeErrors.ts"; -import { type FormatPlayObjectOptions, CALCULATED_PLAYER_STATUSES, type ReportedPlayerStatus, type InternalConfigOptional } from "../common/infrastructure/Atomic.ts"; +import { type FormatPlayObjectOptions, type InternalConfigOptional } from "../common/infrastructure/Atomic.ts"; import { playToListenPayload } from '../common/vendor/listenbrainz/lzUtils.ts'; -import { Notifiers } from "../notifier/Notifiers.ts"; import { nowPlayingUpdateByPlayDuration, shouldClearNPStatus } from "./AbstractScrobbleClient.ts"; import { type TealClientConfig } from "../common/infrastructure/config/client/tealfm.ts"; import { ATProtoAppApiClient } from "../common/vendor/atproto/ATProtoAppApiClient.ts"; import { playToRecord, TealApiClient } from "../common/vendor/teal/TealApiClient.ts"; import { playToStatusRecord } from "../common/vendor/teal/TealApiClient.ts"; -import { nowPlayingExpirationDuration } from "./AbstractScrobbleClient.ts"; import { recordToPlay } from "../common/vendor/teal/TealApiClient.ts"; -import dayjs, { type Dayjs } from "dayjs"; +import dayjs from "dayjs"; import { isDebugMode } from "../utils.ts"; import { durationToHuman } from '../../core/TimeUtils.ts'; import AbstractHistoricalScrobbleClient from "./AbstractHistoricalScrobbleClient.ts"; diff --git a/src/backend/server/api.ts b/src/backend/server/api.ts index 2d6f05c0..41df31be 100644 --- a/src/backend/server/api.ts +++ b/src/backend/server/api.ts @@ -30,7 +30,7 @@ import { setupAuthRoutes } from "./auth.ts"; import { setupDeezerRoutes } from "./deezerRoutes.ts"; import {setupLZEndpointRoutes} from "./endpointListenbrainzRoutes.ts"; import {setupLastfmEndpointRoutes} from "./endpointLastfmRoutes.ts"; -import { type ClientAwareRequest, type ComponentAwareRequest, makeClientCheckMiddle, makeClientNextMiddle, makeComponentMiddle, makeSourceCheckMiddle, makeSourceNextMiddle, type SourceAwareRequest } from "./middleware.ts"; +import { type ComponentAwareRequest, makeClientCheckMiddle, makeClientNextMiddle, makeComponentMiddle, makeSourceCheckMiddle, makeSourceNextMiddle, type SourceAwareRequest } from "./middleware.ts"; import { setupWebscrobblerRoutes } from "./webscrobblerRoutes.ts"; import ScrobbleSources from "../sources/ScrobbleSources.ts"; import ScrobbleClients from "../scrobblers/ScrobbleClients.ts"; @@ -40,7 +40,7 @@ import { DrizzlePlayRepository, type QueryPlaysOpts, type QueryPlaysOptsJson } f import { playSelectToDeadScrobble } from "../common/database/drizzle/entityUtils.ts"; import AbstractHistoricalScrobbleClient from "../scrobblers/AbstractHistoricalScrobbleClient.ts"; import { DrizzlePlayHistoricalRepository } from "../common/database/drizzle/repositories/PlayHistoricalRepository.ts"; -import { type ComponentClientApi, type ComponentClientApiJson, type ComponentSourceApi, type ComponentSourceApiJson } from "../../core/Api.ts"; +import { type ComponentClientApiJson, type ComponentSourceApiJson } from "../../core/Api.ts"; import { asDayjsHydratedObject } from "../../core/DataUtils.ts"; import { type Dayjs } from "dayjs"; import { asSerializablePlaySelect } from "../../core/PlayMarshalUtils.ts"; diff --git a/src/backend/server/auth.ts b/src/backend/server/auth.ts index 16ed2cd5..398bddb9 100644 --- a/src/backend/server/auth.ts +++ b/src/backend/server/auth.ts @@ -10,7 +10,6 @@ import SpotifySource from "../sources/SpotifySource.ts"; import YTMusicSource from "../sources/YTMusicSource.ts"; import LibrefmScrobbler from "../scrobblers/LibrefmScrobbler.ts"; import LibrefmSource from "../sources/LibrefmSource.ts"; -import e from "express"; import AbstractSource from "../sources/AbstractSource.ts"; export const setupAuthRoutes = (app: Express, logger: Logger, sourceMiddle: ExpressHandler, clientMiddle: ExpressHandler, scrobbleSources: ScrobbleSources, scrobbleClients: ScrobbleClients) => { diff --git a/src/backend/server/endpointListenbrainzRoutes.ts b/src/backend/server/endpointListenbrainzRoutes.ts index 3e1d19b3..944e4dcf 100644 --- a/src/backend/server/endpointListenbrainzRoutes.ts +++ b/src/backend/server/endpointListenbrainzRoutes.ts @@ -6,7 +6,6 @@ import { EndpointListenbrainzSource, playStateFromRequest, parseDisplayIdentifie import { LZEndpointNotifier } from "../sources/ingressNotifiers/LZEndpointNotifier.ts"; import ScrobbleSources from "../sources/ScrobbleSources.ts"; import { nonEmptyBody } from "./middleware.ts"; -import { isDebugMode } from "../utils.ts"; import { type PlayingNowPayload } from '../../core/vendor/listenbrainz/interfaces.ts'; import ScrobbleClients from '../scrobblers/ScrobbleClients.ts'; import { playToListenPayload } from '../common/vendor/listenbrainz/lzUtils.ts'; diff --git a/src/backend/sources/AbstractSource.ts b/src/backend/sources/AbstractSource.ts index 2f33696e..bf2db22f 100644 --- a/src/backend/sources/AbstractSource.ts +++ b/src/backend/sources/AbstractSource.ts @@ -2,7 +2,7 @@ import { childLogger, type LogDataPretty, type LogLevel } from '@foxxmd/logging' import dayjs, { type Dayjs } from "dayjs"; import { EventEmitter } from "events"; import { FixedSizeList } from "fixed-size-list"; -import { type JsonPlayObject, type PlayMatchResult, type PlayObject, SOURCE_SOT } from "../../core/Atomic.ts"; +import { type PlayMatchResult, type PlayObject, SOURCE_SOT } from "../../core/Atomic.ts"; import { buildTrackString, capitalize, truncateStringToLength } from "../../core/StringUtils.ts"; import AbstractComponent from "../common/AbstractComponent.ts"; import { @@ -12,11 +12,8 @@ import { DEFAULT_RETRY_MULTIPLIER, type GroupedFixedPlays, type InternalConfig, - NO_USER, type ProgressAwarePlayObject, - SINGLE_USER_PLATFORM_ID, } from "../common/infrastructure/Atomic.ts"; -import { type PlayPlatformId } from '../../core/Atomic.ts'; import { type PlayUserId } from '../../core/Atomic.ts'; import { type DeviceId } from '../../core/Atomic.ts'; import { type SourceType, type SourceConfig } from '../common/infrastructure/config/source/sources.ts'; @@ -24,33 +21,29 @@ import { TRANSFORM_HOOK } from "../../core/Transform.ts"; import TupleMap from "../common/TupleMap.ts"; import { difference, - genGroupId, - isDebugMode, - playObjDataMatch, pollingBackoff, sleep, sortByOldestPlayDate, } from "../utils.ts"; -import { genGroupIdStr, sortByNewestPlayDate } from '../../core/PlayUtils.ts'; +import { sortByNewestPlayDate } from '../../core/PlayUtils.ts'; import { formatNumber } from '../../core/DataUtils.ts'; import { timeToHumanTimestamp } from "../../core/TimeUtils.ts"; import { todayAwareFormat } from "../../core/TimeUtils.ts"; import { getRoot } from '../ioc.ts'; import { componentFileLogger } from '../common/logging.ts'; -import { type WebhookPayload } from '../common/infrastructure/config/health/webhooks.ts';; +; import { messageWithCausesTruncatedDefault } from "../../core/ErrorUtils.ts"; import { existingScrobble, type ExistingScrobbleOpts } from '../utils/PlayComparisonUtils.ts'; -import { findAsync, staggerMapper, type StaggerOptions } from '../utils/AsyncUtils.ts'; +import { staggerMapper } from '../utils/AsyncUtils.ts'; import pMap, {pMapIterable} from 'p-map'; -import prom, { Counter, Gauge } from 'prom-client'; +import { Counter } from 'prom-client'; import { normalizeStr } from '../utils/StringUtils.ts'; -import { spawn, catchAbortError, isAbortError, rethrowAbortError, delay, forever, AbortError, throwIfAborted } from 'abort-controller-x'; -import { AbortedError, generateLoggableAbortReason } from '../common/errors/MSErrors.ts'; +import { spawn, isAbortError, delay, throwIfAborted } from 'abort-controller-x'; +import { generateLoggableAbortReason } from '../common/errors/MSErrors.ts'; import { DrizzlePlayRepository, playToRepositoryCreatePlayOpts, type QueryPlaysOpts, type RequestPlayQuery, type WithPlayRelation } from '../common/database/drizzle/repositories/PlayRepository.ts'; import { asPlay } from '../../core/PlayMarshalUtils.ts'; import { AsyncTask, SimpleIntervalJob, ToadScheduler } from 'toad-scheduler'; -import { type ComponentMinimalSelect } from '../common/database/drizzle/drizzleTypes.ts'; -import { COMPONENT_STATE, type ComponentSourceApi, type ComponentSourceApiJson, type ComponentState, type PlayApiCommonDetailed } from '../../core/Api.ts'; +import { COMPONENT_STATE, type ComponentSourceApiJson, type ComponentState, type PlayApiCommonDetailed } from '../../core/Api.ts'; import { type PaginatedResponse } from "../../core/Api.ts"; export interface RecentlyPlayedOptions { diff --git a/src/backend/sources/AzuracastSource.ts b/src/backend/sources/AzuracastSource.ts index faa54b87..ceae561c 100644 --- a/src/backend/sources/AzuracastSource.ts +++ b/src/backend/sources/AzuracastSource.ts @@ -1,11 +1,10 @@ import MemorySource from "./MemorySource.ts"; import { type RecentlyPlayedOptions } from "./AbstractSource.ts"; -import { childLogger, type Logger } from "@foxxmd/logging"; +import { childLogger } from "@foxxmd/logging"; import { EventEmitter } from "events"; import { WS, CloseEvent, ErrorEvent, RetryEvent } from 'iso-websocket' import pEvent from 'p-event'; import { type PlayObject, type PlayObjectMinimal, type URLData } from "../../core/Atomic.ts"; -import { UpstreamError } from "../common/errors/UpstreamError.ts"; import { type FormatPlayObjectOptions, type InternalConfig, @@ -13,7 +12,6 @@ import { REPORTED_PLAYER_STATUSES, SINGLE_USER_PLATFORM_ID, } from "../common/infrastructure/Atomic.ts"; -import { type PlayPlatformId } from '../../core/Atomic.ts'; import { type AzuracastSourceConfig, type AzuraNowPlayingResponse, type AzuraStationResponse } from "../common/infrastructure/config/source/azuracast.ts"; import { isPortReachable, normalizeWSAddress } from "../utils/NetworkUtils.ts"; import { baseFormatPlayObj } from "../utils/PlayTransformUtils.ts"; diff --git a/src/backend/sources/DeezerInternalSource.ts b/src/backend/sources/DeezerInternalSource.ts index 87c21edb..61a54767 100644 --- a/src/backend/sources/DeezerInternalSource.ts +++ b/src/backend/sources/DeezerInternalSource.ts @@ -1,13 +1,13 @@ import dayjs from "dayjs"; import EventEmitter from "events"; -import request, { Request, Response, type SuperAgent } from 'superagent'; +import request, { Request } from 'superagent'; import { type PlayObject, type PlayObjectMinimal, SOURCE_SOT, TA_CLOSE, TA_DURING, TA_EXACT, TA_FUZZY, type TemporalAccuracy } from "../../core/Atomic.ts"; import { DEFAULT_RETRY_MULTIPLIER, type FormatPlayObjectOptions, type InternalConfig } from "../common/infrastructure/Atomic.ts"; -import { type DeezerInternalSourceConfig, type DeezerInternalTrackData, type DeezerSourceConfig } from "../common/infrastructure/config/source/deezer.ts"; +import { type DeezerInternalSourceConfig, type DeezerInternalTrackData } from "../common/infrastructure/config/source/deezer.ts"; import { TRANSFORM_HOOK } from "../../core/Transform.ts"; import { parseRetryAfterSecsFromObj, playObjDataMatch, sleep, sortByOldestPlayDate} from "../utils.ts"; -import AbstractSource, { type RecentlyPlayedOptions } from "./AbstractSource.ts"; -import { CookieJar, Cookie } from 'tough-cookie'; +import { type RecentlyPlayedOptions } from "./AbstractSource.ts"; +import { CookieJar } from 'tough-cookie'; import { MixedCookieAgent } from 'http-cookie-agent/http'; import MemorySource from "./MemorySource.ts"; import { genericSourcePlayMatch } from "../utils/PlayComparisonUtils.ts"; diff --git a/src/backend/sources/EndpointLastfmSource.ts b/src/backend/sources/EndpointLastfmSource.ts index 2b403e94..a9def087 100644 --- a/src/backend/sources/EndpointLastfmSource.ts +++ b/src/backend/sources/EndpointLastfmSource.ts @@ -7,8 +7,7 @@ import { type InternalConfig, NO_USER, type PlayerStateData, - REPORTED_PLAYER_STATUSES, - type ReportedPlayerStatus + REPORTED_PLAYER_STATUSES } from "../common/infrastructure/Atomic.ts"; import { type PlayPlatformId } from '../../core/Atomic.ts'; import MemorySource from "./MemorySource.ts"; diff --git a/src/backend/sources/EndpointListenbrainzSource.ts b/src/backend/sources/EndpointListenbrainzSource.ts index c3ff8c99..ed1688e9 100644 --- a/src/backend/sources/EndpointListenbrainzSource.ts +++ b/src/backend/sources/EndpointListenbrainzSource.ts @@ -12,7 +12,7 @@ import { } from "../common/infrastructure/Atomic.ts"; import { type PlayPlatformId } from '../../core/Atomic.ts'; import { type ListenbrainzEndpointSourceConfig } from "../common/infrastructure/config/source/endpointlz.ts"; -import { ListenbrainzApiClient, listenPayloadToPlay } from "../common/vendor/ListenbrainzApiClient.ts"; +import { listenPayloadToPlay } from "../common/vendor/ListenbrainzApiClient.ts"; import { type SubmitPayload } from '../../core/vendor/listenbrainz/interfaces.ts'; import { type ListenPayload } from '../../core/vendor/listenbrainz/interfaces.ts'; import MemorySource from "./MemorySource.ts"; diff --git a/src/backend/sources/KoitoSource.ts b/src/backend/sources/KoitoSource.ts index 9f1c4e4d..4237f3cc 100644 --- a/src/backend/sources/KoitoSource.ts +++ b/src/backend/sources/KoitoSource.ts @@ -1,7 +1,7 @@ import EventEmitter from "events"; import { type PlayObject, SOURCE_SOT } from "../../core/Atomic.ts"; import { isNodeNetworkException } from "../common/errors/NodeErrors.ts"; -import { type FormatPlayObjectOptions, type InternalConfig, type PaginatedListensTimeRangeOptions, type PaginatedTimeRangeListens, type TimeRangeListensFetcher } from "../common/infrastructure/Atomic.ts"; +import { type FormatPlayObjectOptions, type InternalConfig, type TimeRangeListensFetcher } from "../common/infrastructure/Atomic.ts"; import { type RecentlyPlayedOptions } from "./AbstractSource.ts"; import MemorySource from "./MemorySource.ts"; import { KoitoApiClient, listenObjectResponseToPlay } from "../common/vendor/koito/KoitoApiClient.ts"; diff --git a/src/backend/sources/MalojaSource.ts b/src/backend/sources/MalojaSource.ts index 60c1f4a8..993f2110 100644 --- a/src/backend/sources/MalojaSource.ts +++ b/src/backend/sources/MalojaSource.ts @@ -1,7 +1,7 @@ import EventEmitter from "events"; import { type PlayObject, SOURCE_SOT } from "../../core/Atomic.ts"; import { isNodeNetworkException } from "../common/errors/NodeErrors.ts"; -import { type InternalConfig, type PaginatedListensTimeRangeOptions, type PaginatedTimeRangeListens } from "../common/infrastructure/Atomic.ts"; +import { type InternalConfig } from "../common/infrastructure/Atomic.ts"; import { type RecentlyPlayedOptions } from "./AbstractSource.ts"; import MemorySource from "./MemorySource.ts"; import { MalojaApiClient } from "../common/vendor/maloja/MalojaApiClient.ts"; diff --git a/src/backend/sources/MemorySource.ts b/src/backend/sources/MemorySource.ts index b086d85a..1e0f1162 100644 --- a/src/backend/sources/MemorySource.ts +++ b/src/backend/sources/MemorySource.ts @@ -1,7 +1,7 @@ import { type Logger } from "@foxxmd/logging"; import dayjs, { type Dayjs } from "dayjs"; import { EventEmitter } from "events"; -import { AsyncTask, SimpleIntervalJob, Task, ToadScheduler } from "toad-scheduler"; +import { AsyncTask, SimpleIntervalJob, ToadScheduler } from "toad-scheduler"; import { type PlayObject, SOURCE_SOT, type SOURCE_SOT_TYPES, type SourcePlayerJson, type SourcePlayerObj } from "../../core/Atomic.ts"; import { buildTrackString } from "../../core/StringUtils.ts"; import { @@ -13,7 +13,6 @@ import { type PlayPlatformId } from '../../core/Atomic.ts'; import { type SourceType, type SourceConfig } from '../common/infrastructure/config/source/sources.ts'; import { type PollingOptions } from "../common/infrastructure/config/common.ts"; import { - genGroupId, getPlatformIdFromData, isDebugMode, playObjDataMatch, @@ -28,8 +27,7 @@ import AbstractSource from "./AbstractSource.ts"; import { AbstractPlayerState, createPlayerOptions, type PlayerStateOptions } from "./PlayerState/AbstractPlayerState.ts"; import { GenericPlayerState } from "./PlayerState/GenericPlayerState.ts"; import { hashObject } from "../utils/StringUtils.ts"; -import { useDebugValue } from "react"; -import { type ComponentSourceApi, type ComponentSourceApiJson } from "../../core/Api.ts"; +import { type ComponentSourceApiJson } from "../../core/Api.ts"; const EXPECTED_NON_DISCOVERED_REASON = 'not added because an identical play with the same timestamp was already discovered.'; diff --git a/src/backend/sources/MusicCastSource.ts b/src/backend/sources/MusicCastSource.ts index 4edc8c4d..54824cfb 100644 --- a/src/backend/sources/MusicCastSource.ts +++ b/src/backend/sources/MusicCastSource.ts @@ -8,9 +8,9 @@ import { type PlayerStateData, SINGLE_USER_PLATFORM_ID, } from "../common/infrastructure/Atomic.ts"; -import { isPortReachable, isPortReachableConnect, joinedUrl, normalizeWebAddress } from "../utils/NetworkUtils.ts"; +import { isPortReachableConnect, joinedUrl, normalizeWebAddress } from "../utils/NetworkUtils.ts"; import { type DeviceInfoResponse, type DeviceStatusResponse, MusicCastResponseCodes, type MusicCastSourceConfig, playbackToReportedStatus, type PlayInfoCDResponse, type PlayInfoNetResponse } from "../common/infrastructure/config/source/musiccast.ts"; -import request, { Request, Response } from 'superagent'; +import request from 'superagent'; import { baseFormatPlayObj } from "../utils/PlayTransformUtils.ts"; import { artistNamesToCredits } from "../../core/StringUtils.ts"; diff --git a/src/backend/sources/MusikcubeSource.ts b/src/backend/sources/MusikcubeSource.ts index 8833c7aa..1bee4b0f 100644 --- a/src/backend/sources/MusikcubeSource.ts +++ b/src/backend/sources/MusikcubeSource.ts @@ -2,9 +2,7 @@ import { childLogger } from "@foxxmd/logging"; import { EventEmitter } from "events"; import { WS, CloseEvent, ErrorEvent, RetryEvent } from 'iso-websocket' import { randomUUID } from "node:crypto"; -import normalizeUrl from 'normalize-url'; import pEvent from 'p-event'; -import { URL } from "url"; import { type PlayObject, type PlayObjectMinimal, type URLData } from "../../core/Atomic.ts"; import { UpstreamError } from "../common/errors/UpstreamError.ts"; import { diff --git a/src/backend/sources/PlayerState/JellyfinPlayerState.ts b/src/backend/sources/PlayerState/JellyfinPlayerState.ts index 8073443b..def74f2c 100644 --- a/src/backend/sources/PlayerState/JellyfinPlayerState.ts +++ b/src/backend/sources/PlayerState/JellyfinPlayerState.ts @@ -1,9 +1,7 @@ import { type Logger } from "@foxxmd/logging"; -import { type PlayObject } from "../../../core/Atomic.ts"; import { type PlayerStateDataMaybePlay, type ReportedPlayerStatus } from "../../common/infrastructure/Atomic.ts"; import { type PlayPlatformId } from '../../../core/Atomic.ts'; import { type PlayerStateOptions } from "./AbstractPlayerState.ts"; -import { GenericPlayerState } from "./GenericPlayerState.ts"; import { PositionalPlayerState } from "./PositionalPlayerState.ts"; export class JellyfinPlayerState extends PositionalPlayerState { diff --git a/src/backend/sources/PlayerState/PlexPlayerState.ts b/src/backend/sources/PlayerState/PlexPlayerState.ts index db3f83ad..d90b9e1b 100644 --- a/src/backend/sources/PlayerState/PlexPlayerState.ts +++ b/src/backend/sources/PlayerState/PlexPlayerState.ts @@ -1,8 +1,7 @@ import { type Logger } from "@foxxmd/logging"; import { REPORTED_PLAYER_STATUSES } from "../../common/infrastructure/Atomic.ts"; import { type PlayPlatformId } from '../../../core/Atomic.ts'; -import { AbstractPlayerState, type PlayerStateOptions } from "./AbstractPlayerState.ts"; -import { GenericPlayerState } from "./GenericPlayerState.ts"; +import { type PlayerStateOptions } from "./AbstractPlayerState.ts"; import { PositionalPlayerState } from "./PositionalPlayerState.ts"; export class PlexPlayerState extends PositionalPlayerState { diff --git a/src/backend/sources/PlayerState/PositionalPlayerState.ts b/src/backend/sources/PlayerState/PositionalPlayerState.ts index fbded6d9..2978b734 100644 --- a/src/backend/sources/PlayerState/PositionalPlayerState.ts +++ b/src/backend/sources/PlayerState/PositionalPlayerState.ts @@ -1,5 +1,5 @@ import { type Logger } from "@foxxmd/logging"; -import { CALCULATED_PLAYER_STATUSES, REPORTED_PLAYER_STATUSES } from "../../common/infrastructure/Atomic.ts"; +import { CALCULATED_PLAYER_STATUSES } from "../../common/infrastructure/Atomic.ts"; import { type PlayPlatformId } from '../../../core/Atomic.ts'; import { AbstractPlayerState, type PlayerStateOptions } from "./AbstractPlayerState.ts"; import { type PlayProgressPositional, type Second } from "../../../core/Atomic.ts"; diff --git a/src/backend/sources/PlayerState/RealtimePlayerState.ts b/src/backend/sources/PlayerState/RealtimePlayerState.ts index 83d6aee5..31eeac54 100644 --- a/src/backend/sources/PlayerState/RealtimePlayerState.ts +++ b/src/backend/sources/PlayerState/RealtimePlayerState.ts @@ -1,11 +1,3 @@ -import { type Logger } from "@foxxmd/logging"; -import { REPORTED_PLAYER_STATUSES } from "../../common/infrastructure/Atomic.ts"; -import { type PlayPlatformId } from '../../../core/Atomic.ts'; -import { AbstractPlayerState, type PlayerStateOptions } from "./AbstractPlayerState.ts"; -import { GenericPlayerState } from "./GenericPlayerState.ts"; -import { GenericRealtimePlayer, RealtimePlayer } from "./RealtimePlayer.ts"; -import { type Second } from "../../../core/Atomic.ts"; -import { type Dayjs } from "dayjs"; // export class RealtimePlayerState extends GenericPlayerState { diff --git a/src/backend/sources/PlayerState/SubsonicPlayerState.ts b/src/backend/sources/PlayerState/SubsonicPlayerState.ts index 691d856e..e615d9eb 100644 --- a/src/backend/sources/PlayerState/SubsonicPlayerState.ts +++ b/src/backend/sources/PlayerState/SubsonicPlayerState.ts @@ -1,4 +1,3 @@ -import { type SourcePlayerObj } from "../../../core/Atomic.ts"; import { GenericPlayerState } from "./GenericPlayerState.ts"; import { type Dayjs } from "dayjs"; diff --git a/src/backend/sources/PlexApiSource.ts b/src/backend/sources/PlexApiSource.ts index aa3ad726..6f4addcc 100644 --- a/src/backend/sources/PlexApiSource.ts +++ b/src/backend/sources/PlexApiSource.ts @@ -1,26 +1,23 @@ import EventEmitter from "events"; import { type BrainzMeta, type PlayObject, type PlayObjectMinimal, type URLData } from "../../core/Atomic.ts"; -import { artistNamesToCredits, buildTrackString, combinePartsToString, truncateStringToLength } from "../../core/StringUtils.ts"; +import { artistNamesToCredits, combinePartsToString, truncateStringToLength } from "../../core/StringUtils.ts"; import { asPlayerStateDataMaybePlay, type FormatPlayObjectOptions, type InternalConfig, MBID_VARIOUS_ARTISTS, - NO_USER, - type PlayerStateData, type PlayerStateDataMaybePlay, REPORTED_PLAYER_STATUSES } from "../common/infrastructure/Atomic.ts"; import { type PlayPlatformId } from '../../core/Atomic.ts'; -import { getFirstNonEmptyString, getPlatformIdFromData, isDebugMode, parseBool, } from "../utils.ts"; -import { genGroupIdStr } from '../../core/PlayUtils.ts'; +import { getFirstNonEmptyString, isDebugMode, } from "../utils.ts"; import { buildStatePlayerPlayIdententifyingInfo, hashObject, parseArrayFromMaybeString } from "../utils/StringUtils.ts"; import { type GetSessionsMetadata } from "@lukehagar/plexjs/sdk/models/operations/getsessions.js"; import { PlexAPI, HTTPClient, type Fetcher } from "@lukehagar/plexjs"; import { Agent } from 'undici'; import { type PlexApiSourceConfig } from "../common/infrastructure/config/source/plex.ts"; -import { isPortReachable, joinedUrl, normalizeWebAddress } from '../utils/NetworkUtils.ts'; -import { type GetTokenDetailsResponse, type GetTokenDetailsUserPlexAccount } from '@lukehagar/plexjs/sdk/models/operations/gettokendetails.js'; +import { isPortReachable, normalizeWebAddress } from '../utils/NetworkUtils.ts'; +import { type GetTokenDetailsUserPlexAccount } from '@lukehagar/plexjs/sdk/models/operations/gettokendetails.js'; import { parseRegexSingle } from '@foxxmd/regex-buddy-core'; import { Readable } from 'node:stream'; import { PlexPlayerState } from './PlayerState/PlexPlayerState.ts'; @@ -32,7 +29,6 @@ import { SDKValidationError } from '@lukehagar/plexjs/sdk/models/errors/sdkvalid import { Keyv } from 'cacheable'; import { initMemoryCache } from "../common/Cache.ts"; import { baseFormatPlayObj } from "../utils/PlayTransformUtils.ts"; -import clone from 'clone'; const shortDeviceId = truncateStringToLength(10, ''); diff --git a/src/backend/sources/RockskySource.ts b/src/backend/sources/RockskySource.ts index 44139577..0d8894a8 100644 --- a/src/backend/sources/RockskySource.ts +++ b/src/backend/sources/RockskySource.ts @@ -2,7 +2,6 @@ import EventEmitter from "events"; import { type PlayObject, SOURCE_SOT } from "../../core/Atomic.ts"; import { isNodeNetworkException } from "../common/errors/NodeErrors.ts"; import { type FormatPlayObjectOptions, type InternalConfig } from "../common/infrastructure/Atomic.ts"; -import { type PlayPlatformId } from '../../core/Atomic.ts'; import { type RecentlyPlayedOptions } from "./AbstractSource.ts"; import MemorySource from "./MemorySource.ts"; import { RockSkyApiClient } from "../common/vendor/RockSkyApiClient.ts"; diff --git a/src/backend/sources/ScrobbleSources.ts b/src/backend/sources/ScrobbleSources.ts index e3167022..ee608204 100644 --- a/src/backend/sources/ScrobbleSources.ts +++ b/src/backend/sources/ScrobbleSources.ts @@ -1,14 +1,14 @@ -/* eslint-disable no-case-declarations */ + import { childLogger, type Logger } from '@foxxmd/logging'; import EventEmitter from "events"; -import { type ConfigMeta, type ConfigureAs, type ConfigureAsSource, type InternalConfig, type InternalConfigOptional } from "../common/infrastructure/Atomic.ts"; +import { type ConfigMeta, type ConfigureAsSource, type InternalConfig, type InternalConfigOptional } from "../common/infrastructure/Atomic.ts"; import { isSourceType } from '../common/infrastructure/config/source/sources.ts'; import { sourceTypes } from '../common/infrastructure/config/source/sources.ts'; import { type SourceType } from '../common/infrastructure/config/source/sources.ts'; import { type AIOConfig, type SourceDefaults } from "../common/infrastructure/config/aioConfig.ts"; import { type AzuracastData, type AzuracastSourceConfig } from "../common/infrastructure/config/source/azuracast.ts"; import { type ChromecastData, type ChromecastSourceConfig } from "../common/infrastructure/config/source/chromecast.ts"; -import { type DeezerData, type DeezerSourceConfig, type DeezerInternalSourceConfig, type DeezerCompatConfig, type DeezerInternalData } from "../common/infrastructure/config/source/deezer.ts"; +import { type DeezerSourceConfig, type DeezerInternalSourceConfig, type DeezerCompatConfig } from "../common/infrastructure/config/source/deezer.ts"; import { type ListenbrainzEndpointSourceConfig, type ListenbrainzEndpointData } from "../common/infrastructure/config/source/endpointlz.ts"; import { type LastFMEndpointSourceConfig, type LastFMEndpointData } from "../common/infrastructure/config/source/endpointlfm.ts"; import { @@ -46,7 +46,7 @@ import { type KoitoSourceConfig } from '../common/infrastructure/config/source/k import { type TealSourceConfig } from '../common/infrastructure/config/source/tealfm.ts'; import { type RockskySourceConfig } from '../common/infrastructure/config/source/rocksky.ts'; import { type CommonSourceOptions } from '../common/infrastructure/config/source/index.ts'; -import { type ExternalMetadataTerm, type PlayTransformHooks, type PlayTransformOptions } from '../../core/Transform.ts'; +import { type ExternalMetadataTerm, type PlayTransformHooks } from '../../core/Transform.ts'; import { type LibrefmSourceConfig } from '../common/infrastructure/config/source/librefm.ts'; import { type LastfmData } from '../common/infrastructure/config/client/lastfm.ts'; import { type MalojaData } from '../common/infrastructure/config/client/maloja.ts'; @@ -55,7 +55,6 @@ import { type ListenBrainzData } from '../common/infrastructure/config/client/li import { type KoitoData } from '../common/infrastructure/config/client/koito.ts'; import { type TealData } from '../common/infrastructure/config/client/tealfm.ts'; import { type RockSkyData } from '../common/infrastructure/config/client/rocksky.ts'; -import { DEFAULT_RETENTION_DELETE_AFTER } from '../common/infrastructure/config/database.ts'; type groupedNamedConfigs = {[key: string]: ParsedConfig[]}; diff --git a/src/backend/sources/SpotifySource.ts b/src/backend/sources/SpotifySource.ts index 615fba18..a8301b8f 100644 --- a/src/backend/sources/SpotifySource.ts +++ b/src/backend/sources/SpotifySource.ts @@ -2,8 +2,8 @@ import dayjs, { type Dayjs } from "dayjs"; import EventEmitter from "events"; import SpotifyWebApi from "spotify-web-api-node"; import request from 'superagent'; -import { type BrainzMeta, type PlayObject, type PlayObjectMinimal, SCROBBLE_TS_SOC_END, SCROBBLE_TS_SOC_START, type ScrobbleTsSOC, type SpotifyMeta } from "../../core/Atomic.ts"; -import { artistNamesToCredits, artistNameToCredit, combinePartsToString, truncateStringToLength } from "../../core/StringUtils.ts"; +import { type BrainzMeta, type PlayObject, type PlayObjectMinimal, SCROBBLE_TS_SOC_END, SCROBBLE_TS_SOC_START, type ScrobbleTsSOC } from "../../core/Atomic.ts"; +import { artistNameToCredit, combinePartsToString, truncateStringToLength } from "../../core/StringUtils.ts"; import { isNodeNetworkException } from "../common/errors/NodeErrors.ts"; import { hasUpstreamError, UpstreamError } from "../common/errors/UpstreamError.ts"; import { diff --git a/src/backend/sources/WebScrobblerSource.ts b/src/backend/sources/WebScrobblerSource.ts index 19976969..24ed4b31 100644 --- a/src/backend/sources/WebScrobblerSource.ts +++ b/src/backend/sources/WebScrobblerSource.ts @@ -1,6 +1,6 @@ import dayjs, { type Dayjs } from "dayjs"; import EventEmitter from "events"; -import { type PlayObject, type PlayObjectMinimal, SOURCE_SOT } from "../../core/Atomic.ts"; +import { type PlayObjectMinimal, SOURCE_SOT } from "../../core/Atomic.ts"; import { type FormatPlayObjectOptions, type InternalConfig, @@ -23,7 +23,7 @@ import { type Logger } from "@foxxmd/logging"; import { type PlayerStateOptions } from "./PlayerState/AbstractPlayerState.ts"; import { NowPlayingPlayerState } from "./PlayerState/NowPlayingPlayerState.ts"; import { baseFormatPlayObj } from "../utils/PlayTransformUtils.ts"; -import { artistCreditToName, artistNameToCredit } from "../../core/StringUtils.ts"; +import { artistNameToCredit } from "../../core/StringUtils.ts"; interface WebScrobbleMeta { scrobbleAllowed?: boolean diff --git a/src/backend/sources/YTMusicSource.ts b/src/backend/sources/YTMusicSource.ts index bef27297..ad5f94c0 100644 --- a/src/backend/sources/YTMusicSource.ts +++ b/src/backend/sources/YTMusicSource.ts @@ -21,7 +21,7 @@ import AbstractSource, { type RecentlyPlayedOptions } from "./AbstractSource.ts" import { artistNamesToCredits, buildTrackString, truncateStringToLength } from "../../core/StringUtils.ts"; import { joinedUrl } from "../utils/NetworkUtils.ts"; import { todayAwareFormat } from "../../core/TimeUtils.ts"; -import { parseArrayFromMaybeString, parseArtistCredits, parseCredits } from "../utils/StringUtils.ts"; +import { parseArrayFromMaybeString, parseArtistCredits } from "../utils/StringUtils.ts"; import { baseFormatPlayObj } from "../utils/PlayTransformUtils.ts"; import { FixedSizeList } from "fixed-size-list"; diff --git a/src/backend/sources/YandexMusicBridgeSource.ts b/src/backend/sources/YandexMusicBridgeSource.ts index d5db2df8..5e769c80 100644 --- a/src/backend/sources/YandexMusicBridgeSource.ts +++ b/src/backend/sources/YandexMusicBridgeSource.ts @@ -7,7 +7,6 @@ import { type InternalConfig, NO_DEVICE, NO_USER, - type PlayerStateData, type PlayerStateDataMaybePlay, REPORTED_PLAYER_STATUSES, } from "../common/infrastructure/Atomic.ts"; diff --git a/src/backend/sources/ingressNotifiers/LZEndpointNotifier.ts b/src/backend/sources/ingressNotifiers/LZEndpointNotifier.ts index c04e7f91..bcc946ed 100644 --- a/src/backend/sources/ingressNotifiers/LZEndpointNotifier.ts +++ b/src/backend/sources/ingressNotifiers/LZEndpointNotifier.ts @@ -1,6 +1,6 @@ import { type Logger } from "@foxxmd/logging"; import { type Request } from "express"; -import { EndpointListenbrainzSource, parseIdentifiersFromRequest } from "../EndpointListenbrainzSource.ts"; +import { parseIdentifiersFromRequest } from "../EndpointListenbrainzSource.ts"; import { IngressNotifier } from "./IngressNotifier.ts"; export class LZEndpointNotifier extends IngressNotifier { diff --git a/src/backend/tests/cache/cache.test.ts b/src/backend/tests/cache/cache.test.ts index 3a52b0e6..31307fc0 100644 --- a/src/backend/tests/cache/cache.test.ts +++ b/src/backend/tests/cache/cache.test.ts @@ -1,7 +1,6 @@ -import { loggerTest, loggerDebug } from "@foxxmd/logging"; -import chai, { assert, expect } from 'chai'; +import chai, { expect } from 'chai'; import asPromised from 'chai-as-promised'; -import { after, before, describe, it } from 'mocha'; +import { before, describe, it } from 'mocha'; import dayjs from "dayjs"; import withLocalTmpDir from 'with-local-tmp-dir'; import { initFileCache, initMemoryCache, initValkeyCache } from "../../common/Cache.ts"; diff --git a/src/backend/tests/component/transformers.test.ts b/src/backend/tests/component/transformers.test.ts index 69968461..d12f6ee1 100644 --- a/src/backend/tests/component/transformers.test.ts +++ b/src/backend/tests/component/transformers.test.ts @@ -1,10 +1,10 @@ -import { loggerTest, loggerDebug, childLogger } from "@foxxmd/logging"; -import chai, { assert, expect } from 'chai'; +import { loggerTest, childLogger } from "@foxxmd/logging"; +import chai, { expect } from 'chai'; import asPromised from 'chai-as-promised'; -import { after, before, describe, it } from 'mocha'; +import { describe, it } from 'mocha'; import AbstractComponent, { type AbstractComponentConfig } from "../../common/AbstractComponent.ts"; -import { type ConditionalSearchAndReplaceRegExp, STAGE_TYPES, STAGE_TYPES_METADATA, STAGE_TYPES_USER, TRANSFORM_HOOK } from "../../../core/Transform.ts"; +import { type ConditionalSearchAndReplaceRegExp, TRANSFORM_HOOK } from "../../../core/Transform.ts"; import { isConditionalSearchAndReplace } from "../../utils/PlayTransformUtils.ts"; import { generateArtistsStr, generatePlay } from "../../../core/tests/utils/PlayTestUtils.ts"; diff --git a/src/backend/tests/config/config.test.ts b/src/backend/tests/config/config.test.ts index 3ef48b50..2bda5725 100644 --- a/src/backend/tests/config/config.test.ts +++ b/src/backend/tests/config/config.test.ts @@ -1,5 +1,5 @@ -import { after, before, afterEach, describe, it } from 'mocha'; -import chai, { assert, expect } from 'chai'; +import { before, afterEach, describe, it } from 'mocha'; +import chai, { expect } from 'chai'; import asPromised from 'chai-as-promised'; import withLocalTmpDir from 'with-local-tmp-dir'; import {constants, copyFile, access} from 'node:fs/promises'; @@ -8,11 +8,11 @@ import {projectDir} from '../../common/index.ts'; import ScrobbleClients from '../../scrobblers/ScrobbleClients.ts'; import ScrobbleSources from '../../sources/ScrobbleSources.ts'; import EventEmitter from "events"; -import {loggerTest, loggerDebug} from '@foxxmd/logging'; +import {loggerTest} from '@foxxmd/logging'; import { clientTypes } from '../../common/infrastructure/config/client/clients.ts'; import { sourceTypes } from '../../common/infrastructure/config/source/sources.ts'; import { Notifiers } from '../../notifier/Notifiers.ts'; -import { difference, intersect } from '../../utils.ts'; +import { difference } from '../../utils.ts'; chai.use(asPromised); diff --git a/src/backend/tests/database/drizzle.test.ts b/src/backend/tests/database/drizzle.test.ts index 83f814ca..33e9450a 100644 --- a/src/backend/tests/database/drizzle.test.ts +++ b/src/backend/tests/database/drizzle.test.ts @@ -1,5 +1,4 @@ -import chai, { assert, expect } from 'chai'; -import asPromised from 'chai-as-promised'; +import { expect } from 'chai'; import { getDb, migrateDb, getDbMigrationStatus, getMigratedDb, type DbConcrete } from '../../common/database/drizzle/drizzleUtils.ts'; import withLocalTmpDir from 'with-local-tmp-dir'; import { components, playInputs, plays, queueStates } from '../../common/database/drizzle/schema/schema.ts'; diff --git a/src/backend/tests/errors/errors.test.ts b/src/backend/tests/errors/errors.test.ts index 72d57eb5..beadd768 100644 --- a/src/backend/tests/errors/errors.test.ts +++ b/src/backend/tests/errors/errors.test.ts @@ -1,6 +1,4 @@ -import chai, { assert, expect } from 'chai'; -import asPromised from 'chai-as-promised'; -import { after } from 'mocha'; +import { expect } from 'chai'; import { UpstreamError } from '../../common/errors/UpstreamError.ts'; import { serializeError, deserializeError } from 'serialize-error'; import { AbortedError } from '../../common/errors/MSErrors.ts'; diff --git a/src/backend/tests/jellyfin/jellyfin.test.ts b/src/backend/tests/jellyfin/jellyfin.test.ts index 8c82e904..63ac32de 100644 --- a/src/backend/tests/jellyfin/jellyfin.test.ts +++ b/src/backend/tests/jellyfin/jellyfin.test.ts @@ -1,5 +1,5 @@ import { loggerTest } from "@foxxmd/logging"; -import { assert, expect } from 'chai'; +import { expect } from 'chai'; import EventEmitter from "events"; import { describe, it } from 'mocha'; import { type JsonPlayObject, type PlayMeta } from "../../../core/Atomic.ts"; @@ -8,7 +8,7 @@ import JellyfinApiSource from "../../sources/JellyfinApiSource.ts"; import validSession from './validSession.json' with { type: "json" }; import { type JellyApiData } from "../../common/infrastructure/config/source/jellyfin.ts"; import { generatePlay } from "../../../core/tests/utils/PlayTestUtils.ts"; -import { faker, fakerJA } from "@faker-js/faker"; +import { faker } from "@faker-js/faker"; import type { // @ts-expect-error weird typings? SessionInfo, diff --git a/src/backend/tests/lastfm/lastfm.test.ts b/src/backend/tests/lastfm/lastfm.test.ts index 5e71eb10..812b3603 100644 --- a/src/backend/tests/lastfm/lastfm.test.ts +++ b/src/backend/tests/lastfm/lastfm.test.ts @@ -1,14 +1,9 @@ import chai, { expect } from 'chai'; import asPromised from 'chai-as-promised'; -import { after, before, describe, it } from 'mocha'; +import { describe, it } from 'mocha'; import { generateLastfmTrackObject, generateMbid, generatePlay } from "../../../core/tests/utils/PlayTestUtils.ts"; -import LastfmApiClient, { playToClientPayload, formatPlayObj } from '../../common/vendor/LastfmApiClient.ts'; -import { MockNetworkError, withRequestInterception } from '../utils/networking.ts'; -import { http, HttpResponse, delay } from "msw"; -import { loggerDebug } from '@foxxmd/logging'; -import { configDir, projectDir } from '../../common/index.ts'; -import { LastFMGeo } from 'lastfm-ts-api'; +import { playToClientPayload, formatPlayObj } from '../../common/vendor/LastfmApiClient.ts'; import { artistNamesToCredits } from '../../../core/StringUtils.ts'; chai.use(asPromised); diff --git a/src/backend/tests/listenbrainz/listenbrainz.test.ts b/src/backend/tests/listenbrainz/listenbrainz.test.ts index af8cfc77..e74bab34 100644 --- a/src/backend/tests/listenbrainz/listenbrainz.test.ts +++ b/src/backend/tests/listenbrainz/listenbrainz.test.ts @@ -1,4 +1,4 @@ -import { loggerDebug, loggerTest } from "@foxxmd/logging"; +import { loggerTest } from "@foxxmd/logging"; import { assert, expect } from 'chai'; import dayjs from "dayjs"; import { describe, it } from 'mocha'; @@ -8,7 +8,7 @@ import { UpstreamError } from "../../common/errors/UpstreamError.ts"; import { ListenbrainzApiClient, listenResponseToPlay, listenPayloadToPlay } from "../../common/vendor/ListenbrainzApiClient.ts"; import { playToListenPayload } from '../../common/vendor/listenbrainz/lzUtils.ts'; -import { type ListenPayload, type ListenResponse, type SubmitPayload } from '../../../core/vendor/listenbrainz/interfaces.ts'; +import { type ListenPayload, type ListenResponse } from '../../../core/vendor/listenbrainz/interfaces.ts'; import { type ExpectedResults } from "../utils/interfaces.ts"; import { withRequestInterception } from "../utils/networking.ts"; import artistWithProperJoiner from './correctlyMapped/artistProperHasJoinerInName.json' with { type: "json" }; diff --git a/src/backend/tests/musicbrainz/musicbrainz.test.ts b/src/backend/tests/musicbrainz/musicbrainz.test.ts index 24a1e665..6bc91e07 100644 --- a/src/backend/tests/musicbrainz/musicbrainz.test.ts +++ b/src/backend/tests/musicbrainz/musicbrainz.test.ts @@ -1,8 +1,7 @@ import * as dotenv from 'dotenv'; -import { loggerTest, loggerDebug, childLogger } from "@foxxmd/logging"; -import chai, { assert, expect } from 'chai'; -import asPromised from 'chai-as-promised'; -import { after, before, describe, it } from 'mocha'; +import { loggerTest } from "@foxxmd/logging"; +import { expect } from 'chai'; +import { before, describe, it } from 'mocha'; import { initMemoryCache } from "../../common/Cache.ts"; import { Cacheable } from "cacheable"; import MusicbrainzTransformer, { DEFAULT_SEARCHTYPE_ORDER, type MusicbrainzTransformerDataStage } from "../../common/transforms/MusicbrainzTransformer.ts"; @@ -15,7 +14,7 @@ import { http, HttpResponse, delay } from "msw"; import { generatePlay, withBrainz } from '../../../core/tests/utils/PlayTestUtils.ts'; import { intersect, missingMbidTypes } from '../../utils.ts'; import { CoverArtApiClient, type CoverArtApiConfig } from '../../common/vendor/musicbrainz/CoverArtApiClient.ts'; -import { artistCreditToName, artistNamesToCredits, artistNameToCredit } from '../../../core/StringUtils.ts'; +import { artistNamesToCredits, artistNameToCredit } from '../../../core/StringUtils.ts'; const envPath = path.join(projectDir, '.env'); dotenv.config({ path: envPath }); diff --git a/src/backend/tests/musiccast/musiccast.test.ts b/src/backend/tests/musiccast/musiccast.test.ts index 69a7888c..800290b4 100644 --- a/src/backend/tests/musiccast/musiccast.test.ts +++ b/src/backend/tests/musiccast/musiccast.test.ts @@ -1,8 +1,7 @@ -import { loggerTest, loggerDebug } from "@foxxmd/logging"; -import { assert, expect } from 'chai'; +import { loggerTest } from "@foxxmd/logging"; +import { expect } from 'chai'; import EventEmitter from "events"; -import dayjs from "dayjs"; -import { describe, it, before, after } from 'mocha'; +import { describe, it, after } from 'mocha'; import { http, HttpResponse } from "msw"; import { withRequestInterception } from "../utils/networking.ts"; import { type MusicCastData } from "../../common/infrastructure/config/source/musiccast.ts"; diff --git a/src/backend/tests/plays/playParsing.test.ts b/src/backend/tests/plays/playParsing.test.ts index 5bf108c9..71c83966 100644 --- a/src/backend/tests/plays/playParsing.test.ts +++ b/src/backend/tests/plays/playParsing.test.ts @@ -1,6 +1,5 @@ -import chai, { assert, expect } from 'chai'; -import asPromised from 'chai-as-promised'; -import { after, before, describe, it } from 'mocha'; +import { assert, expect } from 'chai'; +import { describe, it } from 'mocha'; import { generateArtistsStr, } from "../../../core/tests/utils/PlayTestUtils.ts"; import { parseArtistCredits, parseCredits, parseTrackCredits, uniqueNormalizedStrArr } from "../../utils/StringUtils.ts"; diff --git a/src/backend/tests/plex/plex.test.ts b/src/backend/tests/plex/plex.test.ts index a16bbdce..09ac1a1b 100644 --- a/src/backend/tests/plex/plex.test.ts +++ b/src/backend/tests/plex/plex.test.ts @@ -1,5 +1,5 @@ import { loggerTest } from "@foxxmd/logging"; -import { assert, expect } from 'chai'; +import { expect } from 'chai'; import EventEmitter from "events"; import { describe, it } from 'mocha'; import { type PlayMeta } from "../../../core/Atomic.ts"; diff --git a/src/backend/tests/promises/abortable.test.ts b/src/backend/tests/promises/abortable.test.ts index a171ffaa..ce17b75e 100644 --- a/src/backend/tests/promises/abortable.test.ts +++ b/src/backend/tests/promises/abortable.test.ts @@ -2,7 +2,7 @@ import chai from 'chai'; import asPromised from 'chai-as-promised'; import { describe, it } from 'mocha'; import { sleep } from "../../utils.ts"; -import { spawn, catchAbortError, isAbortError, rethrowAbortError, delay, forever } from 'abort-controller-x'; +import { spawn, catchAbortError, rethrowAbortError, delay, forever } from 'abort-controller-x'; chai.should(); chai.use(asPromised); diff --git a/src/backend/tests/scrobbler/TestScrobbler.ts b/src/backend/tests/scrobbler/TestScrobbler.ts index 0723716b..bd839998 100644 --- a/src/backend/tests/scrobbler/TestScrobbler.ts +++ b/src/backend/tests/scrobbler/TestScrobbler.ts @@ -1,7 +1,6 @@ import EventEmitter from "events"; import request from "superagent"; import { type PlayObject } from "../../../core/Atomic.ts"; -import { Notifiers } from "../../notifier/Notifiers.ts"; import AbstractScrobbleClient from "../../scrobblers/AbstractScrobbleClient.ts"; import { type CommonClientConfig, type CommonClientOptions, type NowPlayingOptions } from "../../common/infrastructure/config/client/index.ts"; import clone from "clone"; @@ -10,7 +9,6 @@ import { loggerNoop } from "../../common/MaybeLogger.ts"; import { DrizzlePlayRepository, type RepositoryCreatePlayOpts } from "../../common/database/drizzle/repositories/PlayRepository.ts"; import { DrizzleQueueRepository } from "../../common/database/drizzle/repositories/QueueRepository.ts"; import { type PlaySelect } from "../../common/database/drizzle/drizzleTypes.ts"; -import { loggerDebug } from "@foxxmd/logging"; import dayjs from "dayjs"; export class TestScrobbler extends AbstractScrobbleClient { diff --git a/src/backend/tests/scrobbler/scrobblers.test.ts b/src/backend/tests/scrobbler/scrobblers.test.ts index dd9217a5..edab6767 100644 --- a/src/backend/tests/scrobbler/scrobblers.test.ts +++ b/src/backend/tests/scrobbler/scrobblers.test.ts @@ -3,7 +3,7 @@ import {spy} from 'sinon'; import asPromised from 'chai-as-promised'; import clone from 'clone'; import dayjs from "dayjs"; -import { after, before, describe, it } from 'mocha'; +import { after, describe, it } from 'mocha'; import { http, HttpResponse } from 'msw'; import pEvent from 'p-event'; import { CLIENT_INGRESS_QUEUE, type PlayObject, SOURCE_SOT } from "../../../core/Atomic.ts"; @@ -19,9 +19,8 @@ import { NowPlayingScrobbler, TestAuthScrobbler, TestScrobbler } from "./TestScr import { type PaginatedTimeRangeOptions, REFRESH_STALE_DEFAULT } from '../../common/infrastructure/Atomic.ts'; import { type PlayPlatformId } from '../../../core/Atomic.ts'; import { shuffleArray } from '../../utils/DataUtils.ts'; -import { DEFAULT_CONSOLIDATE_DURATION, DEFAULT_GROUP_DURATION, groupPlaysToTimeRanges } from '../../utils/ListenFetchUtils.ts'; +import { DEFAULT_CONSOLIDATE_DURATION, groupPlaysToTimeRanges } from '../../utils/ListenFetchUtils.ts'; import { asPlay } from '../../../core/PlayMarshalUtils.ts'; -import { nanoid } from 'nanoid'; import { getRoot } from '../../ioc.ts'; import { transientCache } from '../utils/TransientTestUtils.ts'; import { generateArray } from '../../../core/DataUtils.ts'; diff --git a/src/backend/tests/sonos/sonos.test.ts b/src/backend/tests/sonos/sonos.test.ts index 1397809c..53da8560 100644 --- a/src/backend/tests/sonos/sonos.test.ts +++ b/src/backend/tests/sonos/sonos.test.ts @@ -1,5 +1,4 @@ -import { loggerTest, loggerDebug } from "@foxxmd/logging"; -import { assert, expect } from 'chai'; +import { loggerDebug } from "@foxxmd/logging"; import EventEmitter from "events"; import { describe, it } from 'mocha'; import { type SonosData } from "../../common/infrastructure/config/source/sonos.ts"; diff --git a/src/backend/tests/source/source.test.ts b/src/backend/tests/source/source.test.ts index e7f2393b..2858c210 100644 --- a/src/backend/tests/source/source.test.ts +++ b/src/backend/tests/source/source.test.ts @@ -1,8 +1,8 @@ -import { loggerTest, loggerDebug } from "@foxxmd/logging"; -import chai, { assert, expect } from 'chai'; +import { loggerTest } from "@foxxmd/logging"; +import chai, { expect } from 'chai'; import asPromised from 'chai-as-promised'; import EventEmitter from "events"; -import { after, before, describe, it } from 'mocha'; +import { describe, it } from 'mocha'; import pEvent from "p-event"; import clone from 'clone'; import { type PlayObject } from "../../../core/Atomic.ts"; @@ -11,7 +11,7 @@ import { TestMemoryPositionalSource, TestMemorySource, TestSource } from "./Test import spotifyPayload from '../plays/spotifyCurrentPlaybackState.json' with { type: "json" }; import SpotifySource from "../../sources/SpotifySource.ts"; import MockDate from 'mockdate'; -import dayjs, { type Dayjs } from "dayjs"; +import dayjs from "dayjs"; import { REPORTED_PLAYER_STATUSES } from "../../common/infrastructure/Atomic.ts"; import { type SourceConfig } from "../../common/infrastructure/config/source/sources.ts"; import MemorySource from "../../sources/MemorySource.ts"; diff --git a/src/backend/tests/tealfm/tealfm.test.ts b/src/backend/tests/tealfm/tealfm.test.ts index 6a4701b2..1b9a262f 100644 --- a/src/backend/tests/tealfm/tealfm.test.ts +++ b/src/backend/tests/tealfm/tealfm.test.ts @@ -1,18 +1,16 @@ import chai, { expect } from 'chai'; import asPromised from 'chai-as-promised'; -import { after, before, describe, it } from 'mocha'; +import { before, describe, it } from 'mocha'; import { generateArtistCredits, generatePlay, generateTealPlayRecord, withBrainz } from "../../../core/tests/utils/PlayTestUtils.ts"; import { listRecordToPlay } from "../../common/vendor/teal/TealApiClient.ts"; import { playToRecord } from "../../common/vendor/teal/TealApiClient.ts"; import dayjs from 'dayjs'; import { artistCreditsToNames } from '../../../core/StringUtils.ts'; import TealScrobbler from '../../scrobblers/TealfmScrobbler.ts'; -import { Notifiers } from '../../notifier/Notifiers.ts'; import { EventEmitter } from "events"; -import { loggerNoop } from '../../common/MaybeLogger.ts'; import path from 'node:path'; import { configDir } from '../../common/index.ts'; -import { loggerDebug, loggerTrace } from '@foxxmd/logging'; +import { loggerDebug } from '@foxxmd/logging'; chai.use(asPromised); diff --git a/src/backend/tests/utilitiesTests/playFixtures.test.ts b/src/backend/tests/utilitiesTests/playFixtures.test.ts index e79c285b..3637998e 100644 --- a/src/backend/tests/utilitiesTests/playFixtures.test.ts +++ b/src/backend/tests/utilitiesTests/playFixtures.test.ts @@ -1,6 +1,4 @@ -import { loggerTest } from "@foxxmd/logging"; -import { assert, expect } from 'chai'; -import clone from "clone"; +import { assert } from 'chai'; import { describe, it } from 'mocha'; import { generatePlayWithLifecycle, playWithLifecycleScrobble } from "../../../core/tests/utils/fixtures.ts"; diff --git a/src/backend/tests/utilitiesTests/time.test.ts b/src/backend/tests/utilitiesTests/time.test.ts index ed20d3d8..b7d7c5da 100644 --- a/src/backend/tests/utilitiesTests/time.test.ts +++ b/src/backend/tests/utilitiesTests/time.test.ts @@ -1,4 +1,4 @@ -import { assert, expect } from 'chai'; +import { expect } from 'chai'; import { describe, it } from 'mocha'; import { closeToPlayEnd, closeToPlayStart, repeatDurationPlayed, timePassesScrobbleThreshold } from '../../utils/TimeUtils.ts'; import { DEFAULT_CLOSE_POSITION_ABSOLUTE, DEFAULT_CLOSE_POSITION_PERCENT, DEFAULT_DURATION_REPEAT_ABSOLUTE, DEFAULT_DURATION_REPEAT_PERCENT, DEFAULT_SCROBBLE_DURATION_THRESHOLD, DEFAULT_SCROBBLE_PERCENT_THRESHOLD } from '../../common/infrastructure/Atomic.ts'; diff --git a/src/backend/tests/utils/TransientTestUtils.ts b/src/backend/tests/utils/TransientTestUtils.ts index 8b020a1d..39750f52 100644 --- a/src/backend/tests/utils/TransientTestUtils.ts +++ b/src/backend/tests/utils/TransientTestUtils.ts @@ -1,6 +1,6 @@ import { loggerTest } from "@foxxmd/logging"; import { MSCache } from "../../common/Cache.ts"; -import { getDb, migrateDbSync, migrateDb } from "../../common/database/drizzle/drizzleUtils.ts"; +import { getDb, migrateDb } from "../../common/database/drizzle/drizzleUtils.ts"; export const transientCache = () => new MSCache(loggerTest); diff --git a/src/backend/tests/utils/databaseFixtures.ts b/src/backend/tests/utils/databaseFixtures.ts index 7a450fe5..cbf59442 100644 --- a/src/backend/tests/utils/databaseFixtures.ts +++ b/src/backend/tests/utils/databaseFixtures.ts @@ -4,7 +4,6 @@ import { generateComponentEntity, generateInputEntity, generatePlayEntity } from import { type PlayNew } from "../../common/database/drizzle/drizzleTypes.ts"; import { type PlayInputNew } from "../../common/database/drizzle/drizzleTypes.ts"; import { type ComponentNew } from "../../common/database/drizzle/drizzleTypes.ts"; -import { type ObjectPlayData } from "../../../core/Atomic.ts"; export const fixtureCreateComponent = (data: Partial = {}): ComponentNew => { return generateComponentEntity( diff --git a/src/backend/tests/ytm/ytm.test.ts b/src/backend/tests/ytm/ytm.test.ts index 3f55ed6d..7367ab85 100644 --- a/src/backend/tests/ytm/ytm.test.ts +++ b/src/backend/tests/ytm/ytm.test.ts @@ -1,12 +1,12 @@ -import { after, before, describe, it } from 'mocha'; -import { loggerTest, loggerDebug } from "@foxxmd/logging"; -import chai, { assert, expect } from 'chai'; +import { describe, it } from 'mocha'; +import { loggerTest } from "@foxxmd/logging"; +import chai, { expect } from 'chai'; import asPromised from 'chai-as-promised'; import clone from "clone"; import YTMusicSource, { ytiHistoryResponseFromShelfToPlays, ytiHistoryResponseToListItems } from "../../sources/YTMusicSource.ts"; import ytHistoryRes from './ytres.json' with {type: 'json'}; import EventEmitter from "events"; -import { generatePlay, generatePlays, normalizePlays } from '../../../core/tests/utils/PlayTestUtils.ts'; +import { generatePlay, generatePlays } from '../../../core/tests/utils/PlayTestUtils.ts'; import { type YTMusicSourceConfig } from '../../common/infrastructure/config/source/ytmusic.ts'; import { sleep } from '../../utils.ts'; import dayjs from 'dayjs'; diff --git a/src/backend/utils.ts b/src/backend/utils.ts index 6f0c0276..6dc955f7 100644 --- a/src/backend/utils.ts +++ b/src/backend/utils.ts @@ -6,14 +6,13 @@ import utc from 'dayjs/plugin/utc.js'; import { type Request } from "express"; // https://github.com/jfromaniello/url-join#in-nodejs import { TimeoutError, WebapiError } from "spotify-web-api-node/src/response-error.js"; -import { DEFAULT_MISSING_MBIDS_TYPES, DEFAULT_MISSING_TYPES, type MissingMbidType, type PlayObject } from "../core/Atomic.ts"; +import { DEFAULT_MISSING_MBIDS_TYPES, type MissingMbidType, type PlayObject } from "../core/Atomic.ts"; import { asPlayerStateDataMaybePlay, NO_DEVICE, NO_USER, type PlayerStateDataMaybePlay, type ProgressAwarePlayObject, - type RegExResult, type RemoteIdentityParts, type ScrobbleThresholdResult, } from "./common/infrastructure/Atomic.ts"; diff --git a/src/backend/utils/AsyncUtils.ts b/src/backend/utils/AsyncUtils.ts index 145a7f2d..1819f3ea 100644 --- a/src/backend/utils/AsyncUtils.ts +++ b/src/backend/utils/AsyncUtils.ts @@ -1,4 +1,4 @@ -import pMap, { type Mapper, type Options, pMapIterable } from "p-map"; +import { type Mapper } from "p-map"; import { sleep } from "../utils.ts"; /** https://stackoverflow.com/a/63795192/1469797 */ diff --git a/src/backend/utils/ListenFetchUtils.ts b/src/backend/utils/ListenFetchUtils.ts index dadd0f28..4dd50f0e 100644 --- a/src/backend/utils/ListenFetchUtils.ts +++ b/src/backend/utils/ListenFetchUtils.ts @@ -1,8 +1,8 @@ import { childLogger, type Logger } from "@foxxmd/logging"; import dayjs, { type Dayjs } from "dayjs"; import { type Duration } from "dayjs/plugin/duration.js"; -import { type PlayObject, type UnixTimestamp } from "../../core/Atomic.ts"; -import { type CursorType, hasPagelessTimeRangeListens, hasPaginatedTimeRangeListens, type PagelessListensTimeRangeOptions, type PagelessTimeRangeListens, type PagelessTimeRangeListensResult, type PaginatedListensTimeRangeOptions, type PaginatedTimeRangeCommonOptions, type PaginatedTimeRangeListens, type PaginatedTimeRangeListensResult, type PaginatedTimeRangeOptions, type PaginatedTimeRangeSource, REFRESH_STALE_DEFAULT, type TimeRangeListensFetcher } from "../common/infrastructure/Atomic.ts"; +import { type PlayObject } from "../../core/Atomic.ts"; +import { type CursorType, hasPagelessTimeRangeListens, hasPaginatedTimeRangeListens, type PagelessTimeRangeListensResult, type PaginatedListensTimeRangeOptions, type PaginatedTimeRangeCommonOptions, type PaginatedTimeRangeListensResult, type PaginatedTimeRangeOptions, type PaginatedTimeRangeSource, REFRESH_STALE_DEFAULT, type TimeRangeListensFetcher } from "../common/infrastructure/Atomic.ts"; import { loggerNoop } from '../common/MaybeLogger.ts'; import { MaybeLogger } from '../common/MaybeLogger.ts'; import { sortByOldestPlayDate } from "../utils.ts"; diff --git a/src/backend/utils/NetworkUtils.ts b/src/backend/utils/NetworkUtils.ts index 28b26980..d2a8f7f5 100644 --- a/src/backend/utils/NetworkUtils.ts +++ b/src/backend/utils/NetworkUtils.ts @@ -1,10 +1,10 @@ -import { type Logger, type LogLevel } from "@foxxmd/logging"; +import { type Logger } from "@foxxmd/logging"; import { parseRegexSingle } from "@foxxmd/regex-buddy-core"; import address from "address"; import net from 'node:net'; import normalizeUrl from "normalize-url"; import { join as joinPath } from "path"; -import { getFirstNonEmptyVal, isDebugMode} from "../utils.ts"; +import { isDebugMode} from "../utils.ts"; import { type URLData } from "../../core/Atomic.ts"; import { CloseEvent, ErrorEvent, RetryEvent } from 'iso-websocket' import { WEBSOCKET_CLOSE_CODE_REASONS } from "../common/infrastructure/Atomic.ts"; diff --git a/src/backend/utils/PlayComparisonUtils.ts b/src/backend/utils/PlayComparisonUtils.ts index 666e1fe9..747c367f 100644 --- a/src/backend/utils/PlayComparisonUtils.ts +++ b/src/backend/utils/PlayComparisonUtils.ts @@ -1,5 +1,5 @@ import { getListDiff, type ListDiff } from "@donedeal0/superdiff"; -import { type PlayMatchResult, type PlayObject, type PlayObjectMinimal, SOURCE_SOT, TA_CLOSE, TA_DEFAULT_ACCURACY, TA_DURING, TA_EXACT, TA_FUZZY, type TemporalAccuracy, type TrackStringOptions } from "../../core/Atomic.ts"; +import { type PlayMatchResult, type PlayObject, type PlayObjectMinimal, SOURCE_SOT, TA_DURING, TA_EXACT, TA_FUZZY, type TemporalAccuracy, type TrackStringOptions } from "../../core/Atomic.ts"; import { buildTrackString, capitalize, truncateStringToLength } from "../../core/StringUtils.ts"; import { comparingMultipleArtists, playObjDataMatch, setIntersection } from "../utils.ts"; import { comparePlayTemporally, hasAcceptableTemporalAccuracy, temporalAccuracyToString, type TemporalPlayComparisonOptions, temporalPlayComparisonSummary } from "./TimeUtils.ts"; diff --git a/src/backend/utils/PlayTransformUtils.ts b/src/backend/utils/PlayTransformUtils.ts index 9b1b4d1c..7cc69eab 100644 --- a/src/backend/utils/PlayTransformUtils.ts +++ b/src/backend/utils/PlayTransformUtils.ts @@ -6,11 +6,9 @@ import { type ConditionalSearchAndReplaceRegExp, type ConditionalSearchAndReplaceTerm, type ExternalMetadataTerm, - type PlayTransformParts, type PlayTransformStage, type SearchAndReplaceTerm, STAGE_TYPES, - type StageType, type StageTypedConfig, type WhenConditionsConfig, type WhenParts diff --git a/src/backend/utils/RequestUtils.ts b/src/backend/utils/RequestUtils.ts index bde17595..ecd41f58 100644 --- a/src/backend/utils/RequestUtils.ts +++ b/src/backend/utils/RequestUtils.ts @@ -3,7 +3,7 @@ import type { VolatileFile } from "formidable"; import { KNOWN_MEDIA_PROVIDER_URLS } from "../../core/Atomic.ts"; import { type RequestRetryOptions } from "../common/infrastructure/config/common.ts"; import { type Logger } from "@foxxmd/logging"; -import request, { Request, Response } from 'superagent'; +import request, { Response } from 'superagent'; import pRetry, { type RetryContext, type Options } from 'p-retry'; import { DEFAULT_RETRY_MULTIPLIER } from "../common/infrastructure/Atomic.ts"; import { SimpleError } from "../common/errors/MSErrors.ts"; diff --git a/src/backend/utils/SchemaCompiledUtils.ts b/src/backend/utils/SchemaCompiledUtils.ts index 59327a0b..c82ea156 100644 --- a/src/backend/utils/SchemaCompiledUtils.ts +++ b/src/backend/utils/SchemaCompiledUtils.ts @@ -1,5 +1,5 @@ import { readFileSync, accessSync } from "node:fs"; -import { constants, promises } from "fs"; +import { constants } from "fs"; import { resolve } from "path"; import { projectDir } from "../common/index.ts"; import { MaybeLogger } from '../common/MaybeLogger.ts'; diff --git a/src/backend/utils/StringUtils.ts b/src/backend/utils/StringUtils.ts index bd2d5696..690ea699 100644 --- a/src/backend/utils/StringUtils.ts +++ b/src/backend/utils/StringUtils.ts @@ -4,7 +4,7 @@ import { type PlayObject } from "../../core/Atomic.ts"; import { asPlayerStateData, type PlayerStateDataMaybePlay } from "../common/infrastructure/Atomic.ts"; import { DELIMITERS_NO_AMP } from '../../core/Atomic.ts'; import { DELIMITERS } from '../../core/Atomic.ts'; -import { getPlatformIdFromData, intersect, parseBool, parseBoolStrict } from "../utils.ts"; +import { getPlatformIdFromData, parseBoolStrict } from "../utils.ts"; import { genGroupIdStr } from '../../core/PlayUtils.ts'; import { buildTrackString } from "../../core/StringUtils.ts"; import { parseRegexSingle } from "@foxxmd/regex-buddy-core"; diff --git a/src/client/App.test.tsx b/src/client/App.test.tsx index d080b169..da21c720 100644 --- a/src/client/App.test.tsx +++ b/src/client/App.test.tsx @@ -1,6 +1,3 @@ -import React from 'react'; -import { render, screen } from '@testing-library/react'; -import App from './App'; // test('renders learn react link', () => { // render(); diff --git a/src/client/Version.tsx b/src/client/Version.tsx index 0d16573d..6f2aaa42 100644 --- a/src/client/Version.tsx +++ b/src/client/Version.tsx @@ -1,7 +1,6 @@ import React, {type ComponentProps} from 'react'; -import { type QueryFunctionContext, queryOptions, useQuery, useQueryClient } from '@tanstack/react-query'; +import { type QueryFunctionContext, useQuery } from '@tanstack/react-query'; import {createApi, fetchBaseQuery} from "@reduxjs/toolkit/query/react"; -import { Span } from '@chakra-ui/react'; import ky from 'ky'; import { baseUrl } from './utils'; diff --git a/src/client/components/PlayData.tsx b/src/client/components/PlayData.tsx index 6a0ad5bb..b1d8debf 100644 --- a/src/client/components/PlayData.tsx +++ b/src/client/components/PlayData.tsx @@ -1,5 +1,5 @@ -import React, { Fragment, useMemo, useState } from 'react'; -import { EmptyState, DataList, HStack, Tag, Tabs, Wrap, Box, Flex, SegmentGroup, Stack, Text, Tooltip, Separator, IconButton, Container, SimpleGrid, Float, Spacer, Icon, Link, Span, Show } from "@chakra-ui/react" +import React, { useState } from 'react'; +import { EmptyState, DataList, HStack, Tabs, Box, Flex, Stack, Text, Separator, IconButton, Container, Float, Icon, Link, Span, Show } from "@chakra-ui/react" import { LuCode, LuText, LuCheck, LuX } from "react-icons/lu" import { type JsonPlayObject, type PlayObjectMinimal } from '../../core/Atomic.js'; import { shortTodayAwareFormat, timeToHumanTimestamp } from '../../core/TimeUtils.js'; diff --git a/src/client/components/layouts/SplitLayout.tsx b/src/client/components/layouts/SplitLayout.tsx index db121bba..1c290e8a 100644 --- a/src/client/components/layouts/SplitLayout.tsx +++ b/src/client/components/layouts/SplitLayout.tsx @@ -1,5 +1,5 @@ -import React, { useState, useRef, Fragment } from 'react'; -import { Container, Box, Center, Splitter, useSplitter } from '@chakra-ui/react'; +import React, { useState, useRef } from 'react'; +import { Splitter } from '@chakra-ui/react'; import { Outlet } from "react-router-dom"; diff --git a/src/client/components/player/Player.tsx b/src/client/components/player/Player.tsx index dc312db4..44fe5a22 100644 --- a/src/client/components/player/Player.tsx +++ b/src/client/components/player/Player.tsx @@ -1,4 +1,4 @@ -import React, {useState, useCallback, Fragment} from 'react'; +import React, {useState, useCallback} from 'react'; import './player.scss'; import PlayerTimestamp from "./PlayerTimestamp"; import {SOURCE_SOT, type SOURCE_SOT_TYPES, type SourcePlayerJson} from "../../../core/Atomic"; diff --git a/src/client/components/player/PlayerInfo.tsx b/src/client/components/player/PlayerInfo.tsx index 256088eb..74a44732 100644 --- a/src/client/components/player/PlayerInfo.tsx +++ b/src/client/components/player/PlayerInfo.tsx @@ -1,4 +1,4 @@ -import React, {Fragment} from 'react'; +import React from 'react'; import './trackInfo.scss'; import {type SourcePlayerJson} from "../../../core/Atomic"; import {isoToHuman} from "../../utils/index"; diff --git a/src/client/deadLetter/DeadPage.tsx b/src/client/deadLetter/DeadPage.tsx index 05413356..56381696 100644 --- a/src/client/deadLetter/DeadPage.tsx +++ b/src/client/deadLetter/DeadPage.tsx @@ -1,4 +1,4 @@ -import React, {useCallback, useEffect, useState} from 'react'; +import React, {useCallback, useState} from 'react'; import PlayDisplay from "../components/PlayDisplay"; import {recentIncludes} from "../../core/Atomic"; import {useSearchParams} from "react-router-dom"; diff --git a/src/client/status/ducks.ts b/src/client/status/ducks.ts index da9c59fa..f82eeca8 100644 --- a/src/client/status/ducks.ts +++ b/src/client/status/ducks.ts @@ -1,11 +1,7 @@ import { - createAction, - createReducer, - type AnyAction, - type PayloadAction, createEntityAdapter, + createAction, createEntityAdapter, createSlice } from '@reduxjs/toolkit' -import { type Api } from '@reduxjs/toolkit/query/react'; import {statusApi} from "./statusApi"; import {type ClientStatusData, type SourcePlayerJson, type SourceStatusData} from "../../core/Atomic"; diff --git a/src/client/utils/hooks/useIsWrapped.tsx b/src/client/utils/hooks/useIsWrapped.tsx index 98f23621..e2ca5dbd 100644 --- a/src/client/utils/hooks/useIsWrapped.tsx +++ b/src/client/utils/hooks/useIsWrapped.tsx @@ -1,4 +1,4 @@ -import React, { type ComponentProps, useState, useLayoutEffect } from "react" +import React, { useLayoutEffect } from "react" import useResizeObserver from '@react-hook/resize-observer'; const getTop = item => Math.round(item.getBoundingClientRect().top); diff --git a/src/core/DataUtils.ts b/src/core/DataUtils.ts index 7a3ddd3a..d3bbaa55 100644 --- a/src/core/DataUtils.ts +++ b/src/core/DataUtils.ts @@ -1,10 +1,9 @@ import { create as diffCreate } from "jsondiffpatch"; -import { type DeepReplaceValue, type numberFormatOptions, REGEX_ISO8601_LOOSE } from './Atomic.ts'; +import { type numberFormatOptions, REGEX_ISO8601_LOOSE } from './Atomic.ts'; import { diff, applyChangeset, type Changeset, type Options } from 'json-diff-ts'; // may want to return to this one day // but currently the jsondiffpatch formatter is the best console/ansi diff output for humans :( //import {DiffOptions, DiffOptionsColor, diff as jestDiff} from 'jest-diff'; -import chalk from 'chalk'; import clone from "clone"; import ConsoleFormatter from "jsondiffpatch/formatters/console"; import assert from "node:assert"; diff --git a/src/core/StringUtils.ts b/src/core/StringUtils.ts index a0ed6345..08664220 100644 --- a/src/core/StringUtils.ts +++ b/src/core/StringUtils.ts @@ -8,7 +8,6 @@ import { type AmbPlayObject, type ArtistCredit, type PlayData, - type PlayObject, SCROBBLE_TS_SOC_END, SCROBBLE_TS_SOC_START, type ScrobbleTsSOC, diff --git a/src/core/tests/utils/PlayTestUtils.ts b/src/core/tests/utils/PlayTestUtils.ts index 6a61542d..7337d39d 100644 --- a/src/core/tests/utils/PlayTestUtils.ts +++ b/src/core/tests/utils/PlayTestUtils.ts @@ -5,7 +5,7 @@ import isBetween from "dayjs/plugin/isBetween.js"; import relativeTime from "dayjs/plugin/relativeTime.js"; import timezone from "dayjs/plugin/timezone.js"; import utc from "dayjs/plugin/utc.js"; -import { type ArtistCredit, type BrainzMeta, FEAT, JOINERS, JOINERS_FINAL, type JsonPlayObject, type MBID, type MissingMbidType, type ObjectPlayData, type PlayMeta, type PlayObject, type SourcePlayerObj } from "../../Atomic.ts"; +import { type ArtistCredit, type BrainzMeta, FEAT, JOINERS, JOINERS_FINAL, type JsonPlayObject, type MBID, type ObjectPlayData, type PlayMeta, type PlayObject, type SourcePlayerObj } from "../../Atomic.ts"; import { genGroupIdStr } from '../../PlayUtils.ts'; import { sortByNewestPlayDate } from '../../PlayUtils.ts'; import { CALCULATED_PLAYER_STATUSES, NO_DEVICE, NO_USER, type PlayerStateDataMaybePlay, REPORTED_PLAYER_STATUSES, SINGLE_USER_PLATFORM_ID } from '../../../backend/common/infrastructure/Atomic.ts'; diff --git a/src/core/tests/utils/apiFixtures.ts b/src/core/tests/utils/apiFixtures.ts index b105b19a..e4d94f43 100644 --- a/src/core/tests/utils/apiFixtures.ts +++ b/src/core/tests/utils/apiFixtures.ts @@ -1,18 +1,15 @@ import { faker } from "@faker-js/faker"; import { type ComponentClientApi, type ComponentClientApiJson, type ComponentCommonApi, type ComponentCommonApiJson, type ComponentSourceApi, type ComponentSourceApiJson, type ComponentState, type PlayApiCommon, type PlayApiCommonDetailed, type PlayInputApi, type QueueStateApi } from "../../Api.ts"; -import { CLIENT_INGRESS_QUEUE, type JsonPlayObject, type PlayObject, type PlayState, QUEUE_STATUSES, SOURCE_SOT, type SourcePlayerJson, sourceSotTypes } from "../../Atomic.ts"; +import { CLIENT_INGRESS_QUEUE, type JsonPlayObject, type PlayObject, QUEUE_STATUSES, type SourcePlayerJson, sourceSotTypes } from "../../Atomic.ts"; import { generatePlay, normalizePlays } from "./PlayTestUtils.ts"; import { generatePlayInput, generatePlayWithLifecycle, playWithLifecycleScrobble, randomPlayState } from "./fixtures.ts"; import { asJsonPlayObject } from "../../PlayMarshalUtils.ts"; import { generatePlayUid } from "../../StringUtils.ts"; import dayjs, { type Dayjs } from "dayjs"; -import { type ErrorLike } from "serialize-error"; -import { nanoid } from "nanoid"; -import { isSourceType, type SourceType, sourceTypes } from "../../../backend/common/infrastructure/config/source/sources.ts"; -import { type ClientType, clientTypes } from "../../../backend/common/infrastructure/config/client/clients.ts"; +import { isSourceType, sourceTypes } from "../../../backend/common/infrastructure/config/source/sources.ts"; +import { clientTypes } from "../../../backend/common/infrastructure/config/client/clients.ts"; import { type ComponentSelect } from "../../../backend/common/database/drizzle/drizzleTypes.ts"; import { CALCULATED_PLAYER_STATUSES, isClientType, REPORTED_PLAYER_STATUSES } from "../../../backend/common/infrastructure/Atomic.ts"; -import { faMarker } from "@fortawesome/free-solid-svg-icons"; import { generateArray } from "../../DataUtils.ts"; import { type ErrorIsh } from "../../ErrorUtils.ts"; diff --git a/src/stories/component/ComponentStatDead.stories.tsx b/src/stories/component/ComponentStatDead.stories.tsx index 92aa4552..caf59ff3 100644 --- a/src/stories/component/ComponentStatDead.stories.tsx +++ b/src/stories/component/ComponentStatDead.stories.tsx @@ -1,13 +1,12 @@ import preview from "../../../.storybook/preview.js"; import React from 'react'; -import { http, HttpResponse, delay, sse } from 'msw'; +import { sse } from 'msw'; -import { Container, Box } from '@chakra-ui/react'; +import { Container } from '@chakra-ui/react'; import { DeadLetterIndicator } from "../../client/components/msComponent/Stats.js"; import { sseProviderOptions } from "../../client/AppNext.js"; import {Provider} from "../../client/components/Provider.js"; import { SSEProvider } from "@flamefrontend/sse-runtime-react"; -import { generateClientApiJson, generateSourceApiJson, generateSourcePlayerJson, LOG_MESSAGE_FIXTURE, logsApiResponse } from "../../core/tests/utils/apiFixtures.js"; import { type MsSseEvent } from "../../core/Api.js"; import { faker } from "@faker-js/faker"; diff --git a/src/stories/component/ComponentStatLive.stories.tsx b/src/stories/component/ComponentStatLive.stories.tsx index 2830b865..18c29c33 100644 --- a/src/stories/component/ComponentStatLive.stories.tsx +++ b/src/stories/component/ComponentStatLive.stories.tsx @@ -1,13 +1,12 @@ import preview from "../../../.storybook/preview.js"; import React from 'react'; -import { http, HttpResponse, delay, sse } from 'msw'; +import { sse } from 'msw'; -import { Container, Box } from '@chakra-ui/react'; +import { Container } from '@chakra-ui/react'; import { CountLiveIndicator } from "../../client/components/msComponent/Stats.js"; import { sseProviderOptions } from "../../client/AppNext.js"; import {Provider} from "../../client/components/Provider.js"; import { SSEProvider } from "@flamefrontend/sse-runtime-react"; -import { generateClientApiJson, generateSourceApiJson, generateSourcePlayerJson, LOG_MESSAGE_FIXTURE, logsApiResponse } from "../../core/tests/utils/apiFixtures.js"; import { type MsSseEvent } from "../../core/Api.js"; // More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export diff --git a/src/stories/component/ComponentStatQueued.stories.tsx b/src/stories/component/ComponentStatQueued.stories.tsx index 256522fb..eaaa9637 100644 --- a/src/stories/component/ComponentStatQueued.stories.tsx +++ b/src/stories/component/ComponentStatQueued.stories.tsx @@ -1,13 +1,12 @@ import preview from "../../../.storybook/preview.js"; import React from 'react'; -import { http, HttpResponse, delay, sse } from 'msw'; +import { sse } from 'msw'; -import { Container, Box } from '@chakra-ui/react'; +import { Container } from '@chakra-ui/react'; import { QueuedIndicator } from "../../client/components/msComponent/Stats.js"; import { sseProviderOptions } from "../../client/AppNext.js"; import {Provider} from "../../client/components/Provider.js"; import { SSEProvider } from "@flamefrontend/sse-runtime-react"; -import { generateClientApiJson, generateSourceApiJson, generateSourcePlayerJson, LOG_MESSAGE_FIXTURE, logsApiResponse } from "../core/tests/utils/apiFixtures.js"; import { type MsSseEvent } from "../../core/Api.js"; import { faker } from "@faker-js/faker"; diff --git a/src/stories/component/ComponentSummary.stories.tsx b/src/stories/component/ComponentSummary.stories.tsx index c5e88909..a56a561e 100644 --- a/src/stories/component/ComponentSummary.stories.tsx +++ b/src/stories/component/ComponentSummary.stories.tsx @@ -1,6 +1,6 @@ import preview from "../../../.storybook/preview.js"; import React from 'react'; -import { http, HttpResponse, delay, sse } from 'msw'; +import { sse } from 'msw'; import { Container } from '@chakra-ui/react'; import { MSComponentSummary } from "../../client/components/msComponent/MSComponentSummary.js"; @@ -10,7 +10,7 @@ import { type MsSseEvent } from "../../core/Api.js"; import { SSEProvider } from "@flamefrontend/sse-runtime-react"; import { sseProviderOptions } from "../../client/AppNext.js"; import { faker } from "@faker-js/faker"; -import { withRouter, reactRouterParameters } from 'storybook-addon-remix-react-router'; +import { withRouter } from 'storybook-addon-remix-react-router'; import dayjs from "dayjs"; // More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export diff --git a/src/stories/component/Player.stories.tsx b/src/stories/component/Player.stories.tsx index 2ef8e5f0..3607a564 100644 --- a/src/stories/component/Player.stories.tsx +++ b/src/stories/component/Player.stories.tsx @@ -1,11 +1,11 @@ import preview from "../../../.storybook/preview.js"; import React from 'react'; -import { http, HttpResponse, delay, sse } from 'msw'; +import { http, HttpResponse, sse } from 'msw'; import { Container } from '@chakra-ui/react'; import { ChakraPlayer, ChakraPlayerFetchable } from "../../client/components/chakraPlayer/Player.js"; import {Provider} from "../../client/components/Provider.js"; -import { generateClientApiJson, generateSourceApiJson, generateSourcePlayerJson } from "../../core/tests/utils/apiFixtures.js"; +import { generateSourcePlayerJson } from "../../core/tests/utils/apiFixtures.js"; import { type MsSseEvent } from "../../core/Api.js"; import { SSEProvider } from "@flamefrontend/sse-runtime-react"; import { sseProviderOptions } from "../../client/AppNext.js"; diff --git a/src/stories/logs/Logs.stories.tsx b/src/stories/logs/Logs.stories.tsx index e8786a92..42f69d7b 100644 --- a/src/stories/logs/Logs.stories.tsx +++ b/src/stories/logs/Logs.stories.tsx @@ -1,10 +1,9 @@ import preview from "../../../.storybook/preview.js"; import React from 'react'; -import { Container, Box } from '@chakra-ui/react'; +import { Container } from '@chakra-ui/react'; import { Logs } from "../../client/components/LogsNext.js"; import {Provider} from "../../client/components/Provider.js"; -import { generateClientApiJson, generateSourceApiJson, generateSourcePlayerJson } from "../../core/tests/utils/apiFixtures.js"; const traceMessage = "[2026-06-16 13:02:42.674 -0400] \u001b[90mTRACE\u001b[39m : \u001b[36m\u001b[90m[App]\u001b[36m \u001b[90m[Scrobblers]\u001b[36m \u001b[90m[Koito - koito]\u001b[36m \u001b[90m[Now Playing]\u001b[36m Not updating, previous matches current update --BUT-- time since last update (194s) is less than max threshold 238.121s\u001b[39m"; const debugMessage = "[2026-06-16 13:03:20.150 -0400] \u001b[34mDEBUG\u001b[39m : \u001b[36m\u001b[90m[App]\u001b[36m \u001b[90m[Sources]\u001b[36m \u001b[90m[Spotify - default]\u001b[36m Temporarily decreasing polling interval to 1.00s due to Player c98a8fb80e-foxx-arch-SingleUser reporting track duration remaining (2.01s) less than normal interval (10.00s)\u001b[39m"; diff --git a/src/stories/logs/LogsFetchable.stories.tsx b/src/stories/logs/LogsFetchable.stories.tsx index f8ae384c..47d7f24e 100644 --- a/src/stories/logs/LogsFetchable.stories.tsx +++ b/src/stories/logs/LogsFetchable.stories.tsx @@ -1,11 +1,10 @@ import preview from "../../../.storybook/preview.js"; import React from 'react'; -import { http, HttpResponse, delay } from 'msw'; +import { http, HttpResponse } from 'msw'; -import { Container, Box } from '@chakra-ui/react'; -import { Logs, LogsFetchable } from "../../client/components/LogsNext.js"; +import { Container } from '@chakra-ui/react'; import {Provider} from "../../client/components/Provider.js"; -import { generateClientApiJson, generateSourceApiJson, generateSourcePlayerJson, LOG_MESSAGE_FIXTURE, logsApiResponse } from "../../core/tests/utils/apiFixtures.js"; +import { logsApiResponse } from "../../core/tests/utils/apiFixtures.js"; import { RightHeaderFloatingLogs } from "../../client/components/AppHeader.js"; // More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export diff --git a/src/stories/miscComponents/ErrorAlert.stories.tsx b/src/stories/miscComponents/ErrorAlert.stories.tsx index f438c915..edd66619 100644 --- a/src/stories/miscComponents/ErrorAlert.stories.tsx +++ b/src/stories/miscComponents/ErrorAlert.stories.tsx @@ -2,7 +2,6 @@ import preview from "../../../.storybook/preview.js"; import React from 'react'; import { Container } from '@chakra-ui/react'; -import { fn } from 'storybook/test'; import { ErrorAlert } from "../../client/components/ErrorAlert.js"; import {Provider} from "../../client/components/Provider.js"; import { type ErrorLike } from "../../core/Atomic.js"; diff --git a/src/stories/miscComponents/NavbarItems.stories.tsx b/src/stories/miscComponents/NavbarItems.stories.tsx index 94cb2b1f..ab4e701d 100644 --- a/src/stories/miscComponents/NavbarItems.stories.tsx +++ b/src/stories/miscComponents/NavbarItems.stories.tsx @@ -4,8 +4,7 @@ import React from 'react'; import { Container, Box } from '@chakra-ui/react'; import { SideNavItems, NAV_LINKS } from "../../client/components/SideNav.js"; import {Provider} from "../../client/components/Provider.js"; -import { generateClientApiJson, generateSourceApiJson, generateSourcePlayerJson } from "../../core/tests/utils/apiFixtures.js"; -import { withRouter, reactRouterParameters } from 'storybook-addon-remix-react-router'; +import { withRouter } from 'storybook-addon-remix-react-router'; // More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export const meta = preview.meta({ diff --git a/src/stories/pages/ComponentDetailed.stories.tsx b/src/stories/pages/ComponentDetailed.stories.tsx index 7b6ee37d..e05e404f 100644 --- a/src/stories/pages/ComponentDetailed.stories.tsx +++ b/src/stories/pages/ComponentDetailed.stories.tsx @@ -1,6 +1,6 @@ import preview from "../../../.storybook/preview.js"; import React from 'react'; -import { http, HttpResponse, delay, sse } from 'msw'; +import { http, HttpResponse, sse } from 'msw'; import { Container } from '@chakra-ui/react'; import { ComponentDetailedDesktop } from "../../client/components/msComponent/MSComponentDetailed.js"; diff --git a/src/stories/plays/ActivityDetails.stories.tsx b/src/stories/plays/ActivityDetails.stories.tsx index dfc11559..ec5d4dbf 100644 --- a/src/stories/plays/ActivityDetails.stories.tsx +++ b/src/stories/plays/ActivityDetails.stories.tsx @@ -1,11 +1,8 @@ import preview from "../../../.storybook/preview.js"; import React from 'react'; -import { fn } from 'storybook/test'; import { Container } from '@chakra-ui/react'; -import { ActivityTimeline } from "../../client/components/ActivityTimeline.js"; import {Provider} from "../../client/components/Provider.js"; -import { generateJsonPlays } from "../../core/tests/utils/PlayTestUtils.js"; import { generatePlayApiCommonDetailed } from "../../core/tests/utils/apiFixtures.js"; import { generatePlayWithLifecycle, playWithLifecycleScrobble } from "../../core/tests/utils/fixtures.js"; import { asJsonPlayObject } from '../../core/PlayMarshalUtils.js'; diff --git a/src/stories/plays/ActivityList.stories.tsx b/src/stories/plays/ActivityList.stories.tsx index b6705155..990c5c19 100644 --- a/src/stories/plays/ActivityList.stories.tsx +++ b/src/stories/plays/ActivityList.stories.tsx @@ -3,20 +3,18 @@ import preview from "../../../.storybook/preview.js"; import React from 'react'; import { http, HttpResponse, delay, sse, type StrictRequest, type DefaultBodyType, type JsonBodyType } from 'msw'; -import { fn } from 'storybook/test'; import { Container } from '@chakra-ui/react'; import { ListContainerFetchable, ListContainerFilterable, ActivityList } from "../../client/components/playActivity/ActivityList.js"; import {Provider} from "../../client/components/Provider.js"; -import { generateJsonPlays, generatePlay, normalizePlays } from "../../core/tests/utils/PlayTestUtils.js"; -import { type ErrorLike, type JsonPlayObject, type PlayState, qsOptions } from "../../core/Atomic.js"; -import {playWithLifecycleScrobble, generatePlayWithLifecycle, randomPlayState} from '../../core/tests/utils/fixtures.js' -import { generateArray } from "../../core/DataUtils.js"; +import { generatePlay } from "../../core/tests/utils/PlayTestUtils.js"; +import { type PlayState, qsOptions } from "../../core/Atomic.js"; +import { randomPlayState} from '../../core/tests/utils/fixtures.js' import dayjs from "dayjs"; import qs from 'qs'; import { asJsonPlayObject } from "../../core/PlayMarshalUtils.js"; -import { generatePlayApiCommon, generatePlayApiCommonDetailed, generatePlayApiCommonDetailedList } from "../../core/tests/utils/apiFixtures.js"; +import { generatePlayApiCommonDetailed, generatePlayApiCommonDetailedList } from "../../core/tests/utils/apiFixtures.js"; import { type MsSseEvent, type PlayApiCommonDetailed } from "../../core/Api.js"; -import { type CompareDateBetween, type PaginatedResponse } from "../../backend/common/database/drizzle/repositories/BaseRepository.js"; +import { type PaginatedResponse } from "../../backend/common/database/drizzle/repositories/BaseRepository.js"; import { type QueryPlaysOptsJson } from '../../backend/common/database/drizzle/repositories/PlayRepository.js'; import { SSEProvider } from "@flamefrontend/sse-runtime-react"; import { sseProviderOptions } from '../../client/AppNext.js'; diff --git a/src/stories/plays/ActivityListSkeleton.stories.tsx b/src/stories/plays/ActivityListSkeleton.stories.tsx index 34c34202..2ba43012 100644 --- a/src/stories/plays/ActivityListSkeleton.stories.tsx +++ b/src/stories/plays/ActivityListSkeleton.stories.tsx @@ -2,10 +2,7 @@ import preview from "../../../.storybook/preview.js"; import React from 'react'; import { Container } from '@chakra-ui/react'; -import { fn } from 'storybook/test'; -import { ErrorAlert } from "../../client/components/ErrorAlert.js"; import {Provider} from "../../client/components/Provider.js"; -import { type ErrorLike } from "../../core/Atomic.js"; import { ActivitySummarySkeleton } from "../../client/components/ActivityDetail.js"; // More on how to set up stories at: https://storybook.js.org/docs/writing-stories#default-export diff --git a/src/stories/plays/ActivityTimeline.stories.tsx b/src/stories/plays/ActivityTimeline.stories.tsx index 8aa9ff05..6e7e17af 100644 --- a/src/stories/plays/ActivityTimeline.stories.tsx +++ b/src/stories/plays/ActivityTimeline.stories.tsx @@ -1,11 +1,9 @@ import preview from "../../../.storybook/preview.js"; import React from 'react'; -import { fn } from 'storybook/test'; import { Container } from '@chakra-ui/react'; import { ActivityTimeline } from "../../client/components/ActivityTimeline.js"; import {Provider} from "../../client/components/Provider.js"; -import { generateJsonPlays } from "../../core/tests/utils/PlayTestUtils.js"; import { generatePlayApiCommonDetailed } from "../../core/tests/utils/apiFixtures.js"; import { generatePlayWithLifecycle, playWithLifecycleScrobble } from "../../core/tests/utils/fixtures.js"; import { asJsonPlayObject } from '../../core/PlayMarshalUtils.js'; diff --git a/src/stories/plays/PlayInfo.stories.tsx b/src/stories/plays/PlayInfo.stories.tsx index 5eabb76e..5ea34b27 100644 --- a/src/stories/plays/PlayInfo.stories.tsx +++ b/src/stories/plays/PlayInfo.stories.tsx @@ -1,11 +1,10 @@ import preview from "../../../.storybook/preview.js"; import React from 'react'; -import { fn } from 'storybook/test'; import { PlayData } from "../../client/components/PlayData.js"; import {Provider} from "../../client/components/Provider.js"; import { Container } from '@chakra-ui/react'; -import { generateArtistCredits, generateArtists, generateJsonPlay, generatePlay, withBrainz } from "../../core/tests/utils/PlayTestUtils.js" +import { generateArtistCredits, generateJsonPlay, withBrainz } from "../../core/tests/utils/PlayTestUtils.js" import clone from "clone"; import { asJsonPlayObject } from '../../core/PlayMarshalUtils.js'; import { type JsonPlayObject } from "../../core/Atomic.js"; diff --git a/src/stories/plays/TransformSteps.stories.tsx b/src/stories/plays/TransformSteps.stories.tsx index 73682093..d55a8b5a 100644 --- a/src/stories/plays/TransformSteps.stories.tsx +++ b/src/stories/plays/TransformSteps.stories.tsx @@ -1,11 +1,10 @@ import preview from "../../../.storybook/preview.js"; import React from 'react'; -import { fn } from 'storybook/test'; import { Container } from '@chakra-ui/react'; import { TransformSteps } from "../../client/components/TransformSteps.js"; import {Provider} from "../../client/components/Provider.js"; -import { generateJsonPlays, generatePlay } from "../../core/tests/utils/PlayTestUtils.js"; +import { generatePlay } from "../../core/tests/utils/PlayTestUtils.js"; import {generatePlayWithLifecycle} from '../../core/tests/utils/fixtures.js' import { asJsonPlayObject } from "../../core/PlayMarshalUtils.js"; diff --git a/src/stories/plays/listFilters/PlayDateRange.stories.tsx b/src/stories/plays/listFilters/PlayDateRange.stories.tsx index 1d9a3c78..6e2f90a7 100644 --- a/src/stories/plays/listFilters/PlayDateRange.stories.tsx +++ b/src/stories/plays/listFilters/PlayDateRange.stories.tsx @@ -2,7 +2,6 @@ import preview from "../../../../.storybook/preview.js"; import React from 'react'; import { Container } from '@chakra-ui/react'; -import { fn } from 'storybook/test'; import { PlayDateRangeFilter } from "../../../client/components/playActivity/ListFilters.js"; import { Provider } from "../../../client/components/Provider.js"; diff --git a/src/stories/plays/listFilters/PlayFilters.stories.tsx b/src/stories/plays/listFilters/PlayFilters.stories.tsx index 8ccf9a2a..6872b0e6 100644 --- a/src/stories/plays/listFilters/PlayFilters.stories.tsx +++ b/src/stories/plays/listFilters/PlayFilters.stories.tsx @@ -2,10 +2,7 @@ import preview from "../../../../.storybook/preview.js"; import React, {useState} from 'react'; import { Container, Stack } from '@chakra-ui/react'; -import { fn } from 'storybook/test'; -import { ErrorAlert } from "../../../client/components/ErrorAlert.js"; import {Provider} from "../../../client/components/Provider.js"; -import { type ErrorLike } from "../../../core/Atomic.js"; import { ListFilters, todayRange } from "../../../client/components/playActivity/ListFilters.js"; import { type QueryPlaysOptsJson } from "../../../backend/common/database/drizzle/repositories/PlayRepository.js"; diff --git a/src/stories/plays/listFilters/PlayPhrase.stories.tsx b/src/stories/plays/listFilters/PlayPhrase.stories.tsx index 8fcfd6c3..56528c9a 100644 --- a/src/stories/plays/listFilters/PlayPhrase.stories.tsx +++ b/src/stories/plays/listFilters/PlayPhrase.stories.tsx @@ -2,7 +2,6 @@ import preview from "../../../../.storybook/preview.js"; import React from 'react'; import { Container } from '@chakra-ui/react'; -import { fn } from 'storybook/test'; import { PhraseFilter } from "../../../client/components/playActivity/ListFilters.js"; import { Provider } from "../../../client/components/Provider.js"; diff --git a/src/stories/plays/listFilters/PlayState.stories.tsx b/src/stories/plays/listFilters/PlayState.stories.tsx index a888200e..fad16a22 100644 --- a/src/stories/plays/listFilters/PlayState.stories.tsx +++ b/src/stories/plays/listFilters/PlayState.stories.tsx @@ -2,10 +2,7 @@ import preview from "../../../../.storybook/preview.js"; import React from 'react'; import { Container } from '@chakra-ui/react'; -import { fn } from 'storybook/test'; -import { ErrorAlert } from "../../../client/components/ErrorAlert.js"; import {Provider} from "../../../client/components/Provider.js"; -import { type ErrorLike } from "../../../core/Atomic.js"; import { PlayStateFilter } from "../../../client/components/playActivity/ListFilters.js";