Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 4 additions & 7 deletions packages/api/src/middleware/auth.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,12 @@ import type { MiddlewareHandler } from "hono"
* GET, POST → public (no token required)
* PUT, DELETE, PATCH → require Bearer token
*
* BUG: The allow-list check uses `'post'` (lowercase) instead of `'POST'`.
* HTTP methods are always uppercase per RFC 7231, so POST is never matched
* as a public method — POST requests incorrectly require a token.
*
* Fix: change `'post'` to `'POST'` in the public methods array.
* The allow-list is case-sensitive and uses uppercase method names as per
* RFC 7231. Both GET and POST are public; PUT, DELETE, and PATCH require
* a valid Bearer token.
*/
export const authMiddleware: MiddlewareHandler = async (c, next) => {
// BUG: 'post' should be 'POST' — POST is never treated as public
const publicMethods = ["GET", "post"]
const publicMethods = ["GET", "POST"]

if (publicMethods.includes(c.req.method)) {
return next()
Expand Down
5 changes: 1 addition & 4 deletions packages/api/src/routes/users.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
import { Hono } from "hono"
import { db } from "../lib/db"
import { notFound } from "../lib/errors"
// BUG: missing import — `badRequest` is used below but not imported here.
// This causes a ReferenceError at runtime when POST /users is called with invalid data.
// Fix: add `badRequest` to the import from "../lib/errors"
import { notFound, badRequest } from "../lib/errors"

const router = new Hono()

Expand Down
2 changes: 1 addition & 1 deletion packages/shared/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

export type User = {
id: string
userName: string // BUG: should be `username` to match API usage
username: string
email: string
createdAt: string
}
Expand Down
9 changes: 5 additions & 4 deletions packages/shared/src/utils/pagination.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,11 @@ import type { PaginatedResponse } from "../types"
* @param items Full array of items
* @param page 1-indexed page number
* @param size Number of items per page
*
* TODO: implement this function — it is currently a stub.
* The test in packages/shared/test/pagination.test.ts exercises the full contract.
*/
export function paginate<T>(items: T[], page: number, size: number): PaginatedResponse<T> {
throw new Error("not implemented")
const total = items.length
const totalPages = total === 0 ? 0 : Math.ceil(total / size)
const start = (page - 1) * size
const data = start >= total ? [] : items.slice(start, start + size)
return { data, page, pageSize: size, total, totalPages }
}
2 changes: 2 additions & 0 deletions tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
"moduleResolution": "bundler",
"strict": true,
"skipLibCheck": true,
"lib": ["ES2022"],
"types": ["bun-types"],
"paths": {
"@e2e/shared": ["./packages/shared/src/index.ts"]
}
Expand Down