Skip to content

Commit 753b8dc

Browse files
Crowayorpiske
authored andcommittedMar 7, 2025
Use fetch instead of axios
1 parent e4aad92 commit 753b8dc

11 files changed

+574
-242
lines changed
 

‎ui/orval.config.ts

+7
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,14 @@ export default defineConfig({
77
mode: 'single',
88
target: './src/api/wanaku-router-api.ts',
99
schemas: './src/models',
10+
client: 'fetch',
1011
mock: false,
12+
override: {
13+
mutator: {
14+
path: './src/custom-fetch.ts',
15+
name: 'customFetch',
16+
},
17+
},
1118
},
1219
hooks: {
1320
afterAllFilesWrite: 'prettier --write',

‎ui/package.json

-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
"@carbon/icons-react": "^11.55.0",
1717
"@carbon/layout": "^11.30.0",
1818
"@carbon/react": "^1.76.0",
19-
"axios": "^1.8.1",
2019
"react": "^19.0.0",
2120
"react-dom": "^19.0.0",
2221
"react-is": "^19.0.0",

‎ui/src/App.tsx

-3
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,9 @@ import {
1616
import { Link, Outlet } from "react-router-dom";
1717
import "./App.scss";
1818
import { ExternalLinks, Links } from "./router/links.models";
19-
import axios from "axios";
2019
import wanakuLogo from "./assets/wanaku.svg";
2120

2221
function App() {
23-
axios.defaults.baseURL = VITE_API_URL;
24-
2522
const action = (click: string) => () => {
2623
console.log(click);
2724
};

‎ui/src/Pages/Resources/ResourcesPage.tsx

+3-3
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@ import {
88
TableHeader,
99
TableRow,
1010
} from "@carbon/react";
11-
import { FunctionComponent, useState, useEffect } from "react";
11+
import React, { useState, useEffect } from "react";
1212
import { ResourceReference } from "../../models";
1313
import { useResources } from "../../hooks/api/use-resources";
1414

15-
export const ResourcesPage: FunctionComponent = () => {
16-
const [fetchedData, setFetchedData] = useState<ResourceReference[] | null>(
15+
export const ResourcesPage: React.FC = () => {
16+
const [fetchedData, setFetchedData] = useState<ResourceReference[] | string>(
1717
[]
1818
);
1919
const [isLoading, setIsLoading] = useState(true);

‎ui/src/Pages/Tools/ToolsPage.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { ToolReference } from "../../models";
1212
import { ToolsTable } from "./ToolsTable";
1313

1414
export const ToolsPage: React.FC = () => {
15-
const [fetchedData, setFetchedData] = useState<ToolReference[] | null>([]);
15+
const [fetchedData, setFetchedData] = useState<ToolReference[] | string>([]);
1616
const [isLoading, setIsLoading] = useState(true);
1717
const [isAddModalOpen, setIsAddModalOpen] = useState(false);
1818
const [isImportModalOpen, setIsImportModalOpen] = useState(false);

‎ui/src/Pages/Tools/ToolsTable.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { FunctionComponent } from "react";
1414
import { ToolReference } from "../../models";
1515

1616
interface ToolListProps {
17-
fetchedData: ToolReference[];
17+
fetchedData: ToolReference[] | string;
1818
onDelete: (toolName?: string) => void;
1919
onImport: () => void;
2020
onAdd: () => void;

‎ui/src/api/wanaku-router-api.ts

+474-120
Large diffs are not rendered by default.

‎ui/src/custom-fetch.ts

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
const getBody = <T>(c: Response | Request): Promise<T> => {
2+
const contentType = c.headers.get('content-type');
3+
4+
if (contentType && contentType.includes('application/json')) {
5+
return c.json();
6+
}
7+
8+
return c.text() as Promise<T>;
9+
};
10+
11+
// NOTE: Update just base url
12+
const getUrl = (contextUrl: string): string => {
13+
const baseUrl = VITE_API_URL;
14+
const url = new URL(baseUrl + contextUrl);
15+
const pathname = url.pathname;
16+
const search = url.search;
17+
18+
const requestUrl = new URL(`${baseUrl}${pathname}${search}`);
19+
20+
return requestUrl.toString();
21+
};
22+
23+
// NOTE: Add headers
24+
const getHeaders = (headers?: HeadersInit): HeadersInit => {
25+
return {
26+
...headers
27+
};
28+
};
29+
30+
export const customFetch = async <T>(
31+
url: string,
32+
options: RequestInit,
33+
): Promise<T> => {
34+
const requestUrl = getUrl(url);
35+
const requestHeaders = getHeaders(options.headers);
36+
37+
const requestInit: RequestInit = {
38+
...options,
39+
headers: requestHeaders,
40+
};
41+
42+
const request = new Request(requestUrl, requestInit);
43+
const response = await fetch(request);
44+
const data = await getBody<T>(response);
45+
46+
return { status: response.status, data, headers: response.headers } as T;
47+
};

‎ui/src/hooks/api/use-resources.ts

+21-17
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { useCallback } from "react";
2-
import type { AxiosRequestConfig, AxiosResponse } from "axios";
32
import {
43
putApiV1ManagementTargetsResourcesConfigureService,
54
putApiV1ManagementTargetsResourcesLink,
@@ -8,8 +7,13 @@ import {
87
postApiV1ResourcesExpose,
98
getApiV1ResourcesList,
109
putApiV1ResourcesRemove,
11-
GetApiV1ResourcesListResult,
12-
GetApiV1ManagementTargetsResourcesListResult,
10+
putApiV1ManagementTargetsResourcesConfigureServiceResponse,
11+
putApiV1ManagementTargetsResourcesLinkResponse,
12+
getApiV1ManagementTargetsResourcesListResponse,
13+
putApiV1ManagementTargetsResourcesUnlinkResponse,
14+
postApiV1ResourcesExposeResponse,
15+
getApiV1ResourcesListResponse,
16+
putApiV1ResourcesRemoveResponse
1317
} from "../../api/wanaku-router-api";
1418
import {
1519
PutApiV1ManagementTargetsResourcesConfigureServiceParams,
@@ -27,8 +31,8 @@ export const useResources = () => {
2731
(
2832
service: string,
2933
params?: PutApiV1ManagementTargetsResourcesConfigureServiceParams,
30-
options?: AxiosRequestConfig
31-
): Promise<AxiosResponse<void>> => {
34+
options?: RequestInit
35+
): Promise<putApiV1ManagementTargetsResourcesConfigureServiceResponse> => {
3236
return putApiV1ManagementTargetsResourcesConfigureService(service, params, options);
3337
},
3438
[]
@@ -40,8 +44,8 @@ export const useResources = () => {
4044
const linkResource = useCallback(
4145
(
4246
params?: PutApiV1ManagementTargetsResourcesLinkParams,
43-
options?: AxiosRequestConfig
44-
): Promise<AxiosResponse<void>> => {
47+
options?: RequestInit
48+
): Promise<putApiV1ManagementTargetsResourcesLinkResponse> => {
4549
return putApiV1ManagementTargetsResourcesLink(params, options);
4650
},
4751
[]
@@ -52,8 +56,8 @@ export const useResources = () => {
5256
*/
5357
const listManagementResources = useCallback(
5458
(
55-
options?: AxiosRequestConfig
56-
): Promise<GetApiV1ManagementTargetsResourcesListResult> => {
59+
options?: RequestInit
60+
): Promise<getApiV1ManagementTargetsResourcesListResponse> => {
5761
return getApiV1ManagementTargetsResourcesList(options);
5862
},
5963
[]
@@ -65,8 +69,8 @@ export const useResources = () => {
6569
const unlinkResource = useCallback(
6670
(
6771
params?: PutApiV1ManagementTargetsResourcesUnlinkParams,
68-
options?: AxiosRequestConfig
69-
): Promise<AxiosResponse<void>> => {
72+
options?: RequestInit
73+
): Promise<putApiV1ManagementTargetsResourcesUnlinkResponse> => {
7074
return putApiV1ManagementTargetsResourcesUnlink(params, options);
7175
},
7276
[]
@@ -78,8 +82,8 @@ export const useResources = () => {
7882
const exposeResource = useCallback(
7983
(
8084
resourceReference: ResourceReference, // Define the proper type from your models if available.
81-
options?: AxiosRequestConfig
82-
): Promise<AxiosResponse<void>> => {
85+
options?: RequestInit
86+
): Promise<postApiV1ResourcesExposeResponse> => {
8387
return postApiV1ResourcesExpose(resourceReference, options);
8488
},
8589
[]
@@ -90,8 +94,8 @@ export const useResources = () => {
9094
*/
9195
const listResources = useCallback(
9296
(
93-
options?: AxiosRequestConfig
94-
): Promise<GetApiV1ResourcesListResult> => {
97+
options?: RequestInit
98+
): Promise<getApiV1ResourcesListResponse> => {
9599
return getApiV1ResourcesList(options);
96100
},
97101
[]
@@ -103,8 +107,8 @@ export const useResources = () => {
103107
const removeResource = useCallback(
104108
(
105109
params?: PutApiV1ResourcesRemoveParams, // Replace with the actual type if available from models.
106-
options?: AxiosRequestConfig
107-
): Promise<AxiosResponse<void>> => {
110+
options?: RequestInit
111+
): Promise<putApiV1ResourcesRemoveResponse> => {
108112
return putApiV1ResourcesRemove(params, options);
109113
},
110114
[]

‎ui/src/hooks/api/use-tools.ts

+20-16
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { useCallback } from "react";
2-
import type { AxiosRequestConfig, AxiosResponse } from "axios";
32
import {
43
putApiV1ManagementTargetsToolsConfigureService,
54
putApiV1ManagementTargetsToolsLink,
@@ -8,8 +7,13 @@ import {
87
postApiV1ToolsAdd,
98
getApiV1ToolsList,
109
putApiV1ToolsRemove,
11-
GetApiV1ManagementTargetsToolsListResult,
12-
GetApiV1ToolsListResult,
10+
putApiV1ManagementTargetsToolsConfigureServiceResponse,
11+
putApiV1ManagementTargetsToolsLinkResponse,
12+
getApiV1ManagementTargetsToolsListResponse,
13+
putApiV1ManagementTargetsToolsUnlinkResponse,
14+
postApiV1ToolsAddResponse,
15+
getApiV1ToolsListResponse,
16+
putApiV1ToolsRemoveResponse
1317
} from "../../api/wanaku-router-api";
1418
import {
1519
PutApiV1ManagementTargetsToolsConfigureServiceParams,
@@ -27,8 +31,8 @@ export const useTools = () => {
2731
(
2832
service: string,
2933
params?: PutApiV1ManagementTargetsToolsConfigureServiceParams,
30-
options?: AxiosRequestConfig
31-
): Promise<AxiosResponse<void>> => {
34+
options?: RequestInit
35+
): Promise<putApiV1ManagementTargetsToolsConfigureServiceResponse> => {
3236
return putApiV1ManagementTargetsToolsConfigureService(
3337
service,
3438
params,
@@ -44,8 +48,8 @@ export const useTools = () => {
4448
const linkTool = useCallback(
4549
(
4650
params?: PutApiV1ManagementTargetsToolsLinkParams,
47-
options?: AxiosRequestConfig
48-
): Promise<AxiosResponse<void>> => {
51+
options?: RequestInit
52+
): Promise<putApiV1ManagementTargetsToolsLinkResponse> => {
4953
return putApiV1ManagementTargetsToolsLink(params, options);
5054
},
5155
[]
@@ -56,8 +60,8 @@ export const useTools = () => {
5660
*/
5761
const listManagementTools = useCallback(
5862
(
59-
options?: AxiosRequestConfig
60-
): Promise<GetApiV1ManagementTargetsToolsListResult> => {
63+
options?: RequestInit
64+
): Promise<getApiV1ManagementTargetsToolsListResponse> => {
6165
return getApiV1ManagementTargetsToolsList(options);
6266
},
6367
[]
@@ -69,8 +73,8 @@ export const useTools = () => {
6973
const unlinkTool = useCallback(
7074
(
7175
params?: PutApiV1ManagementTargetsToolsUnlinkParams,
72-
options?: AxiosRequestConfig
73-
): Promise<AxiosResponse<void>> => {
76+
options?: RequestInit
77+
): Promise<putApiV1ManagementTargetsToolsUnlinkResponse> => {
7478
return putApiV1ManagementTargetsToolsUnlink(params, options);
7579
},
7680
[]
@@ -82,8 +86,8 @@ export const useTools = () => {
8286
const addTool = useCallback(
8387
(
8488
toolReference: ToolReference,
85-
options?: AxiosRequestConfig
86-
): Promise<AxiosResponse<void>> => {
89+
options?: RequestInit
90+
): Promise<postApiV1ToolsAddResponse> => {
8791
return postApiV1ToolsAdd(toolReference, options);
8892
},
8993
[]
@@ -93,7 +97,7 @@ export const useTools = () => {
9397
* List tools.
9498
*/
9599
const listTools = useCallback(
96-
(options?: AxiosRequestConfig): Promise<GetApiV1ToolsListResult> => {
100+
(options?: RequestInit): Promise<getApiV1ToolsListResponse> => {
97101
return getApiV1ToolsList(options);
98102
},
99103
[]
@@ -105,8 +109,8 @@ export const useTools = () => {
105109
const removeTool = useCallback(
106110
(
107111
params?: PutApiV1ToolsRemoveParams,
108-
options?: AxiosRequestConfig
109-
): Promise<AxiosResponse<void>> => {
112+
options?: RequestInit
113+
): Promise<putApiV1ToolsRemoveResponse> => {
110114
return putApiV1ToolsRemove(params, options);
111115
},
112116
[]

‎ui/yarn.lock

-80
Original file line numberDiff line numberDiff line change
@@ -2145,13 +2145,6 @@ __metadata:
21452145
languageName: node
21462146
linkType: hard
21472147

2148-
"asynckit@npm:^0.4.0":
2149-
version: 0.4.0
2150-
resolution: "asynckit@npm:0.4.0"
2151-
checksum: 10c0/d73e2ddf20c4eb9337e1b3df1a0f6159481050a5de457c55b14ea2e5cb6d90bb69e004c9af54737a5ee0917fcf2c9e25de67777bbe58261847846066ba75bc9d
2152-
languageName: node
2153-
linkType: hard
2154-
21552148
"available-typed-arrays@npm:^1.0.7":
21562149
version: 1.0.7
21572150
resolution: "available-typed-arrays@npm:1.0.7"
@@ -2161,17 +2154,6 @@ __metadata:
21612154
languageName: node
21622155
linkType: hard
21632156

2164-
"axios@npm:^1.8.1":
2165-
version: 1.8.1
2166-
resolution: "axios@npm:1.8.1"
2167-
dependencies:
2168-
follow-redirects: "npm:^1.15.6"
2169-
form-data: "npm:^4.0.0"
2170-
proxy-from-env: "npm:^1.1.0"
2171-
checksum: 10c0/b2e1d5a61264502deee4b50f0a6df0aa3b174c546ccf68c0dff714a2b8863232e0bd8cb5b84f853303e97f242a98260f9bb9beabeafe451ad5af538e9eb7ac22
2172-
languageName: node
2173-
linkType: hard
2174-
21752157
"balanced-match@npm:^1.0.0":
21762158
version: 1.0.2
21772159
resolution: "balanced-match@npm:1.0.2"
@@ -2395,15 +2377,6 @@ __metadata:
23952377
languageName: node
23962378
linkType: hard
23972379

2398-
"combined-stream@npm:^1.0.8":
2399-
version: 1.0.8
2400-
resolution: "combined-stream@npm:1.0.8"
2401-
dependencies:
2402-
delayed-stream: "npm:~1.0.0"
2403-
checksum: 10c0/0dbb829577e1b1e839fa82b40c07ffaf7de8a09b935cadd355a73652ae70a88b4320db322f6634a4ad93424292fa80973ac6480986247f1734a1137debf271d5
2404-
languageName: node
2405-
linkType: hard
2406-
24072380
"compare-versions@npm:^6.1.1":
24082381
version: 6.1.1
24092382
resolution: "compare-versions@npm:6.1.1"
@@ -2533,13 +2506,6 @@ __metadata:
25332506
languageName: node
25342507
linkType: hard
25352508

2536-
"delayed-stream@npm:~1.0.0":
2537-
version: 1.0.0
2538-
resolution: "delayed-stream@npm:1.0.0"
2539-
checksum: 10c0/d758899da03392e6712f042bec80aa293bbe9e9ff1b2634baae6a360113e708b91326594c8a486d475c69d6259afb7efacdc3537bfcda1c6c648e390ce601b19
2540-
languageName: node
2541-
linkType: hard
2542-
25432509
"dependency-graph@npm:0.11.0, dependency-graph@npm:~0.11.0":
25442510
version: 0.11.0
25452511
resolution: "dependency-graph@npm:0.11.0"
@@ -3180,16 +3146,6 @@ __metadata:
31803146
languageName: node
31813147
linkType: hard
31823148

3183-
"follow-redirects@npm:^1.15.6":
3184-
version: 1.15.9
3185-
resolution: "follow-redirects@npm:1.15.9"
3186-
peerDependenciesMeta:
3187-
debug:
3188-
optional: true
3189-
checksum: 10c0/5829165bd112c3c0e82be6c15b1a58fa9dcfaede3b3c54697a82fe4a62dd5ae5e8222956b448d2f98e331525f05d00404aba7d696de9e761ef6e42fdc780244f
3190-
languageName: node
3191-
linkType: hard
3192-
31933149
"for-each@npm:^0.3.3":
31943150
version: 0.3.5
31953151
resolution: "for-each@npm:0.3.5"
@@ -3209,18 +3165,6 @@ __metadata:
32093165
languageName: node
32103166
linkType: hard
32113167

3212-
"form-data@npm:^4.0.0":
3213-
version: 4.0.2
3214-
resolution: "form-data@npm:4.0.2"
3215-
dependencies:
3216-
asynckit: "npm:^0.4.0"
3217-
combined-stream: "npm:^1.0.8"
3218-
es-set-tostringtag: "npm:^2.1.0"
3219-
mime-types: "npm:^2.1.12"
3220-
checksum: 10c0/e534b0cf025c831a0929bf4b9bbe1a9a6b03e273a8161f9947286b9b13bf8fb279c6944aae0070c4c311100c6d6dbb815cd955dc217728caf73fad8dc5b8ee9c
3221-
languageName: node
3222-
linkType: hard
3223-
32243168
"fs-extra@npm:^11.2.0":
32253169
version: 11.3.0
32263170
resolution: "fs-extra@npm:11.3.0"
@@ -4241,22 +4185,6 @@ __metadata:
42414185
languageName: node
42424186
linkType: hard
42434187

4244-
"mime-db@npm:1.52.0":
4245-
version: 1.52.0
4246-
resolution: "mime-db@npm:1.52.0"
4247-
checksum: 10c0/0557a01deebf45ac5f5777fe7740b2a5c309c6d62d40ceab4e23da9f821899ce7a900b7ac8157d4548ddbb7beffe9abc621250e6d182b0397ec7f10c7b91a5aa
4248-
languageName: node
4249-
linkType: hard
4250-
4251-
"mime-types@npm:^2.1.12":
4252-
version: 2.1.35
4253-
resolution: "mime-types@npm:2.1.35"
4254-
dependencies:
4255-
mime-db: "npm:1.52.0"
4256-
checksum: 10c0/82fb07ec56d8ff1fc999a84f2f217aa46cb6ed1033fefaabd5785b9a974ed225c90dc72fff460259e66b95b73648596dbcc50d51ed69cdf464af2d237d3149b2
4257-
languageName: node
4258-
linkType: hard
4259-
42604188
"mimic-fn@npm:^2.1.0":
42614189
version: 2.1.0
42624190
resolution: "mimic-fn@npm:2.1.0"
@@ -4849,13 +4777,6 @@ __metadata:
48494777
languageName: node
48504778
linkType: hard
48514779

4852-
"proxy-from-env@npm:^1.1.0":
4853-
version: 1.1.0
4854-
resolution: "proxy-from-env@npm:1.1.0"
4855-
checksum: 10c0/fe7dd8b1bdbbbea18d1459107729c3e4a2243ca870d26d34c2c1bcd3e4425b7bcc5112362df2d93cc7fb9746f6142b5e272fd1cc5c86ddf8580175186f6ad42b
4856-
languageName: node
4857-
linkType: hard
4858-
48594780
"punycode.js@npm:^2.3.1":
48604781
version: 2.3.1
48614782
resolution: "punycode.js@npm:2.3.1"
@@ -6102,7 +6023,6 @@ __metadata:
61026023
"@types/react": "npm:^19.0.8"
61036024
"@types/react-dom": "npm:^19.0.3"
61046025
"@vitejs/plugin-react": "npm:^4.3.4"
6105-
axios: "npm:^1.8.1"
61066026
eslint: "npm:^9.19.0"
61076027
eslint-plugin-react-hooks: "npm:^5.0.0"
61086028
eslint-plugin-react-refresh: "npm:^0.4.18"

0 commit comments

Comments
 (0)
Please sign in to comment.