Skip to content

Commit 82ee296

Browse files
committed
Make the frontend aware of the new plugin API endpoints.
1 parent 1ea5f18 commit 82ee296

File tree

3 files changed

+245
-0
lines changed

3 files changed

+245
-0
lines changed

src/api/apiComponents.ts

Lines changed: 207 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1223,6 +1223,188 @@ export const useGetUserById = <TData = Schemas.OktaUser>(
12231223
});
12241224
};
12251225

1226+
/**
1227+
* Plugin API types and hooks
1228+
*/
1229+
1230+
export type PluginsError = Fetcher.ErrorWrapper<{
1231+
status: ClientErrorStatus | ServerErrorStatus;
1232+
payload: string;
1233+
}>;
1234+
1235+
export type GetPluginsVariables = ApiContext['fetcherOptions'];
1236+
1237+
export type GetPluginInfoPathParams = {
1238+
pluginId: string;
1239+
};
1240+
1241+
export type GetPluginInfoVariables = {
1242+
pathParams: GetPluginInfoPathParams;
1243+
} & ApiContext['fetcherOptions'];
1244+
1245+
export const fetchGetAppGroupLifecyclePlugins = (variables: GetPluginsVariables, signal?: AbortSignal) =>
1246+
apiFetch<Schemas.AppGroupLifecyclePluginMetadata[], PluginsError, undefined, {}, {}, {}>({
1247+
url: '/api/plugins/app-group-lifecycle',
1248+
method: 'get',
1249+
...variables,
1250+
signal,
1251+
});
1252+
1253+
export const useGetAppGroupLifecyclePlugins = <TData = Schemas.AppGroupLifecyclePluginMetadata[]>(
1254+
options?: Omit<
1255+
reactQuery.UseQueryOptions<Schemas.AppGroupLifecyclePluginMetadata[], PluginsError, TData>,
1256+
'queryKey' | 'queryFn'
1257+
>,
1258+
) => {
1259+
const {fetcherOptions, queryOptions, queryKeyFn} = useApiContext(options);
1260+
return reactQuery.useQuery<Schemas.AppGroupLifecyclePluginMetadata[], PluginsError, TData>({
1261+
queryKey: queryKeyFn({
1262+
path: '/api/plugins/app-group-lifecycle',
1263+
operationId: 'getAppGroupLifecyclePlugins',
1264+
variables: {},
1265+
}),
1266+
queryFn: ({signal}) => fetchGetAppGroupLifecyclePlugins({...fetcherOptions}, signal),
1267+
...options,
1268+
...queryOptions,
1269+
});
1270+
};
1271+
1272+
export const fetchGetAppGroupLifecyclePluginAppConfigProperties = (
1273+
variables: GetPluginInfoVariables,
1274+
signal?: AbortSignal,
1275+
) =>
1276+
apiFetch<Schemas.AppGroupLifecyclePluginConfigProperties, PluginsError, undefined, {}, {}, GetPluginInfoPathParams>({
1277+
url: '/api/plugins/app-group-lifecycle/{pluginId}/app-config-props',
1278+
method: 'get',
1279+
...variables,
1280+
signal,
1281+
});
1282+
1283+
export const useGetAppGroupLifecyclePluginAppConfigProperties = <
1284+
TData = Schemas.AppGroupLifecyclePluginConfigProperties,
1285+
>(
1286+
variables: GetPluginInfoVariables,
1287+
options?: Omit<
1288+
reactQuery.UseQueryOptions<Schemas.AppGroupLifecyclePluginConfigProperties, PluginsError, TData>,
1289+
'queryKey' | 'queryFn'
1290+
>,
1291+
) => {
1292+
const {fetcherOptions, queryOptions, queryKeyFn} = useApiContext(options);
1293+
return reactQuery.useQuery<Schemas.AppGroupLifecyclePluginConfigProperties, PluginsError, TData>({
1294+
queryKey: queryKeyFn({
1295+
path: '/api/plugins/app-group-lifecycle/{pluginId}/app-config-props',
1296+
operationId: 'getAppGroupLifecyclePluginAppConfigProperties',
1297+
variables,
1298+
}),
1299+
queryFn: ({signal}) =>
1300+
fetchGetAppGroupLifecyclePluginAppConfigProperties({...fetcherOptions, ...variables}, signal),
1301+
...options,
1302+
...queryOptions,
1303+
});
1304+
};
1305+
1306+
export const fetchGetAppGroupLifecyclePluginGroupConfigProperties = (
1307+
variables: GetPluginInfoVariables,
1308+
signal?: AbortSignal,
1309+
) =>
1310+
apiFetch<Schemas.AppGroupLifecyclePluginConfigProperties, PluginsError, undefined, {}, {}, GetPluginInfoPathParams>({
1311+
url: '/api/plugins/app-group-lifecycle/{pluginId}/group-config-props',
1312+
method: 'get',
1313+
...variables,
1314+
signal,
1315+
});
1316+
1317+
export const useGetAppGroupLifecyclePluginGroupConfigProperties = <
1318+
TData = Schemas.AppGroupLifecyclePluginConfigProperties,
1319+
>(
1320+
variables: GetPluginInfoVariables,
1321+
options?: Omit<
1322+
reactQuery.UseQueryOptions<Schemas.AppGroupLifecyclePluginConfigProperties, PluginsError, TData>,
1323+
'queryKey' | 'queryFn'
1324+
>,
1325+
) => {
1326+
const {fetcherOptions, queryOptions, queryKeyFn} = useApiContext(options);
1327+
return reactQuery.useQuery<Schemas.AppGroupLifecyclePluginConfigProperties, PluginsError, TData>({
1328+
queryKey: queryKeyFn({
1329+
path: '/api/plugins/app-group-lifecycle/{pluginId}/group-config-props',
1330+
operationId: 'getAppGroupLifecyclePluginGroupConfigProperties',
1331+
variables,
1332+
}),
1333+
queryFn: ({signal}) =>
1334+
fetchGetAppGroupLifecyclePluginGroupConfigProperties({...fetcherOptions, ...variables}, signal),
1335+
...options,
1336+
...queryOptions,
1337+
});
1338+
};
1339+
1340+
export const fetchGetAppGroupLifecyclePluginAppStatusProperties = (
1341+
variables: GetPluginInfoVariables,
1342+
signal?: AbortSignal,
1343+
) =>
1344+
apiFetch<Schemas.AppGroupLifecyclePluginStatusProperties, PluginsError, undefined, {}, {}, GetPluginInfoPathParams>({
1345+
url: '/api/plugins/app-group-lifecycle/{pluginId}/app-status-props',
1346+
method: 'get',
1347+
...variables,
1348+
signal,
1349+
});
1350+
1351+
export const useGetAppGroupLifecyclePluginAppStatusProperties = <
1352+
TData = Schemas.AppGroupLifecyclePluginStatusProperties,
1353+
>(
1354+
variables: GetPluginInfoVariables,
1355+
options?: Omit<
1356+
reactQuery.UseQueryOptions<Schemas.AppGroupLifecyclePluginStatusProperties, PluginsError, TData>,
1357+
'queryKey' | 'queryFn'
1358+
>,
1359+
) => {
1360+
const {fetcherOptions, queryOptions, queryKeyFn} = useApiContext(options);
1361+
return reactQuery.useQuery<Schemas.AppGroupLifecyclePluginStatusProperties, PluginsError, TData>({
1362+
queryKey: queryKeyFn({
1363+
path: '/api/plugins/app-group-lifecycle/{pluginId}/app-status-props',
1364+
operationId: 'getAppGroupLifecyclePluginAppStatusProperties',
1365+
variables,
1366+
}),
1367+
queryFn: ({signal}) =>
1368+
fetchGetAppGroupLifecyclePluginAppStatusProperties({...fetcherOptions, ...variables}, signal),
1369+
...options,
1370+
...queryOptions,
1371+
});
1372+
};
1373+
1374+
export const fetchGetAppGroupLifecyclePluginGroupStatusProperties = (
1375+
variables: GetPluginInfoVariables,
1376+
signal?: AbortSignal,
1377+
) =>
1378+
apiFetch<Schemas.AppGroupLifecyclePluginStatusProperties, PluginsError, undefined, {}, {}, GetPluginInfoPathParams>({
1379+
url: '/api/plugins/app-group-lifecycle/{pluginId}/group-status-props',
1380+
method: 'get',
1381+
...variables,
1382+
signal,
1383+
});
1384+
1385+
export const useGetAppGroupLifecyclePluginGroupStatusProperties = <
1386+
TData = Schemas.AppGroupLifecyclePluginStatusProperties,
1387+
>(
1388+
variables: GetPluginInfoVariables,
1389+
options?: Omit<
1390+
reactQuery.UseQueryOptions<Schemas.AppGroupLifecyclePluginStatusProperties, PluginsError, TData>,
1391+
'queryKey' | 'queryFn'
1392+
>,
1393+
) => {
1394+
const {fetcherOptions, queryOptions, queryKeyFn} = useApiContext(options);
1395+
return reactQuery.useQuery<Schemas.AppGroupLifecyclePluginStatusProperties, PluginsError, TData>({
1396+
queryKey: queryKeyFn({
1397+
path: '/api/plugins/app-group-lifecycle/{pluginId}/group-status-props',
1398+
operationId: 'getAppGroupLifecyclePluginGroupStatusProperties',
1399+
variables,
1400+
}),
1401+
queryFn: ({signal}) =>
1402+
fetchGetAppGroupLifecyclePluginGroupStatusProperties({...fetcherOptions, ...variables}, signal),
1403+
...options,
1404+
...queryOptions,
1405+
});
1406+
};
1407+
12261408
export type QueryOperation =
12271409
| {
12281410
path: '/api/apps';
@@ -1313,4 +1495,29 @@ export type QueryOperation =
13131495
path: '/api/users/{userId}';
13141496
operationId: 'getUserById';
13151497
variables: GetUserByIdVariables;
1498+
}
1499+
| {
1500+
path: '/api/plugins/app-group-lifecycle';
1501+
operationId: 'getAppGroupLifecyclePlugins';
1502+
variables: GetPluginsVariables;
1503+
}
1504+
| {
1505+
path: '/api/plugins/app-group-lifecycle/{pluginId}/app-config-props';
1506+
operationId: 'getAppGroupLifecyclePluginAppConfigProperties';
1507+
variables: GetPluginInfoVariables;
1508+
}
1509+
| {
1510+
path: '/api/plugins/app-group-lifecycle/{pluginId}/group-config-props';
1511+
operationId: 'getAppGroupLifecyclePluginGroupConfigProperties';
1512+
variables: GetPluginInfoVariables;
1513+
}
1514+
| {
1515+
path: '/api/plugins/app-group-lifecycle/{pluginId}/app-status-props';
1516+
operationId: 'getAppGroupLifecyclePluginAppStatusProperties';
1517+
variables: GetPluginInfoVariables;
1518+
}
1519+
| {
1520+
path: '/api/plugins/app-group-lifecycle/{pluginId}/group-status-props';
1521+
operationId: 'getAppGroupLifecyclePluginGroupStatusProperties';
1522+
variables: GetPluginInfoVariables;
13161523
};

src/api/apiSchemas.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -612,3 +612,32 @@ export type UserPagination = {
612612
results?: OktaUser[];
613613
total?: number;
614614
};
615+
616+
export type AppGroupLifecyclePluginMetadata = {
617+
id: string;
618+
display_name: string;
619+
description: string;
620+
};
621+
622+
export type AppGroupLifecyclePluginConfigProperty = {
623+
display_name: string;
624+
help_text?: string;
625+
type: 'text' | 'number' | 'boolean';
626+
default_value?: any;
627+
required?: boolean;
628+
validation?: Record<string, any>;
629+
};
630+
631+
export type AppGroupLifecyclePluginStatusProperty = {
632+
display_name: string;
633+
help_text?: string;
634+
type: 'text' | 'number' | 'date' | 'boolean';
635+
};
636+
637+
export type AppGroupLifecyclePluginConfigProperties = {
638+
[propertyId: string]: AppGroupLifecyclePluginConfigProperty;
639+
};
640+
641+
export type AppGroupLifecyclePluginStatusProperties = {
642+
[propertyId: string]: AppGroupLifecyclePluginStatusProperty;
643+
};

src/index.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,15 @@ const queryClient = new QueryClient({
2121
},
2222
});
2323

24+
// Cache plugin metadata indefinitely since it doesn't change while the app is running
25+
queryClient.setQueryDefaults(['api', 'plugins'], {
26+
staleTime: Infinity,
27+
cacheTime: Infinity,
28+
refetchOnMount: false,
29+
refetchOnWindowFocus: false,
30+
refetchOnReconnect: false,
31+
});
32+
2433
if (['production', 'staging'].includes(import.meta.env.MODE)) {
2534
// Use a placeholder DSN as we'll be using the tunnel to proxy all Sentry React errors
2635
Sentry.init({

0 commit comments

Comments
 (0)