Skip to content
Merged
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
21 changes: 21 additions & 0 deletions src/authkit-callback-route.spec.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { getWorkOS } from './workos.js';
import { handleAuth } from './authkit-callback-route.js';
import { getSessionFromCookie, saveSession } from './session.js';
import { NextRequest, NextResponse } from 'next/server';

// Mocked in jest.setup.ts
Expand Down Expand Up @@ -253,6 +254,26 @@ describe('authkit-callback-route', () => {
await handler(request);

expect(onSuccess).toHaveBeenCalledWith(mockAuthResponse);
const session = await getSessionFromCookie();
expect(session?.accessToken).toBe(mockAuthResponse.accessToken);
});

it('should allow onSuccess to update session', async () => {
const newAccessToken = 'new-access-token';
jest.mocked(workos.userManagement.authenticateWithCode).mockResolvedValue(mockAuthResponse);

// Set up request with code
request.nextUrl.searchParams.set('code', 'test-code');

const handler = handleAuth({
onSuccess: async (data) => {
await saveSession({ ...data, accessToken: newAccessToken }, request);
},
});
await handler(request);

const session = await getSessionFromCookie();
expect(session?.accessToken).toBe(newAccessToken);
});
});
});
4 changes: 2 additions & 2 deletions src/authkit-callback-route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ export function handleAuth(options: HandleAuthOptions = {}) {

if (!accessToken || !refreshToken) throw new Error('response is missing tokens');

await saveSession({ accessToken, refreshToken, user, impersonator }, request);

if (onSuccess) {
await onSuccess({
accessToken,
Expand All @@ -73,8 +75,6 @@ export function handleAuth(options: HandleAuthOptions = {}) {
});
}

await saveSession({ accessToken, refreshToken, user, impersonator }, request);

return response;
} catch (error) {
const errorRes = {
Expand Down
2 changes: 2 additions & 0 deletions src/components/useAccessToken.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
'use client';

import { useCallback, useEffect, useRef, useState, useSyncExternalStore } from 'react';
import { useAuth } from './authkit-provider.js';
import { tokenStore } from './tokenStore.js';
Expand Down