@kuadrant/kuadrant-backstage-plugin-frontend 0.2.0 → 0.2.1

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 (134) hide show
  1. package/dist/components/ApiKeyManagementTab/ApiKeyManagementTab.esm.js +21 -3
  2. package/dist/components/ApiKeyManagementTab/ApiKeyManagementTab.esm.js.map +1 -1
  3. package/dist/components/CreateAPIProductDialog/CreateAPIProductDialog.esm.js +1 -7
  4. package/dist/components/CreateAPIProductDialog/CreateAPIProductDialog.esm.js.map +1 -1
  5. package/dist/components/KuadrantIcon/KuadrantIcon.esm.js +22 -0
  6. package/dist/components/KuadrantIcon/KuadrantIcon.esm.js.map +1 -0
  7. package/dist/components/icons.esm.js +11 -0
  8. package/dist/components/icons.esm.js.map +1 -0
  9. package/dist/index.d.ts +8 -1
  10. package/dist/index.esm.js +2 -0
  11. package/dist/index.esm.js.map +1 -1
  12. package/dist-scalprum/internal.plugin-kuadrant.c4fb9c2347d3ad03a5d0.js +2 -0
  13. package/dist-scalprum/internal.plugin-kuadrant.c4fb9c2347d3ad03a5d0.js.map +1 -0
  14. package/dist-scalprum/plugin-manifest.json +3 -3
  15. package/dist-scalprum/static/{1037.58dd29ad.chunk.js → 1037.25758556.chunk.js} +1 -1
  16. package/dist-scalprum/static/{1037.58dd29ad.chunk.js.map → 1037.25758556.chunk.js.map} +1 -1
  17. package/dist-scalprum/static/{1584.ae3779f0.chunk.js → 1584.1e45e570.chunk.js} +2 -2
  18. package/dist-scalprum/static/{1584.ae3779f0.chunk.js.map → 1584.1e45e570.chunk.js.map} +1 -1
  19. package/dist-scalprum/static/1719.246c020d.chunk.js +2 -0
  20. package/dist-scalprum/static/1719.246c020d.chunk.js.map +1 -0
  21. package/dist-scalprum/static/{1881.8221c002.chunk.js → 1881.56cde36b.chunk.js} +1 -1
  22. package/dist-scalprum/static/{1881.8221c002.chunk.js.map → 1881.56cde36b.chunk.js.map} +1 -1
  23. package/dist-scalprum/static/286.ee43f560.chunk.js +2 -0
  24. package/dist-scalprum/static/286.ee43f560.chunk.js.map +1 -0
  25. package/dist-scalprum/static/2952.b54bd390.chunk.js +2 -0
  26. package/dist-scalprum/static/2952.b54bd390.chunk.js.map +1 -0
  27. package/dist-scalprum/static/2967.0c2ef90e.chunk.js +2 -0
  28. package/dist-scalprum/static/2967.0c2ef90e.chunk.js.map +1 -0
  29. package/dist-scalprum/static/3015.1fe097c2.chunk.js +3 -0
  30. package/dist-scalprum/static/3015.1fe097c2.chunk.js.LICENSE.txt +9 -0
  31. package/dist-scalprum/static/3015.1fe097c2.chunk.js.map +1 -0
  32. package/dist-scalprum/static/{3581.b5b97f08.chunk.js → 3581.ebe5968a.chunk.js} +1 -1
  33. package/dist-scalprum/static/{3581.b5b97f08.chunk.js.map → 3581.ebe5968a.chunk.js.map} +1 -1
  34. package/dist-scalprum/static/3657.882640ca.chunk.js +3 -0
  35. package/dist-scalprum/static/3657.882640ca.chunk.js.LICENSE.txt +8 -0
  36. package/dist-scalprum/static/3657.882640ca.chunk.js.map +1 -0
  37. package/dist-scalprum/static/{3897.ef4554b5.chunk.js → 3897.6e9c07c0.chunk.js} +1 -1
  38. package/dist-scalprum/static/{3897.ef4554b5.chunk.js.map → 3897.6e9c07c0.chunk.js.map} +1 -1
  39. package/dist-scalprum/static/{3947.ad129ba4.chunk.js → 3947.4f4aa8c2.chunk.js} +1 -1
  40. package/dist-scalprum/static/{3947.ad129ba4.chunk.js.map → 3947.4f4aa8c2.chunk.js.map} +1 -1
  41. package/dist-scalprum/static/{3976.e0873210.chunk.js → 3976.e8a8fda2.chunk.js} +2 -2
  42. package/dist-scalprum/static/{3976.e0873210.chunk.js.map → 3976.e8a8fda2.chunk.js.map} +1 -1
  43. package/dist-scalprum/static/{4083.488ff7a9.chunk.js → 4083.811c4e7a.chunk.js} +2 -2
  44. package/dist-scalprum/static/{4083.488ff7a9.chunk.js.map → 4083.811c4e7a.chunk.js.map} +1 -1
  45. package/dist-scalprum/static/4908.196a4425.chunk.js +2 -0
  46. package/dist-scalprum/static/{5453.3c20d0a6.chunk.js.map → 4908.196a4425.chunk.js.map} +1 -1
  47. package/dist-scalprum/static/{5010.6241b64f.chunk.js → 5010.4f67737b.chunk.js} +2 -2
  48. package/dist-scalprum/static/{5010.6241b64f.chunk.js.map → 5010.4f67737b.chunk.js.map} +1 -1
  49. package/dist-scalprum/static/{512.f1c51799.chunk.js → 512.d592d164.chunk.js} +1 -1
  50. package/dist-scalprum/static/{512.f1c51799.chunk.js.map → 512.d592d164.chunk.js.map} +1 -1
  51. package/dist-scalprum/static/{5289.2e686027.chunk.js → 5289.55069930.chunk.js} +2 -2
  52. package/dist-scalprum/static/{5289.2e686027.chunk.js.map → 5289.55069930.chunk.js.map} +1 -1
  53. package/dist-scalprum/static/5605.430f697e.chunk.js +2 -0
  54. package/dist-scalprum/static/5605.430f697e.chunk.js.map +1 -0
  55. package/dist-scalprum/static/5978.bf347a09.chunk.js +2 -0
  56. package/dist-scalprum/static/5978.bf347a09.chunk.js.map +1 -0
  57. package/dist-scalprum/static/6038.63d1f832.chunk.js +3 -0
  58. package/dist-scalprum/static/6038.63d1f832.chunk.js.LICENSE.txt +8 -0
  59. package/dist-scalprum/static/6038.63d1f832.chunk.js.map +1 -0
  60. package/dist-scalprum/static/{6272.b5645dc2.chunk.js → 6272.3ed14ea4.chunk.js} +1 -1
  61. package/dist-scalprum/static/{6272.b5645dc2.chunk.js.map → 6272.3ed14ea4.chunk.js.map} +1 -1
  62. package/dist-scalprum/static/635.f63679a5.chunk.js +3 -0
  63. package/dist-scalprum/static/635.f63679a5.chunk.js.map +1 -0
  64. package/dist-scalprum/static/6371.7b57ac27.chunk.js +3 -0
  65. package/dist-scalprum/static/6371.7b57ac27.chunk.js.LICENSE.txt +9 -0
  66. package/dist-scalprum/static/6371.7b57ac27.chunk.js.map +1 -0
  67. package/dist-scalprum/static/{6386.2d20c412.chunk.js → 6386.5922f271.chunk.js} +3 -3
  68. package/dist-scalprum/static/{6386.2d20c412.chunk.js.map → 6386.5922f271.chunk.js.map} +1 -1
  69. package/dist-scalprum/static/{6426.bf20c588.chunk.js → 6426.4c18bab5.chunk.js} +1 -1
  70. package/dist-scalprum/static/{6426.bf20c588.chunk.js.map → 6426.4c18bab5.chunk.js.map} +1 -1
  71. package/dist-scalprum/static/6777.a2b77ec5.chunk.js +2 -0
  72. package/dist-scalprum/static/6777.a2b77ec5.chunk.js.map +1 -0
  73. package/dist-scalprum/static/{6800.ddabed69.chunk.js → 6800.a45da2f4.chunk.js} +2 -2
  74. package/dist-scalprum/static/{6800.ddabed69.chunk.js.map → 6800.a45da2f4.chunk.js.map} +1 -1
  75. package/dist-scalprum/static/{6972.e47ec97e.chunk.js → 6972.f22b9446.chunk.js} +1 -1
  76. package/dist-scalprum/static/{6972.e47ec97e.chunk.js.map → 6972.f22b9446.chunk.js.map} +1 -1
  77. package/dist-scalprum/static/7005.8190ad95.chunk.js +2 -0
  78. package/dist-scalprum/static/7005.8190ad95.chunk.js.map +1 -0
  79. package/dist-scalprum/static/7164.5dc4bc72.chunk.js +2 -0
  80. package/dist-scalprum/static/7164.5dc4bc72.chunk.js.map +1 -0
  81. package/dist-scalprum/static/{7266.e760b8c3.chunk.js → 7266.3c4174cc.chunk.js} +1 -1
  82. package/dist-scalprum/static/{7266.e760b8c3.chunk.js.map → 7266.3c4174cc.chunk.js.map} +1 -1
  83. package/dist-scalprum/static/7270.d52407cd.chunk.js +2 -0
  84. package/dist-scalprum/static/7270.d52407cd.chunk.js.map +1 -0
  85. package/dist-scalprum/static/7717.6f5b9dd7.chunk.js +3 -0
  86. package/dist-scalprum/static/7717.6f5b9dd7.chunk.js.map +1 -0
  87. package/dist-scalprum/static/{7791.8f84478d.chunk.js → 7791.ad31cf6d.chunk.js} +2 -2
  88. package/dist-scalprum/static/{7791.8f84478d.chunk.js.map → 7791.ad31cf6d.chunk.js.map} +1 -1
  89. package/dist-scalprum/static/{8563.46f1a3e1.chunk.js → 8563.6501eafb.chunk.js} +2 -2
  90. package/dist-scalprum/static/{8563.46f1a3e1.chunk.js.map → 8563.6501eafb.chunk.js.map} +1 -1
  91. package/dist-scalprum/static/{9079.b6d5c19c.chunk.js → 9079.2ddaea57.chunk.js} +1 -1
  92. package/dist-scalprum/static/{9079.b6d5c19c.chunk.js.map → 9079.2ddaea57.chunk.js.map} +1 -1
  93. package/dist-scalprum/static/9239.1acfe112.chunk.js +2 -0
  94. package/dist-scalprum/static/9239.1acfe112.chunk.js.map +1 -0
  95. package/dist-scalprum/static/exposed-KuadrantIcon.08abbb96.chunk.js +3 -0
  96. package/dist-scalprum/static/exposed-KuadrantIcon.08abbb96.chunk.js.LICENSE.txt +9 -0
  97. package/dist-scalprum/static/exposed-KuadrantIcon.08abbb96.chunk.js.map +1 -0
  98. package/dist-scalprum/static/exposed-KuadrantPage.5ae00605.chunk.js +2 -0
  99. package/dist-scalprum/static/exposed-KuadrantPage.5ae00605.chunk.js.map +1 -0
  100. package/dist-scalprum/static/exposed-PluginRoot.949381c2.chunk.js +2 -0
  101. package/dist-scalprum/static/exposed-PluginRoot.949381c2.chunk.js.map +1 -0
  102. package/package.json +6 -3
  103. package/dist-scalprum/internal.plugin-kuadrant.b3d35dc8b21ce867aa09.js +0 -2
  104. package/dist-scalprum/internal.plugin-kuadrant.b3d35dc8b21ce867aa09.js.map +0 -1
  105. package/dist-scalprum/static/1319.ac195ac2.chunk.js +0 -2
  106. package/dist-scalprum/static/1319.ac195ac2.chunk.js.map +0 -1
  107. package/dist-scalprum/static/2967.7c6a34cd.chunk.js +0 -2
  108. package/dist-scalprum/static/2967.7c6a34cd.chunk.js.map +0 -1
  109. package/dist-scalprum/static/3118.daee3324.chunk.js +0 -3
  110. package/dist-scalprum/static/3118.daee3324.chunk.js.map +0 -1
  111. package/dist-scalprum/static/483.d55d6ab2.chunk.js +0 -2
  112. package/dist-scalprum/static/483.d55d6ab2.chunk.js.map +0 -1
  113. package/dist-scalprum/static/5203.3df62d7e.chunk.js +0 -2
  114. package/dist-scalprum/static/5203.3df62d7e.chunk.js.map +0 -1
  115. package/dist-scalprum/static/5453.3c20d0a6.chunk.js +0 -2
  116. package/dist-scalprum/static/6371.f183dddb.chunk.js +0 -3
  117. package/dist-scalprum/static/6371.f183dddb.chunk.js.map +0 -1
  118. package/dist-scalprum/static/7005.d548f8f1.chunk.js +0 -2
  119. package/dist-scalprum/static/7005.d548f8f1.chunk.js.map +0 -1
  120. package/dist-scalprum/static/7270.301a3c46.chunk.js +0 -2
  121. package/dist-scalprum/static/7270.301a3c46.chunk.js.map +0 -1
  122. package/dist-scalprum/static/9051.f095a8a1.chunk.js +0 -2
  123. package/dist-scalprum/static/9051.f095a8a1.chunk.js.map +0 -1
  124. package/dist-scalprum/static/9838.589f2156.chunk.js +0 -2
  125. package/dist-scalprum/static/9838.589f2156.chunk.js.map +0 -1
  126. package/dist-scalprum/static/exposed-PluginRoot.a8448fcc.chunk.js +0 -2
  127. package/dist-scalprum/static/exposed-PluginRoot.a8448fcc.chunk.js.map +0 -1
  128. /package/dist-scalprum/static/{1584.ae3779f0.chunk.js.LICENSE.txt → 1584.1e45e570.chunk.js.LICENSE.txt} +0 -0
  129. /package/dist-scalprum/static/{4083.488ff7a9.chunk.js.LICENSE.txt → 4083.811c4e7a.chunk.js.LICENSE.txt} +0 -0
  130. /package/dist-scalprum/static/{5010.6241b64f.chunk.js.LICENSE.txt → 5010.4f67737b.chunk.js.LICENSE.txt} +0 -0
  131. /package/dist-scalprum/static/{6371.f183dddb.chunk.js.LICENSE.txt → 635.f63679a5.chunk.js.LICENSE.txt} +0 -0
  132. /package/dist-scalprum/static/{6386.2d20c412.chunk.js.LICENSE.txt → 6386.5922f271.chunk.js.LICENSE.txt} +0 -0
  133. /package/dist-scalprum/static/{3118.daee3324.chunk.js.LICENSE.txt → 7717.6f5b9dd7.chunk.js.LICENSE.txt} +0 -0
  134. /package/dist-scalprum/static/{8563.46f1a3e1.chunk.js.LICENSE.txt → 8563.6501eafb.chunk.js.LICENSE.txt} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"static/3976.e0873210.chunk.js","mappings":"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","sources":["webpack://internal.plugin-kuadrant/./src/components/FilterPanel/FilterPanel.tsx","webpack://internal.plugin-kuadrant/../../node_modules/@material-ui/icons/ExpandLess.js","webpack://internal.plugin-kuadrant/../../node_modules/@material-ui/icons/BrokenImage.js","webpack://internal.plugin-kuadrant/./src/components/ApprovalQueueTable/ApprovalQueueTable.tsx","webpack://internal.plugin-kuadrant/./src/components/ApiKeyApprovalPage/ApiKeyApprovalPage.tsx","webpack://internal.plugin-kuadrant/./node_modules/@backstage/core-components/dist/hooks/useSupportConfig.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/core-components/dist/icons/icons.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/core-components/dist/components/SupportButton/SupportButton.esm.js"],"sourcesContent":["import React from 'react';\nimport {\n Box,\n Typography,\n Checkbox,\n FormControlLabel,\n FormGroup,\n Divider,\n Button,\n Collapse,\n makeStyles,\n} from '@material-ui/core';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport ExpandLessIcon from '@material-ui/icons/ExpandLess';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n width: 240,\n minWidth: 240,\n padding: theme.spacing(2),\n borderRight: `1px solid ${theme.palette.divider}`,\n backgroundColor: theme.palette.background.paper,\n height: '100%',\n overflowY: 'auto',\n },\n sectionTitle: {\n fontWeight: 600,\n fontSize: '0.75rem',\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n color: theme.palette.text.secondary,\n marginBottom: theme.spacing(1),\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n cursor: 'pointer',\n userSelect: 'none',\n },\n filterSection: {\n marginBottom: theme.spacing(2),\n },\n checkbox: {\n padding: theme.spacing(0.5),\n },\n checkboxLabel: {\n fontSize: '0.875rem',\n },\n clearButton: {\n marginTop: theme.spacing(2),\n },\n count: {\n fontSize: '0.75rem',\n color: theme.palette.text.secondary,\n marginLeft: theme.spacing(1),\n },\n}));\n\nexport interface FilterOption {\n value: string;\n label: string;\n count?: number;\n}\n\nexport interface FilterSection {\n id: string;\n title: string;\n options: FilterOption[];\n collapsed?: boolean;\n}\n\nexport interface FilterState {\n [sectionId: string]: string[];\n}\n\ninterface FilterPanelProps {\n sections: FilterSection[];\n filters: FilterState;\n onChange: (filters: FilterState) => void;\n onClear?: () => void;\n}\n\nexport const FilterPanel = ({\n sections,\n filters,\n onChange,\n onClear,\n}: FilterPanelProps) => {\n const classes = useStyles();\n const [collapsedSections, setCollapsedSections] = React.useState<Set<string>>(\n new Set(sections.filter(s => s.collapsed).map(s => s.id)),\n );\n\n const toggleSection = (sectionId: string) => {\n setCollapsedSections(prev => {\n const next = new Set(prev);\n if (next.has(sectionId)) {\n next.delete(sectionId);\n } else {\n next.add(sectionId);\n }\n return next;\n });\n };\n\n const handleCheckboxChange = (sectionId: string, value: string) => {\n const currentValues = filters[sectionId] || [];\n const newValues = currentValues.includes(value)\n ? currentValues.filter(v => v !== value)\n : [...currentValues, value];\n\n onChange({\n ...filters,\n [sectionId]: newValues,\n });\n };\n\n const hasActiveFilters = Object.values(filters).some(\n values => values.length > 0,\n );\n\n const handleClear = () => {\n const clearedFilters: FilterState = {};\n sections.forEach(section => {\n clearedFilters[section.id] = [];\n });\n onChange(clearedFilters);\n onClear?.();\n };\n\n return (\n <Box className={classes.root}>\n <Box display=\"flex\" justifyContent=\"space-between\" alignItems=\"center\" mb={2}>\n <Typography variant=\"subtitle2\">Filters</Typography>\n {hasActiveFilters && (\n <Button\n size=\"small\"\n color=\"primary\"\n onClick={handleClear}\n >\n Clear all\n </Button>\n )}\n </Box>\n\n <Divider />\n\n {sections.map(section => {\n const isCollapsed = collapsedSections.has(section.id);\n const selectedCount = (filters[section.id] || []).length;\n\n return (\n <Box key={section.id} className={classes.filterSection} mt={2}>\n <Box\n className={classes.sectionTitle}\n onClick={() => toggleSection(section.id)}\n >\n <Box display=\"flex\" alignItems=\"center\">\n <span>{section.title}</span>\n {selectedCount > 0 && (\n <span className={classes.count}>({selectedCount})</span>\n )}\n </Box>\n {isCollapsed ? (\n <ExpandMoreIcon fontSize=\"small\" />\n ) : (\n <ExpandLessIcon fontSize=\"small\" />\n )}\n </Box>\n\n <Collapse in={!isCollapsed}>\n <FormGroup>\n {section.options.map(option => (\n <FormControlLabel\n key={option.value}\n control={\n <Checkbox\n checked={(filters[section.id] || []).includes(option.value)}\n onChange={() =>\n handleCheckboxChange(section.id, option.value)\n }\n size=\"small\"\n className={classes.checkbox}\n color=\"primary\"\n />\n }\n label={\n <Box display=\"flex\" alignItems=\"center\">\n <span className={classes.checkboxLabel}>\n {option.label}\n </span>\n {option.count !== undefined && (\n <span className={classes.count}>({option.count})</span>\n )}\n </Box>\n }\n />\n ))}\n </FormGroup>\n </Collapse>\n </Box>\n );\n })}\n </Box>\n );\n};\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 8l-6 6 1.41 1.41L12 10.83l4.59 4.58L18 14z\"\n}), 'ExpandLess');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M21 5v6.59l-3-3.01-4 4.01-4-4-4 4-3-3.01V5c0-1.1.9-2 2-2h14c1.1 0 2 .9 2 2zm-3 6.42l3 3.01V19c0 1.1-.9 2-2 2H5c-1.1 0-2-.9-2-2v-6.58l3 2.99 4-4 4 4 4-3.99z\"\n}), 'BrokenImage');\n\nexports.default = _default;","import React, { useState, useMemo } from \"react\";\nimport {\n useApi,\n identityApiRef,\n alertApiRef,\n} from \"@backstage/core-plugin-api\";\nimport { kuadrantApiRef } from '../../api';\nimport { useAsync } from \"react-use\";\nimport {\n Table,\n TableColumn,\n ResponseErrorPanel,\n Link,\n} from \"@backstage/core-components\";\nimport {\n kuadrantApiKeyUpdateAllPermission,\n kuadrantApiKeyUpdateOwnPermission,\n} from \"../../permissions\";\nimport { useKuadrantPermission } from \"../../utils/permissions\";\nimport {\n Button,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Chip,\n Typography,\n Box,\n CircularProgress,\n TextField,\n makeStyles,\n} from \"@material-ui/core\";\nimport { Skeleton } from \"@material-ui/lab\";\nimport CheckCircleIcon from \"@material-ui/icons/CheckCircle\";\nimport CancelIcon from \"@material-ui/icons/Cancel\";\nimport { FilterPanel, FilterSection, FilterState } from \"../FilterPanel\";\nimport {APIKey, BulkOperationResult} from \"../../types/api-management\";\nimport { getApprovalQueueStatusChipStyle } 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 bulkActions: {\n padding: theme.spacing(2),\n backgroundColor: theme.palette.background.default,\n borderBottom: `1px solid ${theme.palette.divider}`,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n },\n}));\n\ninterface ApprovalDialogProps {\n open: boolean;\n request: APIKey | null;\n action: \"approve\" | \"reject\";\n processing: boolean;\n onClose: () => void;\n onConfirm: () => void;\n}\n\nconst ApprovalDialog = ({\n open,\n request,\n action,\n processing,\n onClose,\n onConfirm,\n}: ApprovalDialogProps) => {\n const [confirmInput, setConfirmInput] = React.useState(\"\");\n const actionLabel = action === \"approve\" ? \"Approve\" : \"Reject\";\n const processingLabel =\n action === \"approve\" ? \"Approving...\" : \"Rejecting...\";\n\n const isReject = action === \"reject\";\n const confirmText = request?.spec.requestedBy?.userId || \"\";\n const canConfirm = isReject ? confirmInput === confirmText : true;\n\n // reset input when dialog closes\n React.useEffect(() => {\n if (!open) {\n setConfirmInput(\"\");\n }\n }, [open]);\n\n return (\n <Dialog\n open={open}\n onClose={processing ? undefined : onClose}\n maxWidth=\"sm\"\n fullWidth\n >\n <DialogTitle>\n {isReject ? (\n <Box display=\"flex\" alignItems=\"center\" style={{ gap: 8 }}>\n <CancelIcon color=\"error\" />\n <span>{actionLabel} API Key</span>\n </Box>\n ) : (\n <span>{actionLabel} API Key</span>\n )}\n </DialogTitle>\n <DialogContent>\n {request && (\n <>\n <p>\n <strong>User:</strong> {request.spec.requestedBy.userId}\n </p>\n <p>\n <strong>API:</strong>{\" \"}\n {request.spec.apiProductRef?.name || \"unknown\"}\n </p>\n <p>\n <strong>Tier:</strong> {request.spec.planTier}\n </p>\n <Box mb={2}>\n <Typography\n variant=\"body2\"\n component=\"span\"\n style={{ fontWeight: \"bold\" }}\n >\n Use Case:\n </Typography>{\" \"}\n <Typography\n variant=\"body2\"\n component=\"span\"\n style={{ whiteSpace: \"pre-wrap\" }}\n >\n {request.spec.useCase || \"-\"}\n </Typography>\n </Box>\n {isReject && (\n <Box mt={2}>\n <Typography variant=\"body2\" color=\"textSecondary\" gutterBottom>\n Type <strong>{confirmText}</strong> to confirm rejection:\n </Typography>\n <TextField\n fullWidth\n variant=\"outlined\"\n size=\"small\"\n value={confirmInput}\n onChange={(e) => setConfirmInput(e.target.value)}\n disabled={processing}\n autoFocus\n placeholder={confirmText}\n />\n </Box>\n )}\n </>\n )}\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose} disabled={processing}>\n Cancel\n </Button>\n <Button\n onClick={onConfirm}\n color={action === \"approve\" ? \"primary\" : \"secondary\"}\n variant=\"contained\"\n disabled={processing || !canConfirm}\n startIcon={\n processing ? (\n <CircularProgress size={16} color=\"inherit\" />\n ) : undefined\n }\n >\n {processing ? processingLabel : actionLabel}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\ninterface BulkActionDialogProps {\n open: boolean;\n requests: APIKey[];\n action: \"approve\" | \"reject\";\n processing: boolean;\n onClose: () => void;\n onConfirm: () => void;\n}\n\nconst BulkActionDialog = ({\n open,\n requests,\n action,\n processing,\n onClose,\n onConfirm,\n}: BulkActionDialogProps) => {\n const isApprove = action === \"approve\";\n const actionLabel = isApprove ? \"Approve All\" : \"Reject All\";\n const processingLabel = isApprove ? \"Approving...\" : \"Rejecting...\";\n\n return (\n <Dialog\n open={open}\n onClose={processing ? undefined : onClose}\n maxWidth=\"md\"\n fullWidth\n >\n <DialogTitle>\n {isApprove ? \"Approve\" : \"Reject\"} {requests.length} API Keys\n </DialogTitle>\n <DialogContent>\n <Typography variant=\"body2\" paragraph>\n You are about to {isApprove ? \"approve\" : \"reject\"} the following API\n keys:\n </Typography>\n <Box mb={2} maxHeight={200} overflow=\"auto\">\n {requests.map((request) => (\n <Box\n key={`${request.metadata.namespace}/${request.metadata.name}`}\n mb={1}\n p={1}\n bgcolor=\"background.default\"\n >\n <Typography variant=\"body2\">\n <strong>{request.spec.requestedBy.userId}</strong> -{\" \"}\n {request.spec.apiProductRef?.name || \"unknown\"} (\n {request.spec.planTier})\n </Typography>\n </Box>\n ))}\n </Box>\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose} disabled={processing}>\n Cancel\n </Button>\n <Button\n onClick={onConfirm}\n color={isApprove ? \"primary\" : \"secondary\"}\n variant=\"contained\"\n disabled={processing}\n startIcon={\n processing ? (\n <CircularProgress size={16} color=\"inherit\" />\n ) : undefined\n }\n >\n {processing ? processingLabel : actionLabel}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\ninterface ExpandedRowProps {\n request: APIKey;\n}\n\nconst ExpandedRowContent = ({ request }: ExpandedRowProps) => {\n const classes = useStyles();\n\n return (\n <Box className={classes.useCasePanel} onClick={(e) => e.stopPropagation()}>\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\ninterface AlertDialogProps {\n open: boolean;\n results: BulkOperationResult[];\n isApprove: boolean;\n onClose: () => void;\n}\n\nconst useBulkAlertStyles = makeStyles((theme) => ({\n successSection: {\n padding: theme.spacing(2),\n backgroundColor: theme.palette.success.main + '14',\n borderRadius: theme.shape.borderRadius,\n marginBottom: theme.spacing(2),\n border: `1px solid ${theme.palette.success.main}40`,\n },\n failureSection: {\n padding: theme.spacing(2),\n backgroundColor: theme.palette.error.main + '14',\n borderRadius: theme.shape.borderRadius,\n marginBottom: theme.spacing(2),\n border: `1px solid ${theme.palette.error.main}40`,\n },\n warningSection: {\n padding: theme.spacing(2),\n backgroundColor: theme.palette.warning.main + '14',\n borderRadius: theme.shape.borderRadius,\n marginBottom: theme.spacing(2),\n border: `1px solid ${theme.palette.warning.main}40`,\n },\n statRow: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n },\n errorList: {\n marginTop: theme.spacing(2),\n padding: 0,\n listStyle: 'none',\n },\n errorItem: {\n padding: theme.spacing(1.5),\n marginBottom: theme.spacing(1),\n backgroundColor: theme.palette.background.paper,\n borderRadius: theme.shape.borderRadius,\n border: `1px solid ${theme.palette.divider}`,\n },\n errorName: {\n fontWeight: 600,\n fontSize: '0.875rem',\n marginBottom: theme.spacing(0.5),\n },\n errorMessage: {\n fontSize: '0.813rem',\n color: theme.palette.error.main,\n fontFamily: 'monospace',\n wordBreak: 'break-word',\n },\n expandButton: {\n marginTop: theme.spacing(1),\n padding: theme.spacing(0.5),\n },\n}));\n\nconst BulkAlertDialog = ({\n open,\n results,\n isApprove,\n onClose,\n}: AlertDialogProps) => {\n const classes = useBulkAlertStyles();\n const [showErrors, setShowErrors] = useState(true);\n const successResults = results.filter((res: any) => res.success);\n const failedResults = results.filter((res: any) => !res.success);\n const hasPartialSuccess = successResults.length > 0;\n\n return (\n <Dialog\n open={open}\n onClose={onClose}\n maxWidth=\"md\"\n fullWidth\n >\n <DialogTitle>\n <Box display=\"flex\" alignItems=\"center\" style={{ gap: 8 }}>\n {hasPartialSuccess ? (\n <>\n <CancelIcon style={{ color: '#ff9800' }} />\n <span>Bulk {isApprove ? \"Approve\" : \"Reject\"} Completed with Issues</span>\n </>\n ) : (\n <>\n <CancelIcon color=\"error\" />\n <span>Bulk {isApprove ? \"Approve\" : \"Reject\"} Failed</span>\n </>\n )}\n </Box>\n </DialogTitle>\n <DialogContent>\n {hasPartialSuccess && (\n <Box className={classes.successSection}>\n <Box className={classes.statRow}>\n <CheckCircleIcon style={{ color: '#4caf50' }} />\n <Typography variant=\"body1\">\n <strong>{successResults.length}</strong> API key{successResults.length !== 1 ? 's' : ''} {isApprove ? 'approved' : 'rejected'} successfully\n </Typography>\n </Box>\n </Box>\n )}\n\n <Box className={hasPartialSuccess ? classes.warningSection : classes.failureSection}>\n <Box className={classes.statRow}>\n <CancelIcon color=\"error\" />\n <Typography variant=\"body1\">\n <strong>{failedResults.length}</strong> request{failedResults.length !== 1 ? 's' : ''} failed\n </Typography>\n </Box>\n\n <Button\n size=\"small\"\n className={classes.expandButton}\n onClick={() => setShowErrors(!showErrors)}\n >\n {showErrors ? 'Hide' : 'Show'} Error Details\n </Button>\n\n {showErrors && (\n <ul className={classes.errorList}>\n {failedResults.map((result, index) => (\n <li key={result.name || index} className={classes.errorItem}>\n <div className={classes.errorName}>\n {result.namespace}/{result.name}\n </div>\n <div className={classes.errorMessage}>\n {result.error || 'Unknown error'}\n </div>\n </li>\n ))}\n </ul>\n )}\n </Box>\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose} color=\"primary\" variant=\"contained\">\n Close\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport const ApprovalQueueTable = () => {\n const classes = useStyles();\n const identityApi = useApi(identityApiRef);\n const alertApi = useApi(alertApiRef);\n const kuadrantApi = useApi(kuadrantApiRef);\n const [refresh, setRefresh] = useState(0);\n const [selectedRequests, setSelectedRequests] = useState<APIKey[]>([]);\n const [dialogState, setDialogState] = useState<{\n open: boolean;\n request: APIKey | null;\n action: \"approve\" | \"reject\";\n processing: boolean;\n }>({\n open: false,\n request: null,\n action: \"approve\",\n processing: false,\n });\n const [bulkDialogState, setBulkDialogState] = useState<{\n open: boolean;\n requests: APIKey[];\n action: \"approve\" | \"reject\";\n processing: boolean;\n }>({\n open: false,\n requests: [],\n action: \"approve\",\n processing: false,\n });\n const [bulkAlertDialogState, setBulkAlertDialogState] = useState<{\n open: boolean;\n results: BulkOperationResult[];\n isApprove: boolean;\n }>({\n open: false,\n results: [],\n isApprove: true,\n });\n const [filters, setFilters] = useState<FilterState>({\n status: [],\n apiProduct: [],\n tier: [],\n });\n\n const {\n allowed: canUpdateAllRequests,\n loading: updateAllPermissionLoading,\n error: updateAllPermissionError,\n } = useKuadrantPermission(kuadrantApiKeyUpdateAllPermission);\n\n const {\n allowed: canUpdateOwnRequests,\n loading: updateOwnPermissionLoading,\n error: updateOwnPermissionError,\n } = useKuadrantPermission(kuadrantApiKeyUpdateOwnPermission);\n\n const updatePermissionLoading =\n updateAllPermissionLoading || updateOwnPermissionLoading;\n const updatePermissionError =\n updateAllPermissionError || updateOwnPermissionError;\n\n const { value, loading, error } = useAsync(async () => {\n const identity = await identityApi.getBackstageIdentity();\n const reviewedBy = identity.userEntityRef;\n\n try {\n const [apiKeyRequests, apiProducts] = await Promise.all([\n kuadrantApi.getAllRequests(),\n kuadrantApi.getApiProducts(),\n ]);\n\n const allRequests = apiKeyRequests.items || [];\n const ownedApiProducts = new Set<string>();\n\n for (const product of apiProducts.items || []) {\n const owner = product.metadata?.annotations?.[\"backstage.io/owner\"];\n if (owner === reviewedBy) {\n ownedApiProducts.add(\n `${product.metadata.namespace}/${product.metadata.name}`,\n );\n }\n }\n\n return { allRequests, reviewedBy, ownedApiProducts };\n\n } catch(err) {\n const errorMessage = err instanceof Error ? err.message : \"unknown error occurred\";\n alertApi.post({\n message: `Failed to get resources. ${errorMessage}`,\n display: \"transient\",\n severity: \"error\",\n });\n return {\n allRequests: [] as APIKey[],\n reviewedBy,\n ownedApiProducts: new Set<string>(),\n };\n }\n }, [kuadrantApi, identityApi, refresh]);\n\n const filterSections: FilterSection[] = useMemo(() => {\n if (!value?.allRequests) return [];\n\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 value.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: \"Pending\", label: \"Pending\", count: statusCounts.Pending },\n {\n value: \"Approved\",\n label: \"Approved\",\n count: statusCounts.Approved,\n },\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 }, [value?.allRequests]);\n\n const filteredRequests = useMemo(() => {\n if (!value?.allRequests) return [];\n\n return value.allRequests.filter((r: APIKey) => {\n if (filters.status.length > 0) {\n const status = r.status?.phase || \"Pending\";\n if (!filters.status.includes(status)) return false;\n }\n if (filters.apiProduct.length > 0) {\n const apiProduct = r.spec.apiProductRef?.name || \"unknown\";\n if (!filters.apiProduct.includes(apiProduct)) return false;\n }\n if (filters.tier.length > 0) {\n const tier = r.spec.planTier || \"unknown\";\n if (!filters.tier.includes(tier)) return false;\n }\n return true;\n });\n }, [value?.allRequests, filters]);\n\n const handleApprove = (request: APIKey) => {\n setDialogState({\n open: true,\n request,\n action: \"approve\",\n processing: false,\n });\n };\n\n const handleReject = (request: APIKey) => {\n setDialogState({\n open: true,\n request,\n action: \"reject\",\n processing: false,\n });\n };\n\n const handleConfirm = async () => {\n if (!dialogState.request || !value) return;\n\n setDialogState((prev) => ({ ...prev, processing: true }));\n\n const apikeyRequestFn = dialogState.action === \"approve\"\n ? (ns: string, n: string, r: string) => kuadrantApi.approveRequest(ns, n, r)\n : (ns: string, n: string, r: string) => kuadrantApi.rejectRequest(ns, n, r)\n try {\n await apikeyRequestFn(dialogState.request.metadata.namespace, dialogState.request.metadata.name, value.reviewedBy);\n\n setDialogState({\n open: false,\n request: null,\n action: \"approve\",\n processing: false,\n });\n // remove the processed request from selection\n setSelectedRequests((prev) =>\n prev.filter(\n (r) =>\n r.metadata.name !== dialogState.request?.metadata.name ||\n r.metadata.namespace !== dialogState.request?.metadata.namespace,\n ),\n );\n setRefresh((r) => r + 1);\n const action = dialogState.action === \"approve\" ? \"approved\" : \"rejected\";\n alertApi.post({\n message: `API key ${action}`,\n severity: \"success\",\n display: \"transient\",\n });\n } catch (err) {\n console.error(`error ${dialogState.action}ing request:`, err);\n setDialogState((prev) => ({ ...prev, processing: false }));\n const errorMessage = err instanceof Error ? err.message : \"unknown error occurred\";\n alertApi.post({\n message: `Failed to ${dialogState.action} API key. ${errorMessage}`,\n severity: \"error\",\n display: \"transient\",\n });\n }\n };\n\n const handleBulkApprove = () => {\n if (selectedRequests.length === 0) return;\n setBulkDialogState({\n open: true,\n requests: selectedRequests,\n action: \"approve\",\n processing: false,\n });\n };\n\n const handleBulkReject = () => {\n if (selectedRequests.length === 0) return;\n setBulkDialogState({\n open: true,\n requests: selectedRequests,\n action: \"reject\",\n processing: false,\n });\n };\n\n const handleBulkConfirm = async () => {\n if (!value || bulkDialogState.requests.length === 0) return;\n\n setBulkDialogState((prev) => ({ ...prev, processing: true }));\n setBulkAlertDialogState({ open: false, results: [], isApprove: true, });\n\n const isApprove = bulkDialogState.action === \"approve\";\n const apiKeyRequestsFn = isApprove\n ? (req: { namespace: string, name: string }[], rb: string) => kuadrantApi.bulkApproveRequests(req, rb)\n : (req: { namespace: string, name: string }[], rb: string) => kuadrantApi.bulkRejectRequests(req, rb)\n\n try {\n const requests = bulkDialogState.requests.map((r) => ({\n namespace: r.metadata.namespace,\n name: r.metadata.name,\n }))\n const bulkResponse = await apiKeyRequestsFn(requests, value.reviewedBy) || [];\n\n const successfulItems = bulkResponse.filter((res: any) => res.success);\n const failedItems = bulkResponse.filter((res: any) => !res.success);\n const totalSuccess = failedItems.length === 0;\n\n const action = isApprove ? \"approved\" : \"rejected\";\n\n setBulkDialogState({\n open: false,\n requests: [],\n action: \"approve\",\n processing: false,\n });\n setBulkAlertDialogState({\n open: !totalSuccess,\n results: bulkResponse,\n isApprove,\n });\n setSelectedRequests([]);\n setRefresh((r) => r + 1);\n\n if (totalSuccess) {\n alertApi.post({\n message: `${successfulItems.length} API keys ${action}`,\n severity: \"success\",\n display: \"transient\",\n });\n }\n } catch (err) {\n console.error(`error bulk ${bulkDialogState.action}ing requests:`, err);\n setBulkDialogState((prev) => ({ ...prev, processing: false }));\n const errorMessage = err instanceof Error ? err.message : \"unknown error occurred\";\n alertApi.post({\n message: `Failed to bulk ${bulkDialogState.action} API keys. ${errorMessage}`,\n severity: \"error\",\n display: \"transient\",\n });\n }\n };\n\n const formatDate = (dateString: string) => {\n const date = new Date(dateString);\n return date.toLocaleDateString(\"en-GB\", {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n });\n };\n\n const columns: TableColumn<APIKey>[] = [\n {\n title: \"Requester\",\n field: \"spec.requestedBy.userId\",\n render: (row) => (\n <Typography variant=\"body2\">{row.spec.requestedBy.userId}</Typography>\n ),\n },\n {\n title: \"API Product\",\n field: \"spec.apiProductRef.name\",\n render: (row) => {\n const name = row.spec.apiProductRef?.name || \"unknown\";\n return (\n <Link to={`/catalog/default/api/${name}`}>\n <strong>{name}</strong>\n </Link>\n );\n },\n },\n {\n title: \"Status\",\n field: \"status.phase\",\n render: (row) => {\n const phase = row.status?.phase || \"Pending\";\n return (\n <Chip label={phase} size=\"small\" style={getApprovalQueueStatusChipStyle(phase)} />\n );\n },\n },\n {\n title: \"Tier\",\n field: \"spec.planTier\",\n render: (row) => (\n <Chip label={row.spec.planTier} size=\"small\" variant=\"outlined\" />\n ),\n },\n {\n title: \"Requested\",\n field: \"metadata.creationTimestamp\",\n render: (row) => (\n <Typography variant=\"body2\">\n {row.metadata.creationTimestamp\n ? formatDate(row.metadata.creationTimestamp)\n : \"-\"}\n </Typography>\n ),\n },\n {\n title: \"Reviewed By\",\n field: \"status.reviewedBy\",\n render: (row) => {\n if (!row.status?.reviewedBy)\n return (\n <Typography variant=\"body2\" color=\"textSecondary\">\n -\n </Typography>\n );\n const reviewer = row.status.reviewedBy.replace(/^user:default\\//, \"\");\n const isAutomatic = reviewer === \"system\";\n return (\n <Box>\n <Typography variant=\"body2\">\n {isAutomatic ? \"Automatic\" : reviewer}\n </Typography>\n {row.status.reviewedAt && (\n <Typography variant=\"caption\" color=\"textSecondary\">\n {formatDate(row.status.reviewedAt)}\n </Typography>\n )}\n </Box>\n );\n },\n },\n {\n title: \"Actions\",\n filtering: false,\n render: (row) => {\n const phase = row.status?.phase || \"Pending\";\n if (phase !== \"Pending\") return null;\n\n const apiProductKey = `${row.metadata.namespace}/${row.spec.apiProductRef?.name || \"unknown\"}`;\n const ownsApiProduct =\n value?.ownedApiProducts?.has(apiProductKey) ?? false;\n const canUpdate =\n canUpdateAllRequests || (canUpdateOwnRequests && ownsApiProduct);\n if (!canUpdate) return null;\n\n return (\n <Box display=\"flex\" style={{ gap: 8 }}>\n <Button\n size=\"small\"\n startIcon={<CheckCircleIcon />}\n onClick={() => handleApprove(row)}\n color=\"primary\"\n variant=\"outlined\"\n >\n Approve\n </Button>\n <Button\n size=\"small\"\n startIcon={<CancelIcon />}\n onClick={() => handleReject(row)}\n color=\"secondary\"\n variant=\"outlined\"\n >\n Reject\n </Button>\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 || updatePermissionLoading) {\n return (\n <Box p={2}>\n {[...Array(5)].map((_, i) => (\n <Box key={i} p={2}>\n <Skeleton variant=\"text\" width=\"100%\" />\n </Box>\n ))}\n </Box>\n );\n }\n\n if (error) {\n return <ResponseErrorPanel error={error} />;\n }\n\n if (updatePermissionError) {\n return (\n <Box p={2}>\n <Typography color=\"error\">\n Unable to check permissions: {updatePermissionError.message}\n </Typography>\n </Box>\n );\n }\n\n const canSelectRows = canUpdateAllRequests || canUpdateOwnRequests;\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 {selectedRequests.length > 0 && (\n <Box className={classes.bulkActions}>\n <Typography variant=\"body2\">\n {selectedRequests.length} request\n {selectedRequests.length !== 1 ? \"s\" : \"\"} selected\n </Typography>\n <Box display=\"flex\" style={{ gap: 8 }}>\n <Button\n size=\"small\"\n variant=\"contained\"\n color=\"primary\"\n startIcon={<CheckCircleIcon />}\n onClick={handleBulkApprove}\n >\n Approve Selected\n </Button>\n <Button\n size=\"small\"\n variant=\"contained\"\n color=\"secondary\"\n startIcon={<CancelIcon />}\n onClick={handleBulkReject}\n >\n Reject Selected\n </Button>\n </Box>\n </Box>\n )}\n\n {filteredRequests.length === 0 ? (\n <Box p={4} textAlign=\"center\">\n <Typography variant=\"body1\" color=\"textSecondary\">\n {value?.allRequests?.length === 0\n ? \"No API keys found.\"\n : \"No API keys match the selected filters.\"}\n </Typography>\n </Box>\n ) : (\n <Table\n options={{\n selection: canSelectRows,\n showSelectAllCheckbox: filteredRequests.some(\n (r: APIKey) =>\n !r.status?.phase || r.status.phase === \"Pending\",\n ),\n selectionProps: (row: APIKey) => ({\n disabled:\n row.status?.phase !== \"Pending\" &&\n row.status?.phase !== undefined,\n }),\n paging: filteredRequests.length > 10,\n pageSize: 20,\n search: true,\n filtering: false,\n debounceInterval: 300,\n showTextRowsSelected: false,\n toolbar: true,\n emptyRowsWhenPaging: false,\n }}\n columns={columns}\n data={filteredRequests.map((item: APIKey) => {\n const isSelected = selectedRequests.some(\n (selected) =>\n selected.metadata.name === item.metadata.name &&\n selected.metadata.namespace === item.metadata.namespace,\n );\n return {\n ...item,\n id: item.metadata.name,\n tableData: { checked: isSelected },\n };\n })}\n onSelectionChange={(rows) => {\n // only allow selecting pending requests\n const pendingOnly = (rows as APIKey[]).filter(\n (r) => !r.status?.phase || r.status.phase === \"Pending\",\n );\n setSelectedRequests(pendingOnly);\n }}\n detailPanel={detailPanelConfig}\n />\n )}\n </Box>\n </Box>\n\n <ApprovalDialog\n open={dialogState.open}\n request={dialogState.request}\n action={dialogState.action}\n processing={dialogState.processing}\n onClose={() =>\n setDialogState({\n open: false,\n request: null,\n action: \"approve\",\n processing: false,\n })\n }\n onConfirm={handleConfirm}\n />\n <BulkActionDialog\n open={bulkDialogState.open}\n requests={bulkDialogState.requests}\n action={bulkDialogState.action}\n processing={bulkDialogState.processing}\n onClose={() =>\n setBulkDialogState({\n open: false,\n requests: [],\n action: \"approve\",\n processing: false,\n })\n }\n onConfirm={handleBulkConfirm}\n />\n <BulkAlertDialog\n open={bulkAlertDialogState.open}\n results={bulkAlertDialogState.results}\n isApprove={bulkAlertDialogState.isApprove}\n onClose={() =>\n setBulkAlertDialogState({\n open: false,\n results: [],\n isApprove: true,\n })\n }\n />\n </>\n );\n};\n","import React from 'react';\nimport {\n Header,\n Page,\n Content,\n SupportButton,\n} from '@backstage/core-components';\nimport { ApprovalQueueTable } from '../ApprovalQueueTable';\n\nexport const ApiKeyApprovalPage = () => {\n return (\n <Page themeId=\"tool\">\n <Header title=\"API Key Approval\" subtitle=\"Review and approve API key requests\">\n <SupportButton>Approve or reject API key access requests</SupportButton>\n </Header>\n <Content>\n <ApprovalQueueTable />\n </Content>\n </Page>\n );\n};\n","import { useApiHolder, configApiRef } from '@backstage/core-plugin-api';\nimport { coreComponentsTranslationRef } from '../translation.esm.js';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nconst useDefaultSupportConfig = () => {\n const { t } = useTranslationRef(coreComponentsTranslationRef);\n return {\n url: \"https://github.com/backstage/backstage/issues\",\n items: [\n {\n title: t(\"supportConfig.default.title\"),\n icon: \"warning\",\n links: [\n {\n // TODO: Update to dedicated support page on backstage.io/docs\n title: t(\"supportConfig.default.linkTitle\"),\n url: \"https://github.com/backstage/backstage/blob/master/app-config.yaml\"\n }\n ]\n }\n ]\n };\n};\nfunction useSupportConfig() {\n const apiHolder = useApiHolder();\n const config = apiHolder.get(configApiRef);\n const supportConfig = config?.getOptionalConfig(\"app.support\");\n const defaultSupportConfig = useDefaultSupportConfig();\n if (!supportConfig) {\n return defaultSupportConfig;\n }\n return {\n url: supportConfig.getString(\"url\"),\n items: supportConfig.getConfigArray(\"items\").flatMap((itemConf) => ({\n title: itemConf.getString(\"title\"),\n icon: itemConf.getOptionalString(\"icon\"),\n links: (itemConf.getOptionalConfigArray(\"links\") ?? []).flatMap(\n (linkConf) => ({\n url: linkConf.getString(\"url\"),\n title: linkConf.getOptionalString(\"title\") ?? \"\"\n })\n )\n }))\n };\n}\n\nexport { useSupportConfig };\n//# sourceMappingURL=useSupportConfig.esm.js.map\n","import { jsx } from 'react/jsx-runtime';\nimport { useApp } from '@backstage/core-plugin-api';\nimport MuiBrokenImageIcon from '@material-ui/icons/BrokenImage';\n\nfunction AppIcon(props) {\n const { id: key, Fallback = MuiBrokenImageIcon, ...rest } = props;\n const app = useApp();\n const Icon = app.getSystemIcon(key) ?? Fallback;\n return /* @__PURE__ */ jsx(Icon, { ...rest });\n}\nfunction BrokenImageIcon(props) {\n return /* @__PURE__ */ jsx(AppIcon, { id: \"brokenImage\", ...props });\n}\nfunction CatalogIcon(props) {\n return /* @__PURE__ */ jsx(AppIcon, { id: \"catalog\", ...props });\n}\nfunction ChatIcon(props) {\n return /* @__PURE__ */ jsx(AppIcon, { id: \"chat\", ...props });\n}\nfunction DashboardIcon(props) {\n return /* @__PURE__ */ jsx(AppIcon, { id: \"dashboard\", ...props });\n}\nfunction DocsIcon(props) {\n return /* @__PURE__ */ jsx(AppIcon, { id: \"docs\", ...props });\n}\nfunction EmailIcon(props) {\n return /* @__PURE__ */ jsx(AppIcon, { id: \"email\", ...props });\n}\nfunction GitHubIcon(props) {\n return /* @__PURE__ */ jsx(AppIcon, { id: \"github\", ...props });\n}\nfunction GroupIcon(props) {\n return /* @__PURE__ */ jsx(AppIcon, { id: \"group\", ...props });\n}\nfunction HelpIcon(props) {\n return /* @__PURE__ */ jsx(AppIcon, { id: \"help\", ...props });\n}\nfunction UserIcon(props) {\n return /* @__PURE__ */ jsx(AppIcon, { id: \"user\", ...props });\n}\nfunction WarningIcon(props) {\n return /* @__PURE__ */ jsx(AppIcon, { id: \"warning\", ...props });\n}\nfunction StarIcon(props) {\n return /* @__PURE__ */ jsx(AppIcon, { id: \"star\", ...props });\n}\nfunction UnstarredIcon(props) {\n return /* @__PURE__ */ jsx(AppIcon, { id: \"unstarred\", ...props });\n}\n\nexport { AppIcon, BrokenImageIcon, CatalogIcon, ChatIcon, DashboardIcon, DocsIcon, EmailIcon, GitHubIcon, GroupIcon, HelpIcon, StarIcon, UnstarredIcon, UserIcon, WarningIcon };\n//# sourceMappingURL=icons.esm.js.map\n","import { jsxs, Fragment, jsx } from 'react/jsx-runtime';\nimport { useApi, configApiRef, useApp } from '@backstage/core-plugin-api';\nimport Box from '@material-ui/core/Box';\nimport Button from '@material-ui/core/Button';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport IconButton from '@material-ui/core/IconButton';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport MenuList from '@material-ui/core/MenuList';\nimport Popover from '@material-ui/core/Popover';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport useMediaQuery from '@material-ui/core/useMediaQuery';\nimport { useState, Children } from 'react';\nimport 'lodash';\nimport 'qs';\nimport 'react-router-dom';\nimport '@react-hookz/web';\nimport { useSupportConfig } from '../../hooks/useSupportConfig.esm.js';\nimport { HelpIcon } from '../../icons/icons.esm.js';\nimport { Link } from '../Link/Link.esm.js';\nimport { coreComponentsTranslationRef } from '../../translation.esm.js';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nconst useStyles = makeStyles(\n {\n popoverList: {\n minWidth: 260,\n maxWidth: 400\n },\n menuItem: {\n whiteSpace: \"normal\"\n }\n },\n { name: \"BackstageSupportButton\" }\n);\nconst SupportIcon = ({ icon }) => {\n const app = useApp();\n const Icon = icon ? app.getSystemIcon(icon) ?? HelpIcon : HelpIcon;\n return /* @__PURE__ */ jsx(Icon, {});\n};\nconst SupportLink = ({ link }) => /* @__PURE__ */ jsx(Link, { to: link.url, children: link.title ?? link.url });\nconst SupportListItem = ({ item }) => {\n return /* @__PURE__ */ jsxs(MenuItem, { button: false, children: [\n /* @__PURE__ */ jsx(ListItemIcon, { children: /* @__PURE__ */ jsx(SupportIcon, { icon: item.icon }) }),\n /* @__PURE__ */ jsx(\n ListItemText,\n {\n primary: item.title,\n secondary: item.links?.reduce(\n (prev, link, idx) => [\n ...prev,\n idx > 0 && /* @__PURE__ */ jsx(\"br\", {}, idx),\n /* @__PURE__ */ jsx(SupportLink, { link }, link.url)\n ],\n []\n )\n }\n )\n ] });\n};\nfunction SupportButton(props) {\n const { t } = useTranslationRef(coreComponentsTranslationRef);\n const { title, items, children } = props;\n const { items: configItems } = useSupportConfig();\n const [popoverOpen, setPopoverOpen] = useState(false);\n const [anchorEl, setAnchorEl] = useState(null);\n const classes = useStyles();\n const supportConfig = useApi(configApiRef).getOptionalConfig(\"app.support\");\n const isSmallScreen = useMediaQuery(\n (theme) => theme.breakpoints.down(\"sm\")\n );\n const onClickHandler = (event) => {\n setAnchorEl(event.currentTarget);\n setPopoverOpen(true);\n };\n const popoverCloseHandler = () => {\n setPopoverOpen(false);\n };\n if (!supportConfig) {\n return null;\n }\n return /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(Box, { display: \"flex\", ml: 1, children: isSmallScreen ? /* @__PURE__ */ jsx(\n IconButton,\n {\n color: \"primary\",\n size: \"small\",\n onClick: onClickHandler,\n \"data-testid\": \"support-button\",\n \"aria-label\": \"Support\",\n children: /* @__PURE__ */ jsx(HelpIcon, {})\n }\n ) : /* @__PURE__ */ jsx(\n Button,\n {\n \"data-testid\": \"support-button\",\n \"aria-label\": \"Support\",\n color: \"primary\",\n onClick: onClickHandler,\n startIcon: /* @__PURE__ */ jsx(HelpIcon, {}),\n children: t(\"supportButton.title\")\n }\n ) }),\n /* @__PURE__ */ jsxs(\n Popover,\n {\n \"data-testid\": \"support-button-popover\",\n open: popoverOpen,\n anchorEl,\n anchorOrigin: {\n vertical: \"bottom\",\n horizontal: \"right\"\n },\n transformOrigin: {\n vertical: \"top\",\n horizontal: \"right\"\n },\n onClose: popoverCloseHandler,\n children: [\n /* @__PURE__ */ jsxs(\n MenuList,\n {\n className: classes.popoverList,\n autoFocusItem: Boolean(anchorEl),\n children: [\n title && /* @__PURE__ */ jsx(\n MenuItem,\n {\n button: false,\n alignItems: \"flex-start\",\n className: classes.menuItem,\n children: /* @__PURE__ */ jsx(Typography, { variant: \"subtitle1\", children: title })\n }\n ),\n Children.map(children, (child, i) => /* @__PURE__ */ jsx(\n MenuItem,\n {\n button: false,\n alignItems: \"flex-start\",\n className: classes.menuItem,\n children: child\n },\n `child-${i}`\n )),\n (items ?? configItems).map((item, i) => /* @__PURE__ */ jsx(SupportListItem, { item }, `item-${i}`))\n ]\n }\n ),\n /* @__PURE__ */ jsx(DialogActions, { children: /* @__PURE__ */ jsx(\n Button,\n {\n color: \"primary\",\n onClick: popoverCloseHandler,\n \"aria-label\": \"Close\",\n children: t(\"supportButton.close\")\n }\n ) })\n ]\n }\n )\n ] });\n}\n\nexport { SupportButton };\n//# sourceMappingURL=SupportButton.esm.js.map\n"],"names":["useStyles","makeStyles","theme","root","width","minWidth","padding","spacing","borderRight","palette","divider","backgroundColor","background","paper","height","overflowY","sectionTitle","fontWeight","fontSize","textTransform","letterSpacing","color","text","secondary","marginBottom","display","alignItems","justifyContent","cursor","userSelect","filterSection","checkbox","checkboxLabel","clearButton","marginTop","count","marginLeft","FilterPanel","sections","filters","onChange","onClear","classes","collapsedSections","setCollapsedSections","React","Set","filter","s","collapsed","map","id","hasActiveFilters","Object","values","some","length","Box","className","mb","Typography","variant","Button","size","onClick","clearedFilters","forEach","section","Divider","isCollapsed","has","selectedCount","mt","toggleSection","sectionId","prev","next","delete","add","span","title","ExpandMoreIcon","ExpandLessIcon","Collapse","in","FormGroup","options","option","FormControlLabel","control","Checkbox","checked","includes","value","currentValues","newValues","v","handleCheckboxChange","label","undefined","_interopRequireDefault","_interopRequireWildcard","exports","_default","default","createElement","d","container","minHeight","tableContainer","flex","overflow","useCasePanel","useCaseLabel","bulkActions","borderBottom","ApprovalDialog","open","request","action","processing","onClose","onConfirm","confirmInput","setConfirmInput","actionLabel","processingLabel","isReject","confirmText","spec","requestedBy","userId","canConfirm","Dialog","maxWidth","fullWidth","DialogTitle","style","gap","CancelIcon","DialogContent","p","strong","apiProductRef","name","planTier","component","whiteSpace","useCase","gutterBottom","TextField","e","target","disabled","autoFocus","placeholder","DialogActions","startIcon","CircularProgress","BulkActionDialog","requests","isApprove","paragraph","maxHeight","bgcolor","metadata","namespace","ExpandedRowContent","stopPropagation","useBulkAlertStyles","successSection","success","main","borderRadius","shape","border","failureSection","error","warningSection","warning","statRow","errorList","listStyle","errorItem","errorName","errorMessage","fontFamily","wordBreak","expandButton","BulkAlertDialog","results","showErrors","setShowErrors","useState","successResults","res","failedResults","hasPartialSuccess","CheckCircleIcon","ul","result","index","li","div","ApprovalQueueTable","identityApi","useApi","identityApiRef","alertApi","alertApiRef","kuadrantApi","kuadrantApiRef","refresh","setRefresh","selectedRequests","setSelectedRequests","dialogState","setDialogState","bulkDialogState","setBulkDialogState","bulkAlertDialogState","setBulkAlertDialogState","setFilters","status","apiProduct","tier","allowed","canUpdateAllRequests","loading","updateAllPermissionLoading","updateAllPermissionError","useKuadrantPermission","kuadrantApiKeyUpdateAllPermission","canUpdateOwnRequests","updateOwnPermissionLoading","updateOwnPermissionError","kuadrantApiKeyUpdateOwnPermission","updatePermissionLoading","updatePermissionError","useAsync","async","reviewedBy","getBackstageIdentity","userEntityRef","apiKeyRequests","apiProducts","Promise","all","getAllRequests","getApiProducts","allRequests","items","ownedApiProducts","product","annotations","err","Error","message","post","severity","filterSections","useMemo","statusCounts","Approved","Pending","Rejected","apiProductCounts","Map","tierCounts","r","phase","set","get","Array","from","entries","charAt","toUpperCase","slice","filteredRequests","formatDate","dateString","Date","toLocaleDateString","year","month","day","columns","field","render","row","Link","to","Chip","getApprovalQueueStatusChipStyle","creationTimestamp","reviewer","replace","isAutomatic","reviewedAt","filtering","apiProductKey","ownsApiProduct","detailPanelConfig","data","rowData","_","i","Skeleton","ResponseErrorPanel","canSelectRows","textAlign","Table","selection","showSelectAllCheckbox","selectionProps","paging","pageSize","search","debounceInterval","showTextRowsSelected","toolbar","emptyRowsWhenPaging","item","isSelected","selected","tableData","onSelectionChange","rows","pendingOnly","detailPanel","apikeyRequestFn","ns","n","approveRequest","rejectRequest","console","apiKeyRequestsFn","req","rb","bulkApproveRequests","bulkRejectRequests","bulkResponse","successfulItems","totalSuccess","ApiKeyApprovalPage","Page","themeId","Header","subtitle","SupportButton","Content","useDefaultSupportConfig","t","url","icon","links","AppIcon","props","key","Fallback","rest","Icon","useApp","getSystemIcon","jsx","HelpIcon","popoverList","menuItem","SupportIcon","app","SupportLink","link","children","SupportListItem","jsxs","MenuItem","button","ListItemIcon","ListItemText","primary","reduce","idx","configItems","config","useApiHolder","configApiRef","supportConfig","getOptionalConfig","defaultSupportConfig","getString","getConfigArray","flatMap","itemConf","getOptionalString","getOptionalConfigArray","linkConf","useSupportConfig","popoverOpen","setPopoverOpen","anchorEl","setAnchorEl","isSmallScreen","useMediaQuery","breakpoints","down","onClickHandler","event","currentTarget","popoverCloseHandler","Fragment","ml","IconButton","Popover","anchorOrigin","vertical","horizontal","transformOrigin","MenuList","autoFocusItem","Boolean","Children","child"],"sourceRoot":""}
1
+ {"version":3,"file":"static/3976.e8a8fda2.chunk.js","mappings":"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","sources":["webpack://internal.plugin-kuadrant/./src/components/FilterPanel/FilterPanel.tsx","webpack://internal.plugin-kuadrant/../../node_modules/@material-ui/icons/ExpandLess.js","webpack://internal.plugin-kuadrant/../../node_modules/@material-ui/icons/BrokenImage.js","webpack://internal.plugin-kuadrant/./src/components/ApprovalQueueTable/ApprovalQueueTable.tsx","webpack://internal.plugin-kuadrant/./src/components/ApiKeyApprovalPage/ApiKeyApprovalPage.tsx","webpack://internal.plugin-kuadrant/./node_modules/@backstage/core-components/dist/hooks/useSupportConfig.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/core-components/dist/icons/icons.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/core-components/dist/components/SupportButton/SupportButton.esm.js"],"sourcesContent":["import React from 'react';\nimport {\n Box,\n Typography,\n Checkbox,\n FormControlLabel,\n FormGroup,\n Divider,\n Button,\n Collapse,\n makeStyles,\n} from '@material-ui/core';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport ExpandLessIcon from '@material-ui/icons/ExpandLess';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n width: 240,\n minWidth: 240,\n padding: theme.spacing(2),\n borderRight: `1px solid ${theme.palette.divider}`,\n backgroundColor: theme.palette.background.paper,\n height: '100%',\n overflowY: 'auto',\n },\n sectionTitle: {\n fontWeight: 600,\n fontSize: '0.75rem',\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n color: theme.palette.text.secondary,\n marginBottom: theme.spacing(1),\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n cursor: 'pointer',\n userSelect: 'none',\n },\n filterSection: {\n marginBottom: theme.spacing(2),\n },\n checkbox: {\n padding: theme.spacing(0.5),\n },\n checkboxLabel: {\n fontSize: '0.875rem',\n },\n clearButton: {\n marginTop: theme.spacing(2),\n },\n count: {\n fontSize: '0.75rem',\n color: theme.palette.text.secondary,\n marginLeft: theme.spacing(1),\n },\n}));\n\nexport interface FilterOption {\n value: string;\n label: string;\n count?: number;\n}\n\nexport interface FilterSection {\n id: string;\n title: string;\n options: FilterOption[];\n collapsed?: boolean;\n}\n\nexport interface FilterState {\n [sectionId: string]: string[];\n}\n\ninterface FilterPanelProps {\n sections: FilterSection[];\n filters: FilterState;\n onChange: (filters: FilterState) => void;\n onClear?: () => void;\n}\n\nexport const FilterPanel = ({\n sections,\n filters,\n onChange,\n onClear,\n}: FilterPanelProps) => {\n const classes = useStyles();\n const [collapsedSections, setCollapsedSections] = React.useState<Set<string>>(\n new Set(sections.filter(s => s.collapsed).map(s => s.id)),\n );\n\n const toggleSection = (sectionId: string) => {\n setCollapsedSections(prev => {\n const next = new Set(prev);\n if (next.has(sectionId)) {\n next.delete(sectionId);\n } else {\n next.add(sectionId);\n }\n return next;\n });\n };\n\n const handleCheckboxChange = (sectionId: string, value: string) => {\n const currentValues = filters[sectionId] || [];\n const newValues = currentValues.includes(value)\n ? currentValues.filter(v => v !== value)\n : [...currentValues, value];\n\n onChange({\n ...filters,\n [sectionId]: newValues,\n });\n };\n\n const hasActiveFilters = Object.values(filters).some(\n values => values.length > 0,\n );\n\n const handleClear = () => {\n const clearedFilters: FilterState = {};\n sections.forEach(section => {\n clearedFilters[section.id] = [];\n });\n onChange(clearedFilters);\n onClear?.();\n };\n\n return (\n <Box className={classes.root}>\n <Box display=\"flex\" justifyContent=\"space-between\" alignItems=\"center\" mb={2}>\n <Typography variant=\"subtitle2\">Filters</Typography>\n {hasActiveFilters && (\n <Button\n size=\"small\"\n color=\"primary\"\n onClick={handleClear}\n >\n Clear all\n </Button>\n )}\n </Box>\n\n <Divider />\n\n {sections.map(section => {\n const isCollapsed = collapsedSections.has(section.id);\n const selectedCount = (filters[section.id] || []).length;\n\n return (\n <Box key={section.id} className={classes.filterSection} mt={2}>\n <Box\n className={classes.sectionTitle}\n onClick={() => toggleSection(section.id)}\n >\n <Box display=\"flex\" alignItems=\"center\">\n <span>{section.title}</span>\n {selectedCount > 0 && (\n <span className={classes.count}>({selectedCount})</span>\n )}\n </Box>\n {isCollapsed ? (\n <ExpandMoreIcon fontSize=\"small\" />\n ) : (\n <ExpandLessIcon fontSize=\"small\" />\n )}\n </Box>\n\n <Collapse in={!isCollapsed}>\n <FormGroup>\n {section.options.map(option => (\n <FormControlLabel\n key={option.value}\n control={\n <Checkbox\n checked={(filters[section.id] || []).includes(option.value)}\n onChange={() =>\n handleCheckboxChange(section.id, option.value)\n }\n size=\"small\"\n className={classes.checkbox}\n color=\"primary\"\n />\n }\n label={\n <Box display=\"flex\" alignItems=\"center\">\n <span className={classes.checkboxLabel}>\n {option.label}\n </span>\n {option.count !== undefined && (\n <span className={classes.count}>({option.count})</span>\n )}\n </Box>\n }\n />\n ))}\n </FormGroup>\n </Collapse>\n </Box>\n );\n })}\n </Box>\n );\n};\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 8l-6 6 1.41 1.41L12 10.83l4.59 4.58L18 14z\"\n}), 'ExpandLess');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M21 5v6.59l-3-3.01-4 4.01-4-4-4 4-3-3.01V5c0-1.1.9-2 2-2h14c1.1 0 2 .9 2 2zm-3 6.42l3 3.01V19c0 1.1-.9 2-2 2H5c-1.1 0-2-.9-2-2v-6.58l3 2.99 4-4 4 4 4-3.99z\"\n}), 'BrokenImage');\n\nexports.default = _default;","import React, { useState, useMemo } from \"react\";\nimport {\n useApi,\n identityApiRef,\n alertApiRef,\n} from \"@backstage/core-plugin-api\";\nimport { kuadrantApiRef } from '../../api';\nimport { useAsync } from \"react-use\";\nimport {\n Table,\n TableColumn,\n ResponseErrorPanel,\n Link,\n} from \"@backstage/core-components\";\nimport {\n kuadrantApiKeyUpdateAllPermission,\n kuadrantApiKeyUpdateOwnPermission,\n} from \"../../permissions\";\nimport { useKuadrantPermission } from \"../../utils/permissions\";\nimport {\n Button,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n Chip,\n Typography,\n Box,\n CircularProgress,\n TextField,\n makeStyles,\n} from \"@material-ui/core\";\nimport { Skeleton } from \"@material-ui/lab\";\nimport CheckCircleIcon from \"@material-ui/icons/CheckCircle\";\nimport CancelIcon from \"@material-ui/icons/Cancel\";\nimport { FilterPanel, FilterSection, FilterState } from \"../FilterPanel\";\nimport {APIKey, BulkOperationResult} from \"../../types/api-management\";\nimport { getApprovalQueueStatusChipStyle } 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 bulkActions: {\n padding: theme.spacing(2),\n backgroundColor: theme.palette.background.default,\n borderBottom: `1px solid ${theme.palette.divider}`,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n },\n}));\n\ninterface ApprovalDialogProps {\n open: boolean;\n request: APIKey | null;\n action: \"approve\" | \"reject\";\n processing: boolean;\n onClose: () => void;\n onConfirm: () => void;\n}\n\nconst ApprovalDialog = ({\n open,\n request,\n action,\n processing,\n onClose,\n onConfirm,\n}: ApprovalDialogProps) => {\n const [confirmInput, setConfirmInput] = React.useState(\"\");\n const actionLabel = action === \"approve\" ? \"Approve\" : \"Reject\";\n const processingLabel =\n action === \"approve\" ? \"Approving...\" : \"Rejecting...\";\n\n const isReject = action === \"reject\";\n const confirmText = request?.spec.requestedBy?.userId || \"\";\n const canConfirm = isReject ? confirmInput === confirmText : true;\n\n // reset input when dialog closes\n React.useEffect(() => {\n if (!open) {\n setConfirmInput(\"\");\n }\n }, [open]);\n\n return (\n <Dialog\n open={open}\n onClose={processing ? undefined : onClose}\n maxWidth=\"sm\"\n fullWidth\n >\n <DialogTitle>\n {isReject ? (\n <Box display=\"flex\" alignItems=\"center\" style={{ gap: 8 }}>\n <CancelIcon color=\"error\" />\n <span>{actionLabel} API Key</span>\n </Box>\n ) : (\n <span>{actionLabel} API Key</span>\n )}\n </DialogTitle>\n <DialogContent>\n {request && (\n <>\n <p>\n <strong>User:</strong> {request.spec.requestedBy.userId}\n </p>\n <p>\n <strong>API:</strong>{\" \"}\n {request.spec.apiProductRef?.name || \"unknown\"}\n </p>\n <p>\n <strong>Tier:</strong> {request.spec.planTier}\n </p>\n <Box mb={2}>\n <Typography\n variant=\"body2\"\n component=\"span\"\n style={{ fontWeight: \"bold\" }}\n >\n Use Case:\n </Typography>{\" \"}\n <Typography\n variant=\"body2\"\n component=\"span\"\n style={{ whiteSpace: \"pre-wrap\" }}\n >\n {request.spec.useCase || \"-\"}\n </Typography>\n </Box>\n {isReject && (\n <Box mt={2}>\n <Typography variant=\"body2\" color=\"textSecondary\" gutterBottom>\n Type <strong>{confirmText}</strong> to confirm rejection:\n </Typography>\n <TextField\n fullWidth\n variant=\"outlined\"\n size=\"small\"\n value={confirmInput}\n onChange={(e) => setConfirmInput(e.target.value)}\n disabled={processing}\n autoFocus\n placeholder={confirmText}\n />\n </Box>\n )}\n </>\n )}\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose} disabled={processing}>\n Cancel\n </Button>\n <Button\n onClick={onConfirm}\n color={action === \"approve\" ? \"primary\" : \"secondary\"}\n variant=\"contained\"\n disabled={processing || !canConfirm}\n startIcon={\n processing ? (\n <CircularProgress size={16} color=\"inherit\" />\n ) : undefined\n }\n >\n {processing ? processingLabel : actionLabel}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\ninterface BulkActionDialogProps {\n open: boolean;\n requests: APIKey[];\n action: \"approve\" | \"reject\";\n processing: boolean;\n onClose: () => void;\n onConfirm: () => void;\n}\n\nconst BulkActionDialog = ({\n open,\n requests,\n action,\n processing,\n onClose,\n onConfirm,\n}: BulkActionDialogProps) => {\n const isApprove = action === \"approve\";\n const actionLabel = isApprove ? \"Approve All\" : \"Reject All\";\n const processingLabel = isApprove ? \"Approving...\" : \"Rejecting...\";\n\n return (\n <Dialog\n open={open}\n onClose={processing ? undefined : onClose}\n maxWidth=\"md\"\n fullWidth\n >\n <DialogTitle>\n {isApprove ? \"Approve\" : \"Reject\"} {requests.length} API Keys\n </DialogTitle>\n <DialogContent>\n <Typography variant=\"body2\" paragraph>\n You are about to {isApprove ? \"approve\" : \"reject\"} the following API\n keys:\n </Typography>\n <Box mb={2} maxHeight={200} overflow=\"auto\">\n {requests.map((request) => (\n <Box\n key={`${request.metadata.namespace}/${request.metadata.name}`}\n mb={1}\n p={1}\n bgcolor=\"background.default\"\n >\n <Typography variant=\"body2\">\n <strong>{request.spec.requestedBy.userId}</strong> -{\" \"}\n {request.spec.apiProductRef?.name || \"unknown\"} (\n {request.spec.planTier})\n </Typography>\n </Box>\n ))}\n </Box>\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose} disabled={processing}>\n Cancel\n </Button>\n <Button\n onClick={onConfirm}\n color={isApprove ? \"primary\" : \"secondary\"}\n variant=\"contained\"\n disabled={processing}\n startIcon={\n processing ? (\n <CircularProgress size={16} color=\"inherit\" />\n ) : undefined\n }\n >\n {processing ? processingLabel : actionLabel}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\ninterface ExpandedRowProps {\n request: APIKey;\n}\n\nconst ExpandedRowContent = ({ request }: ExpandedRowProps) => {\n const classes = useStyles();\n\n return (\n <Box className={classes.useCasePanel} onClick={(e) => e.stopPropagation()}>\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\ninterface AlertDialogProps {\n open: boolean;\n results: BulkOperationResult[];\n isApprove: boolean;\n onClose: () => void;\n}\n\nconst useBulkAlertStyles = makeStyles((theme) => ({\n successSection: {\n padding: theme.spacing(2),\n backgroundColor: theme.palette.success.main + '14',\n borderRadius: theme.shape.borderRadius,\n marginBottom: theme.spacing(2),\n border: `1px solid ${theme.palette.success.main}40`,\n },\n failureSection: {\n padding: theme.spacing(2),\n backgroundColor: theme.palette.error.main + '14',\n borderRadius: theme.shape.borderRadius,\n marginBottom: theme.spacing(2),\n border: `1px solid ${theme.palette.error.main}40`,\n },\n warningSection: {\n padding: theme.spacing(2),\n backgroundColor: theme.palette.warning.main + '14',\n borderRadius: theme.shape.borderRadius,\n marginBottom: theme.spacing(2),\n border: `1px solid ${theme.palette.warning.main}40`,\n },\n statRow: {\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1),\n },\n errorList: {\n marginTop: theme.spacing(2),\n padding: 0,\n listStyle: 'none',\n },\n errorItem: {\n padding: theme.spacing(1.5),\n marginBottom: theme.spacing(1),\n backgroundColor: theme.palette.background.paper,\n borderRadius: theme.shape.borderRadius,\n border: `1px solid ${theme.palette.divider}`,\n },\n errorName: {\n fontWeight: 600,\n fontSize: '0.875rem',\n marginBottom: theme.spacing(0.5),\n },\n errorMessage: {\n fontSize: '0.813rem',\n color: theme.palette.error.main,\n fontFamily: 'monospace',\n wordBreak: 'break-word',\n },\n expandButton: {\n marginTop: theme.spacing(1),\n padding: theme.spacing(0.5),\n },\n}));\n\nconst BulkAlertDialog = ({\n open,\n results,\n isApprove,\n onClose,\n}: AlertDialogProps) => {\n const classes = useBulkAlertStyles();\n const [showErrors, setShowErrors] = useState(true);\n const successResults = results.filter((res: any) => res.success);\n const failedResults = results.filter((res: any) => !res.success);\n const hasPartialSuccess = successResults.length > 0;\n\n return (\n <Dialog\n open={open}\n onClose={onClose}\n maxWidth=\"md\"\n fullWidth\n >\n <DialogTitle>\n <Box display=\"flex\" alignItems=\"center\" style={{ gap: 8 }}>\n {hasPartialSuccess ? (\n <>\n <CancelIcon style={{ color: '#ff9800' }} />\n <span>Bulk {isApprove ? \"Approve\" : \"Reject\"} Completed with Issues</span>\n </>\n ) : (\n <>\n <CancelIcon color=\"error\" />\n <span>Bulk {isApprove ? \"Approve\" : \"Reject\"} Failed</span>\n </>\n )}\n </Box>\n </DialogTitle>\n <DialogContent>\n {hasPartialSuccess && (\n <Box className={classes.successSection}>\n <Box className={classes.statRow}>\n <CheckCircleIcon style={{ color: '#4caf50' }} />\n <Typography variant=\"body1\">\n <strong>{successResults.length}</strong> API key{successResults.length !== 1 ? 's' : ''} {isApprove ? 'approved' : 'rejected'} successfully\n </Typography>\n </Box>\n </Box>\n )}\n\n <Box className={hasPartialSuccess ? classes.warningSection : classes.failureSection}>\n <Box className={classes.statRow}>\n <CancelIcon color=\"error\" />\n <Typography variant=\"body1\">\n <strong>{failedResults.length}</strong> request{failedResults.length !== 1 ? 's' : ''} failed\n </Typography>\n </Box>\n\n <Button\n size=\"small\"\n className={classes.expandButton}\n onClick={() => setShowErrors(!showErrors)}\n >\n {showErrors ? 'Hide' : 'Show'} Error Details\n </Button>\n\n {showErrors && (\n <ul className={classes.errorList}>\n {failedResults.map((result, index) => (\n <li key={result.name || index} className={classes.errorItem}>\n <div className={classes.errorName}>\n {result.namespace}/{result.name}\n </div>\n <div className={classes.errorMessage}>\n {result.error || 'Unknown error'}\n </div>\n </li>\n ))}\n </ul>\n )}\n </Box>\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose} color=\"primary\" variant=\"contained\">\n Close\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport const ApprovalQueueTable = () => {\n const classes = useStyles();\n const identityApi = useApi(identityApiRef);\n const alertApi = useApi(alertApiRef);\n const kuadrantApi = useApi(kuadrantApiRef);\n const [refresh, setRefresh] = useState(0);\n const [selectedRequests, setSelectedRequests] = useState<APIKey[]>([]);\n const [dialogState, setDialogState] = useState<{\n open: boolean;\n request: APIKey | null;\n action: \"approve\" | \"reject\";\n processing: boolean;\n }>({\n open: false,\n request: null,\n action: \"approve\",\n processing: false,\n });\n const [bulkDialogState, setBulkDialogState] = useState<{\n open: boolean;\n requests: APIKey[];\n action: \"approve\" | \"reject\";\n processing: boolean;\n }>({\n open: false,\n requests: [],\n action: \"approve\",\n processing: false,\n });\n const [bulkAlertDialogState, setBulkAlertDialogState] = useState<{\n open: boolean;\n results: BulkOperationResult[];\n isApprove: boolean;\n }>({\n open: false,\n results: [],\n isApprove: true,\n });\n const [filters, setFilters] = useState<FilterState>({\n status: [],\n apiProduct: [],\n tier: [],\n });\n\n const {\n allowed: canUpdateAllRequests,\n loading: updateAllPermissionLoading,\n error: updateAllPermissionError,\n } = useKuadrantPermission(kuadrantApiKeyUpdateAllPermission);\n\n const {\n allowed: canUpdateOwnRequests,\n loading: updateOwnPermissionLoading,\n error: updateOwnPermissionError,\n } = useKuadrantPermission(kuadrantApiKeyUpdateOwnPermission);\n\n const updatePermissionLoading =\n updateAllPermissionLoading || updateOwnPermissionLoading;\n const updatePermissionError =\n updateAllPermissionError || updateOwnPermissionError;\n\n const { value, loading, error } = useAsync(async () => {\n const identity = await identityApi.getBackstageIdentity();\n const reviewedBy = identity.userEntityRef;\n\n try {\n const [apiKeyRequests, apiProducts] = await Promise.all([\n kuadrantApi.getAllRequests(),\n kuadrantApi.getApiProducts(),\n ]);\n\n const allRequests = apiKeyRequests.items || [];\n const ownedApiProducts = new Set<string>();\n\n for (const product of apiProducts.items || []) {\n const owner = product.metadata?.annotations?.[\"backstage.io/owner\"];\n if (owner === reviewedBy) {\n ownedApiProducts.add(\n `${product.metadata.namespace}/${product.metadata.name}`,\n );\n }\n }\n\n return { allRequests, reviewedBy, ownedApiProducts };\n\n } catch(err) {\n const errorMessage = err instanceof Error ? err.message : \"unknown error occurred\";\n alertApi.post({\n message: `Failed to get resources. ${errorMessage}`,\n display: \"transient\",\n severity: \"error\",\n });\n return {\n allRequests: [] as APIKey[],\n reviewedBy,\n ownedApiProducts: new Set<string>(),\n };\n }\n }, [kuadrantApi, identityApi, refresh]);\n\n const filterSections: FilterSection[] = useMemo(() => {\n if (!value?.allRequests) return [];\n\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 value.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: \"Pending\", label: \"Pending\", count: statusCounts.Pending },\n {\n value: \"Approved\",\n label: \"Approved\",\n count: statusCounts.Approved,\n },\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 }, [value?.allRequests]);\n\n const filteredRequests = useMemo(() => {\n if (!value?.allRequests) return [];\n\n return value.allRequests.filter((r: APIKey) => {\n if (filters.status.length > 0) {\n const status = r.status?.phase || \"Pending\";\n if (!filters.status.includes(status)) return false;\n }\n if (filters.apiProduct.length > 0) {\n const apiProduct = r.spec.apiProductRef?.name || \"unknown\";\n if (!filters.apiProduct.includes(apiProduct)) return false;\n }\n if (filters.tier.length > 0) {\n const tier = r.spec.planTier || \"unknown\";\n if (!filters.tier.includes(tier)) return false;\n }\n return true;\n });\n }, [value?.allRequests, filters]);\n\n const handleApprove = (request: APIKey) => {\n setDialogState({\n open: true,\n request,\n action: \"approve\",\n processing: false,\n });\n };\n\n const handleReject = (request: APIKey) => {\n setDialogState({\n open: true,\n request,\n action: \"reject\",\n processing: false,\n });\n };\n\n const handleConfirm = async () => {\n if (!dialogState.request || !value) return;\n\n setDialogState((prev) => ({ ...prev, processing: true }));\n\n const apikeyRequestFn = dialogState.action === \"approve\"\n ? (ns: string, n: string, r: string) => kuadrantApi.approveRequest(ns, n, r)\n : (ns: string, n: string, r: string) => kuadrantApi.rejectRequest(ns, n, r)\n try {\n await apikeyRequestFn(dialogState.request.metadata.namespace, dialogState.request.metadata.name, value.reviewedBy);\n\n setDialogState({\n open: false,\n request: null,\n action: \"approve\",\n processing: false,\n });\n // remove the processed request from selection\n setSelectedRequests((prev) =>\n prev.filter(\n (r) =>\n r.metadata.name !== dialogState.request?.metadata.name ||\n r.metadata.namespace !== dialogState.request?.metadata.namespace,\n ),\n );\n setRefresh((r) => r + 1);\n const action = dialogState.action === \"approve\" ? \"approved\" : \"rejected\";\n alertApi.post({\n message: `API key ${action}`,\n severity: \"success\",\n display: \"transient\",\n });\n } catch (err) {\n console.error(`error ${dialogState.action}ing request:`, err);\n setDialogState((prev) => ({ ...prev, processing: false }));\n const errorMessage = err instanceof Error ? err.message : \"unknown error occurred\";\n alertApi.post({\n message: `Failed to ${dialogState.action} API key. ${errorMessage}`,\n severity: \"error\",\n display: \"transient\",\n });\n }\n };\n\n const handleBulkApprove = () => {\n if (selectedRequests.length === 0) return;\n setBulkDialogState({\n open: true,\n requests: selectedRequests,\n action: \"approve\",\n processing: false,\n });\n };\n\n const handleBulkReject = () => {\n if (selectedRequests.length === 0) return;\n setBulkDialogState({\n open: true,\n requests: selectedRequests,\n action: \"reject\",\n processing: false,\n });\n };\n\n const handleBulkConfirm = async () => {\n if (!value || bulkDialogState.requests.length === 0) return;\n\n setBulkDialogState((prev) => ({ ...prev, processing: true }));\n setBulkAlertDialogState({ open: false, results: [], isApprove: true, });\n\n const isApprove = bulkDialogState.action === \"approve\";\n const apiKeyRequestsFn = isApprove\n ? (req: { namespace: string, name: string }[], rb: string) => kuadrantApi.bulkApproveRequests(req, rb)\n : (req: { namespace: string, name: string }[], rb: string) => kuadrantApi.bulkRejectRequests(req, rb)\n\n try {\n const requests = bulkDialogState.requests.map((r) => ({\n namespace: r.metadata.namespace,\n name: r.metadata.name,\n }))\n const bulkResponse = await apiKeyRequestsFn(requests, value.reviewedBy) || [];\n\n const successfulItems = bulkResponse.filter((res: any) => res.success);\n const failedItems = bulkResponse.filter((res: any) => !res.success);\n const totalSuccess = failedItems.length === 0;\n\n const action = isApprove ? \"approved\" : \"rejected\";\n\n setBulkDialogState({\n open: false,\n requests: [],\n action: \"approve\",\n processing: false,\n });\n setBulkAlertDialogState({\n open: !totalSuccess,\n results: bulkResponse,\n isApprove,\n });\n setSelectedRequests([]);\n setRefresh((r) => r + 1);\n\n if (totalSuccess) {\n alertApi.post({\n message: `${successfulItems.length} API keys ${action}`,\n severity: \"success\",\n display: \"transient\",\n });\n }\n } catch (err) {\n console.error(`error bulk ${bulkDialogState.action}ing requests:`, err);\n setBulkDialogState((prev) => ({ ...prev, processing: false }));\n const errorMessage = err instanceof Error ? err.message : \"unknown error occurred\";\n alertApi.post({\n message: `Failed to bulk ${bulkDialogState.action} API keys. ${errorMessage}`,\n severity: \"error\",\n display: \"transient\",\n });\n }\n };\n\n const formatDate = (dateString: string) => {\n const date = new Date(dateString);\n return date.toLocaleDateString(\"en-GB\", {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n });\n };\n\n const columns: TableColumn<APIKey>[] = [\n {\n title: \"Requester\",\n field: \"spec.requestedBy.userId\",\n render: (row) => (\n <Typography variant=\"body2\">{row.spec.requestedBy.userId}</Typography>\n ),\n },\n {\n title: \"API Product\",\n field: \"spec.apiProductRef.name\",\n render: (row) => {\n const name = row.spec.apiProductRef?.name || \"unknown\";\n return (\n <Link to={`/catalog/default/api/${name}`}>\n <strong>{name}</strong>\n </Link>\n );\n },\n },\n {\n title: \"Status\",\n field: \"status.phase\",\n render: (row) => {\n const phase = row.status?.phase || \"Pending\";\n return (\n <Chip label={phase} size=\"small\" style={getApprovalQueueStatusChipStyle(phase)} />\n );\n },\n },\n {\n title: \"Tier\",\n field: \"spec.planTier\",\n render: (row) => (\n <Chip label={row.spec.planTier} size=\"small\" variant=\"outlined\" />\n ),\n },\n {\n title: \"Requested\",\n field: \"metadata.creationTimestamp\",\n render: (row) => (\n <Typography variant=\"body2\">\n {row.metadata.creationTimestamp\n ? formatDate(row.metadata.creationTimestamp)\n : \"-\"}\n </Typography>\n ),\n },\n {\n title: \"Reviewed By\",\n field: \"status.reviewedBy\",\n render: (row) => {\n if (!row.status?.reviewedBy)\n return (\n <Typography variant=\"body2\" color=\"textSecondary\">\n -\n </Typography>\n );\n const reviewer = row.status.reviewedBy.replace(/^user:default\\//, \"\");\n const isAutomatic = reviewer === \"system\";\n return (\n <Box>\n <Typography variant=\"body2\">\n {isAutomatic ? \"Automatic\" : reviewer}\n </Typography>\n {row.status.reviewedAt && (\n <Typography variant=\"caption\" color=\"textSecondary\">\n {formatDate(row.status.reviewedAt)}\n </Typography>\n )}\n </Box>\n );\n },\n },\n {\n title: \"Actions\",\n filtering: false,\n render: (row) => {\n const phase = row.status?.phase || \"Pending\";\n if (phase !== \"Pending\") return null;\n\n const apiProductKey = `${row.metadata.namespace}/${row.spec.apiProductRef?.name || \"unknown\"}`;\n const ownsApiProduct =\n value?.ownedApiProducts?.has(apiProductKey) ?? false;\n const canUpdate =\n canUpdateAllRequests || (canUpdateOwnRequests && ownsApiProduct);\n if (!canUpdate) return null;\n\n return (\n <Box display=\"flex\" style={{ gap: 8 }}>\n <Button\n size=\"small\"\n startIcon={<CheckCircleIcon />}\n onClick={() => handleApprove(row)}\n color=\"primary\"\n variant=\"outlined\"\n >\n Approve\n </Button>\n <Button\n size=\"small\"\n startIcon={<CancelIcon />}\n onClick={() => handleReject(row)}\n color=\"secondary\"\n variant=\"outlined\"\n >\n Reject\n </Button>\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 || updatePermissionLoading) {\n return (\n <Box p={2}>\n {[...Array(5)].map((_, i) => (\n <Box key={i} p={2}>\n <Skeleton variant=\"text\" width=\"100%\" />\n </Box>\n ))}\n </Box>\n );\n }\n\n if (error) {\n return <ResponseErrorPanel error={error} />;\n }\n\n if (updatePermissionError) {\n return (\n <Box p={2}>\n <Typography color=\"error\">\n Unable to check permissions: {updatePermissionError.message}\n </Typography>\n </Box>\n );\n }\n\n const canSelectRows = canUpdateAllRequests || canUpdateOwnRequests;\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 {selectedRequests.length > 0 && (\n <Box className={classes.bulkActions}>\n <Typography variant=\"body2\">\n {selectedRequests.length} request\n {selectedRequests.length !== 1 ? \"s\" : \"\"} selected\n </Typography>\n <Box display=\"flex\" style={{ gap: 8 }}>\n <Button\n size=\"small\"\n variant=\"contained\"\n color=\"primary\"\n startIcon={<CheckCircleIcon />}\n onClick={handleBulkApprove}\n >\n Approve Selected\n </Button>\n <Button\n size=\"small\"\n variant=\"contained\"\n color=\"secondary\"\n startIcon={<CancelIcon />}\n onClick={handleBulkReject}\n >\n Reject Selected\n </Button>\n </Box>\n </Box>\n )}\n\n {filteredRequests.length === 0 ? (\n <Box p={4} textAlign=\"center\">\n <Typography variant=\"body1\" color=\"textSecondary\">\n {value?.allRequests?.length === 0\n ? \"No API keys found.\"\n : \"No API keys match the selected filters.\"}\n </Typography>\n </Box>\n ) : (\n <Table\n options={{\n selection: canSelectRows,\n showSelectAllCheckbox: filteredRequests.some(\n (r: APIKey) =>\n !r.status?.phase || r.status.phase === \"Pending\",\n ),\n selectionProps: (row: APIKey) => ({\n disabled:\n row.status?.phase !== \"Pending\" &&\n row.status?.phase !== undefined,\n }),\n paging: filteredRequests.length > 10,\n pageSize: 20,\n search: true,\n filtering: false,\n debounceInterval: 300,\n showTextRowsSelected: false,\n toolbar: true,\n emptyRowsWhenPaging: false,\n }}\n columns={columns}\n data={filteredRequests.map((item: APIKey) => {\n const isSelected = selectedRequests.some(\n (selected) =>\n selected.metadata.name === item.metadata.name &&\n selected.metadata.namespace === item.metadata.namespace,\n );\n return {\n ...item,\n id: item.metadata.name,\n tableData: { checked: isSelected },\n };\n })}\n onSelectionChange={(rows) => {\n // only allow selecting pending requests\n const pendingOnly = (rows as APIKey[]).filter(\n (r) => !r.status?.phase || r.status.phase === \"Pending\",\n );\n setSelectedRequests(pendingOnly);\n }}\n detailPanel={detailPanelConfig}\n />\n )}\n </Box>\n </Box>\n\n <ApprovalDialog\n open={dialogState.open}\n request={dialogState.request}\n action={dialogState.action}\n processing={dialogState.processing}\n onClose={() =>\n setDialogState({\n open: false,\n request: null,\n action: \"approve\",\n processing: false,\n })\n }\n onConfirm={handleConfirm}\n />\n <BulkActionDialog\n open={bulkDialogState.open}\n requests={bulkDialogState.requests}\n action={bulkDialogState.action}\n processing={bulkDialogState.processing}\n onClose={() =>\n setBulkDialogState({\n open: false,\n requests: [],\n action: \"approve\",\n processing: false,\n })\n }\n onConfirm={handleBulkConfirm}\n />\n <BulkAlertDialog\n open={bulkAlertDialogState.open}\n results={bulkAlertDialogState.results}\n isApprove={bulkAlertDialogState.isApprove}\n onClose={() =>\n setBulkAlertDialogState({\n open: false,\n results: [],\n isApprove: true,\n })\n }\n />\n </>\n );\n};\n","import React from 'react';\nimport {\n Header,\n Page,\n Content,\n SupportButton,\n} from '@backstage/core-components';\nimport { ApprovalQueueTable } from '../ApprovalQueueTable';\n\nexport const ApiKeyApprovalPage = () => {\n return (\n <Page themeId=\"tool\">\n <Header title=\"API Key Approval\" subtitle=\"Review and approve API key requests\">\n <SupportButton>Approve or reject API key access requests</SupportButton>\n </Header>\n <Content>\n <ApprovalQueueTable />\n </Content>\n </Page>\n );\n};\n","import { useApiHolder, configApiRef } from '@backstage/core-plugin-api';\nimport { coreComponentsTranslationRef } from '../translation.esm.js';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nconst useDefaultSupportConfig = () => {\n const { t } = useTranslationRef(coreComponentsTranslationRef);\n return {\n url: \"https://github.com/backstage/backstage/issues\",\n items: [\n {\n title: t(\"supportConfig.default.title\"),\n icon: \"warning\",\n links: [\n {\n // TODO: Update to dedicated support page on backstage.io/docs\n title: t(\"supportConfig.default.linkTitle\"),\n url: \"https://github.com/backstage/backstage/blob/master/app-config.yaml\"\n }\n ]\n }\n ]\n };\n};\nfunction useSupportConfig() {\n const apiHolder = useApiHolder();\n const config = apiHolder.get(configApiRef);\n const supportConfig = config?.getOptionalConfig(\"app.support\");\n const defaultSupportConfig = useDefaultSupportConfig();\n if (!supportConfig) {\n return defaultSupportConfig;\n }\n return {\n url: supportConfig.getString(\"url\"),\n items: supportConfig.getConfigArray(\"items\").flatMap((itemConf) => ({\n title: itemConf.getString(\"title\"),\n icon: itemConf.getOptionalString(\"icon\"),\n links: (itemConf.getOptionalConfigArray(\"links\") ?? []).flatMap(\n (linkConf) => ({\n url: linkConf.getString(\"url\"),\n title: linkConf.getOptionalString(\"title\") ?? \"\"\n })\n )\n }))\n };\n}\n\nexport { useSupportConfig };\n//# sourceMappingURL=useSupportConfig.esm.js.map\n","import { jsx } from 'react/jsx-runtime';\nimport { useApp } from '@backstage/core-plugin-api';\nimport MuiBrokenImageIcon from '@material-ui/icons/BrokenImage';\n\nfunction AppIcon(props) {\n const { id: key, Fallback = MuiBrokenImageIcon, ...rest } = props;\n const app = useApp();\n const Icon = app.getSystemIcon(key) ?? Fallback;\n return /* @__PURE__ */ jsx(Icon, { ...rest });\n}\nfunction BrokenImageIcon(props) {\n return /* @__PURE__ */ jsx(AppIcon, { id: \"brokenImage\", ...props });\n}\nfunction CatalogIcon(props) {\n return /* @__PURE__ */ jsx(AppIcon, { id: \"catalog\", ...props });\n}\nfunction ChatIcon(props) {\n return /* @__PURE__ */ jsx(AppIcon, { id: \"chat\", ...props });\n}\nfunction DashboardIcon(props) {\n return /* @__PURE__ */ jsx(AppIcon, { id: \"dashboard\", ...props });\n}\nfunction DocsIcon(props) {\n return /* @__PURE__ */ jsx(AppIcon, { id: \"docs\", ...props });\n}\nfunction EmailIcon(props) {\n return /* @__PURE__ */ jsx(AppIcon, { id: \"email\", ...props });\n}\nfunction GitHubIcon(props) {\n return /* @__PURE__ */ jsx(AppIcon, { id: \"github\", ...props });\n}\nfunction GroupIcon(props) {\n return /* @__PURE__ */ jsx(AppIcon, { id: \"group\", ...props });\n}\nfunction HelpIcon(props) {\n return /* @__PURE__ */ jsx(AppIcon, { id: \"help\", ...props });\n}\nfunction UserIcon(props) {\n return /* @__PURE__ */ jsx(AppIcon, { id: \"user\", ...props });\n}\nfunction WarningIcon(props) {\n return /* @__PURE__ */ jsx(AppIcon, { id: \"warning\", ...props });\n}\nfunction StarIcon(props) {\n return /* @__PURE__ */ jsx(AppIcon, { id: \"star\", ...props });\n}\nfunction UnstarredIcon(props) {\n return /* @__PURE__ */ jsx(AppIcon, { id: \"unstarred\", ...props });\n}\n\nexport { AppIcon, BrokenImageIcon, CatalogIcon, ChatIcon, DashboardIcon, DocsIcon, EmailIcon, GitHubIcon, GroupIcon, HelpIcon, StarIcon, UnstarredIcon, UserIcon, WarningIcon };\n//# sourceMappingURL=icons.esm.js.map\n","import { jsxs, Fragment, jsx } from 'react/jsx-runtime';\nimport { useApi, configApiRef, useApp } from '@backstage/core-plugin-api';\nimport Box from '@material-ui/core/Box';\nimport Button from '@material-ui/core/Button';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport IconButton from '@material-ui/core/IconButton';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport MenuList from '@material-ui/core/MenuList';\nimport Popover from '@material-ui/core/Popover';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport useMediaQuery from '@material-ui/core/useMediaQuery';\nimport { useState, Children } from 'react';\nimport 'lodash';\nimport 'qs';\nimport 'react-router-dom';\nimport '@react-hookz/web';\nimport { useSupportConfig } from '../../hooks/useSupportConfig.esm.js';\nimport { HelpIcon } from '../../icons/icons.esm.js';\nimport { Link } from '../Link/Link.esm.js';\nimport { coreComponentsTranslationRef } from '../../translation.esm.js';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nconst useStyles = makeStyles(\n {\n popoverList: {\n minWidth: 260,\n maxWidth: 400\n },\n menuItem: {\n whiteSpace: \"normal\"\n }\n },\n { name: \"BackstageSupportButton\" }\n);\nconst SupportIcon = ({ icon }) => {\n const app = useApp();\n const Icon = icon ? app.getSystemIcon(icon) ?? HelpIcon : HelpIcon;\n return /* @__PURE__ */ jsx(Icon, {});\n};\nconst SupportLink = ({ link }) => /* @__PURE__ */ jsx(Link, { to: link.url, children: link.title ?? link.url });\nconst SupportListItem = ({ item }) => {\n return /* @__PURE__ */ jsxs(MenuItem, { button: false, children: [\n /* @__PURE__ */ jsx(ListItemIcon, { children: /* @__PURE__ */ jsx(SupportIcon, { icon: item.icon }) }),\n /* @__PURE__ */ jsx(\n ListItemText,\n {\n primary: item.title,\n secondary: item.links?.reduce(\n (prev, link, idx) => [\n ...prev,\n idx > 0 && /* @__PURE__ */ jsx(\"br\", {}, idx),\n /* @__PURE__ */ jsx(SupportLink, { link }, link.url)\n ],\n []\n )\n }\n )\n ] });\n};\nfunction SupportButton(props) {\n const { t } = useTranslationRef(coreComponentsTranslationRef);\n const { title, items, children } = props;\n const { items: configItems } = useSupportConfig();\n const [popoverOpen, setPopoverOpen] = useState(false);\n const [anchorEl, setAnchorEl] = useState(null);\n const classes = useStyles();\n const supportConfig = useApi(configApiRef).getOptionalConfig(\"app.support\");\n const isSmallScreen = useMediaQuery(\n (theme) => theme.breakpoints.down(\"sm\")\n );\n const onClickHandler = (event) => {\n setAnchorEl(event.currentTarget);\n setPopoverOpen(true);\n };\n const popoverCloseHandler = () => {\n setPopoverOpen(false);\n };\n if (!supportConfig) {\n return null;\n }\n return /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(Box, { display: \"flex\", ml: 1, children: isSmallScreen ? /* @__PURE__ */ jsx(\n IconButton,\n {\n color: \"primary\",\n size: \"small\",\n onClick: onClickHandler,\n \"data-testid\": \"support-button\",\n \"aria-label\": \"Support\",\n children: /* @__PURE__ */ jsx(HelpIcon, {})\n }\n ) : /* @__PURE__ */ jsx(\n Button,\n {\n \"data-testid\": \"support-button\",\n \"aria-label\": \"Support\",\n color: \"primary\",\n onClick: onClickHandler,\n startIcon: /* @__PURE__ */ jsx(HelpIcon, {}),\n children: t(\"supportButton.title\")\n }\n ) }),\n /* @__PURE__ */ jsxs(\n Popover,\n {\n \"data-testid\": \"support-button-popover\",\n open: popoverOpen,\n anchorEl,\n anchorOrigin: {\n vertical: \"bottom\",\n horizontal: \"right\"\n },\n transformOrigin: {\n vertical: \"top\",\n horizontal: \"right\"\n },\n onClose: popoverCloseHandler,\n children: [\n /* @__PURE__ */ jsxs(\n MenuList,\n {\n className: classes.popoverList,\n autoFocusItem: Boolean(anchorEl),\n children: [\n title && /* @__PURE__ */ jsx(\n MenuItem,\n {\n button: false,\n alignItems: \"flex-start\",\n className: classes.menuItem,\n children: /* @__PURE__ */ jsx(Typography, { variant: \"subtitle1\", children: title })\n }\n ),\n Children.map(children, (child, i) => /* @__PURE__ */ jsx(\n MenuItem,\n {\n button: false,\n alignItems: \"flex-start\",\n className: classes.menuItem,\n children: child\n },\n `child-${i}`\n )),\n (items ?? configItems).map((item, i) => /* @__PURE__ */ jsx(SupportListItem, { item }, `item-${i}`))\n ]\n }\n ),\n /* @__PURE__ */ jsx(DialogActions, { children: /* @__PURE__ */ jsx(\n Button,\n {\n color: \"primary\",\n onClick: popoverCloseHandler,\n \"aria-label\": \"Close\",\n children: t(\"supportButton.close\")\n }\n ) })\n ]\n }\n )\n ] });\n}\n\nexport { SupportButton };\n//# sourceMappingURL=SupportButton.esm.js.map\n"],"names":["useStyles","makeStyles","theme","root","width","minWidth","padding","spacing","borderRight","palette","divider","backgroundColor","background","paper","height","overflowY","sectionTitle","fontWeight","fontSize","textTransform","letterSpacing","color","text","secondary","marginBottom","display","alignItems","justifyContent","cursor","userSelect","filterSection","checkbox","checkboxLabel","clearButton","marginTop","count","marginLeft","FilterPanel","sections","filters","onChange","onClear","classes","collapsedSections","setCollapsedSections","React","Set","filter","s","collapsed","map","id","hasActiveFilters","Object","values","some","length","Box","className","mb","Typography","variant","Button","size","onClick","clearedFilters","forEach","section","Divider","isCollapsed","has","selectedCount","mt","toggleSection","sectionId","prev","next","delete","add","span","title","ExpandMoreIcon","ExpandLessIcon","Collapse","in","FormGroup","options","option","FormControlLabel","control","Checkbox","checked","includes","value","currentValues","newValues","v","handleCheckboxChange","label","undefined","_interopRequireDefault","_interopRequireWildcard","exports","_default","default","createElement","d","container","minHeight","tableContainer","flex","overflow","useCasePanel","useCaseLabel","bulkActions","borderBottom","ApprovalDialog","open","request","action","processing","onClose","onConfirm","confirmInput","setConfirmInput","actionLabel","processingLabel","isReject","confirmText","spec","requestedBy","userId","canConfirm","Dialog","maxWidth","fullWidth","DialogTitle","style","gap","CancelIcon","DialogContent","p","strong","apiProductRef","name","planTier","component","whiteSpace","useCase","gutterBottom","TextField","e","target","disabled","autoFocus","placeholder","DialogActions","startIcon","CircularProgress","BulkActionDialog","requests","isApprove","paragraph","maxHeight","bgcolor","metadata","namespace","ExpandedRowContent","stopPropagation","useBulkAlertStyles","successSection","success","main","borderRadius","shape","border","failureSection","error","warningSection","warning","statRow","errorList","listStyle","errorItem","errorName","errorMessage","fontFamily","wordBreak","expandButton","BulkAlertDialog","results","showErrors","setShowErrors","useState","successResults","res","failedResults","hasPartialSuccess","CheckCircleIcon","ul","result","index","li","div","ApprovalQueueTable","identityApi","useApi","identityApiRef","alertApi","alertApiRef","kuadrantApi","kuadrantApiRef","refresh","setRefresh","selectedRequests","setSelectedRequests","dialogState","setDialogState","bulkDialogState","setBulkDialogState","bulkAlertDialogState","setBulkAlertDialogState","setFilters","status","apiProduct","tier","allowed","canUpdateAllRequests","loading","updateAllPermissionLoading","updateAllPermissionError","useKuadrantPermission","kuadrantApiKeyUpdateAllPermission","canUpdateOwnRequests","updateOwnPermissionLoading","updateOwnPermissionError","kuadrantApiKeyUpdateOwnPermission","updatePermissionLoading","updatePermissionError","useAsync","async","reviewedBy","getBackstageIdentity","userEntityRef","apiKeyRequests","apiProducts","Promise","all","getAllRequests","getApiProducts","allRequests","items","ownedApiProducts","product","annotations","err","Error","message","post","severity","filterSections","useMemo","statusCounts","Approved","Pending","Rejected","apiProductCounts","Map","tierCounts","r","phase","set","get","Array","from","entries","charAt","toUpperCase","slice","filteredRequests","formatDate","dateString","Date","toLocaleDateString","year","month","day","columns","field","render","row","Link","to","Chip","getApprovalQueueStatusChipStyle","creationTimestamp","reviewer","replace","isAutomatic","reviewedAt","filtering","apiProductKey","ownsApiProduct","detailPanelConfig","data","rowData","_","i","Skeleton","ResponseErrorPanel","canSelectRows","textAlign","Table","selection","showSelectAllCheckbox","selectionProps","paging","pageSize","search","debounceInterval","showTextRowsSelected","toolbar","emptyRowsWhenPaging","item","isSelected","selected","tableData","onSelectionChange","rows","pendingOnly","detailPanel","apikeyRequestFn","ns","n","approveRequest","rejectRequest","console","apiKeyRequestsFn","req","rb","bulkApproveRequests","bulkRejectRequests","bulkResponse","successfulItems","totalSuccess","ApiKeyApprovalPage","Page","themeId","Header","subtitle","SupportButton","Content","useDefaultSupportConfig","t","url","icon","links","AppIcon","props","key","Fallback","rest","Icon","useApp","getSystemIcon","jsx","HelpIcon","popoverList","menuItem","SupportIcon","app","SupportLink","link","children","SupportListItem","jsxs","MenuItem","button","ListItemIcon","ListItemText","primary","reduce","idx","configItems","config","useApiHolder","configApiRef","supportConfig","getOptionalConfig","defaultSupportConfig","getString","getConfigArray","flatMap","itemConf","getOptionalString","getOptionalConfigArray","linkConf","useSupportConfig","popoverOpen","setPopoverOpen","anchorEl","setAnchorEl","isSmallScreen","useMediaQuery","breakpoints","down","onClickHandler","event","currentTarget","popoverCloseHandler","Fragment","ml","IconButton","Popover","anchorOrigin","vertical","horizontal","transformOrigin","MenuList","autoFocusItem","Boolean","Children","child"],"sourceRoot":""}
@@ -1,3 +1,3 @@
1
- /*! For license information please see 4083.488ff7a9.chunk.js.LICENSE.txt */
1
+ /*! For license information please see 4083.811c4e7a.chunk.js.LICENSE.txt */
2
2
  (self.webpackChunkinternal_plugin_kuadrant=self.webpackChunkinternal_plugin_kuadrant||[]).push([[4083],{1048:(t,e,r)=>{"use strict";const n=r(7991),o=r(39318),i="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;e.hp=u,e.IS=50;const f=2147483647;function s(t){if(t>f)throw new RangeError('The value "'+t+'" is invalid for option "size"');const e=new Uint8Array(t);return Object.setPrototypeOf(e,u.prototype),e}function u(t,e,r){if("number"==typeof t){if("string"==typeof e)throw new TypeError('The "string" argument must be of type string. Received type number');return c(t)}return h(t,e,r)}function h(t,e,r){if("string"==typeof t)return function(t,e){if("string"==typeof e&&""!==e||(e="utf8"),!u.isEncoding(e))throw new TypeError("Unknown encoding: "+e);const r=0|g(t,e);let n=s(r);const o=n.write(t,e);return o!==r&&(n=n.slice(0,o)),n}(t,e);if(ArrayBuffer.isView(t))return function(t){if(W(t,Uint8Array)){const e=new Uint8Array(t);return l(e.buffer,e.byteOffset,e.byteLength)}return p(t)}(t);if(null==t)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t);if(W(t,ArrayBuffer)||t&&W(t.buffer,ArrayBuffer))return l(t,e,r);if("undefined"!=typeof SharedArrayBuffer&&(W(t,SharedArrayBuffer)||t&&W(t.buffer,SharedArrayBuffer)))return l(t,e,r);if("number"==typeof t)throw new TypeError('The "value" argument must not be of type number. Received type number');const n=t.valueOf&&t.valueOf();if(null!=n&&n!==t)return u.from(n,e,r);const o=function(t){if(u.isBuffer(t)){const e=0|y(t.length),r=s(e);return 0===r.length||t.copy(r,0,0,e),r}return void 0!==t.length?"number"!=typeof t.length||K(t.length)?s(0):p(t):"Buffer"===t.type&&Array.isArray(t.data)?p(t.data):void 0}(t);if(o)return o;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof t[Symbol.toPrimitive])return u.from(t[Symbol.toPrimitive]("string"),e,r);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t)}function a(t){if("number"!=typeof t)throw new TypeError('"size" argument must be of type number');if(t<0)throw new RangeError('The value "'+t+'" is invalid for option "size"')}function c(t){return a(t),s(t<0?0:0|y(t))}function p(t){const e=t.length<0?0:0|y(t.length),r=s(e);for(let n=0;n<e;n+=1)r[n]=255&t[n];return r}function l(t,e,r){if(e<0||t.byteLength<e)throw new RangeError('"offset" is outside of buffer bounds');if(t.byteLength<e+(r||0))throw new RangeError('"length" is outside of buffer bounds');let n;return n=void 0===e&&void 0===r?new Uint8Array(t):void 0===r?new Uint8Array(t,e):new Uint8Array(t,e,r),Object.setPrototypeOf(n,u.prototype),n}function y(t){if(t>=f)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+f.toString(16)+" bytes");return 0|t}function g(t,e){if(u.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||W(t,ArrayBuffer))return t.byteLength;if("string"!=typeof t)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof t);const r=t.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;let o=!1;for(;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return H(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return J(t).length;default:if(o)return n?-1:H(t).length;e=(""+e).toLowerCase(),o=!0}}function d(t,e,r){let n=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return S(this,e,r);case"utf8":case"utf-8":return O(this,e,r);case"ascii":return _(this,e,r);case"latin1":case"binary":return T(this,e,r);case"base64":return U(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return x(this,e,r);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}function w(t,e,r){const n=t[e];t[e]=t[r],t[r]=n}function b(t,e,r,n,o){if(0===t.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),K(r=+r)&&(r=o?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(o)return-1;r=t.length-1}else if(r<0){if(!o)return-1;r=0}if("string"==typeof e&&(e=u.from(e,n)),u.isBuffer(e))return 0===e.length?-1:m(t,e,r,n,o);if("number"==typeof e)return e&=255,"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):m(t,[e],r,n,o);throw new TypeError("val must be string, number or Buffer")}function m(t,e,r,n,o){let i,f=1,s=t.length,u=e.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;f=2,s/=2,u/=2,r/=2}function h(t,e){return 1===f?t[e]:t.readUInt16BE(e*f)}if(o){let n=-1;for(i=r;i<s;i++)if(h(t,i)===h(e,-1===n?0:i-n)){if(-1===n&&(n=i),i-n+1===u)return n*f}else-1!==n&&(i-=i-n),n=-1}else for(r+u>s&&(r=s-u),i=r;i>=0;i--){let r=!0;for(let n=0;n<u;n++)if(h(t,i+n)!==h(e,n)){r=!1;break}if(r)return i}return-1}function E(t,e,r,n){r=Number(r)||0;const o=t.length-r;n?(n=Number(n))>o&&(n=o):n=o;const i=e.length;let f;for(n>i/2&&(n=i/2),f=0;f<n;++f){const n=parseInt(e.substr(2*f,2),16);if(K(n))return f;t[r+f]=n}return f}function B(t,e,r,n){return q(H(e,t.length-r),t,r,n)}function I(t,e,r,n){return q(function(t){const e=[];for(let r=0;r<t.length;++r)e.push(255&t.charCodeAt(r));return e}(e),t,r,n)}function A(t,e,r,n){return q(J(e),t,r,n)}function v(t,e,r,n){return q(function(t,e){let r,n,o;const i=[];for(let f=0;f<t.length&&!((e-=2)<0);++f)r=t.charCodeAt(f),n=r>>8,o=r%256,i.push(o),i.push(n);return i}(e,t.length-r),t,r,n)}function U(t,e,r){return 0===e&&r===t.length?n.fromByteArray(t):n.fromByteArray(t.slice(e,r))}function O(t,e,r){r=Math.min(t.length,r);const n=[];let o=e;for(;o<r;){const e=t[o];let i=null,f=e>239?4:e>223?3:e>191?2:1;if(o+f<=r){let r,n,s,u;switch(f){case 1:e<128&&(i=e);break;case 2:r=t[o+1],128==(192&r)&&(u=(31&e)<<6|63&r,u>127&&(i=u));break;case 3:r=t[o+1],n=t[o+2],128==(192&r)&&128==(192&n)&&(u=(15&e)<<12|(63&r)<<6|63&n,u>2047&&(u<55296||u>57343)&&(i=u));break;case 4:r=t[o+1],n=t[o+2],s=t[o+3],128==(192&r)&&128==(192&n)&&128==(192&s)&&(u=(15&e)<<18|(63&r)<<12|(63&n)<<6|63&s,u>65535&&u<1114112&&(i=u))}}null===i?(i=65533,f=1):i>65535&&(i-=65536,n.push(i>>>10&1023|55296),i=56320|1023&i),n.push(i),o+=f}return function(t){const e=t.length;if(e<=R)return String.fromCharCode.apply(String,t);let r="",n=0;for(;n<e;)r+=String.fromCharCode.apply(String,t.slice(n,n+=R));return r}(n)}u.TYPED_ARRAY_SUPPORT=function(){try{const t=new Uint8Array(1),e={foo:function(){return 42}};return Object.setPrototypeOf(e,Uint8Array.prototype),Object.setPrototypeOf(t,e),42===t.foo()}catch(t){return!1}}(),u.TYPED_ARRAY_SUPPORT||"undefined"==typeof console||"function"!=typeof console.error||console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."),Object.defineProperty(u.prototype,"parent",{enumerable:!0,get:function(){if(u.isBuffer(this))return this.buffer}}),Object.defineProperty(u.prototype,"offset",{enumerable:!0,get:function(){if(u.isBuffer(this))return this.byteOffset}}),u.poolSize=8192,u.from=function(t,e,r){return h(t,e,r)},Object.setPrototypeOf(u.prototype,Uint8Array.prototype),Object.setPrototypeOf(u,Uint8Array),u.alloc=function(t,e,r){return function(t,e,r){return a(t),t<=0?s(t):void 0!==e?"string"==typeof r?s(t).fill(e,r):s(t).fill(e):s(t)}(t,e,r)},u.allocUnsafe=function(t){return c(t)},u.allocUnsafeSlow=function(t){return c(t)},u.isBuffer=function(t){return null!=t&&!0===t._isBuffer&&t!==u.prototype},u.compare=function(t,e){if(W(t,Uint8Array)&&(t=u.from(t,t.offset,t.byteLength)),W(e,Uint8Array)&&(e=u.from(e,e.offset,e.byteLength)),!u.isBuffer(t)||!u.isBuffer(e))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(t===e)return 0;let r=t.length,n=e.length;for(let o=0,i=Math.min(r,n);o<i;++o)if(t[o]!==e[o]){r=t[o],n=e[o];break}return r<n?-1:n<r?1:0},u.isEncoding=function(t){switch(String(t).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},u.concat=function(t,e){if(!Array.isArray(t))throw new TypeError('"list" argument must be an Array of Buffers');if(0===t.length)return u.alloc(0);let r;if(void 0===e)for(e=0,r=0;r<t.length;++r)e+=t[r].length;const n=u.allocUnsafe(e);let o=0;for(r=0;r<t.length;++r){let e=t[r];if(W(e,Uint8Array))o+e.length>n.length?(u.isBuffer(e)||(e=u.from(e)),e.copy(n,o)):Uint8Array.prototype.set.call(n,e,o);else{if(!u.isBuffer(e))throw new TypeError('"list" argument must be an Array of Buffers');e.copy(n,o)}o+=e.length}return n},u.byteLength=g,u.prototype._isBuffer=!0,u.prototype.swap16=function(){const t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let e=0;e<t;e+=2)w(this,e,e+1);return this},u.prototype.swap32=function(){const t=this.length;if(t%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(let e=0;e<t;e+=4)w(this,e,e+3),w(this,e+1,e+2);return this},u.prototype.swap64=function(){const t=this.length;if(t%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(let e=0;e<t;e+=8)w(this,e,e+7),w(this,e+1,e+6),w(this,e+2,e+5),w(this,e+3,e+4);return this},u.prototype.toString=function(){const t=this.length;return 0===t?"":0===arguments.length?O(this,0,t):d.apply(this,arguments)},u.prototype.toLocaleString=u.prototype.toString,u.prototype.equals=function(t){if(!u.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t||0===u.compare(this,t)},u.prototype.inspect=function(){let t="";const r=e.IS;return t=this.toString("hex",0,r).replace(/(.{2})/g,"$1 ").trim(),this.length>r&&(t+=" ... "),"<Buffer "+t+">"},i&&(u.prototype[i]=u.prototype.inspect),u.prototype.compare=function(t,e,r,n,o){if(W(t,Uint8Array)&&(t=u.from(t,t.offset,t.byteLength)),!u.isBuffer(t))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof t);if(void 0===e&&(e=0),void 0===r&&(r=t?t.length:0),void 0===n&&(n=0),void 0===o&&(o=this.length),e<0||r>t.length||n<0||o>this.length)throw new RangeError("out of range index");if(n>=o&&e>=r)return 0;if(n>=o)return-1;if(e>=r)return 1;if(this===t)return 0;let i=(o>>>=0)-(n>>>=0),f=(r>>>=0)-(e>>>=0);const s=Math.min(i,f),h=this.slice(n,o),a=t.slice(e,r);for(let t=0;t<s;++t)if(h[t]!==a[t]){i=h[t],f=a[t];break}return i<f?-1:f<i?1:0},u.prototype.includes=function(t,e,r){return-1!==this.indexOf(t,e,r)},u.prototype.indexOf=function(t,e,r){return b(this,t,e,r,!0)},u.prototype.lastIndexOf=function(t,e,r){return b(this,t,e,r,!1)},u.prototype.write=function(t,e,r,n){if(void 0===e)n="utf8",r=this.length,e=0;else if(void 0===r&&"string"==typeof e)n=e,r=this.length,e=0;else{if(!isFinite(e))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");e>>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}const o=this.length-e;if((void 0===r||r>o)&&(r=o),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");let i=!1;for(;;)switch(n){case"hex":return E(this,t,e,r);case"utf8":case"utf-8":return B(this,t,e,r);case"ascii":case"latin1":case"binary":return I(this,t,e,r);case"base64":return A(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return v(this,t,e,r);default:if(i)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),i=!0}},u.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};const R=4096;function _(t,e,r){let n="";r=Math.min(t.length,r);for(let o=e;o<r;++o)n+=String.fromCharCode(127&t[o]);return n}function T(t,e,r){let n="";r=Math.min(t.length,r);for(let o=e;o<r;++o)n+=String.fromCharCode(t[o]);return n}function S(t,e,r){const n=t.length;(!e||e<0)&&(e=0),(!r||r<0||r>n)&&(r=n);let o="";for(let n=e;n<r;++n)o+=Q[t[n]];return o}function x(t,e,r){const n=t.slice(e,r);let o="";for(let t=0;t<n.length-1;t+=2)o+=String.fromCharCode(n[t]+256*n[t+1]);return o}function L(t,e,r){if(t%1!=0||t<0)throw new RangeError("offset is not uint");if(t+e>r)throw new RangeError("Trying to access beyond buffer length")}function $(t,e,r,n,o,i){if(!u.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>o||e<i)throw new RangeError('"value" argument is out of bounds');if(r+n>t.length)throw new RangeError("Index out of range")}function N(t,e,r,n,o){z(e,n,o,t,r,7);let i=Number(e&BigInt(4294967295));t[r++]=i,i>>=8,t[r++]=i,i>>=8,t[r++]=i,i>>=8,t[r++]=i;let f=Number(e>>BigInt(32)&BigInt(4294967295));return t[r++]=f,f>>=8,t[r++]=f,f>>=8,t[r++]=f,f>>=8,t[r++]=f,r}function C(t,e,r,n,o){z(e,n,o,t,r,7);let i=Number(e&BigInt(4294967295));t[r+7]=i,i>>=8,t[r+6]=i,i>>=8,t[r+5]=i,i>>=8,t[r+4]=i;let f=Number(e>>BigInt(32)&BigInt(4294967295));return t[r+3]=f,f>>=8,t[r+2]=f,f>>=8,t[r+1]=f,f>>=8,t[r]=f,r+8}function k(t,e,r,n,o,i){if(r+n>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function P(t,e,r,n,i){return e=+e,r>>>=0,i||k(t,0,r,4),o.write(t,e,r,n,23,4),r+4}function j(t,e,r,n,i){return e=+e,r>>>=0,i||k(t,0,r,8),o.write(t,e,r,n,52,8),r+8}u.prototype.slice=function(t,e){const r=this.length;(t=~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),(e=void 0===e?r:~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),e<t&&(e=t);const n=this.subarray(t,e);return Object.setPrototypeOf(n,u.prototype),n},u.prototype.readUintLE=u.prototype.readUIntLE=function(t,e,r){t>>>=0,e>>>=0,r||L(t,e,this.length);let n=this[t],o=1,i=0;for(;++i<e&&(o*=256);)n+=this[t+i]*o;return n},u.prototype.readUintBE=u.prototype.readUIntBE=function(t,e,r){t>>>=0,e>>>=0,r||L(t,e,this.length);let n=this[t+--e],o=1;for(;e>0&&(o*=256);)n+=this[t+--e]*o;return n},u.prototype.readUint8=u.prototype.readUInt8=function(t,e){return t>>>=0,e||L(t,1,this.length),this[t]},u.prototype.readUint16LE=u.prototype.readUInt16LE=function(t,e){return t>>>=0,e||L(t,2,this.length),this[t]|this[t+1]<<8},u.prototype.readUint16BE=u.prototype.readUInt16BE=function(t,e){return t>>>=0,e||L(t,2,this.length),this[t]<<8|this[t+1]},u.prototype.readUint32LE=u.prototype.readUInt32LE=function(t,e){return t>>>=0,e||L(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},u.prototype.readUint32BE=u.prototype.readUInt32BE=function(t,e){return t>>>=0,e||L(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},u.prototype.readBigUInt64LE=Z(function(t){V(t>>>=0,"offset");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||Y(t,this.length-8);const n=e+256*this[++t]+65536*this[++t]+this[++t]*2**24,o=this[++t]+256*this[++t]+65536*this[++t]+r*2**24;return BigInt(n)+(BigInt(o)<<BigInt(32))}),u.prototype.readBigUInt64BE=Z(function(t){V(t>>>=0,"offset");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||Y(t,this.length-8);const n=e*2**24+65536*this[++t]+256*this[++t]+this[++t],o=this[++t]*2**24+65536*this[++t]+256*this[++t]+r;return(BigInt(n)<<BigInt(32))+BigInt(o)}),u.prototype.readIntLE=function(t,e,r){t>>>=0,e>>>=0,r||L(t,e,this.length);let n=this[t],o=1,i=0;for(;++i<e&&(o*=256);)n+=this[t+i]*o;return o*=128,n>=o&&(n-=Math.pow(2,8*e)),n},u.prototype.readIntBE=function(t,e,r){t>>>=0,e>>>=0,r||L(t,e,this.length);let n=e,o=1,i=this[t+--n];for(;n>0&&(o*=256);)i+=this[t+--n]*o;return o*=128,i>=o&&(i-=Math.pow(2,8*e)),i},u.prototype.readInt8=function(t,e){return t>>>=0,e||L(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},u.prototype.readInt16LE=function(t,e){t>>>=0,e||L(t,2,this.length);const r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},u.prototype.readInt16BE=function(t,e){t>>>=0,e||L(t,2,this.length);const r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},u.prototype.readInt32LE=function(t,e){return t>>>=0,e||L(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},u.prototype.readInt32BE=function(t,e){return t>>>=0,e||L(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},u.prototype.readBigInt64LE=Z(function(t){V(t>>>=0,"offset");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||Y(t,this.length-8);const n=this[t+4]+256*this[t+5]+65536*this[t+6]+(r<<24);return(BigInt(n)<<BigInt(32))+BigInt(e+256*this[++t]+65536*this[++t]+this[++t]*2**24)}),u.prototype.readBigInt64BE=Z(function(t){V(t>>>=0,"offset");const e=this[t],r=this[t+7];void 0!==e&&void 0!==r||Y(t,this.length-8);const n=(e<<24)+65536*this[++t]+256*this[++t]+this[++t];return(BigInt(n)<<BigInt(32))+BigInt(this[++t]*2**24+65536*this[++t]+256*this[++t]+r)}),u.prototype.readFloatLE=function(t,e){return t>>>=0,e||L(t,4,this.length),o.read(this,t,!0,23,4)},u.prototype.readFloatBE=function(t,e){return t>>>=0,e||L(t,4,this.length),o.read(this,t,!1,23,4)},u.prototype.readDoubleLE=function(t,e){return t>>>=0,e||L(t,8,this.length),o.read(this,t,!0,52,8)},u.prototype.readDoubleBE=function(t,e){return t>>>=0,e||L(t,8,this.length),o.read(this,t,!1,52,8)},u.prototype.writeUintLE=u.prototype.writeUIntLE=function(t,e,r,n){t=+t,e>>>=0,r>>>=0,n||$(this,t,e,r,Math.pow(2,8*r)-1,0);let o=1,i=0;for(this[e]=255&t;++i<r&&(o*=256);)this[e+i]=t/o&255;return e+r},u.prototype.writeUintBE=u.prototype.writeUIntBE=function(t,e,r,n){t=+t,e>>>=0,r>>>=0,n||$(this,t,e,r,Math.pow(2,8*r)-1,0);let o=r-1,i=1;for(this[e+o]=255&t;--o>=0&&(i*=256);)this[e+o]=t/i&255;return e+r},u.prototype.writeUint8=u.prototype.writeUInt8=function(t,e,r){return t=+t,e>>>=0,r||$(this,t,e,1,255,0),this[e]=255&t,e+1},u.prototype.writeUint16LE=u.prototype.writeUInt16LE=function(t,e,r){return t=+t,e>>>=0,r||$(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},u.prototype.writeUint16BE=u.prototype.writeUInt16BE=function(t,e,r){return t=+t,e>>>=0,r||$(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},u.prototype.writeUint32LE=u.prototype.writeUInt32LE=function(t,e,r){return t=+t,e>>>=0,r||$(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},u.prototype.writeUint32BE=u.prototype.writeUInt32BE=function(t,e,r){return t=+t,e>>>=0,r||$(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},u.prototype.writeBigUInt64LE=Z(function(t,e=0){return N(this,t,e,BigInt(0),BigInt("0xffffffffffffffff"))}),u.prototype.writeBigUInt64BE=Z(function(t,e=0){return C(this,t,e,BigInt(0),BigInt("0xffffffffffffffff"))}),u.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e>>>=0,!n){const n=Math.pow(2,8*r-1);$(this,t,e,r,n-1,-n)}let o=0,i=1,f=0;for(this[e]=255&t;++o<r&&(i*=256);)t<0&&0===f&&0!==this[e+o-1]&&(f=1),this[e+o]=(t/i|0)-f&255;return e+r},u.prototype.writeIntBE=function(t,e,r,n){if(t=+t,e>>>=0,!n){const n=Math.pow(2,8*r-1);$(this,t,e,r,n-1,-n)}let o=r-1,i=1,f=0;for(this[e+o]=255&t;--o>=0&&(i*=256);)t<0&&0===f&&0!==this[e+o+1]&&(f=1),this[e+o]=(t/i|0)-f&255;return e+r},u.prototype.writeInt8=function(t,e,r){return t=+t,e>>>=0,r||$(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},u.prototype.writeInt16LE=function(t,e,r){return t=+t,e>>>=0,r||$(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},u.prototype.writeInt16BE=function(t,e,r){return t=+t,e>>>=0,r||$(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},u.prototype.writeInt32LE=function(t,e,r){return t=+t,e>>>=0,r||$(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},u.prototype.writeInt32BE=function(t,e,r){return t=+t,e>>>=0,r||$(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},u.prototype.writeBigInt64LE=Z(function(t,e=0){return N(this,t,e,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))}),u.prototype.writeBigInt64BE=Z(function(t,e=0){return C(this,t,e,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))}),u.prototype.writeFloatLE=function(t,e,r){return P(this,t,e,!0,r)},u.prototype.writeFloatBE=function(t,e,r){return P(this,t,e,!1,r)},u.prototype.writeDoubleLE=function(t,e,r){return j(this,t,e,!0,r)},u.prototype.writeDoubleBE=function(t,e,r){return j(this,t,e,!1,r)},u.prototype.copy=function(t,e,r,n){if(!u.isBuffer(t))throw new TypeError("argument should be a Buffer");if(r||(r=0),n||0===n||(n=this.length),e>=t.length&&(e=t.length),e||(e=0),n>0&&n<r&&(n=r),n===r)return 0;if(0===t.length||0===this.length)return 0;if(e<0)throw new RangeError("targetStart out of bounds");if(r<0||r>=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-e<n-r&&(n=t.length-e+r);const o=n-r;return this===t&&"function"==typeof Uint8Array.prototype.copyWithin?this.copyWithin(e,r,n):Uint8Array.prototype.set.call(t,this.subarray(r,n),e),o},u.prototype.fill=function(t,e,r,n){if("string"==typeof t){if("string"==typeof e?(n=e,e=0,r=this.length):"string"==typeof r&&(n=r,r=this.length),void 0!==n&&"string"!=typeof n)throw new TypeError("encoding must be a string");if("string"==typeof n&&!u.isEncoding(n))throw new TypeError("Unknown encoding: "+n);if(1===t.length){const e=t.charCodeAt(0);("utf8"===n&&e<128||"latin1"===n)&&(t=e)}}else"number"==typeof t?t&=255:"boolean"==typeof t&&(t=Number(t));if(e<0||this.length<e||this.length<r)throw new RangeError("Out of range index");if(r<=e)return this;let o;if(e>>>=0,r=void 0===r?this.length:r>>>0,t||(t=0),"number"==typeof t)for(o=e;o<r;++o)this[o]=t;else{const i=u.isBuffer(t)?t:u.from(t,n),f=i.length;if(0===f)throw new TypeError('The value "'+t+'" is invalid for argument "value"');for(o=0;o<r-e;++o)this[o+e]=i[o%f]}return this};const M={};function F(t,e,r){M[t]=class extends r{constructor(){super(),Object.defineProperty(this,"message",{value:e.apply(this,arguments),writable:!0,configurable:!0}),this.name=`${this.name} [${t}]`,this.stack,delete this.name}get code(){return t}set code(t){Object.defineProperty(this,"code",{configurable:!0,enumerable:!0,value:t,writable:!0})}toString(){return`${this.name} [${t}]: ${this.message}`}}}function D(t){let e="",r=t.length;const n="-"===t[0]?1:0;for(;r>=n+4;r-=3)e=`_${t.slice(r-3,r)}${e}`;return`${t.slice(0,r)}${e}`}function z(t,e,r,n,o,i){if(t>r||t<e){const n="bigint"==typeof e?"n":"";let o;throw o=i>3?0===e||e===BigInt(0)?`>= 0${n} and < 2${n} ** ${8*(i+1)}${n}`:`>= -(2${n} ** ${8*(i+1)-1}${n}) and < 2 ** ${8*(i+1)-1}${n}`:`>= ${e}${n} and <= ${r}${n}`,new M.ERR_OUT_OF_RANGE("value",o,t)}!function(t,e,r){V(e,"offset"),void 0!==t[e]&&void 0!==t[e+r]||Y(e,t.length-(r+1))}(n,o,i)}function V(t,e){if("number"!=typeof t)throw new M.ERR_INVALID_ARG_TYPE(e,"number",t)}function Y(t,e,r){if(Math.floor(t)!==t)throw V(t,r),new M.ERR_OUT_OF_RANGE(r||"offset","an integer",t);if(e<0)throw new M.ERR_BUFFER_OUT_OF_BOUNDS;throw new M.ERR_OUT_OF_RANGE(r||"offset",`>= ${r?1:0} and <= ${e}`,t)}F("ERR_BUFFER_OUT_OF_BOUNDS",function(t){return t?`${t} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"},RangeError),F("ERR_INVALID_ARG_TYPE",function(t,e){return`The "${t}" argument must be of type number. Received type ${typeof e}`},TypeError),F("ERR_OUT_OF_RANGE",function(t,e,r){let n=`The value of "${t}" is out of range.`,o=r;return Number.isInteger(r)&&Math.abs(r)>2**32?o=D(String(r)):"bigint"==typeof r&&(o=String(r),(r>BigInt(2)**BigInt(32)||r<-(BigInt(2)**BigInt(32)))&&(o=D(o)),o+="n"),n+=` It must be ${e}. Received ${o}`,n},RangeError);const G=/[^+/0-9A-Za-z-_]/g;function H(t,e){let r;e=e||1/0;const n=t.length;let o=null;const i=[];for(let f=0;f<n;++f){if(r=t.charCodeAt(f),r>55295&&r<57344){if(!o){if(r>56319){(e-=3)>-1&&i.push(239,191,189);continue}if(f+1===n){(e-=3)>-1&&i.push(239,191,189);continue}o=r;continue}if(r<56320){(e-=3)>-1&&i.push(239,191,189),o=r;continue}r=65536+(o-55296<<10|r-56320)}else o&&(e-=3)>-1&&i.push(239,191,189);if(o=null,r<128){if((e-=1)<0)break;i.push(r)}else if(r<2048){if((e-=2)<0)break;i.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;i.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;i.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return i}function J(t){return n.toByteArray(function(t){if((t=(t=t.split("=")[0]).trim().replace(G,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function q(t,e,r,n){let o;for(o=0;o<n&&!(o+r>=e.length||o>=t.length);++o)e[o+r]=t[o];return o}function W(t,e){return t instanceof e||null!=t&&null!=t.constructor&&null!=t.constructor.name&&t.constructor.name===e.name}function K(t){return t!=t}const Q=function(){const t="0123456789abcdef",e=new Array(256);for(let r=0;r<16;++r){const n=16*r;for(let o=0;o<16;++o)e[n+o]=t[r]+t[o]}return e}();function Z(t){return"undefined"==typeof BigInt?X:t}function X(){throw new Error("BigInt not supported")}},7991:(t,e)=>{"use strict";e.byteLength=function(t){var e=s(t),r=e[0],n=e[1];return 3*(r+n)/4-n},e.toByteArray=function(t){var e,r,i=s(t),f=i[0],u=i[1],h=new o(function(t,e,r){return 3*(e+r)/4-r}(0,f,u)),a=0,c=u>0?f-4:f;for(r=0;r<c;r+=4)e=n[t.charCodeAt(r)]<<18|n[t.charCodeAt(r+1)]<<12|n[t.charCodeAt(r+2)]<<6|n[t.charCodeAt(r+3)],h[a++]=e>>16&255,h[a++]=e>>8&255,h[a++]=255&e;return 2===u&&(e=n[t.charCodeAt(r)]<<2|n[t.charCodeAt(r+1)]>>4,h[a++]=255&e),1===u&&(e=n[t.charCodeAt(r)]<<10|n[t.charCodeAt(r+1)]<<4|n[t.charCodeAt(r+2)]>>2,h[a++]=e>>8&255,h[a++]=255&e),h},e.fromByteArray=function(t){for(var e,n=t.length,o=n%3,i=[],f=16383,s=0,u=n-o;s<u;s+=f)i.push(h(t,s,s+f>u?u:s+f));return 1===o?(e=t[n-1],i.push(r[e>>2]+r[e<<4&63]+"==")):2===o&&(e=(t[n-2]<<8)+t[n-1],i.push(r[e>>10]+r[e>>4&63]+r[e<<2&63]+"=")),i.join("")};for(var r=[],n=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",f=0;f<64;++f)r[f]=i[f],n[i.charCodeAt(f)]=f;function s(t){var e=t.length;if(e%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var r=t.indexOf("=");return-1===r&&(r=e),[r,r===e?0:4-r%4]}function u(t){return r[t>>18&63]+r[t>>12&63]+r[t>>6&63]+r[63&t]}function h(t,e,r){for(var n,o=[],i=e;i<r;i+=3)n=(t[i]<<16&16711680)+(t[i+1]<<8&65280)+(255&t[i+2]),o.push(u(n));return o.join("")}n["-".charCodeAt(0)]=62,n["_".charCodeAt(0)]=63},31085:(t,e,r)=>{"use strict";t.exports=r(73335)},39318:(t,e)=>{e.read=function(t,e,r,n,o){var i,f,s=8*o-n-1,u=(1<<s)-1,h=u>>1,a=-7,c=r?o-1:0,p=r?-1:1,l=t[e+c];for(c+=p,i=l&(1<<-a)-1,l>>=-a,a+=s;a>0;i=256*i+t[e+c],c+=p,a-=8);for(f=i&(1<<-a)-1,i>>=-a,a+=n;a>0;f=256*f+t[e+c],c+=p,a-=8);if(0===i)i=1-h;else{if(i===u)return f?NaN:1/0*(l?-1:1);f+=Math.pow(2,n),i-=h}return(l?-1:1)*f*Math.pow(2,i-n)},e.write=function(t,e,r,n,o,i){var f,s,u,h=8*i-o-1,a=(1<<h)-1,c=a>>1,p=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,l=n?0:i-1,y=n?1:-1,g=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,f=a):(f=Math.floor(Math.log(e)/Math.LN2),e*(u=Math.pow(2,-f))<1&&(f--,u*=2),(e+=f+c>=1?p/u:p*Math.pow(2,1-c))*u>=2&&(f++,u/=2),f+c>=a?(s=0,f=a):f+c>=1?(s=(e*u-1)*Math.pow(2,o),f+=c):(s=e*Math.pow(2,c-1)*Math.pow(2,o),f=0));o>=8;t[r+l]=255&s,l+=y,s/=256,o-=8);for(f=f<<o|s,h+=o;h>0;t[r+l]=255&f,l+=y,f/=256,h-=8);t[r+l-y]|=128*g}},50884:(t,e,r)=>{"use strict";r.d(e,{m:()=>n}),r(31085),r(15427);const n=(0,r(89940).y)({id:"core.error"})},57556:(t,e,r)=>{"use strict";function n(t){if("object"!=typeof t||null===t||Array.isArray(t))return!1;const e=t;return"string"==typeof e.name&&""!==e.name&&"string"==typeof e.message}r.d(e,{HK:()=>f,EH:()=>i}),r(69655);class o extends Error{cause;constructor(t,e){let r=t;if(void 0!==e){const t=function(t){if(n(t)){const e=String(t);return"[object Object]"!==e?e:`${t.name}: ${t.message}`}return`unknown error '${t}'`}(e);r?r+=`; caused by ${t}`:r=`caused by ${t}`}super(r),Error.captureStackTrace?.(this,this.constructor),this.name&&"Error"!==this.name||"Error"!==this.constructor.name&&(this.name=this.constructor.name),this.cause=n(e)?e:void 0}}class i extends o{name="NotImplementedError"}class f extends o{constructor(t,e){super(t,e),this.name=n(e)?e.name:"Error"}}},69655:(t,e,r)=>{"use strict";var n=r(1048).hp;class o extends Error{constructor(t){super(o._prepareSuperMessage(t)),Object.defineProperty(this,"name",{value:"NonError",configurable:!0,writable:!0}),Error.captureStackTrace&&Error.captureStackTrace(this,o)}static _prepareSuperMessage(t){try{return JSON.stringify(t)}catch{return String(t)}}}const i=[{property:"name",enumerable:!1},{property:"message",enumerable:!1},{property:"stack",enumerable:!1},{property:"code",enumerable:!0}],f=Symbol(".toJSON called"),s=({from:t,seen:e,to_:r,forceEnumerable:o,maxDepth:u,depth:h})=>{const a=r||(Array.isArray(t)?[]:{});if(e.push(t),h>=u)return a;if("function"==typeof t.toJSON&&!0!==t[f])return(t=>{t[f]=!0;const e=t.toJSON();return delete t[f],e})(t);for(const[r,i]of Object.entries(t))"function"==typeof n&&n.isBuffer(i)?a[r]="[object Buffer]":"function"!=typeof i&&(i&&"object"==typeof i?e.includes(t[r])?a[r]="[Circular]":(h++,a[r]=s({from:t[r],seen:e.slice(),forceEnumerable:o,maxDepth:u,depth:h})):a[r]=i);for(const{property:e,enumerable:r}of i)"string"==typeof t[e]&&Object.defineProperty(a,e,{value:t[e],enumerable:!!o||r,configurable:!0,writable:!0});return a};t.exports={serializeError:(t,e={})=>{const{maxDepth:r=Number.POSITIVE_INFINITY}=e;return"object"==typeof t&&null!==t?s({from:t,seen:[],forceEnumerable:!0,maxDepth:r,depth:0}):"function"==typeof t?`[Function: ${t.name||"anonymous"}]`:t},deserializeError:(t,e={})=>{const{maxDepth:r=Number.POSITIVE_INFINITY}=e;if(t instanceof Error)return t;if("object"==typeof t&&null!==t&&!Array.isArray(t)){const e=new Error;return s({from:t,seen:[],to_:e,maxDepth:r,depth:0}),e}return new o(t)}}},73335:(t,e,r)=>{"use strict";var n=r(95478),o=Symbol.for("react.element"),i=Symbol.for("react.fragment"),f=Object.prototype.hasOwnProperty,s=n.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,u={key:!0,ref:!0,__self:!0,__source:!0};function h(t,e,r){var n,i={},h=null,a=null;for(n in void 0!==r&&(h=""+r),void 0!==e.key&&(h=""+e.key),void 0!==e.ref&&(a=e.ref),e)f.call(e,n)&&!u.hasOwnProperty(n)&&(i[n]=e[n]);if(t&&t.defaultProps)for(n in e=t.defaultProps)void 0===i[n]&&(i[n]=e[n]);return{$$typeof:o,type:t,key:h,ref:a,props:i,_owner:s.current}}e.Fragment=i,e.jsx=h,e.jsxs=h},87092:(t,e,r)=>{"use strict";r.d(e,{Q2:()=>f,gf:()=>s,wV:()=>u});var n=r(31085),o=r(15427),i=r(57556);function f(){const t=(0,o.useVersionedContext)("api-context");if(!t)throw new i.EH("API context is not available");const e=t.atVersion(1);if(!e)throw new i.EH("ApiContext v1 not available");return e}function s(t){const e=f().get(t);if(!e)throw new i.EH(`No implementation available for ${t}`);return e}function u(t){return function(e){const r=r=>{const o=f(),s={};for(const e in t)if(t.hasOwnProperty(e)){const r=t[e],n=o.get(r);if(!n)throw new i.EH(`No implementation available for ${r}`);s[e]=n}return(0,n.jsx)(e,{...r,...s})},o=e.displayName||e.name||"Component";return r.displayName=`withApis(${o})`,r}}},89940:(t,e,r)=>{"use strict";r.d(e,{y:()=>o});class n{constructor(t){if(this.config=t,!t.id.split(".").flatMap(t=>t.split("-")).every(t=>t.match(/^[a-z][a-z0-9]*$/)))throw new Error(`API id must only contain period separated lowercase alphanum tokens with dashes, got '${t.id}'`)}get id(){return this.config.id}get T(){throw new Error(`tried to read ApiRef.T of ${this}`)}toString(){return`apiRef{${this.config.id}}`}}function o(t){return new n(t)}}}]);
3
- //# sourceMappingURL=4083.488ff7a9.chunk.js.map
3
+ //# sourceMappingURL=4083.811c4e7a.chunk.js.map