Fix invoice status transitions, tip-split validation, refund idempotency, and tip-split response format #278

Merged
the-dogfather-cto[bot] merged 4 commits from fix/gro-637-invoice-refund-fixes into main 2026-04-15 06:04:38 +00:00
2 changed files with 0 additions and 20 deletions
Showing only changes of commit 2573d067e4 - Show all commits
-2
View File
@@ -25,7 +25,6 @@ import { setupRouter } from "./routes/setup.js";
import { getDb, businessSettings, eq, staff } from "@groombook/db";
import { authMiddleware } from "./middleware/auth.js";
import { resolveStaffMiddleware, requireRole, requireRoleOrSuperUser, requireSuperUser } from "./middleware/rbac.js";
import { csrfMiddleware } from "./middleware/csrf.js";
import { devRouter } from "./routes/dev.js";
import { adminSeedRouter } from "./routes/admin/seed.js";
import { startReminderScheduler } from "./services/reminders.js";
@@ -106,7 +105,6 @@ app.get("/api/auth/providers", async (c) => {
const api = app.basePath("/api");
api.use("*", authMiddleware);
api.use("*", resolveStaffMiddleware);
api.use("*", csrfMiddleware);
// Better-Auth handler — mounted as sub-app to handle all /api/auth/* routes
// authMiddleware and resolveStaffMiddleware both skip /api/auth/ paths
-18
View File
@@ -1,18 +0,0 @@
import type { MiddlewareHandler } from "hono";
import type { AppEnv } from "./rbac.js";
const CSRF_SAFE_METHODS = ["GET", "HEAD", "OPTIONS"];
export const csrfMiddleware: MiddlewareHandler<AppEnv> = async (c, next) => {
if (CSRF_SAFE_METHODS.includes(c.req.method)) {
await next();
return;
}
const csrfHeader = c.req.header("x-csrf-token");
if (!csrfHeader) {
return c.json({ error: "CSRF token required" }, 403);
}
await next();
};