@kuadrant/kuadrant-backstage-plugin-frontend 0.0.2-dev-d9a9178 → 0.0.2-dev-cd184fc

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/dist/components/ApiAccessCard/ApiAccessCard.esm.js +9 -1
  2. package/dist/components/ApiAccessCard/ApiAccessCard.esm.js.map +1 -1
  3. package/dist/components/ApiKeyDetailPage/ApiKeyDetailPage.esm.js +2 -1
  4. package/dist/components/ApiKeyDetailPage/ApiKeyDetailPage.esm.js.map +1 -1
  5. package/dist/components/ApiKeyManagementTab/ApiKeyManagementTab.esm.js +7 -3
  6. package/dist/components/ApiKeyManagementTab/ApiKeyManagementTab.esm.js.map +1 -1
  7. package/dist/components/ApiProductDetailPage/ApiProductDetailPage.esm.js +15 -5
  8. package/dist/components/ApiProductDetailPage/ApiProductDetailPage.esm.js.map +1 -1
  9. package/dist/components/ApprovalQueueTable/ApprovalQueueTable.esm.js +132 -10
  10. package/dist/components/ApprovalQueueTable/ApprovalQueueTable.esm.js.map +1 -1
  11. package/dist/components/EditAPIKeyDialog/EditAPIKeyDialog.esm.js +3 -4
  12. package/dist/components/EditAPIKeyDialog/EditAPIKeyDialog.esm.js.map +1 -1
  13. package/dist/components/EntityApiApprovalTab/EntityApiApprovalTab.esm.js +7 -3
  14. package/dist/components/EntityApiApprovalTab/EntityApiApprovalTab.esm.js.map +1 -1
  15. package/dist/components/KuadrantPage/{KuadrantPage.esm.js → ApiProductsPage.esm.js} +32 -22
  16. package/dist/components/KuadrantPage/ApiProductsPage.esm.js.map +1 -0
  17. package/dist/components/KuadrantPage/index.esm.js +1 -1
  18. package/dist/components/MyApiKeysTable/MyApiKeysTable.esm.js +11 -2
  19. package/dist/components/MyApiKeysTable/MyApiKeysTable.esm.js.map +1 -1
  20. package/dist/components/RequestAccessDialog/RequestAccessDialog.esm.js +3 -4
  21. package/dist/components/RequestAccessDialog/RequestAccessDialog.esm.js.map +1 -1
  22. package/dist/plugin.esm.js +1 -1
  23. package/dist/plugin.esm.js.map +1 -1
  24. package/dist-scalprum/{internal.plugin-kuadrant.e195d879e62f0e73cc2f.js → internal.plugin-kuadrant.c830fc2d56f9e96a055e.js} +2 -2
  25. package/dist-scalprum/{internal.plugin-kuadrant.e195d879e62f0e73cc2f.js.map → internal.plugin-kuadrant.c830fc2d56f9e96a055e.js.map} +1 -1
  26. package/dist-scalprum/plugin-manifest.json +2 -2
  27. package/dist-scalprum/static/2821.972ae33b.chunk.js +2 -0
  28. package/dist-scalprum/static/2821.972ae33b.chunk.js.map +1 -0
  29. package/dist-scalprum/static/{2967.6a1db3ad.chunk.js → 2967.65c51af8.chunk.js} +2 -2
  30. package/dist-scalprum/static/2967.65c51af8.chunk.js.map +1 -0
  31. package/dist-scalprum/static/3650.ee76eba9.chunk.js +2 -0
  32. package/dist-scalprum/static/3650.ee76eba9.chunk.js.map +1 -0
  33. package/dist-scalprum/static/4682.75f17114.chunk.js +2 -0
  34. package/dist-scalprum/static/4682.75f17114.chunk.js.map +1 -0
  35. package/dist-scalprum/static/5203.b654e8e0.chunk.js +2 -0
  36. package/dist-scalprum/static/5203.b654e8e0.chunk.js.map +1 -0
  37. package/dist-scalprum/static/6800.20f46859.chunk.js +2 -0
  38. package/dist-scalprum/static/6800.20f46859.chunk.js.map +1 -0
  39. package/dist-scalprum/static/6840.1653e6b0.chunk.js +2 -0
  40. package/dist-scalprum/static/6840.1653e6b0.chunk.js.map +1 -0
  41. package/dist-scalprum/static/7791.ac1ac509.chunk.js +2 -0
  42. package/dist-scalprum/static/7791.ac1ac509.chunk.js.map +1 -0
  43. package/dist-scalprum/static/exposed-PluginRoot.55777e36.chunk.js +2 -0
  44. package/dist-scalprum/static/exposed-PluginRoot.55777e36.chunk.js.map +1 -0
  45. package/package.json +1 -1
  46. package/dist/components/KuadrantPage/KuadrantPage.esm.js.map +0 -1
  47. package/dist-scalprum/static/2967.6a1db3ad.chunk.js.map +0 -1
  48. package/dist-scalprum/static/3459.ac9b9e54.chunk.js +0 -2
  49. package/dist-scalprum/static/3459.ac9b9e54.chunk.js.map +0 -1
  50. package/dist-scalprum/static/3650.4f0dc550.chunk.js +0 -2
  51. package/dist-scalprum/static/3650.4f0dc550.chunk.js.map +0 -1
  52. package/dist-scalprum/static/4682.bd2dfccd.chunk.js +0 -2
  53. package/dist-scalprum/static/4682.bd2dfccd.chunk.js.map +0 -1
  54. package/dist-scalprum/static/5203.539ed3ec.chunk.js +0 -2
  55. package/dist-scalprum/static/5203.539ed3ec.chunk.js.map +0 -1
  56. package/dist-scalprum/static/6800.6e2a08fe.chunk.js +0 -2
  57. package/dist-scalprum/static/6800.6e2a08fe.chunk.js.map +0 -1
  58. package/dist-scalprum/static/6840.3bd67cf4.chunk.js +0 -2
  59. package/dist-scalprum/static/6840.3bd67cf4.chunk.js.map +0 -1
  60. package/dist-scalprum/static/7791.8135d440.chunk.js +0 -2
  61. package/dist-scalprum/static/7791.8135d440.chunk.js.map +0 -1
  62. package/dist-scalprum/static/exposed-PluginRoot.c3fd0cc1.chunk.js +0 -2
  63. package/dist-scalprum/static/exposed-PluginRoot.c3fd0cc1.chunk.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"MyApiKeysTable.esm.js","sources":["../../../src/components/MyApiKeysTable/MyApiKeysTable.tsx"],"sourcesContent":["import React, { useState, useMemo } from \"react\";\nimport { useNavigate } from \"react-router-dom\";\nimport {\n Table,\n TableColumn,\n Link,\n Progress,\n ResponseErrorPanel,\n} from \"@backstage/core-components\";\nimport {\n useApi,\n configApiRef,\n fetchApiRef,\n alertApiRef,\n} from \"@backstage/core-plugin-api\";\nimport useAsync from \"react-use/lib/useAsync\";\nimport {\n Box,\n Chip,\n Typography,\n IconButton,\n Tooltip,\n Menu,\n MenuItem,\n CircularProgress,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Button,\n makeStyles,\n} from \"@material-ui/core\";\nimport VisibilityIcon from \"@material-ui/icons/Visibility\";\nimport VisibilityOffIcon from \"@material-ui/icons/VisibilityOff\";\nimport FileCopyIcon from \"@material-ui/icons/FileCopy\";\nimport WarningIcon from \"@material-ui/icons/Warning\";\nimport DeleteIcon from \"@material-ui/icons/Delete\";\nimport { EditAPIKeyDialog } from \"../EditAPIKeyDialog\";\nimport { ConfirmDeleteDialog } from \"../ConfirmDeleteDialog\";\nimport { FilterPanel, FilterSection, FilterState } from \"../FilterPanel\";\nimport { APIKey, APIProduct } from \"../../types/api-management\";\nimport { getStatusChipStyle } from \"../../utils/styles\";\n\nconst useStyles = makeStyles((theme) => ({\n container: {\n display: \"flex\",\n height: \"100%\",\n minHeight: 400,\n },\n tableContainer: {\n flex: 1,\n overflow: \"auto\",\n padding: 10,\n },\n useCasePanel: {\n padding: theme.spacing(2),\n backgroundColor: theme.palette.background.default,\n },\n useCaseLabel: {\n fontWeight: 600,\n marginBottom: theme.spacing(1),\n color: theme.palette.text.secondary,\n textTransform: \"uppercase\",\n fontSize: \"0.75rem\",\n },\n rejectedBanner: {\n backgroundColor: theme.palette.error.light,\n border: `1px solid ${theme.palette.error.main}`,\n borderRadius: theme.shape.borderRadius,\n padding: theme.spacing(1.5, 2),\n marginBottom: theme.spacing(2),\n display: \"flex\",\n alignItems: \"center\",\n gap: theme.spacing(1),\n },\n}));\n\ninterface ExpandedRowProps {\n request: APIKey;\n}\n\nconst ExpandedRowContent = ({ request }: ExpandedRowProps) => {\n const classes = useStyles();\n const isRejected = request.status?.phase === \"Rejected\";\n const apiProductName = request.spec.apiProductRef?.name || \"unknown\";\n\n return (\n <Box className={classes.useCasePanel} onClick={(e) => e.stopPropagation()}>\n {isRejected && (\n <Box className={classes.rejectedBanner}>\n <WarningIcon color=\"error\" fontSize=\"small\" />\n <Typography variant=\"body2\">\n This API key was rejected.{\" \"}\n <Link to={`/catalog/default/api/${apiProductName}/api-keys`}>\n Request a new API key\n </Link>\n </Typography>\n </Box>\n )}\n <Typography className={classes.useCaseLabel}>Use Case</Typography>\n <Typography variant=\"body2\">\n {request.spec.useCase || \"No use case provided\"}\n </Typography>\n </Box>\n );\n};\n\nexport const MyApiKeysTable = () => {\n const classes = useStyles();\n const navigate = useNavigate();\n const config = useApi(configApiRef);\n const fetchApi = useApi(fetchApiRef);\n const alertApi = useApi(alertApiRef);\n const backendUrl = config.getString(\"backend.baseUrl\");\n\n const [visibleKeys, setVisibleKeys] = useState<Set<string>>(new Set());\n const [menuAnchor, setMenuAnchor] = useState<{\n top: number;\n left: number;\n } | null>(null);\n const [menuRequest, setMenuRequest] = useState<APIKey | null>(null);\n const [editDialogState, setEditDialogState] = useState<{\n open: boolean;\n request: APIKey | null;\n plans: any[];\n }>({ open: false, request: null, plans: [] });\n const [refresh, setRefresh] = useState(0);\n const [deleting, setDeleting] = useState<string | null>(null);\n const [deleteDialogState, setDeleteDialogState] = useState<{\n open: boolean;\n request: APIKey | null;\n }>({ open: false, request: null });\n const [apiKeyValues, setApiKeyValues] = useState<Map<string, string>>(\n new Map(),\n );\n const [apiKeyLoading, setApiKeyLoading] = useState<Set<string>>(new Set());\n const [alreadyReadKeys, setAlreadyReadKeys] = useState<Set<string>>(\n new Set(),\n );\n const [showOnceWarningOpen, setShowOnceWarningOpen] = useState(false);\n const [pendingKeyReveal, setPendingKeyReveal] = useState<{\n namespace: string;\n name: string;\n } | null>(null);\n const [optimisticallyDeleted, setOptimisticallyDeleted] = useState<\n Set<string>\n >(new Set());\n\n const [filters, setFilters] = useState<FilterState>({\n status: [],\n apiProduct: [],\n tier: [],\n });\n\n const {\n value: data,\n loading,\n error,\n } = useAsync(async () => {\n const [requestsResponse, productsResponse] = await Promise.all([\n fetchApi.fetch(`${backendUrl}/api/kuadrant/requests/my`),\n fetchApi.fetch(`${backendUrl}/api/kuadrant/apiproducts`),\n ]);\n\n if (!requestsResponse.ok) {\n throw new Error(\"failed to fetch requests\");\n }\n\n const requestsData = await requestsResponse.json();\n const requests: APIKey[] = requestsData.items || [];\n\n let products: APIProduct[] = [];\n if (productsResponse.ok) {\n const productsData = await productsResponse.json();\n products = productsData.items || [];\n }\n\n // build owner map from products\n const ownerMap = new Map<string, string>();\n products.forEach((p) => {\n const key = `${p.metadata.namespace}/${p.metadata.name}`;\n const owner = p.metadata.annotations?.[\"backstage.io/owner\"] || \"unknown\";\n ownerMap.set(key, owner);\n });\n\n return { requests, products, ownerMap };\n }, [backendUrl, fetchApi, refresh]);\n\n const allRequests = useMemo(() => {\n if (!data?.requests) return [];\n return data.requests.filter(\n (r: APIKey) => !optimisticallyDeleted.has(r.metadata.name),\n );\n }, [data?.requests, optimisticallyDeleted]);\n\n // filter options from data\n const filterSections: FilterSection[] = useMemo(() => {\n const statusCounts = { Approved: 0, Pending: 0, Rejected: 0 };\n const apiProductCounts = new Map<string, number>();\n const tierCounts = new Map<string, number>();\n\n allRequests.forEach((r: APIKey) => {\n const status = r.status?.phase || \"Pending\";\n statusCounts[status as keyof typeof statusCounts]++;\n\n const apiProduct = r.spec.apiProductRef?.name || \"unknown\";\n apiProductCounts.set(\n apiProduct,\n (apiProductCounts.get(apiProduct) || 0) + 1,\n );\n\n const tier = r.spec.planTier || \"unknown\";\n tierCounts.set(tier, (tierCounts.get(tier) || 0) + 1);\n });\n\n return [\n {\n id: \"status\",\n title: \"Status\",\n options: [\n { value: \"Approved\", label: \"Active\", count: statusCounts.Approved },\n { value: \"Pending\", label: \"Pending\", count: statusCounts.Pending },\n {\n value: \"Rejected\",\n label: \"Rejected\",\n count: statusCounts.Rejected,\n },\n ],\n },\n {\n id: \"apiProduct\",\n title: \"API Product\",\n options: Array.from(apiProductCounts.entries()).map(\n ([name, count]) => ({\n value: name,\n label: name,\n count,\n }),\n ),\n collapsed: apiProductCounts.size > 5,\n },\n {\n id: \"tier\",\n title: \"Tier\",\n options: Array.from(tierCounts.entries()).map(([tier, count]) => ({\n value: tier,\n label: tier.charAt(0).toUpperCase() + tier.slice(1),\n count,\n })),\n },\n ];\n }, [allRequests]);\n\n // filtered requests\n const filteredRequests = useMemo(() => {\n return allRequests.filter((r: APIKey) => {\n // status filter\n if (filters.status.length > 0) {\n const status = r.status?.phase || \"Pending\";\n if (!filters.status.includes(status)) return false;\n }\n\n // api product filter\n if (filters.apiProduct.length > 0) {\n const apiProduct = r.spec.apiProductRef?.name || \"unknown\";\n if (!filters.apiProduct.includes(apiProduct)) return false;\n }\n\n // tier filter\n if (filters.tier.length > 0) {\n const tier = r.spec.planTier || \"unknown\";\n if (!filters.tier.includes(tier)) return false;\n }\n\n return true;\n });\n }, [allRequests, filters]);\n\n const toggleKeyVisibility = (keyName: string) => {\n setVisibleKeys((prev) => {\n const newSet = new Set(prev);\n if (newSet.has(keyName)) {\n newSet.delete(keyName);\n } else {\n newSet.add(keyName);\n }\n return newSet;\n });\n };\n\n const fetchApiKeyFromSecret = async (\n requestNamespace: string,\n requestName: string,\n ) => {\n const key = `${requestNamespace}/${requestName}`;\n if (apiKeyLoading.has(key)) return;\n\n setApiKeyLoading((prev) => new Set(prev).add(key));\n try {\n const response = await fetchApi.fetch(\n `${backendUrl}/api/kuadrant/apikeys/${requestNamespace}/${requestName}/secret`,\n );\n if (response.ok) {\n const result = await response.json();\n setApiKeyValues((prev) => new Map(prev).set(key, result.apiKey));\n setAlreadyReadKeys((prev) => new Set(prev).add(key));\n } else if (response.status === 403) {\n setAlreadyReadKeys((prev) => new Set(prev).add(key));\n alertApi.post({\n message:\n \"This API key has already been viewed and cannot be retrieved again.\",\n severity: \"warning\",\n display: \"transient\",\n });\n }\n } catch (err) {\n const errorMessage =\n err instanceof Error ? err.message : \"unknown error occurred\";\n alertApi.post({\n message: `Failed to fetch api key: ${errorMessage}`,\n severity: \"error\",\n display: \"transient\",\n });\n } finally {\n setApiKeyLoading((prev) => {\n const next = new Set(prev);\n next.delete(key);\n return next;\n });\n }\n };\n\n const clearApiKeyValue = (requestNamespace: string, requestName: string) => {\n const key = `${requestNamespace}/${requestName}`;\n setApiKeyValues((prev) => {\n const next = new Map(prev);\n next.delete(key);\n return next;\n });\n };\n\n const handleMenuClose = () => {\n setMenuAnchor(null);\n setMenuRequest(null);\n };\n\n const handleEdit = async () => {\n if (!menuRequest) return;\n\n const request = menuRequest;\n handleMenuClose();\n\n try {\n const apiProductName = request.spec.apiProductRef?.name;\n const apiProductNamespace = request.metadata.namespace;\n const apiProductResponse = await fetchApi.fetch(\n `${backendUrl}/api/kuadrant/apiproducts/${apiProductNamespace}/${apiProductName}`,\n );\n\n if (apiProductResponse.ok) {\n const apiProduct = await apiProductResponse.json();\n const plans = apiProduct.spec?.plans || [];\n setEditDialogState({ open: true, request, plans });\n } else {\n setEditDialogState({ open: true, request, plans: [] });\n }\n } catch (err) {\n console.error(\"Error fetching plans:\", err);\n setEditDialogState({ open: true, request, plans: [] });\n }\n };\n\n const handleDeleteClick = () => {\n if (!menuRequest) return;\n const request = menuRequest;\n handleMenuClose();\n setDeleteDialogState({ open: true, request });\n };\n\n const handleDeleteConfirm = async () => {\n if (!deleteDialogState.request) return;\n\n const request = deleteDialogState.request;\n const requestName = request.metadata.name;\n\n setOptimisticallyDeleted((prev) => new Set(prev).add(requestName));\n setDeleting(requestName);\n\n try {\n const response = await fetchApi.fetch(\n `${backendUrl}/api/kuadrant/requests/${request.metadata.namespace}/${request.metadata.name}`,\n { method: \"DELETE\" },\n );\n\n if (!response.ok) {\n throw new Error(\"Failed to delete request\");\n }\n\n setRefresh((r) => r + 1);\n alertApi.post({\n message: \"API key deleted\",\n severity: \"success\",\n display: \"transient\",\n });\n setDeleteDialogState({ open: false, request: null });\n } catch (err) {\n console.error(\"Error deleting request:\", err);\n setOptimisticallyDeleted((prev) => {\n const next = new Set(prev);\n next.delete(requestName);\n return next;\n });\n alertApi.post({\n message: \"Failed to delete API key\",\n severity: \"error\",\n display: \"transient\",\n });\n } finally {\n setDeleting(null);\n }\n };\n\n const handleDeleteCancel = () => {\n setDeleteDialogState({ open: false, request: null });\n };\n\n const columns: TableColumn<APIKey>[] = [\n {\n title: \"API Product\",\n field: \"spec.apiProductRef.name\",\n render: (row: APIKey) => {\n const apiProductName = row.spec.apiProductRef?.name || \"unknown\";\n return (\n <Link to={`/catalog/default/api/${apiProductName}/api-keys`}>\n <strong>{apiProductName}</strong>\n </Link>\n );\n },\n },\n {\n title: \"Owner\",\n field: \"owner\",\n render: (row: APIKey) => {\n const key = `${row.metadata.namespace}/${row.spec.apiProductRef?.name}`;\n const owner = data?.ownerMap?.get(key) || \"unknown\";\n // strip 'user:default/' prefix if present\n const displayOwner = owner.replace(/^user:default\\//, \"\");\n return <Typography variant=\"body2\">{displayOwner}</Typography>;\n },\n },\n {\n title: \"Status\",\n field: \"status.phase\",\n render: (row: APIKey) => {\n const phase = row.status?.phase || \"Pending\";\n const label = phase === \"Approved\" ? \"Active\" : phase;\n return (\n <Chip label={label} size=\"small\" style={getStatusChipStyle(phase)} />\n );\n },\n },\n {\n title: \"Tier\",\n field: \"spec.planTier\",\n render: (row: APIKey) => (\n <Chip label={row.spec.planTier} size=\"small\" variant=\"outlined\" />\n ),\n },\n {\n title: \"API Key\",\n field: \"status.secretRef\",\n filtering: false,\n render: (row: APIKey) => {\n if (row.status?.phase !== \"Approved\") {\n return (\n <Typography variant=\"body2\" color=\"textSecondary\">\n -\n </Typography>\n );\n }\n\n const key = `${row.metadata.namespace}/${row.metadata.name}`;\n const hasSecretRef = row.status?.secretRef?.name;\n const isVisible = visibleKeys.has(row.metadata.name);\n const isLoading = apiKeyLoading.has(key);\n const apiKeyValue = apiKeyValues.get(key);\n const canReadSecret = row.status?.canReadSecret !== false;\n const isAlreadyRead = alreadyReadKeys.has(key) || !canReadSecret;\n\n if (!hasSecretRef) {\n return (\n <Typography variant=\"body2\" color=\"textSecondary\">\n Awaiting secret...\n </Typography>\n );\n }\n\n if (isAlreadyRead && !apiKeyValue) {\n return (\n <Tooltip title=\"This API key has already been viewed and cannot be retrieved again\">\n <Box display=\"flex\" alignItems=\"center\">\n <Typography\n variant=\"body2\"\n color=\"textSecondary\"\n style={{ fontFamily: \"monospace\", marginRight: 8 }}\n >\n Already viewed\n </Typography>\n <VisibilityOffIcon fontSize=\"small\" color=\"disabled\" />\n </Box>\n </Tooltip>\n );\n }\n\n const handleRevealClick = () => {\n if (isVisible) {\n clearApiKeyValue(row.metadata.namespace, row.metadata.name);\n toggleKeyVisibility(row.metadata.name);\n } else if (!isAlreadyRead) {\n setPendingKeyReveal({\n namespace: row.metadata.namespace,\n name: row.metadata.name,\n });\n setShowOnceWarningOpen(true);\n }\n };\n\n const handleCopy = async () => {\n if (apiKeyValue) {\n await navigator.clipboard.writeText(apiKeyValue);\n alertApi.post({\n message: \"API key copied to clipboard\",\n severity: \"success\",\n display: \"transient\",\n });\n }\n };\n\n return (\n <Box display=\"flex\" alignItems=\"center\" style={{ gap: 8 }}>\n <Box fontFamily=\"monospace\" fontSize=\"0.875rem\">\n {isLoading\n ? \"Loading...\"\n : isVisible && apiKeyValue\n ? apiKeyValue\n : \"•\".repeat(20) + \"...\"}\n </Box>\n {isVisible && apiKeyValue && (\n <Tooltip title=\"Copy to clipboard\">\n <IconButton size=\"small\" onClick={handleCopy}>\n <FileCopyIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n )}\n <Tooltip\n title={\n isVisible ? \"Hide API key\" : \"Reveal API key (one-time only)\"\n }\n >\n <span>\n <IconButton\n size=\"small\"\n onClick={handleRevealClick}\n disabled={isLoading || (isAlreadyRead && !apiKeyValue)}\n >\n {isVisible ? (\n <VisibilityOffIcon fontSize=\"small\" />\n ) : (\n <VisibilityIcon fontSize=\"small\" />\n )}\n </IconButton>\n </span>\n </Tooltip>\n </Box>\n );\n },\n },\n {\n title: \"Requested\",\n field: \"metadata.creationTimestamp\",\n render: (row: APIKey) => {\n if (!row.metadata.creationTimestamp) {\n return <Typography variant=\"body2\">-</Typography>;\n }\n const date = new Date(row.metadata.creationTimestamp);\n return (\n <Typography variant=\"body2\">{date.toLocaleDateString()}</Typography>\n );\n },\n },\n {\n title: \"Actions\",\n filtering: false,\n width: \"100px\",\n render: (row: APIKey) => {\n const isDeleting = deleting === row.metadata.name;\n if (isDeleting) {\n return <CircularProgress size={20} />;\n }\n return (\n <Box display=\"flex\" style={{ gap: 4 }}>\n <Tooltip title=\"View details\">\n <IconButton\n size=\"small\"\n onClick={(e) => {\n e.stopPropagation();\n navigate(\n `/kuadrant/api-keys/${row.metadata.namespace}/${row.metadata.name}`,\n );\n }}\n >\n <VisibilityIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n <Tooltip title=\"Delete\">\n <IconButton\n size=\"small\"\n onClick={(e) => {\n e.stopPropagation();\n setDeleteDialogState({ open: true, request: row });\n }}\n >\n <DeleteIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n </Box>\n );\n },\n },\n ];\n\n const detailPanelConfig = useMemo(\n () => [\n {\n render: (data: any) => {\n const request = data.rowData as APIKey;\n if (!request?.metadata?.name) {\n return <Box />;\n }\n return <ExpandedRowContent request={request} />;\n },\n },\n ],\n [],\n );\n\n if (loading) {\n return <Progress />;\n }\n\n if (error) {\n return <ResponseErrorPanel error={error} />;\n }\n\n const isPending = (row: APIKey) =>\n !row.status || row.status.phase === \"Pending\";\n\n return (\n <>\n <Box className={classes.container}>\n <FilterPanel\n sections={filterSections}\n filters={filters}\n onChange={setFilters}\n />\n <Box className={classes.tableContainer}>\n {filteredRequests.length === 0 ? (\n <Box p={4} textAlign=\"center\">\n <Typography variant=\"body1\" color=\"textSecondary\">\n {allRequests.length === 0\n ? \"No API keys found. Request access to an API to get started.\"\n : \"No API keys match the selected filters.\"}\n </Typography>\n </Box>\n ) : (\n <Table\n options={{\n paging: filteredRequests.length > 10,\n pageSize: 20,\n search: true,\n filtering: false,\n debounceInterval: 300,\n toolbar: true,\n emptyRowsWhenPaging: false,\n }}\n columns={columns}\n data={filteredRequests.map((item: APIKey) => ({\n ...item,\n id: item.metadata.name,\n }))}\n detailPanel={detailPanelConfig}\n />\n )}\n </Box>\n </Box>\n\n <Menu\n id=\"myapikeys-menu\"\n open={Boolean(menuAnchor)}\n onClose={handleMenuClose}\n anchorReference=\"anchorPosition\"\n anchorPosition={menuAnchor || { top: 0, left: 0 }}\n >\n {menuRequest &&\n (() => {\n const items = [];\n items.push(\n <MenuItem\n key=\"view\"\n onClick={() => {\n navigate(\n `/kuadrant/api-keys/${menuRequest.metadata.namespace}/${menuRequest.metadata.name}`,\n );\n handleMenuClose();\n }}\n >\n View Details\n </MenuItem>,\n );\n if (isPending(menuRequest)) {\n items.push(\n <MenuItem key=\"edit\" onClick={handleEdit}>\n Edit\n </MenuItem>,\n );\n }\n items.push(\n <MenuItem key=\"delete\" onClick={handleDeleteClick}>\n Delete\n </MenuItem>,\n );\n return items;\n })()}\n </Menu>\n\n {editDialogState.request && (\n <EditAPIKeyDialog\n open={editDialogState.open}\n request={editDialogState.request}\n availablePlans={editDialogState.plans}\n onClose={() =>\n setEditDialogState({ open: false, request: null, plans: [] })\n }\n onSuccess={() => {\n setEditDialogState({ open: false, request: null, plans: [] });\n setRefresh((r) => r + 1);\n }}\n />\n )}\n\n <ConfirmDeleteDialog\n open={deleteDialogState.open}\n title=\"Delete API Key\"\n description={`Are you sure you want to delete this API key for ${deleteDialogState.request?.spec.apiProductRef?.name || \"this API\"}?`}\n deleting={deleting !== null}\n onConfirm={handleDeleteConfirm}\n onCancel={handleDeleteCancel}\n />\n\n <Dialog\n open={showOnceWarningOpen}\n onClose={() => {\n setShowOnceWarningOpen(false);\n setPendingKeyReveal(null);\n }}\n maxWidth=\"sm\"\n >\n <DialogTitle>\n <Box display=\"flex\" alignItems=\"center\">\n <WarningIcon color=\"primary\" style={{ marginRight: 8 }} />\n View API Key\n </Box>\n </DialogTitle>\n <DialogContent>\n <Typography variant=\"body1\" paragraph>\n This API key can only be viewed <strong>once</strong>. After you\n reveal it, you will not be able to retrieve it again.\n </Typography>\n <Typography variant=\"body2\" color=\"textSecondary\">\n Make sure to copy and store it securely before closing this view.\n </Typography>\n </DialogContent>\n <DialogActions>\n <Button\n onClick={() => {\n setShowOnceWarningOpen(false);\n setPendingKeyReveal(null);\n }}\n >\n Cancel\n </Button>\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={() => {\n if (pendingKeyReveal) {\n fetchApiKeyFromSecret(\n pendingKeyReveal.namespace,\n pendingKeyReveal.name,\n );\n toggleKeyVisibility(pendingKeyReveal.name);\n }\n setShowOnceWarningOpen(false);\n setPendingKeyReveal(null);\n }}\n >\n Reveal API Key\n </Button>\n </DialogActions>\n </Dialog>\n </>\n );\n};\n"],"names":["data"],"mappings":"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"}
1
+ {"version":3,"file":"MyApiKeysTable.esm.js","sources":["../../../src/components/MyApiKeysTable/MyApiKeysTable.tsx"],"sourcesContent":["import React, { useState, useMemo } from \"react\";\nimport { useNavigate } from \"react-router-dom\";\nimport {\n Table,\n TableColumn,\n Link,\n Progress,\n ResponseErrorPanel,\n} from \"@backstage/core-components\";\nimport {\n useApi,\n configApiRef,\n fetchApiRef,\n alertApiRef,\n} from \"@backstage/core-plugin-api\";\nimport useAsync from \"react-use/lib/useAsync\";\nimport {\n Box,\n Chip,\n Typography,\n IconButton,\n Tooltip,\n Menu,\n MenuItem,\n CircularProgress,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Button,\n makeStyles,\n} from \"@material-ui/core\";\nimport VisibilityIcon from \"@material-ui/icons/Visibility\";\nimport VisibilityOffIcon from \"@material-ui/icons/VisibilityOff\";\nimport FileCopyIcon from \"@material-ui/icons/FileCopy\";\nimport WarningIcon from \"@material-ui/icons/Warning\";\nimport DeleteIcon from \"@material-ui/icons/Delete\";\nimport { EditAPIKeyDialog } from \"../EditAPIKeyDialog\";\nimport { ConfirmDeleteDialog } from \"../ConfirmDeleteDialog\";\nimport { FilterPanel, FilterSection, FilterState } from \"../FilterPanel\";\nimport { APIKey, APIProduct } from \"../../types/api-management\";\nimport { getStatusChipStyle } from \"../../utils/styles\";\nimport {handleFetchError} from \"../../utils/errors.ts\";\n\nconst useStyles = makeStyles((theme) => ({\n container: {\n display: \"flex\",\n height: \"100%\",\n minHeight: 400,\n },\n tableContainer: {\n flex: 1,\n overflow: \"auto\",\n padding: 10,\n },\n useCasePanel: {\n padding: theme.spacing(2),\n backgroundColor: theme.palette.background.default,\n },\n useCaseLabel: {\n fontWeight: 600,\n marginBottom: theme.spacing(1),\n color: theme.palette.text.secondary,\n textTransform: \"uppercase\",\n fontSize: \"0.75rem\",\n },\n rejectedBanner: {\n backgroundColor: theme.palette.error.light,\n border: `1px solid ${theme.palette.error.main}`,\n borderRadius: theme.shape.borderRadius,\n padding: theme.spacing(1.5, 2),\n marginBottom: theme.spacing(2),\n display: \"flex\",\n alignItems: \"center\",\n gap: theme.spacing(1),\n },\n}));\n\ninterface ExpandedRowProps {\n request: APIKey;\n}\n\nconst ExpandedRowContent = ({ request }: ExpandedRowProps) => {\n const classes = useStyles();\n const isRejected = request.status?.phase === \"Rejected\";\n const apiProductName = request.spec.apiProductRef?.name || \"unknown\";\n\n return (\n <Box className={classes.useCasePanel} onClick={(e) => e.stopPropagation()}>\n {isRejected && (\n <Box className={classes.rejectedBanner}>\n <WarningIcon color=\"error\" fontSize=\"small\" />\n <Typography variant=\"body2\">\n This API key was rejected.{\" \"}\n <Link to={`/catalog/default/api/${apiProductName}/api-keys`}>\n Request a new API key\n </Link>\n </Typography>\n </Box>\n )}\n <Typography className={classes.useCaseLabel}>Use Case</Typography>\n <Typography variant=\"body2\">\n {request.spec.useCase || \"No use case provided\"}\n </Typography>\n </Box>\n );\n};\n\nexport const MyApiKeysTable = () => {\n const classes = useStyles();\n const navigate = useNavigate();\n const config = useApi(configApiRef);\n const fetchApi = useApi(fetchApiRef);\n const alertApi = useApi(alertApiRef);\n const backendUrl = config.getString(\"backend.baseUrl\");\n\n const [visibleKeys, setVisibleKeys] = useState<Set<string>>(new Set());\n const [menuAnchor, setMenuAnchor] = useState<{\n top: number;\n left: number;\n } | null>(null);\n const [menuRequest, setMenuRequest] = useState<APIKey | null>(null);\n const [editDialogState, setEditDialogState] = useState<{\n open: boolean;\n request: APIKey | null;\n plans: any[];\n }>({ open: false, request: null, plans: [] });\n const [refresh, setRefresh] = useState(0);\n const [deleting, setDeleting] = useState<string | null>(null);\n const [deleteDialogState, setDeleteDialogState] = useState<{\n open: boolean;\n request: APIKey | null;\n }>({ open: false, request: null });\n const [apiKeyValues, setApiKeyValues] = useState<Map<string, string>>(\n new Map(),\n );\n const [apiKeyLoading, setApiKeyLoading] = useState<Set<string>>(new Set());\n const [alreadyReadKeys, setAlreadyReadKeys] = useState<Set<string>>(\n new Set(),\n );\n const [showOnceWarningOpen, setShowOnceWarningOpen] = useState(false);\n const [pendingKeyReveal, setPendingKeyReveal] = useState<{\n namespace: string;\n name: string;\n } | null>(null);\n const [optimisticallyDeleted, setOptimisticallyDeleted] = useState<\n Set<string>\n >(new Set());\n\n const [filters, setFilters] = useState<FilterState>({\n status: [],\n apiProduct: [],\n tier: [],\n });\n\n const {\n value: data,\n loading,\n error,\n } = useAsync(async () => {\n const [requestsResponse, productsResponse] = await Promise.all([\n fetchApi.fetch(`${backendUrl}/api/kuadrant/requests/my`),\n fetchApi.fetch(`${backendUrl}/api/kuadrant/apiproducts`),\n ]);\n\n if (!requestsResponse.ok) {\n throw new Error(\"failed to fetch requests\");\n }\n\n const requestsData = await requestsResponse.json();\n const requests: APIKey[] = requestsData.items || [];\n\n let products: APIProduct[] = [];\n if (productsResponse.ok) {\n const productsData = await productsResponse.json();\n products = productsData.items || [];\n }\n\n // build owner map from products\n const ownerMap = new Map<string, string>();\n products.forEach((p) => {\n const key = `${p.metadata.namespace}/${p.metadata.name}`;\n const owner = p.metadata.annotations?.[\"backstage.io/owner\"] || \"unknown\";\n ownerMap.set(key, owner);\n });\n\n return { requests, products, ownerMap };\n }, [backendUrl, fetchApi, refresh]);\n\n const allRequests = useMemo(() => {\n if (!data?.requests) return [];\n return data.requests.filter(\n (r: APIKey) => !optimisticallyDeleted.has(r.metadata.name),\n );\n }, [data?.requests, optimisticallyDeleted]);\n\n // filter options from data\n const filterSections: FilterSection[] = useMemo(() => {\n const statusCounts = { Approved: 0, Pending: 0, Rejected: 0 };\n const apiProductCounts = new Map<string, number>();\n const tierCounts = new Map<string, number>();\n\n allRequests.forEach((r: APIKey) => {\n const status = r.status?.phase || \"Pending\";\n statusCounts[status as keyof typeof statusCounts]++;\n\n const apiProduct = r.spec.apiProductRef?.name || \"unknown\";\n apiProductCounts.set(\n apiProduct,\n (apiProductCounts.get(apiProduct) || 0) + 1,\n );\n\n const tier = r.spec.planTier || \"unknown\";\n tierCounts.set(tier, (tierCounts.get(tier) || 0) + 1);\n });\n\n return [\n {\n id: \"status\",\n title: \"Status\",\n options: [\n { value: \"Approved\", label: \"Active\", count: statusCounts.Approved },\n { value: \"Pending\", label: \"Pending\", count: statusCounts.Pending },\n {\n value: \"Rejected\",\n label: \"Rejected\",\n count: statusCounts.Rejected,\n },\n ],\n },\n {\n id: \"apiProduct\",\n title: \"API Product\",\n options: Array.from(apiProductCounts.entries()).map(\n ([name, count]) => ({\n value: name,\n label: name,\n count,\n }),\n ),\n collapsed: apiProductCounts.size > 5,\n },\n {\n id: \"tier\",\n title: \"Tier\",\n options: Array.from(tierCounts.entries()).map(([tier, count]) => ({\n value: tier,\n label: tier.charAt(0).toUpperCase() + tier.slice(1),\n count,\n })),\n },\n ];\n }, [allRequests]);\n\n // filtered requests\n const filteredRequests = useMemo(() => {\n return allRequests.filter((r: APIKey) => {\n // status filter\n if (filters.status.length > 0) {\n const status = r.status?.phase || \"Pending\";\n if (!filters.status.includes(status)) return false;\n }\n\n // api product filter\n if (filters.apiProduct.length > 0) {\n const apiProduct = r.spec.apiProductRef?.name || \"unknown\";\n if (!filters.apiProduct.includes(apiProduct)) return false;\n }\n\n // tier filter\n if (filters.tier.length > 0) {\n const tier = r.spec.planTier || \"unknown\";\n if (!filters.tier.includes(tier)) return false;\n }\n\n return true;\n });\n }, [allRequests, filters]);\n\n const toggleKeyVisibility = (keyName: string) => {\n setVisibleKeys((prev) => {\n const newSet = new Set(prev);\n if (newSet.has(keyName)) {\n newSet.delete(keyName);\n } else {\n newSet.add(keyName);\n }\n return newSet;\n });\n };\n\n const fetchApiKeyFromSecret = async (\n requestNamespace: string,\n requestName: string,\n ) => {\n const key = `${requestNamespace}/${requestName}`;\n if (apiKeyLoading.has(key)) return;\n\n setApiKeyLoading((prev) => new Set(prev).add(key));\n try {\n const response = await fetchApi.fetch(\n `${backendUrl}/api/kuadrant/apikeys/${requestNamespace}/${requestName}/secret`,\n );\n if (response.ok) {\n const result = await response.json();\n setApiKeyValues((prev) => new Map(prev).set(key, result.apiKey));\n setAlreadyReadKeys((prev) => new Set(prev).add(key));\n } else if (response.status === 403) {\n setAlreadyReadKeys((prev) => new Set(prev).add(key));\n alertApi.post({\n message:\n \"This API key has already been viewed and cannot be retrieved again.\",\n severity: \"warning\",\n display: \"transient\",\n });\n }\n } catch (err) {\n const errorMessage =\n err instanceof Error ? err.message : \"unknown error occurred\";\n alertApi.post({\n message: `Failed to fetch api key: ${errorMessage}`,\n severity: \"error\",\n display: \"transient\",\n });\n } finally {\n setApiKeyLoading((prev) => {\n const next = new Set(prev);\n next.delete(key);\n return next;\n });\n }\n };\n\n const clearApiKeyValue = (requestNamespace: string, requestName: string) => {\n const key = `${requestNamespace}/${requestName}`;\n setApiKeyValues((prev) => {\n const next = new Map(prev);\n next.delete(key);\n return next;\n });\n };\n\n const handleMenuClose = () => {\n setMenuAnchor(null);\n setMenuRequest(null);\n };\n\n const handleEdit = async () => {\n if (!menuRequest) return;\n\n const request = menuRequest;\n handleMenuClose();\n\n try {\n const apiProductName = request.spec.apiProductRef?.name;\n const apiProductNamespace = request.metadata.namespace;\n const apiProductResponse = await fetchApi.fetch(\n `${backendUrl}/api/kuadrant/apiproducts/${apiProductNamespace}/${apiProductName}`,\n );\n\n if (apiProductResponse.ok) {\n const apiProduct = await apiProductResponse.json();\n const plans = apiProduct.spec?.plans || [];\n setEditDialogState({ open: true, request, plans });\n } else {\n setEditDialogState({ open: true, request, plans: [] });\n }\n } catch (err) {\n console.error(\"Error fetching plans:\", err);\n setEditDialogState({ open: true, request, plans: [] });\n const errorMessage = err instanceof Error ? err.message : \"unknown error occurred\";\n alertApi.post({\n message: `Failed to fetch Plans. ${errorMessage}`,\n severity: 'error',\n display: 'transient',\n });\n }\n };\n\n const handleDeleteClick = () => {\n if (!menuRequest) return;\n const request = menuRequest;\n handleMenuClose();\n setDeleteDialogState({ open: true, request });\n };\n\n const handleDeleteConfirm = async () => {\n if (!deleteDialogState.request) return;\n\n const request = deleteDialogState.request;\n const requestName = request.metadata.name;\n\n setOptimisticallyDeleted((prev) => new Set(prev).add(requestName));\n setDeleting(requestName);\n\n try {\n const response = await fetchApi.fetch(\n `${backendUrl}/api/kuadrant/requests/${request.metadata.namespace}/${request.metadata.name}`,\n { method: \"DELETE\" },\n );\n\n if (!response.ok) {\n const err = await handleFetchError(response);\n throw new Error(`Failed to delete request. ${err}`);\n }\n\n setRefresh((r) => r + 1);\n alertApi.post({\n message: \"API key deleted\",\n severity: \"success\",\n display: \"transient\",\n });\n setDeleteDialogState({ open: false, request: null });\n } catch (err) {\n console.error(\"Error deleting request:\", err);\n setOptimisticallyDeleted((prev) => {\n const next = new Set(prev);\n next.delete(requestName);\n return next;\n });\n const errorMessage = err instanceof Error ? err.message : \"unknown error occurred\";\n alertApi.post({\n message: `Failed to delete APIKey. ${errorMessage}`,\n severity: 'error',\n display: 'transient',\n });\n } finally {\n setDeleting(null);\n }\n };\n\n const handleDeleteCancel = () => {\n setDeleteDialogState({ open: false, request: null });\n };\n\n const columns: TableColumn<APIKey>[] = [\n {\n title: \"API Product\",\n field: \"spec.apiProductRef.name\",\n render: (row: APIKey) => {\n const apiProductName = row.spec.apiProductRef?.name || \"unknown\";\n return (\n <Link to={`/catalog/default/api/${apiProductName}/api-keys`}>\n <strong>{apiProductName}</strong>\n </Link>\n );\n },\n },\n {\n title: \"Owner\",\n field: \"owner\",\n render: (row: APIKey) => {\n const key = `${row.metadata.namespace}/${row.spec.apiProductRef?.name}`;\n const owner = data?.ownerMap?.get(key) || \"unknown\";\n // strip 'user:default/' prefix if present\n const displayOwner = owner.replace(/^user:default\\//, \"\");\n return <Typography variant=\"body2\">{displayOwner}</Typography>;\n },\n },\n {\n title: \"Status\",\n field: \"status.phase\",\n render: (row: APIKey) => {\n const phase = row.status?.phase || \"Pending\";\n const label = phase === \"Approved\" ? \"Active\" : phase;\n return (\n <Chip label={label} size=\"small\" style={getStatusChipStyle(phase)} />\n );\n },\n },\n {\n title: \"Tier\",\n field: \"spec.planTier\",\n render: (row: APIKey) => (\n <Chip label={row.spec.planTier} size=\"small\" variant=\"outlined\" />\n ),\n },\n {\n title: \"API Key\",\n field: \"status.secretRef\",\n filtering: false,\n render: (row: APIKey) => {\n if (row.status?.phase !== \"Approved\") {\n return (\n <Typography variant=\"body2\" color=\"textSecondary\">\n -\n </Typography>\n );\n }\n\n const key = `${row.metadata.namespace}/${row.metadata.name}`;\n const hasSecretRef = row.status?.secretRef?.name;\n const isVisible = visibleKeys.has(row.metadata.name);\n const isLoading = apiKeyLoading.has(key);\n const apiKeyValue = apiKeyValues.get(key);\n const canReadSecret = row.status?.canReadSecret !== false;\n const isAlreadyRead = alreadyReadKeys.has(key) || !canReadSecret;\n\n if (!hasSecretRef) {\n return (\n <Typography variant=\"body2\" color=\"textSecondary\">\n Awaiting secret...\n </Typography>\n );\n }\n\n if (isAlreadyRead && !apiKeyValue) {\n return (\n <Tooltip title=\"This API key has already been viewed and cannot be retrieved again\">\n <Box display=\"flex\" alignItems=\"center\">\n <Typography\n variant=\"body2\"\n color=\"textSecondary\"\n style={{ fontFamily: \"monospace\", marginRight: 8 }}\n >\n Already viewed\n </Typography>\n <VisibilityOffIcon fontSize=\"small\" color=\"disabled\" />\n </Box>\n </Tooltip>\n );\n }\n\n const handleRevealClick = () => {\n if (isVisible) {\n clearApiKeyValue(row.metadata.namespace, row.metadata.name);\n toggleKeyVisibility(row.metadata.name);\n } else if (!isAlreadyRead) {\n setPendingKeyReveal({\n namespace: row.metadata.namespace,\n name: row.metadata.name,\n });\n setShowOnceWarningOpen(true);\n }\n };\n\n const handleCopy = async () => {\n if (apiKeyValue) {\n await navigator.clipboard.writeText(apiKeyValue);\n alertApi.post({\n message: \"API key copied to clipboard\",\n severity: \"success\",\n display: \"transient\",\n });\n }\n };\n\n return (\n <Box display=\"flex\" alignItems=\"center\" style={{ gap: 8 }}>\n <Box fontFamily=\"monospace\" fontSize=\"0.875rem\">\n {isLoading\n ? \"Loading...\"\n : isVisible && apiKeyValue\n ? apiKeyValue\n : \"•\".repeat(20) + \"...\"}\n </Box>\n {isVisible && apiKeyValue && (\n <Tooltip title=\"Copy to clipboard\">\n <IconButton size=\"small\" onClick={handleCopy}>\n <FileCopyIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n )}\n <Tooltip\n title={\n isVisible ? \"Hide API key\" : \"Reveal API key (one-time only)\"\n }\n >\n <span>\n <IconButton\n size=\"small\"\n onClick={handleRevealClick}\n disabled={isLoading || (isAlreadyRead && !apiKeyValue)}\n >\n {isVisible ? (\n <VisibilityOffIcon fontSize=\"small\" />\n ) : (\n <VisibilityIcon fontSize=\"small\" />\n )}\n </IconButton>\n </span>\n </Tooltip>\n </Box>\n );\n },\n },\n {\n title: \"Requested\",\n field: \"metadata.creationTimestamp\",\n render: (row: APIKey) => {\n if (!row.metadata.creationTimestamp) {\n return <Typography variant=\"body2\">-</Typography>;\n }\n const date = new Date(row.metadata.creationTimestamp);\n return (\n <Typography variant=\"body2\">{date.toLocaleDateString()}</Typography>\n );\n },\n },\n {\n title: \"Actions\",\n filtering: false,\n width: \"100px\",\n render: (row: APIKey) => {\n const isDeleting = deleting === row.metadata.name;\n if (isDeleting) {\n return <CircularProgress size={20} />;\n }\n return (\n <Box display=\"flex\" style={{ gap: 4 }}>\n <Tooltip title=\"View details\">\n <IconButton\n size=\"small\"\n onClick={(e) => {\n e.stopPropagation();\n navigate(\n `/kuadrant/api-keys/${row.metadata.namespace}/${row.metadata.name}`,\n );\n }}\n >\n <VisibilityIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n <Tooltip title=\"Delete\">\n <IconButton\n size=\"small\"\n onClick={(e) => {\n e.stopPropagation();\n setDeleteDialogState({ open: true, request: row });\n }}\n >\n <DeleteIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n </Box>\n );\n },\n },\n ];\n\n const detailPanelConfig = useMemo(\n () => [\n {\n render: (data: any) => {\n const request = data.rowData as APIKey;\n if (!request?.metadata?.name) {\n return <Box />;\n }\n return <ExpandedRowContent request={request} />;\n },\n },\n ],\n [],\n );\n\n if (loading) {\n return <Progress />;\n }\n\n if (error) {\n return <ResponseErrorPanel error={error} />;\n }\n\n const isPending = (row: APIKey) =>\n !row.status || row.status.phase === \"Pending\";\n\n return (\n <>\n <Box className={classes.container}>\n <FilterPanel\n sections={filterSections}\n filters={filters}\n onChange={setFilters}\n />\n <Box className={classes.tableContainer}>\n {filteredRequests.length === 0 ? (\n <Box p={4} textAlign=\"center\">\n <Typography variant=\"body1\" color=\"textSecondary\">\n {allRequests.length === 0\n ? \"No API keys found. Request access to an API to get started.\"\n : \"No API keys match the selected filters.\"}\n </Typography>\n </Box>\n ) : (\n <Table\n options={{\n paging: filteredRequests.length > 10,\n pageSize: 20,\n search: true,\n filtering: false,\n debounceInterval: 300,\n toolbar: true,\n emptyRowsWhenPaging: false,\n }}\n columns={columns}\n data={filteredRequests.map((item: APIKey) => ({\n ...item,\n id: item.metadata.name,\n }))}\n detailPanel={detailPanelConfig}\n />\n )}\n </Box>\n </Box>\n\n <Menu\n id=\"myapikeys-menu\"\n open={Boolean(menuAnchor)}\n onClose={handleMenuClose}\n anchorReference=\"anchorPosition\"\n anchorPosition={menuAnchor || { top: 0, left: 0 }}\n >\n {menuRequest &&\n (() => {\n const items = [];\n items.push(\n <MenuItem\n key=\"view\"\n onClick={() => {\n navigate(\n `/kuadrant/api-keys/${menuRequest.metadata.namespace}/${menuRequest.metadata.name}`,\n );\n handleMenuClose();\n }}\n >\n View Details\n </MenuItem>,\n );\n if (isPending(menuRequest)) {\n items.push(\n <MenuItem key=\"edit\" onClick={handleEdit}>\n Edit\n </MenuItem>,\n );\n }\n items.push(\n <MenuItem key=\"delete\" onClick={handleDeleteClick}>\n Delete\n </MenuItem>,\n );\n return items;\n })()}\n </Menu>\n\n {editDialogState.request && (\n <EditAPIKeyDialog\n open={editDialogState.open}\n request={editDialogState.request}\n availablePlans={editDialogState.plans}\n onClose={() =>\n setEditDialogState({ open: false, request: null, plans: [] })\n }\n onSuccess={() => {\n setEditDialogState({ open: false, request: null, plans: [] });\n setRefresh((r) => r + 1);\n }}\n />\n )}\n\n <ConfirmDeleteDialog\n open={deleteDialogState.open}\n title=\"Delete API Key\"\n description={`Are you sure you want to delete this API key for ${deleteDialogState.request?.spec.apiProductRef?.name || \"this API\"}?`}\n deleting={deleting !== null}\n onConfirm={handleDeleteConfirm}\n onCancel={handleDeleteCancel}\n />\n\n <Dialog\n open={showOnceWarningOpen}\n onClose={() => {\n setShowOnceWarningOpen(false);\n setPendingKeyReveal(null);\n }}\n maxWidth=\"sm\"\n >\n <DialogTitle>\n <Box display=\"flex\" alignItems=\"center\">\n <WarningIcon color=\"primary\" style={{ marginRight: 8 }} />\n View API Key\n </Box>\n </DialogTitle>\n <DialogContent>\n <Typography variant=\"body1\" paragraph>\n This API key can only be viewed <strong>once</strong>. After you\n reveal it, you will not be able to retrieve it again.\n </Typography>\n <Typography variant=\"body2\" color=\"textSecondary\">\n Make sure to copy and store it securely before closing this view.\n </Typography>\n </DialogContent>\n <DialogActions>\n <Button\n onClick={() => {\n setShowOnceWarningOpen(false);\n setPendingKeyReveal(null);\n }}\n >\n Cancel\n </Button>\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={() => {\n if (pendingKeyReveal) {\n fetchApiKeyFromSecret(\n pendingKeyReveal.namespace,\n pendingKeyReveal.name,\n );\n toggleKeyVisibility(pendingKeyReveal.name);\n }\n setShowOnceWarningOpen(false);\n setPendingKeyReveal(null);\n }}\n >\n Reveal API Key\n </Button>\n </DialogActions>\n </Dialog>\n </>\n );\n};\n"],"names":["data"],"mappings":"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"}
@@ -2,6 +2,7 @@ import React, { useState } from 'react';
2
2
  import { Dialog, DialogTitle, DialogContent, Box, Typography, FormControl, InputLabel, Select, MenuItem, TextField, DialogActions, Button, CircularProgress } from '@material-ui/core';
3
3
  import InfoIcon from '@material-ui/icons/Info';
4
4
  import { useApi, configApiRef, fetchApiRef, alertApiRef } from '@backstage/core-plugin-api';
5
+ import { handleFetchError } from '../../utils/errors.esm.js';
5
6
 
6
7
  const RequestAccessDialog = ({
7
8
  open,
@@ -48,10 +49,8 @@ const RequestAccessDialog = ({
48
49
  }
49
50
  );
50
51
  if (!response.ok) {
51
- const errorData = await response.json().catch(() => ({}));
52
- throw new Error(
53
- errorData.error || `failed to create request: ${response.status}`
54
- );
52
+ const err = await handleFetchError(response);
53
+ throw new Error(`failed to create request: ${response.status}. ${err}`);
55
54
  }
56
55
  alertApi.post({
57
56
  message: "API key requested successfully",
@@ -1 +1 @@
1
- {"version":3,"file":"RequestAccessDialog.esm.js","sources":["../../../src/components/RequestAccessDialog/RequestAccessDialog.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Button,\n TextField,\n Select,\n MenuItem,\n FormControl,\n InputLabel,\n Box,\n Typography,\n CircularProgress,\n} from '@material-ui/core';\nimport InfoIcon from '@material-ui/icons/Info';\nimport {\n useApi,\n configApiRef,\n fetchApiRef,\n alertApiRef,\n} from '@backstage/core-plugin-api';\n\nexport interface Plan {\n tier: string;\n limits?: Record<string, number>;\n}\n\nexport interface RequestAccessDialogProps {\n open: boolean;\n onClose: () => void;\n onSuccess: () => void;\n apiProductName: string;\n namespace: string;\n userEmail: string;\n plans: Plan[];\n}\n\nexport const RequestAccessDialog = ({\n open,\n onClose,\n onSuccess,\n apiProductName,\n namespace,\n userEmail,\n plans,\n}: RequestAccessDialogProps) => {\n const config = useApi(configApiRef);\n const fetchApi = useApi(fetchApiRef);\n const alertApi = useApi(alertApiRef);\n const backendUrl = config.getString('backend.baseUrl');\n\n const [selectedPlan, setSelectedPlan] = useState('');\n const [useCase, setUseCase] = useState('');\n const [creating, setCreating] = useState(false);\n const [createError, setCreateError] = useState<string | null>(null);\n\n const handleClose = () => {\n setSelectedPlan('');\n setUseCase('');\n setCreateError(null);\n onClose();\n };\n\n const handleRequestAccess = async () => {\n if (!selectedPlan) return;\n\n setCreating(true);\n setCreateError(null);\n try {\n const response = await fetchApi.fetch(\n `${backendUrl}/api/kuadrant/requests`,\n {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n apiProductName,\n namespace,\n planTier: selectedPlan,\n useCase: useCase.trim() || '',\n userEmail,\n }),\n },\n );\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}));\n throw new Error(\n errorData.error || `failed to create request: ${response.status}`,\n );\n }\n\n alertApi.post({\n message: 'API key requested successfully',\n severity: 'success',\n display: 'transient',\n });\n\n setSelectedPlan('');\n setUseCase('');\n onSuccess();\n } catch (err) {\n const errorMessage =\n err instanceof Error ? err.message : 'unknown error occurred';\n alertApi.post({\n message: `Failed to request API key: ${errorMessage}`,\n severity: 'error',\n display: 'transient',\n });\n setCreateError(errorMessage);\n } finally {\n setCreating(false);\n }\n };\n\n return (\n <Dialog open={open} onClose={handleClose} maxWidth=\"sm\" fullWidth>\n <DialogTitle>Request API Access</DialogTitle>\n <DialogContent>\n <Box\n mb={2}\n p={1.5}\n bgcolor=\"info.light\"\n borderRadius={1}\n display=\"flex\"\n alignItems=\"flex-start\"\n style={{ gap: 8 }}\n >\n <InfoIcon\n color=\"primary\"\n fontSize=\"small\"\n style={{ marginTop: 2 }}\n />\n <Typography variant=\"body2\">\n Your request will be reviewed by an API owner before access is\n granted.\n </Typography>\n </Box>\n {createError && (\n <Box\n mb={2}\n p={2}\n bgcolor=\"error.main\"\n color=\"error.contrastText\"\n borderRadius={1}\n >\n <Typography variant=\"body2\">{createError}</Typography>\n </Box>\n )}\n <FormControl\n fullWidth\n margin=\"normal\"\n disabled={creating}\n data-testid=\"tier-select-form\"\n >\n <InputLabel id=\"tier-select-label\">Select Tier</InputLabel>\n <Select\n labelId=\"tier-select-label\"\n data-testid=\"tier-select\"\n value={selectedPlan}\n onChange={(e) => setSelectedPlan(e.target.value as string)}\n disabled={creating}\n >\n {plans.map((plan: Plan) => {\n const limitDesc = Object.entries(plan.limits || {})\n .map(([key, val]) => `${val} per ${key}`)\n .join(', ');\n return (\n <MenuItem\n key={plan.tier}\n value={plan.tier}\n data-testid={`tier-option-${plan.tier}`}\n >\n {plan.tier} {limitDesc ? `(${limitDesc})` : ''}\n </MenuItem>\n );\n })}\n </Select>\n </FormControl>\n <TextField\n label=\"Use Case (optional)\"\n placeholder=\"Describe how you plan to use this API\"\n multiline\n rows={3}\n fullWidth\n margin=\"normal\"\n value={useCase}\n onChange={(e) => setUseCase(e.target.value)}\n helperText=\"Explain your intended use of this API for admin review\"\n disabled={creating}\n />\n </DialogContent>\n <DialogActions>\n <Button onClick={handleClose} disabled={creating}>\n Cancel\n </Button>\n <Button\n onClick={handleRequestAccess}\n color=\"primary\"\n variant=\"contained\"\n disabled={!selectedPlan || creating}\n startIcon={\n creating ? (\n <CircularProgress size={16} color=\"inherit\" />\n ) : undefined\n }\n >\n {creating ? 'Submitting...' : 'Submit Request'}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RequestAccessDialog.esm.js","sources":["../../../src/components/RequestAccessDialog/RequestAccessDialog.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport {\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Button,\n TextField,\n Select,\n MenuItem,\n FormControl,\n InputLabel,\n Box,\n Typography,\n CircularProgress,\n} from '@material-ui/core';\nimport InfoIcon from '@material-ui/icons/Info';\nimport {\n useApi,\n configApiRef,\n fetchApiRef,\n alertApiRef,\n} from '@backstage/core-plugin-api';\nimport {handleFetchError} from \"../../utils/errors.ts\";\n\nexport interface Plan {\n tier: string;\n limits?: Record<string, number>;\n}\n\nexport interface RequestAccessDialogProps {\n open: boolean;\n onClose: () => void;\n onSuccess: () => void;\n apiProductName: string;\n namespace: string;\n userEmail: string;\n plans: Plan[];\n}\n\nexport const RequestAccessDialog = ({\n open,\n onClose,\n onSuccess,\n apiProductName,\n namespace,\n userEmail,\n plans,\n}: RequestAccessDialogProps) => {\n const config = useApi(configApiRef);\n const fetchApi = useApi(fetchApiRef);\n const alertApi = useApi(alertApiRef);\n const backendUrl = config.getString('backend.baseUrl');\n\n const [selectedPlan, setSelectedPlan] = useState('');\n const [useCase, setUseCase] = useState('');\n const [creating, setCreating] = useState(false);\n const [createError, setCreateError] = useState<string | null>(null);\n\n const handleClose = () => {\n setSelectedPlan('');\n setUseCase('');\n setCreateError(null);\n onClose();\n };\n\n const handleRequestAccess = async () => {\n if (!selectedPlan) return;\n\n setCreating(true);\n setCreateError(null);\n try {\n const response = await fetchApi.fetch(\n `${backendUrl}/api/kuadrant/requests`,\n {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n apiProductName,\n namespace,\n planTier: selectedPlan,\n useCase: useCase.trim() || '',\n userEmail,\n }),\n },\n );\n\n if (!response.ok) {\n const err = await handleFetchError(response);\n throw new Error(`failed to create request: ${response.status}. ${err}`);\n }\n\n alertApi.post({\n message: 'API key requested successfully',\n severity: 'success',\n display: 'transient',\n });\n\n setSelectedPlan('');\n setUseCase('');\n onSuccess();\n } catch (err) {\n const errorMessage =\n err instanceof Error ? err.message : 'unknown error occurred';\n alertApi.post({\n message: `Failed to request API key: ${errorMessage}`,\n severity: 'error',\n display: 'transient',\n });\n setCreateError(errorMessage);\n } finally {\n setCreating(false);\n }\n };\n\n return (\n <Dialog open={open} onClose={handleClose} maxWidth=\"sm\" fullWidth>\n <DialogTitle>Request API Access</DialogTitle>\n <DialogContent>\n <Box\n mb={2}\n p={1.5}\n bgcolor=\"info.light\"\n borderRadius={1}\n display=\"flex\"\n alignItems=\"flex-start\"\n style={{ gap: 8 }}\n >\n <InfoIcon\n color=\"primary\"\n fontSize=\"small\"\n style={{ marginTop: 2 }}\n />\n <Typography variant=\"body2\">\n Your request will be reviewed by an API owner before access is\n granted.\n </Typography>\n </Box>\n {createError && (\n <Box\n mb={2}\n p={2}\n bgcolor=\"error.main\"\n color=\"error.contrastText\"\n borderRadius={1}\n >\n <Typography variant=\"body2\">{createError}</Typography>\n </Box>\n )}\n <FormControl\n fullWidth\n margin=\"normal\"\n disabled={creating}\n data-testid=\"tier-select-form\"\n >\n <InputLabel id=\"tier-select-label\">Select Tier</InputLabel>\n <Select\n labelId=\"tier-select-label\"\n data-testid=\"tier-select\"\n value={selectedPlan}\n onChange={(e) => setSelectedPlan(e.target.value as string)}\n disabled={creating}\n >\n {plans.map((plan: Plan) => {\n const limitDesc = Object.entries(plan.limits || {})\n .map(([key, val]) => `${val} per ${key}`)\n .join(', ');\n return (\n <MenuItem\n key={plan.tier}\n value={plan.tier}\n data-testid={`tier-option-${plan.tier}`}\n >\n {plan.tier} {limitDesc ? `(${limitDesc})` : ''}\n </MenuItem>\n );\n })}\n </Select>\n </FormControl>\n <TextField\n label=\"Use Case (optional)\"\n placeholder=\"Describe how you plan to use this API\"\n multiline\n rows={3}\n fullWidth\n margin=\"normal\"\n value={useCase}\n onChange={(e) => setUseCase(e.target.value)}\n helperText=\"Explain your intended use of this API for admin review\"\n disabled={creating}\n />\n </DialogContent>\n <DialogActions>\n <Button onClick={handleClose} disabled={creating}>\n Cancel\n </Button>\n <Button\n onClick={handleRequestAccess}\n color=\"primary\"\n variant=\"contained\"\n disabled={!selectedPlan || creating}\n startIcon={\n creating ? (\n <CircularProgress size={16} color=\"inherit\" />\n ) : undefined\n }\n >\n {creating ? 'Submitting...' : 'Submit Request'}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -11,7 +11,7 @@ const kuadrantPlugin = createPlugin({
11
11
  const KuadrantPage = kuadrantPlugin.provide(
12
12
  createRoutableExtension({
13
13
  name: "KuadrantPage",
14
- component: () => import('./components/KuadrantPage/index.esm.js').then((m) => m.KuadrantPage),
14
+ component: () => import('./components/KuadrantPage/index.esm.js').then((m) => m.ApiProductsPage),
15
15
  mountPoint: rootRouteRef
16
16
  })
17
17
  );
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.esm.js","sources":["../src/plugin.ts"],"sourcesContent":["import {\n createPlugin,\n createRoutableExtension,\n createComponentExtension,\n} from '@backstage/core-plugin-api';\n\nimport { rootRouteRef, resourceRouteRef } from './routes';\n\nexport const kuadrantPlugin = createPlugin({\n id: 'kuadrant',\n routes: {\n root: rootRouteRef,\n resource: resourceRouteRef,\n },\n});\n\nexport const KuadrantPage = kuadrantPlugin.provide(\n createRoutableExtension({\n name: 'KuadrantPage',\n component: () =>\n import('./components/KuadrantPage').then(m => m.KuadrantPage),\n mountPoint: rootRouteRef,\n }),\n);\n\nexport const ApiProductsPage = kuadrantPlugin.provide(\n createRoutableExtension({\n name: 'ApiProductsPage',\n component: () =>\n import('./components/KuadrantPage').then(m => m.ApiProductsPage),\n mountPoint: rootRouteRef,\n }),\n);\n\nexport const ApiKeysPage = kuadrantPlugin.provide(\n createRoutableExtension({\n name: 'ApiKeysPage',\n component: () =>\n import('./components/ApiKeysPage').then(m => m.ApiKeysPage),\n mountPoint: rootRouteRef,\n }),\n);\n\nexport const EntityKuadrantApiAccessCard = kuadrantPlugin.provide(\n createComponentExtension({\n name: 'EntityKuadrantApiAccessCard',\n component: {\n lazy: () =>\n import('./components/ApiAccessCard').then(m => m.ApiAccessCard),\n },\n }),\n);\n\nexport const EntityKuadrantApiKeyManagementTab = kuadrantPlugin.provide(\n createComponentExtension({\n name: 'EntityKuadrantApiKeyManagementTab',\n component: {\n lazy: () =>\n import('./components/ApiKeyManagementTab').then(m => m.ApiKeyManagementTab),\n },\n }),\n);\n\n// entity content extension for api keys tab\nexport const EntityKuadrantApiKeysContent = kuadrantPlugin.provide(\n createComponentExtension({\n name: 'EntityKuadrantApiKeysContent',\n component: {\n lazy: () =>\n import('./components/ApiKeyManagementTab').then(m => m.ApiKeyManagementTab),\n },\n }),\n);\n\nexport const EntityKuadrantApiProductInfoContent = kuadrantPlugin.provide(\n createComponentExtension({\n name: 'EntityKuadrantApiProductInfoContent',\n component: {\n lazy: () =>\n import('./components/ApiProductInfoCard').then(m => m.ApiProductInfoCard),\n },\n }),\n);\n\nexport const ApiKeyDetailPage = kuadrantPlugin.provide(\n createRoutableExtension({\n name: 'ApiKeyDetailPage',\n component: () =>\n import('./components/ApiKeyDetailPage').then(m => m.ApiKeyDetailPage),\n mountPoint: rootRouteRef,\n }),\n);\n\nexport const EntityKuadrantApiApprovalTab = kuadrantPlugin.provide(\n createComponentExtension({\n name: 'EntityKuadrantApiApprovalTab',\n component: {\n lazy: () =>\n import('./components/EntityApiApprovalTab').then(m => m.EntityApiApprovalTab),\n },\n }),\n);\n\nexport const EntityKuadrantApiProductOpenApiAlert = kuadrantPlugin.provide(\n createComponentExtension({\n name: 'EntityKuadrantApiProductOpenApiAlert',\n component: {\n lazy: () =>\n import('./components/ApiProductOpenApiAlert').then(m => m.ApiProductOpenApiAlert),\n },\n }),\n);\n\nexport const ApiProductDetailPage = kuadrantPlugin.provide(\n createRoutableExtension({\n name: 'ApiProductDetailPage',\n component: () =>\n import('./components/ApiProductDetailPage').then(m => m.ApiProductDetailPage),\n mountPoint: rootRouteRef,\n }),\n);\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin.esm.js","sources":["../src/plugin.ts"],"sourcesContent":["import {\n createPlugin,\n createRoutableExtension,\n createComponentExtension,\n} from '@backstage/core-plugin-api';\n\nimport { rootRouteRef, resourceRouteRef } from './routes';\n\nexport const kuadrantPlugin = createPlugin({\n id: 'kuadrant',\n routes: {\n root: rootRouteRef,\n resource: resourceRouteRef,\n },\n});\n\nexport const KuadrantPage = kuadrantPlugin.provide(\n createRoutableExtension({\n name: 'KuadrantPage',\n component: () =>\n import('./components/KuadrantPage').then(m => m.ApiProductsPage),\n mountPoint: rootRouteRef,\n }),\n);\n\nexport const ApiProductsPage = kuadrantPlugin.provide(\n createRoutableExtension({\n name: 'ApiProductsPage',\n component: () =>\n import('./components/KuadrantPage').then(m => m.ApiProductsPage),\n mountPoint: rootRouteRef,\n }),\n);\n\nexport const ApiKeysPage = kuadrantPlugin.provide(\n createRoutableExtension({\n name: 'ApiKeysPage',\n component: () =>\n import('./components/ApiKeysPage').then(m => m.ApiKeysPage),\n mountPoint: rootRouteRef,\n }),\n);\n\nexport const EntityKuadrantApiAccessCard = kuadrantPlugin.provide(\n createComponentExtension({\n name: 'EntityKuadrantApiAccessCard',\n component: {\n lazy: () =>\n import('./components/ApiAccessCard').then(m => m.ApiAccessCard),\n },\n }),\n);\n\nexport const EntityKuadrantApiKeyManagementTab = kuadrantPlugin.provide(\n createComponentExtension({\n name: 'EntityKuadrantApiKeyManagementTab',\n component: {\n lazy: () =>\n import('./components/ApiKeyManagementTab').then(m => m.ApiKeyManagementTab),\n },\n }),\n);\n\n// entity content extension for api keys tab\nexport const EntityKuadrantApiKeysContent = kuadrantPlugin.provide(\n createComponentExtension({\n name: 'EntityKuadrantApiKeysContent',\n component: {\n lazy: () =>\n import('./components/ApiKeyManagementTab').then(m => m.ApiKeyManagementTab),\n },\n }),\n);\n\nexport const EntityKuadrantApiProductInfoContent = kuadrantPlugin.provide(\n createComponentExtension({\n name: 'EntityKuadrantApiProductInfoContent',\n component: {\n lazy: () =>\n import('./components/ApiProductInfoCard').then(m => m.ApiProductInfoCard),\n },\n }),\n);\n\nexport const ApiKeyDetailPage = kuadrantPlugin.provide(\n createRoutableExtension({\n name: 'ApiKeyDetailPage',\n component: () =>\n import('./components/ApiKeyDetailPage').then(m => m.ApiKeyDetailPage),\n mountPoint: rootRouteRef,\n }),\n);\n\nexport const EntityKuadrantApiApprovalTab = kuadrantPlugin.provide(\n createComponentExtension({\n name: 'EntityKuadrantApiApprovalTab',\n component: {\n lazy: () =>\n import('./components/EntityApiApprovalTab').then(m => m.EntityApiApprovalTab),\n },\n }),\n);\n\nexport const EntityKuadrantApiProductOpenApiAlert = kuadrantPlugin.provide(\n createComponentExtension({\n name: 'EntityKuadrantApiProductOpenApiAlert',\n component: {\n lazy: () =>\n import('./components/ApiProductOpenApiAlert').then(m => m.ApiProductOpenApiAlert),\n },\n }),\n);\n\nexport const ApiProductDetailPage = kuadrantPlugin.provide(\n createRoutableExtension({\n name: 'ApiProductDetailPage',\n component: () =>\n import('./components/ApiProductDetailPage').then(m => m.ApiProductDetailPage),\n mountPoint: rootRouteRef,\n }),\n);\n"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- __load_plugin_entry__("internal.plugin-kuadrant",(()=>{"use strict";var e,h,a,g,t,i,l,r,n,s,_,c,u,o,d,f,y,x,b,p,m,v={63198:(e,h,a)=>{var g={PluginRoot:()=>a.e(879).then(()=>()=>a(72627)),KuadrantPage:()=>a.e(879).then(()=>()=>a(72627)),EntityKuadrantApiAccessCard:()=>a.e(879).then(()=>()=>a(72627)),EntityKuadrantApiKeyManagementTab:()=>a.e(879).then(()=>()=>a(72627)),EntityKuadrantApiKeysContent:()=>a.e(879).then(()=>()=>a(72627)),EntityKuadrantApiProductInfoContent:()=>a.e(879).then(()=>()=>a(72627))},t=(e,h)=>(a.R=h,h=a.o(g,e)?g[e]():Promise.resolve().then(()=>{throw new Error('Module "'+e+'" does not exist in container.')}),a.R=void 0,h),i=(e,h)=>{if(a.S){var g="default",t=a.S[g];if(t&&t!==e)throw new Error("Container initialization failed as it has already been initialized with a different share scope");return a.S[g]=e,a.I(g,h)}};a.d(h,{get:()=>t,init:()=>i})}},k={};function P(e){var h=k[e];if(void 0!==h)return h.exports;var a=k[e]={id:e,loaded:!1,exports:{}};return v[e].call(a.exports,a,a.exports,P),a.loaded=!0,a.exports}return P.m=v,P.c=k,P.n=e=>{var h=e&&e.__esModule?()=>e.default:()=>e;return P.d(h,{a:h}),h},h=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,P.t=function(a,g){if(1&g&&(a=this(a)),8&g)return a;if("object"==typeof a&&a){if(4&g&&a.__esModule)return a;if(16&g&&"function"==typeof a.then)return a}var t=Object.create(null);P.r(t);var i={};e=e||[null,h({}),h([]),h(h)];for(var l=2&g&&a;("object"==typeof l||"function"==typeof l)&&!~e.indexOf(l);l=h(l))Object.getOwnPropertyNames(l).forEach(e=>i[e]=()=>a[e]);return i.default=()=>a,P.d(t,i),t},P.d=(e,h)=>{for(var a in h)P.o(h,a)&&!P.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:h[a]})},P.f={},P.e=e=>Promise.all(Object.keys(P.f).reduce((h,a)=>(P.f[a](e,h),h),[])),P.u=e=>"static/"+({51:"react-syntax-highlighter_languages_highlight_prolog",200:"react-syntax-highlighter_languages_highlight_mel",206:"react-syntax-highlighter_languages_highlight_gml",371:"react-syntax-highlighter_languages_highlight_excel",456:"react-syntax-highlighter_languages_highlight_roboconf",460:"react-syntax-highlighter_languages_highlight_avrasm",464:"react-syntax-highlighter_languages_highlight_shell",557:"react-syntax-highlighter_languages_highlight_oneC",579:"react-syntax-highlighter_languages_highlight_vbnet",634:"react-syntax-highlighter_languages_highlight_scilab",879:"exposed-PluginRoot",927:"react-syntax-highlighter_languages_highlight_javascript",946:"react-syntax-highlighter_languages_highlight_clojure",985:"react-syntax-highlighter_languages_highlight_monkey",1062:"react-syntax-highlighter_languages_highlight_nim",1084:"react-syntax-highlighter_languages_highlight_aspectj",1099:"react-syntax-highlighter_languages_highlight_ebnf",1173:"react-syntax-highlighter_languages_highlight_autohotkey",1177:"react-syntax-highlighter_languages_highlight_profile",1214:"react-syntax-highlighter_languages_highlight_properties",1276:"react-syntax-highlighter_languages_highlight_phpTemplate",1325:"react-syntax-highlighter_languages_highlight_actionscript",1352:"react-syntax-highlighter_languages_highlight_fortran",1362:"react-syntax-highlighter_languages_highlight_mathematica",1418:"react-syntax-highlighter_languages_highlight_pony",1441:"react-syntax-highlighter_languages_highlight_coq",1461:"react-syntax-highlighter_languages_highlight_livescript",1489:"react-syntax-highlighter_languages_highlight_reasonml",1496:"react-syntax-highlighter_languages_highlight_lua",1522:"react-syntax-highlighter_languages_highlight_dust",1679:"react-syntax-highlighter_languages_highlight_scheme",1694:"react-syntax-highlighter_languages_highlight_accesslog",1727:"react-syntax-highlighter_languages_highlight_oxygene",1750:"react-syntax-highlighter_languages_highlight_makefile",1828:"react-syntax-highlighter_languages_highlight_dockerfile",1895:"react-syntax-highlighter_languages_highlight_pythonRepl",1956:"react-syntax-highlighter_languages_highlight_puppet",1961:"react-syntax-highlighter_languages_highlight_stan",1972:"react-syntax-highlighter_languages_highlight_fsharp",2007:"react-syntax-highlighter_languages_highlight_css",2064:"react-syntax-highlighter_languages_highlight_vhdl",2108:"react-syntax-highlighter_languages_highlight_cLike",2180:"react-syntax-highlighter_languages_highlight_sqf",2234:"react-syntax-highlighter_languages_highlight_lisp",2267:"react-syntax-highlighter_languages_highlight_maxima",2346:"react-syntax-highlighter_languages_highlight_d",2362:"react-syntax-highlighter_languages_highlight_xquery",2378:"react-syntax-highlighter_languages_highlight_parser3",2383:"react-syntax-highlighter_languages_highlight_crmsh",2438:"react-syntax-highlighter_languages_highlight_haxe",2488:"react-syntax-highlighter_languages_highlight_verilog",2496:"react-syntax-highlighter_languages_highlight_erlangRepl",2512:"react-syntax-highlighter_languages_highlight_stylus",2516:"react-syntax-highlighter_languages_highlight_apache",2665:"react-syntax-highlighter_languages_highlight_powershell",2693:"react-syntax-highlighter_languages_highlight_tap",2727:"react-syntax-highlighter_languages_highlight_q",2743:"react-syntax-highlighter_languages_highlight_asciidoc",2762:"react-syntax-highlighter_languages_highlight_haskell",2795:"react-syntax-highlighter_languages_highlight_dns",2871:"react-syntax-highlighter_languages_highlight_typescript",2882:"react-syntax-highlighter_languages_highlight_sml",2979:"react-syntax-highlighter_languages_highlight_plaintext",2981:"react-syntax-highlighter_languages_highlight_ruleslanguage",2983:"react-syntax-highlighter_languages_highlight_golo",3146:"react-syntax-highlighter_languages_highlight_purebasic",3193:"react-syntax-highlighter_languages_highlight_xml",3299:"react-syntax-highlighter_languages_highlight_fix",3357:"react-syntax-highlighter_languages_highlight_x86asm",3384:"react-syntax-highlighter_languages_highlight_ini",3418:"react-syntax-highlighter_languages_highlight_ruby",3419:"react-syntax-highlighter_languages_highlight_nix",3487:"react-syntax-highlighter_languages_highlight_mipsasm",3500:"react-syntax-highlighter_languages_highlight_autoit",3540:"react-syntax-highlighter_languages_highlight_moonscript",3562:"react-syntax-highlighter_languages_highlight_gams",3580:"react-syntax-highlighter_languages_highlight_csp",3607:"react-syntax-highlighter_languages_highlight_abnf",3623:"react-syntax-highlighter_languages_highlight_yaml",3722:"react-syntax-highlighter_languages_highlight_latex",3736:"react-syntax-highlighter_languages_highlight_json",3811:"react-syntax-highlighter_languages_highlight_erb",3885:"react-syntax-highlighter_languages_highlight_stata",3923:"react-syntax-highlighter_languages_highlight_applescript",3988:"react-syntax-highlighter_languages_highlight_vala",4014:"react-syntax-highlighter_languages_highlight_scss",4075:"react-syntax-highlighter_languages_highlight_hsp",4110:"react-syntax-highlighter_languages_highlight_tp",4135:"react-syntax-highlighter_languages_highlight_mizar",4282:"react-syntax-highlighter_languages_highlight_livecodeserver",4300:"react-syntax-highlighter_languages_highlight_r",4342:"react-syntax-highlighter_languages_highlight_php",4383:"react-syntax-highlighter_languages_highlight_dsconfig",4436:"react-syntax-highlighter_languages_highlight_zephir",4446:"react-syntax-highlighter_languages_highlight_leaf",4493:"react-syntax-highlighter_languages_highlight_gauss",4575:"react-syntax-highlighter_languages_highlight_processing",4635:"react-syntax-highlighter_languages_highlight_jbossCli",4733:"react-syntax-highlighter_languages_highlight_llvm",4835:"react-syntax-highlighter_languages_highlight_cos",4931:"react-syntax-highlighter_languages_highlight_step21",4956:"react-syntax-highlighter_languages_highlight_angelscript",4971:"react-syntax-highlighter_languages_highlight_lsl",5034:"react-syntax-highlighter_languages_highlight_ada",5051:"react-syntax-highlighter_languages_highlight_coffeescript",5099:"react-syntax-highlighter_languages_highlight_nsis",5123:"react-syntax-highlighter_languages_highlight_erlang",5189:"react-syntax-highlighter_languages_highlight_dts",5251:"react-syntax-highlighter_languages_highlight_pgsql",5253:"react-syntax-highlighter_languages_highlight_clojureRepl",5286:"react-syntax-highlighter_languages_highlight_nginx",5446:"react-syntax-highlighter_languages_highlight_ocaml",5565:"react-syntax-highlighter_languages_highlight_kotlin",5613:"react-syntax-highlighter_languages_highlight_rib",5664:"react-syntax-highlighter_languages_highlight_dos",5773:"react-syntax-highlighter_languages_highlight_mojolicious",5813:"react-syntax-highlighter_languages_highlight_less",5819:"react-syntax-highlighter_languages_highlight_gradle",5868:"react-syntax-highlighter_languages_highlight_inform7",5900:"react-syntax-highlighter_languages_highlight_lasso",6057:"react-syntax-highlighter_languages_highlight_sqlMore",6152:"react-syntax-highlighter_languages_highlight_vbscriptHtml",6161:"react-syntax-highlighter_languages_highlight_clean",6177:"react-syntax-highlighter_languages_highlight_taggerscript",6195:"react-syntax-highlighter_languages_highlight_ldif",6228:"react-syntax-highlighter_languages_highlight_rust",6267:"react-syntax-highlighter_languages_highlight_swift",6354:"react-syntax-highlighter_languages_highlight_java",6501:"react-syntax-highlighter_languages_highlight_armasm",6512:"react-syntax-highlighter_languages_highlight_scala",6542:"react-syntax-highlighter_languages_highlight_vim",6555:"react-syntax-highlighter_languages_highlight_openscad",6573:"react-syntax-highlighter_languages_highlight_cpp",6780:"react-syntax-highlighter_languages_highlight_qml",6835:"react-syntax-highlighter_languages_highlight_brainfuck",6848:"react-syntax-highlighter_languages_highlight_crystal",6924:"react-syntax-highlighter_languages_highlight_isbl",6977:"react-syntax-highlighter_languages_highlight_rsl",6986:"react-syntax-highlighter_languages_highlight_capnproto",7048:"react-syntax-highlighter_languages_highlight_gherkin",7079:"react-syntax-highlighter_languages_highlight_diff",7131:"react-syntax-highlighter_languages_highlight_protobuf",7209:"react-syntax-highlighter_languages_highlight_perl",7247:"react-syntax-highlighter_languages_highlight_cmake",7254:"react-syntax-highlighter_languages_highlight_subunit",7351:"react-syntax-highlighter_languages_highlight_elixir",7401:"react-syntax-highlighter_languages_highlight_sas",7406:"react-syntax-highlighter_languages_highlight_sql",7439:"react-syntax-highlighter_languages_highlight_flix",7533:"react-syntax-highlighter_languages_highlight_awk",7572:"react-syntax-highlighter_languages_highlight_basic",7764:"react-syntax-highlighter_languages_highlight_go",7776:"react-syntax-highlighter_languages_highlight_haml",7794:"react-syntax-highlighter_languages_highlight_http",7818:"react-syntax-highlighter_languages_highlight_arduino",7879:"react-syntax-highlighter_languages_highlight_csharp",7934:"react-syntax-highlighter_languages_highlight_glsl",7959:"react-syntax-highlighter_languages_highlight_htmlbars",8001:"react-syntax-highlighter_languages_highlight_matlab",8030:"react-syntax-highlighter_languages_highlight_handlebars",8058:"react-syntax-highlighter_languages_highlight_n1ql",8078:"react-syntax-highlighter_languages_highlight_delphi",8138:"react-syntax-highlighter_languages_highlight_elm",8140:"react-syntax-highlighter_languages_highlight_pf",8216:"react-syntax-highlighter_languages_highlight_bnf",8217:"react-syntax-highlighter_languages_highlight_twig",8331:"react-syntax-highlighter_languages_highlight_thrift",8338:"react-syntax-highlighter_languages_highlight_objectivec",8549:"react-syntax-highlighter_languages_highlight_c",8595:"react-syntax-highlighter_languages_highlight_hy",8705:"react-syntax-highlighter_languages_highlight_nodeRepl",8725:"react-syntax-highlighter_languages_highlight_smalltalk",8727:"react-syntax-highlighter/lowlight-import",8753:"react-syntax-highlighter_languages_highlight_mercury",8755:"react-syntax-highlighter_languages_highlight_tcl",8763:"react-syntax-highlighter_languages_highlight_routeros",8833:"react-syntax-highlighter_languages_highlight_markdown",8874:"react-syntax-highlighter_languages_highlight_smali",8903:"react-syntax-highlighter_languages_highlight_axapta",8904:"react-syntax-highlighter_languages_highlight_python",8948:"react-syntax-highlighter_languages_highlight_groovy",9078:"react-syntax-highlighter_languages_highlight_irpf90",9118:"react-syntax-highlighter_languages_highlight_juliaRepl",9139:"react-syntax-highlighter_languages_highlight_django",9162:"react-syntax-highlighter_languages_highlight_ceylon",9175:"react-syntax-highlighter_languages_highlight_vbscript",9229:"react-syntax-highlighter_languages_highlight_julia",9265:"react-syntax-highlighter_languages_highlight_dart",9406:"react-syntax-highlighter_languages_highlight_cal",9612:"react-syntax-highlighter_languages_highlight_bash",9702:"react-syntax-highlighter_languages_highlight_gcode",9726:"react-syntax-highlighter_languages_highlight_xl",9882:"react-syntax-highlighter_languages_highlight_arcade"}[e]||e)+"."+{51:"be0fdf0c",200:"5251fe1a",206:"2347c999",327:"a9a99299",371:"2f5c76b9",441:"f708f1e0",456:"47518214",460:"6381890e",464:"9bbc16eb",501:"87de76da",557:"362a3b0a",579:"21c190ed",634:"bb9cc730",635:"e030b18a",879:"c3fd0cc1",927:"b0ad82d3",946:"e3fcc98c",985:"5f60f06d",1062:"17afaed1",1084:"35f221e8",1085:"d17e689a",1099:"a34b6944",1173:"614c5248",1177:"615fa721",1214:"60f97895",1276:"2bd36dc7",1325:"78db0238",1352:"38ec3d00",1362:"d8631b37",1418:"1961f69f",1441:"6b156852",1461:"3ece3068",1489:"a5a73a29",1496:"52f73c98",1522:"b30d0c38",1645:"db086648",1679:"508b5846",1694:"bd112f1a",1727:"ea742315",1750:"cad796c9",1828:"2c5fdf55",1895:"feb72aed",1956:"ee3f80da",1961:"17155e77",1972:"2ba37c00",2007:"2cc312ae",2064:"dea9db6c",2108:"f884fdc0",2180:"43421810",2233:"bf0c10d7",2234:"1cb2f675",2267:"f1f17544",2346:"bf4f2b44",2362:"353780d4",2378:"706a4bd6",2383:"58c4cb07",2438:"e2543cc2",2488:"e32adbeb",2496:"0d7f4890",2512:"cde06cf5",2516:"aa86d495",2628:"20156dc1",2665:"7bd31b3a",2693:"402e473f",2727:"989943de",2743:"4b40a3f9",2762:"bbd3c104",2795:"6d79126a",2822:"27a4ac5b",2871:"cf576f17",2882:"0e45c1cf",2946:"a35243f1",2952:"b3c7e41c",2967:"6a1db3ad",2979:"25f8d292",2981:"038504d0",2983:"eaa5e2bf",3007:"bffc9924",3091:"9a74ea5f",3144:"6f99ccee",3146:"08443005",3193:"ee14d6a4",3299:"5ee62733",3357:"217c56f0",3384:"d9d4ed7e",3418:"d84064e5",3419:"245f31b6",3459:"ac9b9e54",3487:"f5bc5b04",3500:"a06c1c62",3504:"1c2f2e54",3540:"443301b3",3562:"a45eb030",3580:"7fc6f9a3",3607:"bb6a8626",3623:"2aae489e",3650:"4f0dc550",3657:"882640ca",3722:"b4bb9102",3736:"d934b52b",3811:"4ac917b8",3885:"fe81a7fc",3923:"ddf703d6",3947:"7458971d",3954:"12dd8006",3984:"647ef00c",3988:"843d9bc4",4014:"bec19089",4026:"d652a7a1",4041:"29923ad9",4075:"5d714528",4093:"ee6f0452",4110:"0f4ff415",4135:"9b39cf3b",4282:"f624f22d",4300:"8540ccea",4342:"ade4c6c4",4382:"a7363415",4383:"c3457b50",4436:"fc94a148",4446:"92519810",4491:"83052809",4493:"cceeafb0",4570:"8b9f98d7",4575:"8d1f48c5",4611:"0d064cdf",4614:"23f2a85b",4635:"1ff533ef",4651:"c85cecc4",4682:"bd2dfccd",4733:"f32d41e6",4835:"78d69dee",4931:"a431b2db",4935:"e14465ff",4956:"f9816c44",4971:"b6519e02",5010:"0cd6c959",5034:"b0d90871",5051:"3bc87b5b",5099:"4934a8e8",5123:"501777c7",5189:"8fd3703c",5203:"539ed3ec",5235:"2a59dc45",5251:"5b0d21b9",5253:"e6dbc3b4",5286:"630147e0",5446:"0e42541e",5453:"ecdee66d",5565:"c5eaa6f5",5613:"dc8afdf1",5664:"1ede6e37",5773:"0cf721ff",5813:"cc574d49",5819:"72fdf84d",5868:"78be038f",5900:"8d4054e7",6038:"63d1f832",6057:"d69b1825",6152:"42eb54af",6161:"97b48014",6177:"695a2547",6195:"74045e43",6228:"7e26e901",6267:"7d33a4a9",6354:"e04d1c07",6371:"d45f37cc",6501:"4bfb8996",6512:"a4629d0a",6542:"e82f126f",6555:"4a460eaf",6573:"ff6a8f78",6763:"d6cd937f",6780:"8f3a0af6",6800:"6e2a08fe",6835:"31bde7c5",6840:"3bd67cf4",6848:"3a36e63f",6872:"7ef4ed23",6924:"abe269c1",6977:"909f2a27",6986:"79dfc31f",7048:"e740620a",7076:"8745d395",7079:"a8373241",7131:"0cd375bc",7164:"5dc4bc72",7209:"ae8475a2",7247:"cb9028b5",7254:"c5ac3a0a",7351:"1e79c9b9",7367:"62c9669e",7401:"94075d6a",7406:"651dcc8d",7439:"972cc801",7533:"dfc9b0b0",7572:"ec232b8a",7764:"abc0a144",7776:"d698757b",7791:"8135d440",7794:"a55e168b",7818:"9b9ce313",7879:"ea98c6fb",7934:"bb5b0086",7959:"e57e3c89",8001:"114e44eb",8030:"75c0a89b",8058:"c54b2c4a",8078:"588e191d",8083:"4763f88b",8138:"8a488b19",8140:"5052a768",8172:"cbe1f2c4",8216:"84e0a497",8217:"5cb0fdfc",8331:"ecb04f2a",8338:"2d204375",8549:"b43ce116",8595:"c60db034",8705:"5b05cdf2",8725:"53da57ca",8727:"2bd53873",8753:"fa8fdac0",8755:"79af288c",8763:"c0bcd6ce",8799:"52bbeef1",8833:"1489792c",8874:"4fa5afdd",8903:"80d14346",8904:"9e4100ae",8948:"ecd68b19",9078:"25afcc29",9118:"e3bfcde8",9139:"8fb85401",9162:"ab3b1c28",9175:"4703f4c5",9229:"f43a39d0",9265:"0a0b12af",9316:"d9f2fe18",9400:"df4a7fb5",9406:"781cc6c6",9612:"53f7c730",9655:"db0c82b2",9702:"378d3296",9710:"7ec34777",9726:"7cff3cbb",9738:"b037daf3",9882:"70910623"}[e]+".chunk.js",P.miniCssF=e=>"static/"+e+"."+e+".3597955d.css",P.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),P.o=(e,h)=>Object.prototype.hasOwnProperty.call(e,h),a={},g="internal.plugin-kuadrant:",P.l=(e,h,t,i)=>{if(a[e])a[e].push(h);else{var l,r;if(void 0!==t)for(var n=document.getElementsByTagName("script"),s=0;s<n.length;s++){var _=n[s];if(_.getAttribute("src")==e||_.getAttribute("data-webpack")==g+t){l=_;break}}l||(r=!0,(l=document.createElement("script")).charset="utf-8",l.timeout=120,P.nc&&l.setAttribute("nonce",P.nc),l.setAttribute("data-webpack",g+t),l.src=e),a[e]=[h];var c=(h,g)=>{l.onerror=l.onload=null,clearTimeout(u);var t=a[e];if(delete a[e],l.parentNode&&l.parentNode.removeChild(l),t&&t.forEach(e=>e(g)),h)return h(g)},u=setTimeout(c.bind(null,void 0,{type:"timeout",target:l}),12e4);l.onerror=c.bind(null,l.onerror),l.onload=c.bind(null,l.onload),r&&document.head.appendChild(l)}},P.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},P.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),(()=>{P.S={};var e={},h={};P.I=(a,g)=>{g||(g=[]);var t=h[a];if(t||(t=h[a]={}),!(g.indexOf(t)>=0)){if(g.push(t),e[a])return e[a];P.o(P.S,a)||(P.S[a]={});var i=P.S[a],l="internal.plugin-kuadrant",r=(e,h,a,g)=>{var t=i[e]=i[e]||{},r=t[h];(!r||!r.loaded&&(!g!=!r.eager?g:l>r.from))&&(t[h]={get:a,from:l,eager:!!g})},n=[];return"default"===a&&(r("@backstage/core-plugin-api","1.11.0",()=>Promise.all([P.e(9655),P.e(5478),P.e(9634),P.e(5427),P.e(2233)]).then(()=>()=>P(4614))),r("@backstage/core-plugin-api","1.12.1",()=>Promise.all([P.e(9655),P.e(3504),P.e(5478),P.e(9634),P.e(5427),P.e(5501)]).then(()=>()=>P(23504))),r("@backstage/frontend-plugin-api","0.12.0",()=>Promise.all([P.e(9655),P.e(9316),P.e(4935),P.e(5478),P.e(9634),P.e(5427),P.e(1723)]).then(()=>()=>P(64935))),r("@backstage/frontend-plugin-api","0.13.3",()=>Promise.all([P.e(9655),P.e(9316),P.e(9738),P.e(5478),P.e(9634),P.e(5427),P.e(5501),P.e(1085)]).then(()=>()=>P(19738))),r("@backstage/version-bridge","1.0.11",()=>Promise.all([P.e(5478),P.e(2822)]).then(()=>()=>P(12822))),r("@emotion/cache","11.14.0",()=>P.e(7164).then(()=>()=>P(67164))),r("@emotion/react","11.14.0",()=>Promise.all([P.e(5478),P.e(6322),P.e(3657)]).then(()=>()=>P(53657))),r("@material-ui/core/styles","4.12.4",()=>Promise.all([P.e(9400),P.e(5478),P.e(1942),P.e(4491)]).then(()=>()=>P(64491))),r("@material-ui/styles","4.11.5",()=>Promise.all([P.e(4570),P.e(5478),P.e(3007)]).then(()=>()=>P(94570))),r("@mui/material","5.18.0",()=>Promise.all([P.e(3954),P.e(8083),P.e(5478),P.e(484),P.e(9096),P.e(4994)]).then(()=>()=>P(10464))),r("@mui/private-theming","5.17.1",()=>Promise.all([P.e(5478),P.e(1645)]).then(()=>()=>P(51645))),r("@mui/styled-engine","5.18.0",()=>Promise.all([P.e(2952),P.e(5478),P.e(6322),P.e(5277),P.e(635)]).then(()=>()=>P(92952))),r("@mui/system","5.18.0",()=>Promise.all([P.e(9710),P.e(3954),P.e(5478),P.e(9096),P.e(2464)]).then(()=>()=>P(29710))),r("react-dom","18.3.1",()=>Promise.all([P.e(3144),P.e(5478)]).then(()=>()=>P(43144))),r("react-router-dom","6.30.3",()=>Promise.all([P.e(501),P.e(5478),P.e(484),P.e(9829)]).then(()=>()=>P(62882))),r("react-router","6.30.3",()=>Promise.all([P.e(7367),P.e(5478)]).then(()=>()=>P(97367))),r("react","18.3.1",()=>P.e(4041).then(()=>()=>P(14041)))),e[a]=n.length?Promise.all(n).then(()=>e[a]=1):1}}})(),(()=>{var e;P.g.importScripts&&(e=P.g.location+"");var h=P.g.document;if(!e&&h&&(h.currentScript&&"SCRIPT"===h.currentScript.tagName.toUpperCase()&&(e=h.currentScript.src),!e)){var a=h.getElementsByTagName("script");if(a.length)for(var g=a.length-1;g>-1&&(!e||!/^http(s?):/.test(e));)e=a[g--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),P.p=e})(),t=e=>{var h=e=>e.split(".").map(e=>+e==e?+e:e),a=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(e),g=a[1]?h(a[1]):[];return a[2]&&(g.length++,g.push.apply(g,h(a[2]))),a[3]&&(g.push([]),g.push.apply(g,h(a[3]))),g},i=(e,h)=>{e=t(e),h=t(h);for(var a=0;;){if(a>=e.length)return a<h.length&&"u"!=(typeof h[a])[0];var g=e[a],i=(typeof g)[0];if(a>=h.length)return"u"==i;var l=h[a],r=(typeof l)[0];if(i!=r)return"o"==i&&"n"==r||"s"==r||"u"==i;if("o"!=i&&"u"!=i&&g!=l)return g<l;a++}},l=e=>{var h=e[0],a="";if(1===e.length)return"*";if(h+.5){a+=0==h?">=":-1==h?"<":1==h?"^":2==h?"~":h>0?"=":"!=";for(var g=1,t=1;t<e.length;t++)g--,a+="u"==(typeof(r=e[t]))[0]?"-":(g>0?".":"")+(g=2,r);return a}var i=[];for(t=1;t<e.length;t++){var r=e[t];i.push(0===r?"not("+n()+")":1===r?"("+n()+" || "+n()+")":2===r?i.pop()+" "+i.pop():l(r))}return n();function n(){return i.pop().replace(/^\((.+)\)$/,"$1")}},r=(e,h)=>{if(0 in e){h=t(h);var a=e[0],g=a<0;g&&(a=-a-1);for(var i=0,l=1,n=!0;;l++,i++){var s,_,c=l<e.length?(typeof e[l])[0]:"";if(i>=h.length||"o"==(_=(typeof(s=h[i]))[0]))return!n||("u"==c?l>a&&!g:""==c!=g);if("u"==_){if(!n||"u"!=c)return!1}else if(n)if(c==_)if(l<=a){if(s!=e[l])return!1}else{if(g?s>e[l]:s<e[l])return!1;s!=e[l]&&(n=!1)}else if("s"!=c&&"n"!=c){if(g||l<=a)return!1;n=!1,l--}else{if(l<=a||_<c!=g)return!1;n=!1}else"s"!=c&&"n"!=c&&(n=!1,l--)}}var u=[],o=u.pop.bind(u);for(i=1;i<e.length;i++){var d=e[i];u.push(1==d?o()|o():2==d?o()&o():d?r(d,h):!o())}return!!o()},n=(e,h)=>e&&P.o(e,h),s=e=>(e.loaded=1,e.get()),_=e=>Object.keys(e).reduce((h,a)=>(e[a].eager&&(h[a]=e[a]),h),{}),c=(e,h,a)=>{var g=a?_(e[h]):e[h];return Object.keys(g).reduce((e,h)=>!e||!g[e].loaded&&i(e,h)?h:e,0)},u=(e,h,a,g)=>"Unsatisfied version "+a+" from "+(a&&e[h][a].from)+" of shared singleton module "+h+" (required "+l(g)+")",o=e=>{throw new Error(e)},d=e=>{"undefined"!=typeof console&&console.warn&&console.warn(e)},f=(e,h,a)=>a?a():((e,h)=>o("Shared module "+h+" doesn't exist in shared scope "+e))(e,h),y=(e=>function(h,a,g,t,i){var l=P.I(h);return l&&l.then&&!g?l.then(e.bind(e,h,P.S[h],a,!1,t,i)):e(h,P.S[h],a,g,t,i)})((e,h,a,g,t,i)=>{if(!n(h,a))return f(e,a,i);var l=c(h,a,g);return r(t,l)||d(u(h,a,l,t)),s(h[a][l])}),x={},b={22097:()=>y("default","@backstage/core-plugin-api",!1,[0],()=>Promise.all([P.e(9655),P.e(3504),P.e(5478),P.e(9634),P.e(5427),P.e(5501)]).then(()=>()=>P(23504))),95478:()=>y("default","react",!1,[0],()=>P.e(4041).then(()=>()=>P(14041))),49634:()=>y("default","react-router-dom",!1,[0],()=>Promise.all([P.e(501),P.e(484),P.e(9829)]).then(()=>()=>P(62882))),15427:()=>y("default","@backstage/version-bridge",!1,[0],()=>P.e(441).then(()=>()=>P(12822))),75501:()=>y("default","@backstage/frontend-plugin-api",!1,[0],()=>Promise.all([P.e(9655),P.e(9316),P.e(9738),P.e(9634),P.e(5427)]).then(()=>()=>P(19738))),51723:()=>y("default","@backstage/core-plugin-api",!1,[0],()=>P.e(4614).then(()=>()=>P(4614))),76322:()=>y("default","@emotion/cache",!1,[0],()=>P.e(7164).then(()=>()=>P(67164))),11942:()=>y("default","@material-ui/styles",!1,[0],()=>P.e(4570).then(()=>()=>P(94570))),40484:()=>y("default","react-dom",!1,[0],()=>P.e(3144).then(()=>()=>P(43144))),79096:()=>y("default","@mui/styled-engine",!1,[0],()=>Promise.all([P.e(2952),P.e(6322),P.e(5277)]).then(()=>()=>P(92952))),54994:()=>y("default","@mui/system",!1,[0],()=>Promise.all([P.e(9710),P.e(2464)]).then(()=>()=>P(29710))),5277:()=>y("default","@emotion/react",!1,[0],()=>P.e(6038).then(()=>()=>P(53657))),22464:()=>y("default","@mui/private-theming",!1,[0],()=>P.e(4026).then(()=>()=>P(51645))),9829:()=>y("default","react-router",!1,[0],()=>P.e(7367).then(()=>()=>P(97367))),37976:()=>y("default","@material-ui/core/styles",!1,[0],()=>P.e(6872).then(()=>()=>P(64491)))},p={484:[40484],879:[22097],1723:[51723],1942:[11942],2464:[22464],4994:[54994],5277:[5277],5427:[15427],5478:[95478],5501:[75501],6322:[76322],7976:[37976],9096:[79096],9634:[49634],9829:[9829]},m={},P.f.consumes=(e,h)=>{P.o(p,e)&&p[e].forEach(e=>{if(P.o(x,e))return h.push(x[e]);if(!m[e]){var a=h=>{x[e]=0,P.m[e]=a=>{delete P.c[e],a.exports=h()}};m[e]=!0;var g=h=>{delete x[e],P.m[e]=a=>{throw delete P.c[e],h}};try{var t=b[e]();t.then?h.push(x[e]=t.then(a).catch(g)):a(t)}catch(e){g(e)}}})},(()=>{if("undefined"!=typeof document){var e={2310:0};P.f.miniCss=(h,a)=>{e[h]?a.push(e[h]):0!==e[h]&&{4093:1}[h]&&a.push(e[h]=(e=>new Promise((h,a)=>{var g=P.miniCssF(e),t=P.p+g;if(((e,h)=>{for(var a=document.getElementsByTagName("link"),g=0;g<a.length;g++){var t=(l=a[g]).getAttribute("data-href")||l.getAttribute("href");if("stylesheet"===l.rel&&(t===e||t===h))return l}var i=document.getElementsByTagName("style");for(g=0;g<i.length;g++){var l;if((t=(l=i[g]).getAttribute("data-href"))===e||t===h)return l}})(g,t))return h();((e,h,a,g,t)=>{var i=document.createElement("link");i.rel="stylesheet",i.type="text/css",i.onerror=i.onload=a=>{if(i.onerror=i.onload=null,"load"===a.type)g();else{var l=a&&a.type,r=a&&a.target&&a.target.href||h,n=new Error("Loading CSS chunk "+e+" failed.\n("+l+": "+r+")");n.name="ChunkLoadError",n.code="CSS_CHUNK_LOAD_FAILED",n.type=l,n.request=r,i.parentNode&&i.parentNode.removeChild(i),t(n)}},i.href=h,function(e){const h=document.head,a=h.querySelector("style[data-jss]");a?h.insertBefore(e,a):h.appendChild(e)}(i)})(e,t,0,h,a)}))(h).then(()=>{e[h]=0},a=>{throw delete e[h],a}))}}})(),(()=>{var e={2310:0};P.f.j=(h,a)=>{var g=P.o(e,h)?e[h]:void 0;if(0!==g)if(g)a.push(g[2]);else if(/^(5(277|427|478|501)|9(096|634|829)|(246|48|499)4|1723|1942|6322|7976)$/.test(h))e[h]=0;else{var t=new Promise((a,t)=>g=e[h]=[a,t]);a.push(g[2]=t);var i=P.p+P.u(h),l=new Error;P.l(i,a=>{if(P.o(e,h)&&(0!==(g=e[h])&&(e[h]=void 0),g)){var t=a&&("load"===a.type?"missing":a.type),i=a&&a.target&&a.target.src;l.message="Loading chunk "+h+" failed.\n("+t+": "+i+")",l.name="ChunkLoadError",l.type=t,l.request=i,g[1](l)}},"chunk-"+h,h)}};var h=(h,a)=>{var g,t,[i,l,r]=a,n=0;if(i.some(h=>0!==e[h])){for(g in l)P.o(l,g)&&(P.m[g]=l[g]);r&&r(P)}for(h&&h(a);n<i.length;n++)t=i[n],P.o(e,t)&&e[t]&&e[t][0](),e[t]=0},a=self.webpackChunkinternal_plugin_kuadrant=self.webpackChunkinternal_plugin_kuadrant||[];a.forEach(h.bind(null,0)),a.push=h.bind(null,a.push.bind(a))})(),P(63198)})());
2
- //# sourceMappingURL=internal.plugin-kuadrant.e195d879e62f0e73cc2f.js.map
1
+ __load_plugin_entry__("internal.plugin-kuadrant",(()=>{"use strict";var e,h,a,g,t,i,l,r,n,s,_,c,u,o,f,d,y,x,b,p,m,v={63198:(e,h,a)=>{var g={PluginRoot:()=>a.e(879).then(()=>()=>a(72627)),KuadrantPage:()=>a.e(879).then(()=>()=>a(72627)),EntityKuadrantApiAccessCard:()=>a.e(879).then(()=>()=>a(72627)),EntityKuadrantApiKeyManagementTab:()=>a.e(879).then(()=>()=>a(72627)),EntityKuadrantApiKeysContent:()=>a.e(879).then(()=>()=>a(72627)),EntityKuadrantApiProductInfoContent:()=>a.e(879).then(()=>()=>a(72627))},t=(e,h)=>(a.R=h,h=a.o(g,e)?g[e]():Promise.resolve().then(()=>{throw new Error('Module "'+e+'" does not exist in container.')}),a.R=void 0,h),i=(e,h)=>{if(a.S){var g="default",t=a.S[g];if(t&&t!==e)throw new Error("Container initialization failed as it has already been initialized with a different share scope");return a.S[g]=e,a.I(g,h)}};a.d(h,{get:()=>t,init:()=>i})}},k={};function P(e){var h=k[e];if(void 0!==h)return h.exports;var a=k[e]={id:e,loaded:!1,exports:{}};return v[e].call(a.exports,a,a.exports,P),a.loaded=!0,a.exports}return P.m=v,P.c=k,P.n=e=>{var h=e&&e.__esModule?()=>e.default:()=>e;return P.d(h,{a:h}),h},h=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,P.t=function(a,g){if(1&g&&(a=this(a)),8&g)return a;if("object"==typeof a&&a){if(4&g&&a.__esModule)return a;if(16&g&&"function"==typeof a.then)return a}var t=Object.create(null);P.r(t);var i={};e=e||[null,h({}),h([]),h(h)];for(var l=2&g&&a;("object"==typeof l||"function"==typeof l)&&!~e.indexOf(l);l=h(l))Object.getOwnPropertyNames(l).forEach(e=>i[e]=()=>a[e]);return i.default=()=>a,P.d(t,i),t},P.d=(e,h)=>{for(var a in h)P.o(h,a)&&!P.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:h[a]})},P.f={},P.e=e=>Promise.all(Object.keys(P.f).reduce((h,a)=>(P.f[a](e,h),h),[])),P.u=e=>"static/"+({51:"react-syntax-highlighter_languages_highlight_prolog",200:"react-syntax-highlighter_languages_highlight_mel",206:"react-syntax-highlighter_languages_highlight_gml",371:"react-syntax-highlighter_languages_highlight_excel",456:"react-syntax-highlighter_languages_highlight_roboconf",460:"react-syntax-highlighter_languages_highlight_avrasm",464:"react-syntax-highlighter_languages_highlight_shell",557:"react-syntax-highlighter_languages_highlight_oneC",579:"react-syntax-highlighter_languages_highlight_vbnet",634:"react-syntax-highlighter_languages_highlight_scilab",879:"exposed-PluginRoot",927:"react-syntax-highlighter_languages_highlight_javascript",946:"react-syntax-highlighter_languages_highlight_clojure",985:"react-syntax-highlighter_languages_highlight_monkey",1062:"react-syntax-highlighter_languages_highlight_nim",1084:"react-syntax-highlighter_languages_highlight_aspectj",1099:"react-syntax-highlighter_languages_highlight_ebnf",1173:"react-syntax-highlighter_languages_highlight_autohotkey",1177:"react-syntax-highlighter_languages_highlight_profile",1214:"react-syntax-highlighter_languages_highlight_properties",1276:"react-syntax-highlighter_languages_highlight_phpTemplate",1325:"react-syntax-highlighter_languages_highlight_actionscript",1352:"react-syntax-highlighter_languages_highlight_fortran",1362:"react-syntax-highlighter_languages_highlight_mathematica",1418:"react-syntax-highlighter_languages_highlight_pony",1441:"react-syntax-highlighter_languages_highlight_coq",1461:"react-syntax-highlighter_languages_highlight_livescript",1489:"react-syntax-highlighter_languages_highlight_reasonml",1496:"react-syntax-highlighter_languages_highlight_lua",1522:"react-syntax-highlighter_languages_highlight_dust",1679:"react-syntax-highlighter_languages_highlight_scheme",1694:"react-syntax-highlighter_languages_highlight_accesslog",1727:"react-syntax-highlighter_languages_highlight_oxygene",1750:"react-syntax-highlighter_languages_highlight_makefile",1828:"react-syntax-highlighter_languages_highlight_dockerfile",1895:"react-syntax-highlighter_languages_highlight_pythonRepl",1956:"react-syntax-highlighter_languages_highlight_puppet",1961:"react-syntax-highlighter_languages_highlight_stan",1972:"react-syntax-highlighter_languages_highlight_fsharp",2007:"react-syntax-highlighter_languages_highlight_css",2064:"react-syntax-highlighter_languages_highlight_vhdl",2108:"react-syntax-highlighter_languages_highlight_cLike",2180:"react-syntax-highlighter_languages_highlight_sqf",2234:"react-syntax-highlighter_languages_highlight_lisp",2267:"react-syntax-highlighter_languages_highlight_maxima",2346:"react-syntax-highlighter_languages_highlight_d",2362:"react-syntax-highlighter_languages_highlight_xquery",2378:"react-syntax-highlighter_languages_highlight_parser3",2383:"react-syntax-highlighter_languages_highlight_crmsh",2438:"react-syntax-highlighter_languages_highlight_haxe",2488:"react-syntax-highlighter_languages_highlight_verilog",2496:"react-syntax-highlighter_languages_highlight_erlangRepl",2512:"react-syntax-highlighter_languages_highlight_stylus",2516:"react-syntax-highlighter_languages_highlight_apache",2665:"react-syntax-highlighter_languages_highlight_powershell",2693:"react-syntax-highlighter_languages_highlight_tap",2727:"react-syntax-highlighter_languages_highlight_q",2743:"react-syntax-highlighter_languages_highlight_asciidoc",2762:"react-syntax-highlighter_languages_highlight_haskell",2795:"react-syntax-highlighter_languages_highlight_dns",2871:"react-syntax-highlighter_languages_highlight_typescript",2882:"react-syntax-highlighter_languages_highlight_sml",2979:"react-syntax-highlighter_languages_highlight_plaintext",2981:"react-syntax-highlighter_languages_highlight_ruleslanguage",2983:"react-syntax-highlighter_languages_highlight_golo",3146:"react-syntax-highlighter_languages_highlight_purebasic",3193:"react-syntax-highlighter_languages_highlight_xml",3299:"react-syntax-highlighter_languages_highlight_fix",3357:"react-syntax-highlighter_languages_highlight_x86asm",3384:"react-syntax-highlighter_languages_highlight_ini",3418:"react-syntax-highlighter_languages_highlight_ruby",3419:"react-syntax-highlighter_languages_highlight_nix",3487:"react-syntax-highlighter_languages_highlight_mipsasm",3500:"react-syntax-highlighter_languages_highlight_autoit",3540:"react-syntax-highlighter_languages_highlight_moonscript",3562:"react-syntax-highlighter_languages_highlight_gams",3580:"react-syntax-highlighter_languages_highlight_csp",3607:"react-syntax-highlighter_languages_highlight_abnf",3623:"react-syntax-highlighter_languages_highlight_yaml",3722:"react-syntax-highlighter_languages_highlight_latex",3736:"react-syntax-highlighter_languages_highlight_json",3811:"react-syntax-highlighter_languages_highlight_erb",3885:"react-syntax-highlighter_languages_highlight_stata",3923:"react-syntax-highlighter_languages_highlight_applescript",3988:"react-syntax-highlighter_languages_highlight_vala",4014:"react-syntax-highlighter_languages_highlight_scss",4075:"react-syntax-highlighter_languages_highlight_hsp",4110:"react-syntax-highlighter_languages_highlight_tp",4135:"react-syntax-highlighter_languages_highlight_mizar",4282:"react-syntax-highlighter_languages_highlight_livecodeserver",4300:"react-syntax-highlighter_languages_highlight_r",4342:"react-syntax-highlighter_languages_highlight_php",4383:"react-syntax-highlighter_languages_highlight_dsconfig",4436:"react-syntax-highlighter_languages_highlight_zephir",4446:"react-syntax-highlighter_languages_highlight_leaf",4493:"react-syntax-highlighter_languages_highlight_gauss",4575:"react-syntax-highlighter_languages_highlight_processing",4635:"react-syntax-highlighter_languages_highlight_jbossCli",4733:"react-syntax-highlighter_languages_highlight_llvm",4835:"react-syntax-highlighter_languages_highlight_cos",4931:"react-syntax-highlighter_languages_highlight_step21",4956:"react-syntax-highlighter_languages_highlight_angelscript",4971:"react-syntax-highlighter_languages_highlight_lsl",5034:"react-syntax-highlighter_languages_highlight_ada",5051:"react-syntax-highlighter_languages_highlight_coffeescript",5099:"react-syntax-highlighter_languages_highlight_nsis",5123:"react-syntax-highlighter_languages_highlight_erlang",5189:"react-syntax-highlighter_languages_highlight_dts",5251:"react-syntax-highlighter_languages_highlight_pgsql",5253:"react-syntax-highlighter_languages_highlight_clojureRepl",5286:"react-syntax-highlighter_languages_highlight_nginx",5446:"react-syntax-highlighter_languages_highlight_ocaml",5565:"react-syntax-highlighter_languages_highlight_kotlin",5613:"react-syntax-highlighter_languages_highlight_rib",5664:"react-syntax-highlighter_languages_highlight_dos",5773:"react-syntax-highlighter_languages_highlight_mojolicious",5813:"react-syntax-highlighter_languages_highlight_less",5819:"react-syntax-highlighter_languages_highlight_gradle",5868:"react-syntax-highlighter_languages_highlight_inform7",5900:"react-syntax-highlighter_languages_highlight_lasso",6057:"react-syntax-highlighter_languages_highlight_sqlMore",6152:"react-syntax-highlighter_languages_highlight_vbscriptHtml",6161:"react-syntax-highlighter_languages_highlight_clean",6177:"react-syntax-highlighter_languages_highlight_taggerscript",6195:"react-syntax-highlighter_languages_highlight_ldif",6228:"react-syntax-highlighter_languages_highlight_rust",6267:"react-syntax-highlighter_languages_highlight_swift",6354:"react-syntax-highlighter_languages_highlight_java",6501:"react-syntax-highlighter_languages_highlight_armasm",6512:"react-syntax-highlighter_languages_highlight_scala",6542:"react-syntax-highlighter_languages_highlight_vim",6555:"react-syntax-highlighter_languages_highlight_openscad",6573:"react-syntax-highlighter_languages_highlight_cpp",6780:"react-syntax-highlighter_languages_highlight_qml",6835:"react-syntax-highlighter_languages_highlight_brainfuck",6848:"react-syntax-highlighter_languages_highlight_crystal",6924:"react-syntax-highlighter_languages_highlight_isbl",6977:"react-syntax-highlighter_languages_highlight_rsl",6986:"react-syntax-highlighter_languages_highlight_capnproto",7048:"react-syntax-highlighter_languages_highlight_gherkin",7079:"react-syntax-highlighter_languages_highlight_diff",7131:"react-syntax-highlighter_languages_highlight_protobuf",7209:"react-syntax-highlighter_languages_highlight_perl",7247:"react-syntax-highlighter_languages_highlight_cmake",7254:"react-syntax-highlighter_languages_highlight_subunit",7351:"react-syntax-highlighter_languages_highlight_elixir",7401:"react-syntax-highlighter_languages_highlight_sas",7406:"react-syntax-highlighter_languages_highlight_sql",7439:"react-syntax-highlighter_languages_highlight_flix",7533:"react-syntax-highlighter_languages_highlight_awk",7572:"react-syntax-highlighter_languages_highlight_basic",7764:"react-syntax-highlighter_languages_highlight_go",7776:"react-syntax-highlighter_languages_highlight_haml",7794:"react-syntax-highlighter_languages_highlight_http",7818:"react-syntax-highlighter_languages_highlight_arduino",7879:"react-syntax-highlighter_languages_highlight_csharp",7934:"react-syntax-highlighter_languages_highlight_glsl",7959:"react-syntax-highlighter_languages_highlight_htmlbars",8001:"react-syntax-highlighter_languages_highlight_matlab",8030:"react-syntax-highlighter_languages_highlight_handlebars",8058:"react-syntax-highlighter_languages_highlight_n1ql",8078:"react-syntax-highlighter_languages_highlight_delphi",8138:"react-syntax-highlighter_languages_highlight_elm",8140:"react-syntax-highlighter_languages_highlight_pf",8216:"react-syntax-highlighter_languages_highlight_bnf",8217:"react-syntax-highlighter_languages_highlight_twig",8331:"react-syntax-highlighter_languages_highlight_thrift",8338:"react-syntax-highlighter_languages_highlight_objectivec",8549:"react-syntax-highlighter_languages_highlight_c",8595:"react-syntax-highlighter_languages_highlight_hy",8705:"react-syntax-highlighter_languages_highlight_nodeRepl",8725:"react-syntax-highlighter_languages_highlight_smalltalk",8727:"react-syntax-highlighter/lowlight-import",8753:"react-syntax-highlighter_languages_highlight_mercury",8755:"react-syntax-highlighter_languages_highlight_tcl",8763:"react-syntax-highlighter_languages_highlight_routeros",8833:"react-syntax-highlighter_languages_highlight_markdown",8874:"react-syntax-highlighter_languages_highlight_smali",8903:"react-syntax-highlighter_languages_highlight_axapta",8904:"react-syntax-highlighter_languages_highlight_python",8948:"react-syntax-highlighter_languages_highlight_groovy",9078:"react-syntax-highlighter_languages_highlight_irpf90",9118:"react-syntax-highlighter_languages_highlight_juliaRepl",9139:"react-syntax-highlighter_languages_highlight_django",9162:"react-syntax-highlighter_languages_highlight_ceylon",9175:"react-syntax-highlighter_languages_highlight_vbscript",9229:"react-syntax-highlighter_languages_highlight_julia",9265:"react-syntax-highlighter_languages_highlight_dart",9406:"react-syntax-highlighter_languages_highlight_cal",9612:"react-syntax-highlighter_languages_highlight_bash",9702:"react-syntax-highlighter_languages_highlight_gcode",9726:"react-syntax-highlighter_languages_highlight_xl",9882:"react-syntax-highlighter_languages_highlight_arcade"}[e]||e)+"."+{51:"be0fdf0c",200:"5251fe1a",206:"2347c999",327:"a9a99299",371:"2f5c76b9",441:"f708f1e0",456:"47518214",460:"6381890e",464:"9bbc16eb",501:"87de76da",557:"362a3b0a",579:"21c190ed",634:"bb9cc730",635:"e030b18a",879:"55777e36",927:"b0ad82d3",946:"e3fcc98c",985:"5f60f06d",1062:"17afaed1",1084:"35f221e8",1085:"d17e689a",1099:"a34b6944",1173:"614c5248",1177:"615fa721",1214:"60f97895",1276:"2bd36dc7",1325:"78db0238",1352:"38ec3d00",1362:"d8631b37",1418:"1961f69f",1441:"6b156852",1461:"3ece3068",1489:"a5a73a29",1496:"52f73c98",1522:"b30d0c38",1645:"db086648",1679:"508b5846",1694:"bd112f1a",1727:"ea742315",1750:"cad796c9",1828:"2c5fdf55",1895:"feb72aed",1956:"ee3f80da",1961:"17155e77",1972:"2ba37c00",2007:"2cc312ae",2064:"dea9db6c",2108:"f884fdc0",2180:"43421810",2233:"bf0c10d7",2234:"1cb2f675",2267:"f1f17544",2346:"bf4f2b44",2362:"353780d4",2378:"706a4bd6",2383:"58c4cb07",2438:"e2543cc2",2488:"e32adbeb",2496:"0d7f4890",2512:"cde06cf5",2516:"aa86d495",2628:"20156dc1",2665:"7bd31b3a",2693:"402e473f",2727:"989943de",2743:"4b40a3f9",2762:"bbd3c104",2795:"6d79126a",2821:"972ae33b",2822:"27a4ac5b",2871:"cf576f17",2882:"0e45c1cf",2946:"a35243f1",2952:"b3c7e41c",2967:"65c51af8",2979:"25f8d292",2981:"038504d0",2983:"eaa5e2bf",3007:"bffc9924",3091:"9a74ea5f",3144:"6f99ccee",3146:"08443005",3193:"ee14d6a4",3299:"5ee62733",3357:"217c56f0",3384:"d9d4ed7e",3418:"d84064e5",3419:"245f31b6",3487:"f5bc5b04",3500:"a06c1c62",3504:"1c2f2e54",3540:"443301b3",3562:"a45eb030",3580:"7fc6f9a3",3607:"bb6a8626",3623:"2aae489e",3650:"ee76eba9",3657:"882640ca",3722:"b4bb9102",3736:"d934b52b",3811:"4ac917b8",3885:"fe81a7fc",3923:"ddf703d6",3947:"7458971d",3954:"12dd8006",3984:"647ef00c",3988:"843d9bc4",4014:"bec19089",4026:"d652a7a1",4041:"29923ad9",4075:"5d714528",4093:"ee6f0452",4110:"0f4ff415",4135:"9b39cf3b",4282:"f624f22d",4300:"8540ccea",4342:"ade4c6c4",4382:"a7363415",4383:"c3457b50",4436:"fc94a148",4446:"92519810",4491:"83052809",4493:"cceeafb0",4570:"8b9f98d7",4575:"8d1f48c5",4611:"0d064cdf",4614:"23f2a85b",4635:"1ff533ef",4651:"c85cecc4",4682:"75f17114",4733:"f32d41e6",4835:"78d69dee",4931:"a431b2db",4935:"e14465ff",4956:"f9816c44",4971:"b6519e02",5010:"0cd6c959",5034:"b0d90871",5051:"3bc87b5b",5099:"4934a8e8",5123:"501777c7",5189:"8fd3703c",5203:"b654e8e0",5235:"2a59dc45",5251:"5b0d21b9",5253:"e6dbc3b4",5286:"630147e0",5446:"0e42541e",5453:"ecdee66d",5565:"c5eaa6f5",5613:"dc8afdf1",5664:"1ede6e37",5773:"0cf721ff",5813:"cc574d49",5819:"72fdf84d",5868:"78be038f",5900:"8d4054e7",6038:"63d1f832",6057:"d69b1825",6152:"42eb54af",6161:"97b48014",6177:"695a2547",6195:"74045e43",6228:"7e26e901",6267:"7d33a4a9",6354:"e04d1c07",6371:"d45f37cc",6501:"4bfb8996",6512:"a4629d0a",6542:"e82f126f",6555:"4a460eaf",6573:"ff6a8f78",6763:"d6cd937f",6780:"8f3a0af6",6800:"20f46859",6835:"31bde7c5",6840:"1653e6b0",6848:"3a36e63f",6872:"7ef4ed23",6924:"abe269c1",6977:"909f2a27",6986:"79dfc31f",7048:"e740620a",7076:"8745d395",7079:"a8373241",7131:"0cd375bc",7164:"5dc4bc72",7209:"ae8475a2",7247:"cb9028b5",7254:"c5ac3a0a",7351:"1e79c9b9",7367:"62c9669e",7401:"94075d6a",7406:"651dcc8d",7439:"972cc801",7533:"dfc9b0b0",7572:"ec232b8a",7764:"abc0a144",7776:"d698757b",7791:"ac1ac509",7794:"a55e168b",7818:"9b9ce313",7879:"ea98c6fb",7934:"bb5b0086",7959:"e57e3c89",8001:"114e44eb",8030:"75c0a89b",8058:"c54b2c4a",8078:"588e191d",8083:"4763f88b",8138:"8a488b19",8140:"5052a768",8172:"cbe1f2c4",8216:"84e0a497",8217:"5cb0fdfc",8331:"ecb04f2a",8338:"2d204375",8549:"b43ce116",8595:"c60db034",8705:"5b05cdf2",8725:"53da57ca",8727:"2bd53873",8753:"fa8fdac0",8755:"79af288c",8763:"c0bcd6ce",8799:"52bbeef1",8833:"1489792c",8874:"4fa5afdd",8903:"80d14346",8904:"9e4100ae",8948:"ecd68b19",9078:"25afcc29",9118:"e3bfcde8",9139:"8fb85401",9162:"ab3b1c28",9175:"4703f4c5",9229:"f43a39d0",9265:"0a0b12af",9316:"d9f2fe18",9400:"df4a7fb5",9406:"781cc6c6",9612:"53f7c730",9655:"db0c82b2",9702:"378d3296",9710:"7ec34777",9726:"7cff3cbb",9738:"b037daf3",9882:"70910623"}[e]+".chunk.js",P.miniCssF=e=>"static/"+e+"."+e+".3597955d.css",P.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),P.o=(e,h)=>Object.prototype.hasOwnProperty.call(e,h),a={},g="internal.plugin-kuadrant:",P.l=(e,h,t,i)=>{if(a[e])a[e].push(h);else{var l,r;if(void 0!==t)for(var n=document.getElementsByTagName("script"),s=0;s<n.length;s++){var _=n[s];if(_.getAttribute("src")==e||_.getAttribute("data-webpack")==g+t){l=_;break}}l||(r=!0,(l=document.createElement("script")).charset="utf-8",l.timeout=120,P.nc&&l.setAttribute("nonce",P.nc),l.setAttribute("data-webpack",g+t),l.src=e),a[e]=[h];var c=(h,g)=>{l.onerror=l.onload=null,clearTimeout(u);var t=a[e];if(delete a[e],l.parentNode&&l.parentNode.removeChild(l),t&&t.forEach(e=>e(g)),h)return h(g)},u=setTimeout(c.bind(null,void 0,{type:"timeout",target:l}),12e4);l.onerror=c.bind(null,l.onerror),l.onload=c.bind(null,l.onload),r&&document.head.appendChild(l)}},P.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},P.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),(()=>{P.S={};var e={},h={};P.I=(a,g)=>{g||(g=[]);var t=h[a];if(t||(t=h[a]={}),!(g.indexOf(t)>=0)){if(g.push(t),e[a])return e[a];P.o(P.S,a)||(P.S[a]={});var i=P.S[a],l="internal.plugin-kuadrant",r=(e,h,a,g)=>{var t=i[e]=i[e]||{},r=t[h];(!r||!r.loaded&&(!g!=!r.eager?g:l>r.from))&&(t[h]={get:a,from:l,eager:!!g})},n=[];return"default"===a&&(r("@backstage/core-plugin-api","1.11.0",()=>Promise.all([P.e(9655),P.e(5478),P.e(9634),P.e(5427),P.e(2233)]).then(()=>()=>P(4614))),r("@backstage/core-plugin-api","1.12.1",()=>Promise.all([P.e(9655),P.e(3504),P.e(5478),P.e(9634),P.e(5427),P.e(5501)]).then(()=>()=>P(23504))),r("@backstage/frontend-plugin-api","0.12.0",()=>Promise.all([P.e(9655),P.e(9316),P.e(4935),P.e(5478),P.e(9634),P.e(5427),P.e(1723)]).then(()=>()=>P(64935))),r("@backstage/frontend-plugin-api","0.13.3",()=>Promise.all([P.e(9655),P.e(9316),P.e(9738),P.e(5478),P.e(9634),P.e(5427),P.e(5501),P.e(1085)]).then(()=>()=>P(19738))),r("@backstage/version-bridge","1.0.11",()=>Promise.all([P.e(5478),P.e(2822)]).then(()=>()=>P(12822))),r("@emotion/cache","11.14.0",()=>P.e(7164).then(()=>()=>P(67164))),r("@emotion/react","11.14.0",()=>Promise.all([P.e(5478),P.e(6322),P.e(3657)]).then(()=>()=>P(53657))),r("@material-ui/core/styles","4.12.4",()=>Promise.all([P.e(9400),P.e(5478),P.e(1942),P.e(4491)]).then(()=>()=>P(64491))),r("@material-ui/styles","4.11.5",()=>Promise.all([P.e(4570),P.e(5478),P.e(3007)]).then(()=>()=>P(94570))),r("@mui/material","5.18.0",()=>Promise.all([P.e(3954),P.e(8083),P.e(5478),P.e(484),P.e(9096),P.e(4994)]).then(()=>()=>P(10464))),r("@mui/private-theming","5.17.1",()=>Promise.all([P.e(5478),P.e(1645)]).then(()=>()=>P(51645))),r("@mui/styled-engine","5.18.0",()=>Promise.all([P.e(2952),P.e(5478),P.e(6322),P.e(5277),P.e(635)]).then(()=>()=>P(92952))),r("@mui/system","5.18.0",()=>Promise.all([P.e(9710),P.e(3954),P.e(5478),P.e(9096),P.e(2464)]).then(()=>()=>P(29710))),r("react-dom","18.3.1",()=>Promise.all([P.e(3144),P.e(5478)]).then(()=>()=>P(43144))),r("react-router-dom","6.30.3",()=>Promise.all([P.e(501),P.e(5478),P.e(484),P.e(9829)]).then(()=>()=>P(62882))),r("react-router","6.30.3",()=>Promise.all([P.e(7367),P.e(5478)]).then(()=>()=>P(97367))),r("react","18.3.1",()=>P.e(4041).then(()=>()=>P(14041)))),e[a]=n.length?Promise.all(n).then(()=>e[a]=1):1}}})(),(()=>{var e;P.g.importScripts&&(e=P.g.location+"");var h=P.g.document;if(!e&&h&&(h.currentScript&&"SCRIPT"===h.currentScript.tagName.toUpperCase()&&(e=h.currentScript.src),!e)){var a=h.getElementsByTagName("script");if(a.length)for(var g=a.length-1;g>-1&&(!e||!/^http(s?):/.test(e));)e=a[g--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),P.p=e})(),t=e=>{var h=e=>e.split(".").map(e=>+e==e?+e:e),a=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(e),g=a[1]?h(a[1]):[];return a[2]&&(g.length++,g.push.apply(g,h(a[2]))),a[3]&&(g.push([]),g.push.apply(g,h(a[3]))),g},i=(e,h)=>{e=t(e),h=t(h);for(var a=0;;){if(a>=e.length)return a<h.length&&"u"!=(typeof h[a])[0];var g=e[a],i=(typeof g)[0];if(a>=h.length)return"u"==i;var l=h[a],r=(typeof l)[0];if(i!=r)return"o"==i&&"n"==r||"s"==r||"u"==i;if("o"!=i&&"u"!=i&&g!=l)return g<l;a++}},l=e=>{var h=e[0],a="";if(1===e.length)return"*";if(h+.5){a+=0==h?">=":-1==h?"<":1==h?"^":2==h?"~":h>0?"=":"!=";for(var g=1,t=1;t<e.length;t++)g--,a+="u"==(typeof(r=e[t]))[0]?"-":(g>0?".":"")+(g=2,r);return a}var i=[];for(t=1;t<e.length;t++){var r=e[t];i.push(0===r?"not("+n()+")":1===r?"("+n()+" || "+n()+")":2===r?i.pop()+" "+i.pop():l(r))}return n();function n(){return i.pop().replace(/^\((.+)\)$/,"$1")}},r=(e,h)=>{if(0 in e){h=t(h);var a=e[0],g=a<0;g&&(a=-a-1);for(var i=0,l=1,n=!0;;l++,i++){var s,_,c=l<e.length?(typeof e[l])[0]:"";if(i>=h.length||"o"==(_=(typeof(s=h[i]))[0]))return!n||("u"==c?l>a&&!g:""==c!=g);if("u"==_){if(!n||"u"!=c)return!1}else if(n)if(c==_)if(l<=a){if(s!=e[l])return!1}else{if(g?s>e[l]:s<e[l])return!1;s!=e[l]&&(n=!1)}else if("s"!=c&&"n"!=c){if(g||l<=a)return!1;n=!1,l--}else{if(l<=a||_<c!=g)return!1;n=!1}else"s"!=c&&"n"!=c&&(n=!1,l--)}}var u=[],o=u.pop.bind(u);for(i=1;i<e.length;i++){var f=e[i];u.push(1==f?o()|o():2==f?o()&o():f?r(f,h):!o())}return!!o()},n=(e,h)=>e&&P.o(e,h),s=e=>(e.loaded=1,e.get()),_=e=>Object.keys(e).reduce((h,a)=>(e[a].eager&&(h[a]=e[a]),h),{}),c=(e,h,a)=>{var g=a?_(e[h]):e[h];return Object.keys(g).reduce((e,h)=>!e||!g[e].loaded&&i(e,h)?h:e,0)},u=(e,h,a,g)=>"Unsatisfied version "+a+" from "+(a&&e[h][a].from)+" of shared singleton module "+h+" (required "+l(g)+")",o=e=>{throw new Error(e)},f=e=>{"undefined"!=typeof console&&console.warn&&console.warn(e)},d=(e,h,a)=>a?a():((e,h)=>o("Shared module "+h+" doesn't exist in shared scope "+e))(e,h),y=(e=>function(h,a,g,t,i){var l=P.I(h);return l&&l.then&&!g?l.then(e.bind(e,h,P.S[h],a,!1,t,i)):e(h,P.S[h],a,g,t,i)})((e,h,a,g,t,i)=>{if(!n(h,a))return d(e,a,i);var l=c(h,a,g);return r(t,l)||f(u(h,a,l,t)),s(h[a][l])}),x={},b={22097:()=>y("default","@backstage/core-plugin-api",!1,[0],()=>Promise.all([P.e(9655),P.e(3504),P.e(5478),P.e(9634),P.e(5427),P.e(5501)]).then(()=>()=>P(23504))),95478:()=>y("default","react",!1,[0],()=>P.e(4041).then(()=>()=>P(14041))),49634:()=>y("default","react-router-dom",!1,[0],()=>Promise.all([P.e(501),P.e(484),P.e(9829)]).then(()=>()=>P(62882))),15427:()=>y("default","@backstage/version-bridge",!1,[0],()=>P.e(441).then(()=>()=>P(12822))),75501:()=>y("default","@backstage/frontend-plugin-api",!1,[0],()=>Promise.all([P.e(9655),P.e(9316),P.e(9738),P.e(9634),P.e(5427)]).then(()=>()=>P(19738))),51723:()=>y("default","@backstage/core-plugin-api",!1,[0],()=>P.e(4614).then(()=>()=>P(4614))),76322:()=>y("default","@emotion/cache",!1,[0],()=>P.e(7164).then(()=>()=>P(67164))),11942:()=>y("default","@material-ui/styles",!1,[0],()=>P.e(4570).then(()=>()=>P(94570))),40484:()=>y("default","react-dom",!1,[0],()=>P.e(3144).then(()=>()=>P(43144))),79096:()=>y("default","@mui/styled-engine",!1,[0],()=>Promise.all([P.e(2952),P.e(6322),P.e(5277)]).then(()=>()=>P(92952))),54994:()=>y("default","@mui/system",!1,[0],()=>Promise.all([P.e(9710),P.e(2464)]).then(()=>()=>P(29710))),5277:()=>y("default","@emotion/react",!1,[0],()=>P.e(6038).then(()=>()=>P(53657))),22464:()=>y("default","@mui/private-theming",!1,[0],()=>P.e(4026).then(()=>()=>P(51645))),9829:()=>y("default","react-router",!1,[0],()=>P.e(7367).then(()=>()=>P(97367))),37976:()=>y("default","@material-ui/core/styles",!1,[0],()=>P.e(6872).then(()=>()=>P(64491)))},p={484:[40484],879:[22097],1723:[51723],1942:[11942],2464:[22464],4994:[54994],5277:[5277],5427:[15427],5478:[95478],5501:[75501],6322:[76322],7976:[37976],9096:[79096],9634:[49634],9829:[9829]},m={},P.f.consumes=(e,h)=>{P.o(p,e)&&p[e].forEach(e=>{if(P.o(x,e))return h.push(x[e]);if(!m[e]){var a=h=>{x[e]=0,P.m[e]=a=>{delete P.c[e],a.exports=h()}};m[e]=!0;var g=h=>{delete x[e],P.m[e]=a=>{throw delete P.c[e],h}};try{var t=b[e]();t.then?h.push(x[e]=t.then(a).catch(g)):a(t)}catch(e){g(e)}}})},(()=>{if("undefined"!=typeof document){var e={2310:0};P.f.miniCss=(h,a)=>{e[h]?a.push(e[h]):0!==e[h]&&{4093:1}[h]&&a.push(e[h]=(e=>new Promise((h,a)=>{var g=P.miniCssF(e),t=P.p+g;if(((e,h)=>{for(var a=document.getElementsByTagName("link"),g=0;g<a.length;g++){var t=(l=a[g]).getAttribute("data-href")||l.getAttribute("href");if("stylesheet"===l.rel&&(t===e||t===h))return l}var i=document.getElementsByTagName("style");for(g=0;g<i.length;g++){var l;if((t=(l=i[g]).getAttribute("data-href"))===e||t===h)return l}})(g,t))return h();((e,h,a,g,t)=>{var i=document.createElement("link");i.rel="stylesheet",i.type="text/css",i.onerror=i.onload=a=>{if(i.onerror=i.onload=null,"load"===a.type)g();else{var l=a&&a.type,r=a&&a.target&&a.target.href||h,n=new Error("Loading CSS chunk "+e+" failed.\n("+l+": "+r+")");n.name="ChunkLoadError",n.code="CSS_CHUNK_LOAD_FAILED",n.type=l,n.request=r,i.parentNode&&i.parentNode.removeChild(i),t(n)}},i.href=h,function(e){const h=document.head,a=h.querySelector("style[data-jss]");a?h.insertBefore(e,a):h.appendChild(e)}(i)})(e,t,0,h,a)}))(h).then(()=>{e[h]=0},a=>{throw delete e[h],a}))}}})(),(()=>{var e={2310:0};P.f.j=(h,a)=>{var g=P.o(e,h)?e[h]:void 0;if(0!==g)if(g)a.push(g[2]);else if(/^(5(277|427|478|501)|9(096|634|829)|(246|48|499)4|1723|1942|6322|7976)$/.test(h))e[h]=0;else{var t=new Promise((a,t)=>g=e[h]=[a,t]);a.push(g[2]=t);var i=P.p+P.u(h),l=new Error;P.l(i,a=>{if(P.o(e,h)&&(0!==(g=e[h])&&(e[h]=void 0),g)){var t=a&&("load"===a.type?"missing":a.type),i=a&&a.target&&a.target.src;l.message="Loading chunk "+h+" failed.\n("+t+": "+i+")",l.name="ChunkLoadError",l.type=t,l.request=i,g[1](l)}},"chunk-"+h,h)}};var h=(h,a)=>{var g,t,[i,l,r]=a,n=0;if(i.some(h=>0!==e[h])){for(g in l)P.o(l,g)&&(P.m[g]=l[g]);r&&r(P)}for(h&&h(a);n<i.length;n++)t=i[n],P.o(e,t)&&e[t]&&e[t][0](),e[t]=0},a=self.webpackChunkinternal_plugin_kuadrant=self.webpackChunkinternal_plugin_kuadrant||[];a.forEach(h.bind(null,0)),a.push=h.bind(null,a.push.bind(a))})(),P(63198)})());
2
+ //# sourceMappingURL=internal.plugin-kuadrant.c830fc2d56f9e96a055e.js.map