feat: implement Redis session management and user authentication flow

This commit is contained in:
2025-12-30 01:38:09 +00:00
parent 1688ca0d23
commit 29523ef22f
20 changed files with 820 additions and 5 deletions
+44
View File
@@ -0,0 +1,44 @@
import { describe, expect, it } from 'vitest';
import { InMemoryGatewaySessionService } from '../src/auth/inMemorySessionService.js';
import { createInMemoryUserRepository } from '../src/auth/inMemoryUserRepository.js';
import { createGatewayApiContext } from '../src/context.js';
import { appRouter } from '../src/router.js';
const buildCaller = () => {
const users = createInMemoryUserRepository();
const sessions = new InMemoryGatewaySessionService({
sessionTtlSeconds: 3600,
gameSessionTtlSeconds: 600,
});
return appRouter.createCaller(createGatewayApiContext({ users, sessions }));
};
describe('gateway auth flow', () => {
it('registers and issues a game session', async () => {
const caller = buildCaller();
const register = await caller.auth.register({
username: 'tester',
password: 'secretpass',
displayName: 'Tester',
});
expect(register.user.username).toBe('tester');
expect(register.sessionToken).toBeTruthy();
const issued = await caller.auth.issueGameSession({
sessionToken: register.sessionToken,
profile: 'che:default',
});
expect(issued.profile).toBe('che:default');
expect(issued.gameToken).toBeTruthy();
const validated = await caller.auth.validateGameSession({
profile: 'che:default',
gameToken: issued.gameToken,
});
expect(validated?.user.username).toBe('tester');
});
});