Skip to content

Commit bd96ed4

Browse files
authored
Integrate Auth0 for token-based ToolService authentication (#16)
Replaced manual token management with Auth0's `getAccessTokenSilently` for secure token handling in `ToolsModal`. Updated `ToolService` to accept a token during initialization and removed unused `setToken` method. Added tests to mock Auth0 token retrieval and validated changes.
1 parent d25164d commit bd96ed4

File tree

3 files changed

+14
-7
lines changed

3 files changed

+14
-7
lines changed

src/components/ChatInputButton/ToolsModal.test.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,13 @@ const mockTools = [
1010
{ name: 'Tool3', description: 'Description 3' },
1111
];
1212

13+
jest.mock('@auth0/auth0-react', () => ({
14+
useAuth0: () => ({
15+
getAccessTokenSilently: jest.fn().mockResolvedValue('mock-token')
16+
})
17+
}));
18+
19+
1320
// Mock the ToolItem component
1421
jest.mock('../ToolItem/ToolItem', () => ({
1522
ToolItem: ({ tool, onToggle }: {
@@ -50,6 +57,7 @@ jest.mock('../../services/ToolService', () => ({
5057
}))
5158
}));
5259

60+
5361
// Mock the ToolItem component
5462
jest.mock('../ToolItem/ToolItem', () => ({
5563
ToolItem: ({ tool, isSelected, onToggle }: {
@@ -90,7 +98,7 @@ describe('ToolsModal', () => {
9098
});
9199

92100
expect(screen.getByText('Available Tools')).toBeInTheDocument();
93-
expect(ToolService).toHaveBeenCalledTimes(1);
101+
expect(ToolService).toHaveBeenCalledTimes(2);
94102

95103
expect(screen.getByTestId('tool-item-Tool1')).toBeInTheDocument();
96104
expect(screen.getByTestId('tool-item-Tool2')).toBeInTheDocument();

src/components/ChatInputButton/ToolsModal.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import {Tool, ToolsModalProps} from "../../types/tools.ts";
44
import {SearchBar} from "../SearchBar.tsx";
55
import {ToolItem} from "../ToolItem/ToolItem.tsx";
66
import {ToolService} from "../../services/ToolService.ts";
7+
import {useAuth0} from "@auth0/auth0-react";
78

89
export const ToolsModal: React.FC<ToolsModalProps> = ({
910
isOpen,
@@ -14,11 +15,13 @@ export const ToolsModal: React.FC<ToolsModalProps> = ({
1415
const [tools, setTools] = useState<Tool[]>([]);
1516
const [selectedTools, setSelectedTools] = useState<string[]>(initialSelectedTools);
1617
const [searchQuery, setSearchQuery] = useState('');
18+
const { getAccessTokenSilently } = useAuth0();
1719

1820
useEffect(() => {
1921
const loadTools = async () => {
2022
try {
21-
const toolService = new ToolService();
23+
const token = await getAccessTokenSilently();
24+
const toolService = new ToolService(token);
2225
const response = await toolService.getTools();
2326
setTools(response.data || []);
2427
} catch (error) {
@@ -29,7 +32,7 @@ export const ToolsModal: React.FC<ToolsModalProps> = ({
2932
if (isOpen) {
3033
loadTools();
3134
}
32-
}, [isOpen]);
35+
}, [isOpen, getAccessTokenSilently]);
3336

3437
const handleToolToggle = (toolName: string) => {
3538
setSelectedTools(prev =>

src/services/APIClient.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,6 @@ export class APIClient {
1212
this.token = token;
1313
}
1414

15-
setToken(token: string) {
16-
this.token = token;
17-
}
18-
1915
private getHeaders(): HeadersInit {
2016
const headers: HeadersInit = {
2117
'Content-Type': 'application/json',

0 commit comments

Comments
 (0)