{ "name": "server", "version": "0.0.1", "description": "BookOrbit server - self-hosted library management and reading platform", "author": "neonsolstice", "private": true, "license": "AGPL-3.0-only", "homepage": "https://bookorbit.app", "repository": { "type": "git", "url": "https://github.com/bookorbit/bookorbit" }, "bugs": { "url": "https://github.com/bookorbit/bookorbit/issues" }, "scripts": { "setup:kobo-cloudscraper": "tsx src/scripts/setup-kobo-cloudscraper.ts", "prestart": "pnpm --filter @bookorbit/types build && pnpm --filter @bookorbit/plugin-api build", "prestart:dev": "pnpm --filter @bookorbit/types build && pnpm --filter @bookorbit/plugin-api build", "prestart:debug": "pnpm --filter @bookorbit/types build && pnpm --filter @bookorbit/plugin-api build", "prebuild": "pnpm --filter @bookorbit/types build && pnpm --filter @bookorbit/plugin-api build && pnpm clean:swagger-metadata", "clean:swagger-metadata": "node -e \"require('node:fs').rmSync('src/metadata.ts', { force: true })\"", "build": "nest build", "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", "format:check": "prettier --check \"src/**/*.ts\" \"test/**/*.ts\"", "start": "nest start", "start:dev": "sh -c 'export $(grep -v \"^#\" .env | xargs) 2>/dev/null; exec nest start --watch --config nest-cli.dev.json'", "start:debug": "nest start --debug --watch --config nest-cli.dev.json", "start:prod": "node dist/main", "db:generate": "drizzle-kit generate --name", "db:migrate": "tsx --env-file-if-exists=.env src/scripts/migrate.ts", "e2e:db:migrate": "DATABASE_URL=postgres://bookorbit:bookorbit@localhost:5432/bookorbit_e2e pnpm db:migrate", "db:migrate:runtime": "node dist/scripts/migrate.js", "e2e:db:prepare": "tsx src/scripts/db-prepare-e2e.ts", "db:studio": "drizzle-kit studio", "predb:seed": "pnpm --filter @bookorbit/types build", "db:seed": "tsx src/scripts/db-seed.ts", "db:seed:apple-stats": "tsx --env-file-if-exists=.env src/scripts/seed-apple-source-stats.ts", "tts:register-kokoro": "tsx --env-file-if-exists=.env src/scripts/register-kokoro-provider.ts", "whats-new:preview": "tsx src/scripts/whats-new-preview.ts", "whats-new:lint": "tsx src/scripts/whats-new-lint.ts", "whats-new:check": "tsx src/scripts/whats-new-check.ts", "whats-new:images": "tsx src/scripts/whats-new-images.ts", "pretype-check": "pnpm --filter @bookorbit/types build && pnpm --filter @bookorbit/plugin-api build", "type-check": "tsc --noEmit -p tsconfig.build.json", "lint": "pnpm run lint:check", "prelint:check": "pnpm --filter @bookorbit/types build", "lint:check": "eslint \"{src,apps,libs,test}/**/*.ts\"", "prelint:fix": "pnpm --filter @bookorbit/types build", "lint:fix": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", "test": "node ../scripts/dev/with-test-lock.mjs -- vitest run --exclude test/scanner-scenarios.e2e-spec.ts --exclude test/scanner-file-operations.e2e-spec.ts", "test:watch": "vitest", "test:cov": "node ../scripts/dev/with-test-lock.mjs -- vitest run --coverage", "e2e:run": "vitest run test/app-smoke.e2e-spec.ts" }, "dependencies": { "7z-wasm": "^1.2.0", "@bookorbit/plugin-api": "workspace:*", "@bookorbit/types": "workspace:*", "@fastify/compress": "^9.2.1", "@fastify/cookie": "^11.1.3", "@fastify/helmet": "^13.1.2", "@fastify/multipart": "^10.1.3", "@fastify/static": "^10.1.6", "@nestjs/common": "^12.1.2", "@nestjs/config": "^12.0.1", "@nestjs/core": "^12.1.2", "@nestjs/jwt": "^12.0.2", "@nestjs/passport": "^12.0.0", "@nestjs/platform-fastify": "^12.1.2", "@nestjs/platform-socket.io": "^12.1.2", "@nestjs/schedule": "^12.0.2", "@nestjs/swagger": "^12.0.2", "@nestjs/terminus": "^12.1.0", "@nestjs/throttler": "^6.7.1", "@nestjs/websockets": "^12.1.2", "@types/archiver": "^8.0.0", "@zip.js/zip.js": "^2.23.0", "archiver": "~8.0.0", "bcryptjs": "^3.0.3", "cheerio": "^1.2.0", "chokidar": "^5.0.0", "class-transformer": "^0.5.1", "class-validator": "^0.15.1", "cron": "^4.4.0", "date-fns-tz": "^3.2.0", "drizzle-orm": "^0.45.4", "fast-xml-parser": "^5.11.2", "fastest-levenshtein": "^1.0.16", "fastify": "^5.12.5", "iconv-lite": "^0.7.3", "jose": "^6.2.12", "langs": "^2.0.0", "ms": "^2.1.3", "mysql2": "^3.24.5", "nestjs-pino": "^5.3.1", "node-unrar-js": "^2.0.2", "nodemailer": "^10.0.16", "passport": "^0.7.0", "passport-jwt": "^4.0.1", "pdf-lib": "^1.17.1", "pg": "^8.23.1", "pg-connection-string": "^2.14.1", "pino-http": "^11.0.0", "reflect-metadata": "^0.2.2", "rxjs": "^7.8.2", "sharp": "^0.35.5", "socket.io": "^4.8.4", "undici": "^8.12.2", "unzipper": "^0.12.5", "zod": "^4.6.6" }, "devDependencies": { "@eslint/eslintrc": "^3.3.7", "@eslint/js": "^10.0.1", "@ffmpeg-installer/ffmpeg": "^1.1.0", "@ffprobe-installer/ffprobe": "^2.1.2", "@nestjs/cli": "^12.0.8", "@nestjs/schematics": "^12.0.6", "@nestjs/testing": "^12.1.2", "@swc/cli": "^0.8.1", "@swc/core": "^1.16.13", "@types/bcrypt": "^6.0.0", "@types/express": "^5.0.6", "@types/langs": "^2.0.5", "@types/node": "^26.6.5", "@types/nodemailer": "^8.0.2", "@types/passport-jwt": "^4.0.1", "@types/pg": "^8.23.1", "@types/supertest": "^7.2.1", "@types/unzipper": "^0.10.11", "@vitest/coverage-v8": "^5.0.3", "drizzle-kit": "^0.31.11", "eslint": "^10.12.0", "eslint-config-prettier": "^10.1.8", "eslint-plugin-prettier": "^5.5.6", "globals": "^17.13.0", "pino-pretty": "^13.2.0", "prettier": "^3.9.9", "socket.io-client": "^4.8.4", "source-map-support": "^0.5.21", "supertest": "^7.3.1", "ts-loader": "^9.6.2", "ts-node": "^10.9.2", "tsconfig-paths": "^4.2.0", "tsx": "^4.23.15", "typescript": "^6.0.3", "typescript-eslint": "^8.71.1", "vitest": "^5.0.3" } }