Files
bookorbit/server/package.json
T
neon 2065af41f9 feat(server): add swagger setup for public api documentation
Introduces Swagger and OpenAPI documentation generation for the
backend API. Configures bearer authentication globally while
allowing explicit bypasses for public endpoints. Exports nested
DTO classes across several modules so the NestJS Swagger plugin
can correctly reflect their schema definitions.

Closes #399
2026-06-29 01:52:30 +00:00

141 lines
4.9 KiB
JSON

{
"name": "server",
"version": "0.0.1",
"description": "BookOrbit server - self-hosted library management and reading platform",
"author": "neonsolstice",
"private": true,
"license": "AGPL-3.0",
"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",
"prestart:dev": "pnpm --filter @bookorbit/types build",
"prestart:debug": "pnpm --filter @bookorbit/types build",
"prebuild": "pnpm --filter @bookorbit/types build",
"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'",
"start:debug": "nest start --debug --watch",
"start:prod": "node dist/main",
"db:generate": "drizzle-kit generate --name",
"db:migrate": "drizzle-kit migrate",
"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",
"db:seed": "tsx src/scripts/db-seed.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",
"type-check": "tsc --noEmit -p tsconfig.build.json",
"lint": "pnpm run lint:check",
"lint:check": "eslint \"{src,apps,libs,test}/**/*.ts\"",
"lint:fix": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
"test": "vitest run --exclude test/scanner-scenarios.e2e-spec.ts --exclude test/scanner-file-operations.e2e-spec.ts",
"test:watch": "vitest",
"test:cov": "vitest run --coverage",
"e2e:run": "vitest run test/app-smoke.e2e-spec.ts"
},
"dependencies": {
"7z-wasm": "^1.2.0",
"@bookorbit/types": "workspace:*",
"@fastify/compress": "^9.0.0",
"@fastify/cookie": "^11.0.2",
"@fastify/formbody": "^8.0.2",
"@fastify/helmet": "^13.0.2",
"@fastify/multipart": "^10.0.0",
"@fastify/static": "^9.1.3",
"@nestjs/common": "^11.1.27",
"@nestjs/config": "^4.0.4",
"@nestjs/core": "^11.1.27",
"@nestjs/jwt": "^11.0.2",
"@nestjs/passport": "^11.0.5",
"@nestjs/platform-fastify": "^11.1.27",
"@nestjs/platform-socket.io": "^11.1.27",
"@nestjs/schedule": "^6.1.3",
"@nestjs/swagger": "^11.4.4",
"@nestjs/terminus": "^11.1.1",
"@nestjs/throttler": "^6.5.0",
"@nestjs/websockets": "^11.1.27",
"@types/archiver": "^8.0.0",
"archiver": "~8.0.0",
"bcryptjs": "^3.0.3",
"cheerio": "^1.2.0",
"chokidar": "^4.0.3",
"class-transformer": "^0.5.1",
"class-validator": "^0.15.1",
"date-fns-tz": "^3.2.0",
"drizzle-orm": "^0.45.2",
"fast-xml-parser": "^5.9.3",
"fastest-levenshtein": "^1.0.16",
"fastify": "^5.8.5",
"jose": "^6.2.3",
"ms": "^2.1.3",
"mysql2": "^3.22.5",
"nestjs-pino": "^4.6.1",
"node-unrar-js": "^2.0.2",
"nodemailer": "^9.0.1",
"opentype.js": "^2.0.0",
"passport": "^0.7.0",
"passport-jwt": "^4.0.1",
"pdf-lib": "^1.17.1",
"pg": "^8.22.0",
"pg-connection-string": "^2.14.0",
"pino-http": "^11.0.0",
"reflect-metadata": "^0.2.2",
"rxjs": "^7.8.2",
"sharp": "^0.35.2",
"socket.io": "^4.8.3",
"unzipper": "^0.12.3",
"zod": "^4.4.3"
},
"devDependencies": {
"@eslint/eslintrc": "^3.3.5",
"@eslint/js": "^10.0.1",
"@ffmpeg-installer/ffmpeg": "^1.1.0",
"@ffprobe-installer/ffprobe": "^2.1.2",
"@nestjs/cli": "^11.0.23",
"@nestjs/schematics": "^11.1.0",
"@nestjs/testing": "^11.1.27",
"@swc/cli": "^0.8.1",
"@swc/core": "^1.15.41",
"@types/bcrypt": "^6.0.0",
"@types/express": "^5.0.6",
"@types/node": "^26.0.0",
"@types/nodemailer": "^8.0.1",
"@types/opentype.js": "^1.3.10",
"@types/passport-jwt": "^4.0.1",
"@types/pg": "^8.18.0",
"@types/supertest": "^7.2.0",
"@types/unzipper": "^0.10.11",
"@vitest/coverage-v8": "^4.1.9",
"drizzle-kit": "^0.31.10",
"eslint": "^10.5.0",
"eslint-config-prettier": "^10.1.8",
"eslint-plugin-prettier": "^5.5.6",
"globals": "^17.6.0",
"pino-pretty": "^13.1.3",
"prettier": "^3.8.4",
"source-map-support": "^0.5.21",
"supertest": "^7.2.2",
"ts-loader": "^9.6.1",
"ts-node": "^10.9.2",
"tsconfig-paths": "^4.2.0",
"tsx": "^4.22.4",
"typescript": "^6.0.3",
"typescript-eslint": "^8.61.1",
"vitest": "^4.1.9"
}
}