{ "name": "paste-es", "version": "7.0.0", "description": "Comparte secretos de forma segura con mensajes cifrados que se autodestruyen tras ser leĆ­dos.", "type": "module", "main": "dist/app.js", "scripts": { "build": "npx vite build", "start": "npx prisma migrate deploy && npx tsx dist/app.js", "dev:api": "npx prisma migrate dev && npx tsx --watch server.ts", "dev:client": "npx vite", "dev": "npm run dev:client", "migrate:dev": "npx prisma migrate dev", "migrate:deploy": "npx prisma migrate deploy", "migrate:reset": "npx prisma migrate reset", "migrate:status": "npx prisma migrate status", "set:admin": "npx tsx scripts/admin.ts", "seed:demo": "npx tsx scripts/seed-demo.ts", "deploy": "npm run build && npm run migrate:deploy && npm run start", "test": "hurl api/tests", "test:e2e": "playwright test", "test:e2e:ui": "playwright test --ui", "test:e2e:debug": "playwright test --debug", "format": "prettier --write .", "format:check": "prettier --check .", "prepare": "husky || true" }, "lint-staged": { "*.{js,jsx,ts,tsx,json,css,md}": "prettier --write" }, "keywords": [ "react", "vite", "hono", "secrets", "encryption", "privacy", "security" ], "dependencies": { "@hono/node-server": "^1.19.7", "@hono/swagger-ui": "^0.5.2", "@hono/zod-openapi": "^1.1.5", "@hono/zod-validator": "^0.7.5", "@prisma/adapter-better-sqlite3": "^7.4.1", "@prisma/client": "^7.4.1", "@tailwindcss/vite": "^4.1.18", "argon2": "^0.44.0", "better-auth": "^1.4.6", "better-sqlite3": "^12.5.0", "croner": "^9.1.0", "dlv": "^1.1.3", "dotenv": "^17.2.3", "hono": "^4.11.7", "hono-rate-limiter": "^0.4.2", "ip-address": "^10.1.0", "ip-range-check": "^0.2.0", "is-cidr": "^6.0.1", "is-ip": "^5.0.1", "isbot": "^5.1.32", "nanoid": "^5.1.6", "prisma": "^7.4.1", "prom-client": "^15.1.3", "react-markdown": "^10.1.0", "ua-parser-js": "^2.0.7", "validator": "^13.15.23", "zod": "^4.1.13" }, "devDependencies": { "@eslint/js": "^9.39.2", "@hono/vite-dev-server": "^0.23.0", "@playwright/test": "^1.57.0", "@tabler/icons-react": "^3.35.0", "@tailwindcss/typography": "^0.5.19", "@tiptap/extension-character-count": "^3.13.0", "@tiptap/extension-color": "^3.13.0", "@tiptap/extension-link": "^3.13.0", "@tiptap/extension-list-item": "^3.13.0", "@tiptap/extension-text-style": "^3.13.0", "@tiptap/react": "^3.13.0", "@tiptap/starter-kit": "^3.13.0", "@types/dlv": "^1.1.5", "@types/node": "^25.0.1", "@types/react": "^19.2.7", "@types/react-dom": "^19.2.3", "@types/validator": "^13.15.10", "@vitejs/plugin-react": "^5.1.2", "autoprefixer": "^10.4.22", "clsx": "^2.1.1", "eslint": "^9.39.2", "eslint-plugin-react-hooks": "^7.0.1", "eslint-plugin-react-refresh": "^0.4.24", "generate-password-browser": "^1.1.0", "globals": "^16.5.0", "husky": "^9.1.7", "i18next": "^25.7.2", "i18next-browser-languagedetector": "^8.2.0", "lint-staged": "^16.2.7", "lucide-react": "^0.561.0", "postcss": "^8.5.6", "prettier": "^3.7.4", "prettier-plugin-organize-imports": "^4.3.0", "prettier-plugin-prisma": "^5.0.0", "qrcode.react": "^4.2.0", "react": "^19.2.3", "react-dom": "^19.2.3", "react-dropzone": "^14.3.8", "react-i18next": "^16.5.0", "react-router-dom": "^7.12.0", "recharts": "^3.5.1", "sonner": "^2.0.7", "tailwindcss": "^4.1.18", "tsx": "^4.21.0", "typescript": "^5.9.3", "typescript-eslint": "^8.49.0", "vite": "^7.2.7", "zustand": "^5.0.9" }, "prisma": { "schema": "prisma/schema.prisma" } }