import { Router } from "express"; import { createKey } from "../services/keys.js"; import logger from "../services/logger.js"; export const signupRouter = Router(); // Simple signup: email → instant API key (no verification for now) /** * @openapi * /v1/signup/free: * post: * tags: [Signup] * summary: Create a free account * description: Sign up with an email to get a free API key (100 screenshots/month). * operationId: signupFree * requestBody: * required: true * content: * application/json: * schema: * type: object * required: [email] * properties: * email: * type: string * format: email * description: Your email address * example: "user@example.com" * responses: * 200: * description: API key created * content: * application/json: * schema: * type: object * properties: * apiKey: * type: string * description: Your new API key * tier: * type: string * example: free * limit: * type: integer * example: 100 * message: * type: string * 400: * description: Invalid email * content: * application/json: * schema: { $ref: "#/components/schemas/Error" } * 500: * description: Signup failed * content: * application/json: * schema: { $ref: "#/components/schemas/Error" } */ signupRouter.post("/free", async (req, res) => { const { email } = req.body; if (!email || typeof email !== "string" || !email.includes("@")) { res.status(400).json({ error: "Valid email required" }); return; } try { const key = await createKey(email.toLowerCase().trim(), "free"); logger.info({ email: email.slice(0, 3) + "***" }, "Free signup"); res.json({ apiKey: key.key, tier: "free", limit: 100, message: "Your API key is ready! 100 free screenshots/month.", }); } catch (err: any) { logger.error({ err }, "Signup failed"); res.status(500).json({ error: "Signup failed" }); } });