{ "name": "multi-scrobbler", "version": "0.8.4", "type": "module", "description": "scrobble plays from multiple sources to multiple clients", "scripts": { "schema": "npm run -s schema-aio & npm run -s schema-source & npm run -s schema-client & npm run -s schema-aiosource & npm run -s schema-aioclient", "schema-client": "typescript-json-schema src/backend/tsconfig.json ClientConfig --out src/backend/common/schema/client.json --required --titles --tsNodeRegister --refs --validationKeywords deprecationMessage --constAsEnum", "schema-source": "typescript-json-schema src/backend/tsconfig.json SourceConfig --out src/backend/common/schema/source.json --required --titles --tsNodeRegister --refs --validationKeywords deprecationMessage --constAsEnum", "schema-aio": "typescript-json-schema src/backend/tsconfig.json AIOConfig --out src/backend/common/schema/aio.json --required --titles --tsNodeRegister --refs --validationKeywords deprecationMessage --constAsEnum", "schema-aiosource": "typescript-json-schema src/backend/tsconfig.json AIOSourceConfig --out src/backend/common/schema/aio-source.json --titles --required --tsNodeRegister --refs --validationKeywords deprecationMessage --constAsEnum", "schema-aioclient": "typescript-json-schema src/backend/tsconfig.json AIOClientConfig --out src/backend/common/schema/aio-client.json --titles --required --tsNodeRegister --refs --validationKeywords deprecationMessage --constAsEnum", "circular": "madge --circular --extensions ts src/index.ts", "test": "npm run -s test:backend", "test:backend": "mocha --reporter spec --recursive src/backend/tests/**/*.test.ts", "dev": "nodemon -w src/backend -x tsx src/backend/index.ts", "start": "NODE_ENV=production tsx src/backend/index.ts", "build:frontend": "vite build", "build:backend": "tsc -p src/backend", "build": "npm run -s build:backend && npm run -s build:frontend && npm run -s docs:build", "docs:install": "cd docsite && npm ci", "docs:start": "cd docsite && npm start", "docs:build": "cd docsite && npm run build", "postinstall": "patch-package" }, "exports": { ".": { "types": "./src/backend/common/infrastructure/typings/lastfm-node-client.d.ts", "import": "./src/backend/index.js" } }, "engines": { "node": ">=18.19.1", "npm": ">=9.1.0" }, "repository": { "type": "git", "url": "git+https://github.com/FoxxMD/multi-scrobbler.git" }, "author": "", "license": "MIT", "bugs": { "url": "https://github.com/FoxxMD/multi-scrobbler/issues" }, "private": true, "homepage": ".", "dependencies": { "@astronautlabs/mdns": "^1.0.7", "@awaitjs/express": "^0.6.3", "@curvenote/ansi-to-react": "^7.0.0", "@donedeal0/superdiff": "^1.1.1", "@fortawesome/fontawesome-svg-core": "^6.4.2", "@fortawesome/free-solid-svg-icons": "^6.4.2", "@fortawesome/react-fontawesome": "^0.2.0", "@foxxmd/chromecast-client": "^1.0.4", "@foxxmd/get-version": "^0.0.3", "@foxxmd/logging": "^0.2.1", "@foxxmd/regex-buddy-core": "^0.1.2", "@foxxmd/string-sameness": "^0.4.0", "@jellyfin/sdk": "^0.10.0", "@kenyip/backoff-strategies": "^1.0.4", "@react-nano/use-event-source": "^0.13.0", "@reduxjs/toolkit": "^1.9.5", "@supercharge/promise-pool": "^3.0.0", "address": "^1.2.2", "ajv": "^8.12.0", "autoprefixer": "^10.4.17", "avahi-browse": "^1.1.4", "better-sse": "^0.8.0", "body-parser": "^1.19.0", "castv2": "^0.1.10", "clsx": "^2.0.0", "common-tags": "^1.8.2", "compare-versions": "^4.1.2", "concat-stream": "^2.0.0", "cors": "^2.8.5", "dayjs": "^1.10.4", "dbus-ts": "^0.0.7", "dotenv": "^10.0.0", "express": "^4.17.1", "express-session": "^1.17.2", "fast-deep-equal": "^3.1.3", "fixed-size-list": "^0.3.0", "formidable": "^3.5", "gotify": "^1.1.0", "iso-websocket": "^0.3.0", "iti": "^0.6.0", "json5": "^2.2.3", "kodi-api": "^0.2.1", "lastfm-node-client": "^2.2.0", "mopidy": "^1.3.0", "mpd-api": "^1.1.2", "nanoid": "^3.3.1", "normalize-url": "^8.0.1", "ntfy": "^1.6.2", "object-hash": "^3.0.0", "p-event": "^4.2.0", "passport": "^0.6.0", "passport-deezer": "^0.2.0", "patch-package": "^8.0.0", "postcss": "^8.4.41", "react": "^18.2.0", "react-dom": "^18.2.0", "react-redux": "^8.1.2", "react-router-dom": "^6.15.0", "sass": "^1.70.0", "spotify-web-api-node": "^5.0.2", "superagent": "^8.0.9", "tailwindcss": "^3.4.4", "toad-scheduler": "^3.0.0", "tsx": "^4.7.0", "vite-express": "^0.16.0", "vlc-client": "^1.1.1", "xml2js": "0.6.0", "youtube-music-ts-api": "^1.7.0" }, "devDependencies": { "@dbus-types/notifications": "^0.0.5", "@eslint/js": "^8.56.0", "@faker-js/faker": "^9.0.1", "@istanbuljs/nyc-config-typescript": "^1.0.2", "@testing-library/jest-dom": "^5.17.0", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", "@tsconfig/node18": "^1.0.1", "@types/chai": "^4.3.0", "@types/chai-as-promised": "^7.1.5", "@types/clone": "^2.1.2", "@types/common-tags": "^1.8.1", "@types/concat-stream": "^2.0.0", "@types/cors": "^2.8.17", "@types/express": "^4.17.13", "@types/express-session": "^1.17.4", "@types/formidable": "^3.4.5", "@types/jest": "^27.5.2", "@types/jscodeshift": "^0.11.6", "@types/mocha": "^9.1.0", "@types/node": "^18.0.0", "@types/object-hash": "^3.0.0", "@types/passport": "^1.0.12", "@types/react": "^18.2.18", "@types/react-dom": "^18.2.7", "@types/react-window": "^1.8.5", "@types/spotify-web-api-node": "^5.0.7", "@types/superagent": "^4.1.16", "@types/xml2js": "^0.4.11", "@vitejs/plugin-react": "^4.2.1", "chai": "^4.3.6", "chai-as-promised": "^7.1.1", "clone": "^2.1.2", "eslint": "^8.56.0", "eslint-plugin-prefer-arrow-functions": "^3.2.4", "mocha": "^10.3.0", "msw": "^2.1.2", "nodemon": "^3.0.3", "ts-essentials": "^9.1.2", "typescript": "^5.5.4", "typescript-eslint": "^7.0.1", "typescript-json-schema": "^0.61.0", "vite": "^5.2.12" }, "browserslist": { "production": [ ">0.2%", "not dead", "not op_mini all" ], "development": [ "last 1 chrome version", "last 1 firefox version", "last 1 safari version" ] }, "overrides": { "spotify-web-api-node": { "superagent": "$superagent" } } }