Skip to main content

Code Agent — msn-0091 / auth refactor

session.ts

src/auth/session.ts

+48 −123.1 KB
Ready

secret.ts

src/auth/secret.ts

+80.4 KB
Ready

package.json

+10.8 KB
Modified
src/auth/session.tstypescript
1import { SignJWT, jwtVerify } from 'jose';
2import { nanoid } from 'nanoid';
3import { getSecret } from './secret';
4
5const SESSION_TTL = 60 * 60 * 24 * 7;
6
7export async function createSession(userId: string) {
8 const sessionId = nanoid();
9 const token = await new SignJWT({ sub: userId, sid: sessionId })
10 .setProtectedHeader({ alg: 'HS256' })
11 .setExpirationTime(SESSION_TTL + 's')
12 .sign(getSecret());
13 return { sessionId, token };
14}
15
16export async function verifySession(token: string) {
17 try {
18 const { payload } = await jwtVerify(token, getSecret());
19 return payload;
20 } catch {
21 return null;
verifySession should throw AuthError, not return null
22 }
23}
Ln 21, Col 121 failing test

Agent edits

Agent editSession creation replaced — HMAC → jose SignJWTcode-agent

Rewrote createSession to use jose.SignJWT with HS256. Secret now read from process.env.SESSION_SECRET via getSecret().

    src/auth/session.ts:7–12createSession — replaced HMAC with jose SignJWT
    src/auth/secret.ts:1–8new file — symmetric key from env
@@ -8,5 +8,6 @@
88 "dependencies": {
9+ "jose": "^5.2.1",
910 "nanoid": "^5.0.7"
1011 }
Test
14:16:22▶ bun run test
14:16:23 PASS tests/auth.test.ts
✓ createSession returns a signed JWT (48ms)
✓ verifySession accepts a valid token (12ms)
✗ verifySession throws on tampered token (8ms)
Expected: AuthError
Received: null
14:16:23Tests: 1 failed, 2 passed — 68ms
code-agentrequestsPropagate AuthError from verifySessionlow
verifySession currently returns null on failure. Fix: throw AuthError so callers can distinguish expired sessions from tampered tokens.
Static preview — actions disabled
tests/auth.test.ts2 passed1 failed68ms
  • createSessioncreateSession returns a signed JWT48msPass
  • verifySessionverifySession accepts a valid token12msPass

run_01hwf4m8kj2nqp7r

Failed
Duration0m 48s
Spend$0.14
Tests2/3(1 failed)
Receiptrcpt_9f3kzq