{ "name": "mailflare", "version": "0.5.2", "private": true, "scripts": { "dev": "npm run db:bundle && vp dev --port 3000", "build": "npm run db:bundle && vp build", "build:next": "npm run db:bundle && MAILFLARE_RUNTIME=node next build", "start": "vp preview --port 3000", "lint": "vp lint .", "deploy": "npm run build && npm run deploy:worker", "deploy:worker": "wrangler deploy", "deploy:local": "npm run deploy", "upload": "npm run build && wrangler versions upload", "preview": "npm run build && vp preview --port 3000", "cf-typegen": "wrangler types --env-interface CloudflareEnv ./cloudflare-env.d.ts", "push:keys": "node scripts/generate-vapid-keys.mjs", "db:bundle": "node scripts/generate-migration-bundle.mjs", "db:generate": "drizzle-kit generate", "db:migrate:local": "wrangler d1 migrations apply DB --local", "db:migrate:remote": "wrangler d1 migrations apply DB --remote", "migrate": "wrangler d1 migrations apply DB", "db:seed": "curl -X POST http://localhost:3000/api/seed", "build:node": "npm run db:bundle && MAILFLARE_RUNTIME=node next build && node scripts/build-server.mjs", "start:node": "MAILFLARE_RUNTIME=node NODE_ENV=production node dist/server.mjs", "dev:node": "npm run db:bundle && node scripts/build-server.mjs && MAILFLARE_RUNTIME=node node dist/server.mjs" }, "cloudflare": { "bindings": { "CF_TOKEN": { "description": "Runtime Cloudflare API token used by Mailflare onboarding to call the Zones, DNS, and Email Routing APIs. Cloudflare's deploy/build token is not passed to the app, so create this separately at https://dash.cloudflare.com/profile/api-tokens with `Zone Read`, `DNS Edit`, `Email Routing Edit`, and `Email Routing Rules Write` permissions for the zones you will connect. Add `Email Sending Edit` to enable outbound mail. Paste only the token secret value, without `Bearer`." }, "TURNSTILE_SECRET_KEY": { "description": "Cloudflare Turnstile secret key used to verify login and first-run registration challenges. Pair with NEXT_PUBLIC_TURNSTILE_SITE_KEY at build time." }, "NEXT_PUBLIC_TURNSTILE_SITE_KEY": { "description": "Cloudflare Turnstile public site key used by the login and first-run registration widgets." }, "CF_EMAIL_WORKER_NAME": { "description": "Worker name used when creating Cloudflare Email Routing rules. Set this to the deployed Worker name; if you rename the Worker, update this value too." }, "GITHUB_UPDATE_TOKEN": { "description": "Fine-grained GitHub token for the installation repository with Actions: write permission. Used by the admin update endpoint to dispatch deploy-update.yml." }, "GITHUB_UPDATE_REF": { "description": "Optional branch used to dispatch updates. Leave blank to use the repository default branch." }, "GITHUB_UPDATE_REPO": { "description": "Your github repository that connect to cloudflare worker" }, "CF_EMAIL": { "description": "Legacy Global API Key auth only. Use this with `CF_API_KEY` instead of `CF_TOKEN`." }, "CF_API_KEY": { "description": "Legacy Global API Key auth only. Prefer `CF_TOKEN` for new deployments." } } }, "license": "SEE LICENSE IN LICENSE", "dependencies": { "@ai-sdk/openai-compatible": "^3.0.55", "@ai-sdk/react": "^4.0.116", "@modelcontextprotocol/server": "^2.1.0", "@radix-ui/react-dialog": "^1.1.15", "@radix-ui/react-dropdown-menu": "^2.1.16", "@radix-ui/react-label": "^2.1.8", "@radix-ui/react-select": "^2.2.6", "@radix-ui/react-separator": "^1.1.8", "@radix-ui/react-slot": "^1.2.4", "@radix-ui/react-tabs": "^1.1.13", "@radix-ui/react-toast": "^1.2.15", "@tanstack/react-query": "^5.100.11", "@vinext/cloudflare": "1.0.0-beta.11", "ai": "^7.0.113", "bcryptjs": "^3.0.3", "better-sqlite3": "^13.0.3", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "css-tree": "^3.2.1", "dayjs": "^1.11.20", "dompurify": "^3.4.16", "drizzle-orm": "^0.45.2", "lucide-react": "^1.16.0", "mimetext": "^3.0.28", "nanoid": "^5.1.16", "next": "16.3.3", "nodemailer": "^10.0.9", "parse-srcset": "^1.0.2", "parse5": "^8.0.1", "postal-mime": "^2.7.4", "qrcode": "^1.5.4", "react": "^19.2.6", "react-dom": "^19.2.6", "react-hot-toast": "^2.6.1", "react-markdown": "^10.1.0", "react-server-dom-webpack": "^19.2.6", "remark-gfm": "^4.0.1", "sass": "^1.105.0", "smtp-server": "^3.19.12", "tailwind-merge": "^3.6.0", "vinext": "1.0.0-beta.13", "workers-ai-provider": "^4.0.0", "zod": "^4.4.3" }, "devDependencies": { "@cloudflare/vite-plugin": "^1.61.0", "@cloudflare/workers-types": "^5.20260828.1", "@next/eslint-plugin-next": "16.3.3", "@tailwindcss/postcss": "^4", "@typescript-eslint/eslint-plugin": "8.59.4", "@typescript-eslint/parser": "8.59.4", "@types/bcryptjs": "^2.4.6", "@types/better-sqlite3": "^9.6.0", "@types/css-tree": "^3.2.0", "@types/node": "^20.19.41", "@types/nodemailer": "^8.0.1", "@types/qrcode": "^1.5.6", "@types/react": "^19.1.7", "@types/react-dom": "^19.1.7", "@types/smtp-server": "^3.5.13", "@vitejs/plugin-react": "^6.0.0", "@vitejs/plugin-rsc": "^0.5.34", "drizzle-kit": "^0.31.10", "esbuild": "^0.28.2", "eslint": "^9", "eslint-plugin-react": "7.37.5", "eslint-plugin-react-hooks": "7.1.1", "jsdom": "^30.1.2", "tailwindcss": "^4", "tsx": "^4.23.13", "typescript": "^5.7.4", "vite": "npm:@voidzero-dev/vite-plus-core@1.0.0", "vite-plus": "1.0.0", "wrangler": "^4.127.1" }, "overrides": { "@esbuild-kit/core-utils": { "esbuild": "^0.25.4" }, "vite": "npm:@voidzero-dev/vite-plus-core@1.0.0" }, "type": "module" }