@kuadrant/kuadrant-backstage-plugin-frontend 0.0.2-dev-0b744dd → 0.0.2-dev-d2ba42b

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 (117) hide show
  1. package/dist/components/ApiAccessCard/ApiAccessCard.esm.js +2 -1
  2. package/dist/components/ApiAccessCard/ApiAccessCard.esm.js.map +1 -1
  3. package/dist/components/ApiKeyApprovalPage/ApiKeyApprovalPage.esm.js +10 -0
  4. package/dist/components/ApiKeyApprovalPage/ApiKeyApprovalPage.esm.js.map +1 -0
  5. package/dist/components/ApiKeyApprovalPage/index.esm.js +2 -0
  6. package/dist/components/ApiKeyDetailPage/ApiKeyDetailPage.esm.js +4 -4
  7. package/dist/components/ApiKeyDetailPage/ApiKeyDetailPage.esm.js.map +1 -1
  8. package/dist/components/ApiProductDetailPage/ApiProductDetailPage.esm.js +28 -2
  9. package/dist/components/ApiProductDetailPage/ApiProductDetailPage.esm.js.map +1 -1
  10. package/dist/components/ApiProductDetails/ApiProductDetails.esm.js +13 -3
  11. package/dist/components/ApiProductDetails/ApiProductDetails.esm.js.map +1 -1
  12. package/dist/components/ApprovalQueueTable/ApprovalQueueTable.esm.js +2 -2
  13. package/dist/components/ApprovalQueueTable/ApprovalQueueTable.esm.js.map +1 -1
  14. package/dist/components/CreateAPIProductDialog/CreateAPIProductDialog.esm.js +115 -8
  15. package/dist/components/CreateAPIProductDialog/CreateAPIProductDialog.esm.js.map +1 -1
  16. package/dist/components/EditAPIProductDialog/EditAPIProductDialog.esm.js +44 -2
  17. package/dist/components/EditAPIProductDialog/EditAPIProductDialog.esm.js.map +1 -1
  18. package/dist/components/EntityApiApprovalTab/EntityApiApprovalTab.esm.js +2 -2
  19. package/dist/components/EntityApiApprovalTab/EntityApiApprovalTab.esm.js.map +1 -1
  20. package/dist/components/KuadrantPage/ApiProductsPage.esm.js +53 -3
  21. package/dist/components/KuadrantPage/ApiProductsPage.esm.js.map +1 -1
  22. package/dist/components/MyApiKeysPage/MyApiKeysPage.esm.js +10 -0
  23. package/dist/components/MyApiKeysPage/MyApiKeysPage.esm.js.map +1 -0
  24. package/dist/components/MyApiKeysPage/index.esm.js +2 -0
  25. package/dist/components/MyApiKeysPage/index.esm.js.map +1 -0
  26. package/dist/components/MyApiKeysTable/MyApiKeysTable.esm.js +26 -5
  27. package/dist/components/MyApiKeysTable/MyApiKeysTable.esm.js.map +1 -1
  28. package/dist/components/SimpleRequestAccessDialog/SimpleRequestAccessDialog.esm.js +206 -0
  29. package/dist/components/SimpleRequestAccessDialog/SimpleRequestAccessDialog.esm.js.map +1 -0
  30. package/dist/index.d.ts +3 -2
  31. package/dist/index.esm.js +1 -1
  32. package/dist/plugin.esm.js +11 -4
  33. package/dist/plugin.esm.js.map +1 -1
  34. package/dist/utils/styles.esm.js +44 -5
  35. package/dist/utils/styles.esm.js.map +1 -1
  36. package/dist-scalprum/internal.plugin-kuadrant.eacc31ca4d6c1340f8a8.js +2 -0
  37. package/dist-scalprum/{internal.plugin-kuadrant.114cbbe1d3ddb939d776.js.map → internal.plugin-kuadrant.eacc31ca4d6c1340f8a8.js.map} +1 -1
  38. package/dist-scalprum/plugin-manifest.json +3 -3
  39. package/dist-scalprum/static/2118.82433765.chunk.js +2 -0
  40. package/dist-scalprum/static/2118.82433765.chunk.js.map +1 -0
  41. package/dist-scalprum/static/2967.5bade048.chunk.js +2 -0
  42. package/dist-scalprum/static/2967.5bade048.chunk.js.map +1 -0
  43. package/dist-scalprum/static/3650.89dfc64c.chunk.js +2 -0
  44. package/dist-scalprum/static/3650.89dfc64c.chunk.js.map +1 -0
  45. package/dist-scalprum/static/369.2374941c.chunk.js +2 -0
  46. package/dist-scalprum/static/369.2374941c.chunk.js.map +1 -0
  47. package/dist-scalprum/static/3947.ff1c25cf.chunk.js +2 -0
  48. package/dist-scalprum/static/3947.ff1c25cf.chunk.js.map +1 -0
  49. package/dist-scalprum/static/3976.4cf18515.chunk.js +2 -0
  50. package/dist-scalprum/static/3976.4cf18515.chunk.js.map +1 -0
  51. package/dist-scalprum/static/4447.adbf663f.chunk.js +2 -0
  52. package/dist-scalprum/static/4447.adbf663f.chunk.js.map +1 -0
  53. package/dist-scalprum/static/5010.4ef96c87.chunk.js +3 -0
  54. package/dist-scalprum/static/5010.4ef96c87.chunk.js.map +1 -0
  55. package/dist-scalprum/static/5203.fce2a28f.chunk.js +2 -0
  56. package/dist-scalprum/static/5203.fce2a28f.chunk.js.map +1 -0
  57. package/dist-scalprum/static/6422.969d9b8c.chunk.js +2 -0
  58. package/dist-scalprum/static/6422.969d9b8c.chunk.js.map +1 -0
  59. package/dist-scalprum/static/6800.cd5c7bcb.chunk.js +2 -0
  60. package/dist-scalprum/static/6800.cd5c7bcb.chunk.js.map +1 -0
  61. package/dist-scalprum/static/7005.72759857.chunk.js +2 -0
  62. package/dist-scalprum/static/7005.72759857.chunk.js.map +1 -0
  63. package/dist-scalprum/static/7270.9473c969.chunk.js +2 -0
  64. package/dist-scalprum/static/7270.9473c969.chunk.js.map +1 -0
  65. package/dist-scalprum/static/7791.01371352.chunk.js +2 -0
  66. package/dist-scalprum/static/7791.01371352.chunk.js.map +1 -0
  67. package/dist-scalprum/static/{6763.d6cd937f.chunk.js → 8563.46f1a3e1.chunk.js} +3 -3
  68. package/dist-scalprum/static/8563.46f1a3e1.chunk.js.map +1 -0
  69. package/dist-scalprum/static/8789.30227526.chunk.js +2 -0
  70. package/dist-scalprum/static/8789.30227526.chunk.js.map +1 -0
  71. package/dist-scalprum/static/8804.63919453.chunk.js +2 -0
  72. package/dist-scalprum/static/8804.63919453.chunk.js.map +1 -0
  73. package/dist-scalprum/static/exposed-PluginRoot.8d8f0b09.chunk.js +2 -0
  74. package/dist-scalprum/static/exposed-PluginRoot.8d8f0b09.chunk.js.map +1 -0
  75. package/package.json +1 -1
  76. package/dist/components/ApiKeysPage/ApiKeysPage.esm.js +0 -43
  77. package/dist/components/ApiKeysPage/ApiKeysPage.esm.js.map +0 -1
  78. package/dist/components/ApiKeysPage/index.esm.js +0 -2
  79. package/dist-scalprum/internal.plugin-kuadrant.114cbbe1d3ddb939d776.js +0 -2
  80. package/dist-scalprum/static/2821.0829f14d.chunk.js +0 -2
  81. package/dist-scalprum/static/2821.0829f14d.chunk.js.map +0 -1
  82. package/dist-scalprum/static/2967.65c51af8.chunk.js +0 -2
  83. package/dist-scalprum/static/2967.65c51af8.chunk.js.map +0 -1
  84. package/dist-scalprum/static/3650.ee76eba9.chunk.js +0 -2
  85. package/dist-scalprum/static/3650.ee76eba9.chunk.js.map +0 -1
  86. package/dist-scalprum/static/3947.7458971d.chunk.js +0 -2
  87. package/dist-scalprum/static/3947.7458971d.chunk.js.map +0 -1
  88. package/dist-scalprum/static/3984.647ef00c.chunk.js +0 -2
  89. package/dist-scalprum/static/3984.647ef00c.chunk.js.map +0 -1
  90. package/dist-scalprum/static/4651.c85cecc4.chunk.js +0 -2
  91. package/dist-scalprum/static/4651.c85cecc4.chunk.js.map +0 -1
  92. package/dist-scalprum/static/4682.75f17114.chunk.js +0 -2
  93. package/dist-scalprum/static/4682.75f17114.chunk.js.map +0 -1
  94. package/dist-scalprum/static/5010.0cd6c959.chunk.js +0 -3
  95. package/dist-scalprum/static/5010.0cd6c959.chunk.js.map +0 -1
  96. package/dist-scalprum/static/5203.b654e8e0.chunk.js +0 -2
  97. package/dist-scalprum/static/5203.b654e8e0.chunk.js.map +0 -1
  98. package/dist-scalprum/static/5453.ecdee66d.chunk.js +0 -2
  99. package/dist-scalprum/static/5453.ecdee66d.chunk.js.map +0 -1
  100. package/dist-scalprum/static/6763.d6cd937f.chunk.js.map +0 -1
  101. package/dist-scalprum/static/6800.20f46859.chunk.js +0 -2
  102. package/dist-scalprum/static/6800.20f46859.chunk.js.map +0 -1
  103. package/dist-scalprum/static/6840.1653e6b0.chunk.js +0 -2
  104. package/dist-scalprum/static/6840.1653e6b0.chunk.js.map +0 -1
  105. package/dist-scalprum/static/7236.f3886d59.chunk.js +0 -2
  106. package/dist-scalprum/static/7236.f3886d59.chunk.js.map +0 -1
  107. package/dist-scalprum/static/7791.ac1ac509.chunk.js +0 -2
  108. package/dist-scalprum/static/7791.ac1ac509.chunk.js.map +0 -1
  109. package/dist-scalprum/static/8172.cbe1f2c4.chunk.js +0 -2
  110. package/dist-scalprum/static/8172.cbe1f2c4.chunk.js.map +0 -1
  111. package/dist-scalprum/static/8799.939d14f9.chunk.js +0 -2
  112. package/dist-scalprum/static/8799.939d14f9.chunk.js.map +0 -1
  113. package/dist-scalprum/static/exposed-PluginRoot.ed95fa78.chunk.js +0 -2
  114. package/dist-scalprum/static/exposed-PluginRoot.ed95fa78.chunk.js.map +0 -1
  115. /package/dist/components/{ApiKeysPage → ApiKeyApprovalPage}/index.esm.js.map +0 -0
  116. /package/dist-scalprum/static/{5010.0cd6c959.chunk.js.LICENSE.txt → 5010.4ef96c87.chunk.js.LICENSE.txt} +0 -0
  117. /package/dist-scalprum/static/{6763.d6cd937f.chunk.js.LICENSE.txt → 8563.46f1a3e1.chunk.js.LICENSE.txt} +0 -0
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "internal.plugin-kuadrant",
3
- "version": "0.0.2-dev",
3
+ "version": "0.0.2-dev-d2ba42b",
4
4
  "extensions": [],
5
5
  "registrationMethod": "callback",
6
6
  "baseURL": "auto",
7
7
  "loadScripts": [
8
- "internal.plugin-kuadrant.114cbbe1d3ddb939d776.js"
8
+ "internal.plugin-kuadrant.eacc31ca4d6c1340f8a8.js"
9
9
  ],
10
- "buildHash": "114cbbe1d3ddb939d776127ea4f11993"
10
+ "buildHash": "eacc31ca4d6c1340f8a875d35698468d"
11
11
  }
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunkinternal_plugin_kuadrant=self.webpackChunkinternal_plugin_kuadrant||[]).push([[2118],{18466:(e,t,n)=>{var r=n(4293),a=n(78920);t.A=void 0;var i=a(n(95478)),o=(0,r(n(74044)).default)(i.createElement("path",{d:"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"}),"Add");t.A=o},25467:(e,t,n)=>{n.d(t,{tN:()=>a}),n(31085),n(22097);var r=n(15427);function a(){const e=(0,r.useVersionedContext)("entity-context");if(!e)throw new Error("Entity context is not available");const t=e.atVersion(1);if(!t)throw new Error("EntityContext v1 not available");if(!t.entity)throw new Error("useEntity hook is being called outside of an EntityLayout where the entity has not been loaded. If this is intentional, please use useAsyncEntity instead.");return{entity:t.entity}}(0,r.createVersionedContext)("entity-context")},32269:(e,t,n)=>{var r=n(4293),a=n(78920);t.A=void 0;var i=a(n(95478)),o=(0,r(n(74044)).default)(i.createElement("path",{d:"M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"}),"Visibility");t.A=o},35015:(e,t,n)=>{n.d(t,{A:()=>o});var r=n(95478),a=n(85608),i=n(71581);function o(e,t){void 0===t&&(t=[]);var n=function(e,t,n){void 0===t&&(t=[]),void 0===n&&(n={loading:!1});var o=(0,r.useRef)(0),s=(0,i.A)(),l=(0,r.useState)(n),c=l[0],d=l[1],h=(0,r.useCallback)(function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];var r=++o.current;return c.loading||d(function(e){return(0,a.__assign)((0,a.__assign)({},e),{loading:!0})}),e.apply(void 0,t).then(function(e){return s()&&r===o.current&&d({value:e,loading:!1}),e},function(e){return s()&&r===o.current&&d({error:e,loading:!1}),e})},t);return[c,h]}(e,t,{loading:!0}),o=n[0],s=n[1];return(0,r.useEffect)(function(){s()},[s]),o}},37725:(e,t,n)=>{n.d(t,{N_:()=>A});var r=n(31085),a=n(22097),i=n(49203),o=n(37976),s=n(72501),l=n(53373),c=n.n(l),d=n(45250),h=n(95478),p=n(49634),u=n(39330);const f=(0,o.makeStyles)(e=>({visuallyHidden:{clip:"rect(0 0 0 0)",clipPath:"inset(50%)",overflow:"hidden",position:"absolute",userSelect:"none",whiteSpace:"nowrap",height:1,width:1},externalLink:{position:"relative"},externalLinkIcon:{verticalAlign:"bottom",marginLeft:e.spacing(.5)}}),{name:"Link"}),v=()=>{const e=(0,a.useApp)().getSystemIcon("externalLink")||u.A,t=f();return(0,r.jsx)(e,{className:t.externalLinkIcon})},g=e=>/^([a-z+.-]+):/.test(e),m=/^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*\:/i,x=window.open;if(x&&!x.__backstage){const e=function(...e){const t=String(e[0]);if(m.test(t))throw new Error("Rejected window.open() with a javascript: URL as a security precaution");return x.apply(this,e)};e.__backstage=!0,window.open=e}const y=e=>e instanceof Array?e.map(y).join(" ").trim():"object"==typeof e&&e?y(e?.props?.children):["string","number"].includes(typeof e)?String(e):"",A=(0,h.forwardRef)(({onClick:e,noTrack:t,externalLinkIcon:n,...o},l)=>{const h=f(),u=(0,a.useAnalytics)(),x=function(){const[e]=(0,p.createRoutesFromChildren)((0,r.jsx)(p.Route,{index:!0,element:(0,r.jsx)("div",{})}));return!e.index}()?(e=>{let t=String(e);const n=(()=>{const e=(()=>{try{return(0,a.useApi)(a.configApiRef).getOptionalString("app.baseUrl")}catch{return}})()??"/",{pathname:t}=new URL(e,"http://sample.dev");return(0,d.trimEnd)(t,"/")})(),r=g(t),i=t.startsWith(n);return r||i||(t=n.concat(t)),t})(o.to):o.to,A=y(o.children)||x,k=g(x),w=k&&!!/^https?:/.exec(x);if(m.test(x))throw new Error("Link component rejected javascript: URL as a security precaution");const b=n=>{e?.(n),t||u.captureEvent("click",A,{attributes:{to:x}})};return k?(0,r.jsxs)(i.A,{...w?{target:"_blank",rel:"noopener"}:{},...o,...o["aria-label"]?{"aria-label":`${o["aria-label"]}, Opens in a new window`}:{},ref:l,href:x,onClick:b,className:c()(h.externalLink,o.className),children:[o.children,n&&(0,r.jsx)(v,{}),(0,r.jsx)(s.A,{component:"span",className:h.visuallyHidden,children:", Opens in a new window"})]}):(0,r.jsx)(i.A,{...o,ref:l,component:p.Link,to:x,onClick:b})})},39053:(e,t,n)=>{var r=n(4293),a=n(78920);t.A=void 0;var i=a(n(95478)),o=(0,r(n(74044)).default)(i.createElement("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"}),"Info");t.A=o},39330:(e,t,n)=>{var r=n(4293),a=n(78920);t.A=void 0;var i=a(n(95478)),o=(0,r(n(74044)).default)(i.createElement("path",{d:"M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"}),"OpenInNew");t.A=o},52235:(e,t,n)=>{var r=n(4293),a=n(78920);t.A=void 0;var i=a(n(95478)),o=(0,r(n(74044)).default)(i.createElement("path",{d:"M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z"}),"ArrowForward");t.A=o},61524:(e,t,n)=>{var r=n(4293),a=n(78920);t.A=void 0;var i=a(n(95478)),o=(0,r(n(74044)).default)(i.createElement("path",{d:"M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46C3.08 8.3 1.78 10.02 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2zm4.31-.78l3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z"}),"VisibilityOff");t.A=o},77225:(e,t,n)=>{var r=n(4293),a=n(78920);t.A=void 0;var i=a(n(95478)),o=(0,r(n(74044)).default)(i.createElement("path",{d:"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z"}),"Warning");t.A=o},96040:(e,t,n)=>{n.d(t,{n:()=>z});var r=n(31085),a=n(40703),i=n(59469),o=n(48653),s=n(45685),l=n(37197),c=n(37976),d=n(53373),h=n.n(d),p=n(10394),u=n(72501),f=n(52235),v=n(37725);const g=(0,c.makeStyles)(e=>({root:{maxWidth:"fit-content",padding:e.spacing(2,2,2,2.5)},boxTitle:{margin:0,color:e.palette.textSubtle},arrow:{color:e.palette.textSubtle}}),{name:"BackstageBottomLink"});function m(e){const{link:t,title:n,onClick:a}=e,i=g();return(0,r.jsxs)(p.A,{children:[(0,r.jsx)(l.A,{}),(0,r.jsx)(v.N_,{to:t,onClick:a,underline:"none",children:(0,r.jsxs)(p.A,{display:"flex",alignItems:"center",className:i.root,children:[(0,r.jsx)(p.A,{className:i.boxTitle,fontWeight:"fontWeightBold",m:1,children:(0,r.jsx)(u.A,{children:(0,r.jsx)("strong",{children:n})})}),(0,r.jsx)(f.A,{className:i.arrow})]})})]})}var x=n(95478),y=n(64947);const A=(0,x.forwardRef)((e,t)=>(0,r.jsx)(v.N_,{ref:t,...e,color:"initial"})),k=(0,x.forwardRef)((e,t)=>(0,r.jsx)(y.A,{ref:t,component:A,...e}));var w=n(56573),b=n(21006),j=n(75501);const C=e=>{const{slackChannel:t}=e,{t:n}=(0,j.useTranslationRef)(b.O);return t?"string"==typeof t?(0,r.jsx)(u.A,{children:n("errorBoundary.title",{slackChannel:t})}):t.href?(0,r.jsx)(k,{to:t.href,variant:"contained",children:t.name}):(0,r.jsx)(u.A,{children:n("errorBoundary.title",{slackChannel:t.name})}):null},E=class extends x.Component{constructor(e){super(e),this.state={error:void 0,errorInfo:void 0}}componentDidCatch(e,t){console.error(`ErrorBoundary, error: ${e}`,{error:e,errorInfo:t}),this.setState({error:e,errorInfo:t})}render(){const{slackChannel:e,children:t}=this.props,{error:n}=this.state;return n?(0,r.jsx)(w.b,{title:"Something Went Wrong",error:n,children:(0,r.jsx)(C,{slackChannel:e})}):t}},L=(0,c.makeStyles)(e=>({noPadding:{padding:0,"&:last-child":{paddingBottom:0}},contentAlignBottom:{display:"flex",alignItems:"self-end"},header:{padding:e.spacing(2,2,2,2.5)},headerTitle:{fontWeight:e.typography.fontWeightBold},headerSubheader:{paddingTop:e.spacing(1)},headerAvatar:{},headerAction:{},headerContent:{},subheader:{display:"flex"}}),{name:"BackstageInfoCard"}),S=(0,c.withStyles)(e=>({root:{display:"inline-block",padding:e.spacing(8,8,0,0),float:"right"}}),{name:"BackstageInfoCardCardActionsTopRight"})(i.A),N={card:{flex:{display:"flex",flexDirection:"column"},fullHeight:{display:"flex",flexDirection:"column",height:"100%"},gridItem:{display:"flex",flexDirection:"column",height:"calc(100% - 10px)",marginBottom:"10px",breakInside:"avoid-page","@media print":{height:"auto"}}},cardContent:{fullHeight:{flex:1},gridItem:{flex:1}}};function z(e){const{title:t,subheader:n,divider:c=!0,deepLink:d,slackChannel:p,errorBoundaryProps:u,variant:f,alignContent:v="normal",children:g,headerStyle:x,headerProps:y,icon:A,action:k,actionsClassName:w,actions:b,cardClassName:j,actionsTopRight:C,className:z,noPadding:I,titleTypographyProps:_,subheaderTypographyProps:B}=e,R=L();let T={},M={};f&&f.split(/[\s]+/g).forEach(e=>{T={...T,...N.card[e]},M={...M,...N.cardContent[e]}});const V=u||(p?{slackChannel:p}:{});return(0,r.jsx)(a.A,{style:T,className:z,children:(0,r.jsxs)(E,{...V,children:[t&&(0,r.jsx)(s.A,{classes:{root:h()(R.header),title:R.headerTitle,subheader:R.headerSubheader,avatar:R.headerAvatar,action:R.headerAction,content:R.headerContent},title:t,subheader:n||A?(0,r.jsxs)("div",{"data-testid":"info-card-subheader",children:[n&&(0,r.jsx)("div",{className:R.subheader,children:n}),A]}):null,action:k,style:{...x},titleTypographyProps:_,subheaderTypographyProps:B,...y}),C&&(0,r.jsx)(S,{children:C}),c&&(0,r.jsx)(l.A,{}),(0,r.jsx)(o.A,{className:h()(j,{[R.noPadding]:I,[R.contentAlignBottom]:"bottom"===v}),style:M,children:g}),b&&(0,r.jsx)(i.A,{className:w,children:b}),d&&(0,r.jsx)(m,{...d})]})})}}}]);
2
+ //# sourceMappingURL=2118.82433765.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static/2118.82433765.chunk.js","mappings":"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","sources":["webpack://internal.plugin-kuadrant/../../node_modules/@material-ui/icons/Add.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog-react/dist/hooks/useEntity.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/@material-ui/icons/Visibility.js","webpack://internal.plugin-kuadrant/../../node_modules/react-use/esm/useAsync.js","webpack://internal.plugin-kuadrant/../../node_modules/react-use/esm/useAsyncFn.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/core-components/dist/components/Link/Link.esm.js","webpack://internal.plugin-kuadrant/../../node_modules/@material-ui/icons/Info.js","webpack://internal.plugin-kuadrant/../../node_modules/@material-ui/icons/OpenInNew.js","webpack://internal.plugin-kuadrant/../../node_modules/@material-ui/icons/ArrowForward.js","webpack://internal.plugin-kuadrant/../../node_modules/@material-ui/icons/VisibilityOff.js","webpack://internal.plugin-kuadrant/../../node_modules/@material-ui/icons/Warning.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/core-components/dist/layout/BottomLink/BottomLink.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/core-components/dist/components/LinkButton/LinkButton.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/core-components/dist/layout/ErrorBoundary/ErrorBoundary.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/core-components/dist/layout/InfoCard/InfoCard.esm.js"],"sourcesContent":["\"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: \"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z\"\n}), 'Add');\n\nexports.default = _default;","import { jsx } from 'react/jsx-runtime';\nimport { stringifyEntityRef } from '@backstage/catalog-model';\nimport { AnalyticsContext } from '@backstage/core-plugin-api';\nimport { createVersionedContext, useVersionedContext, createVersionedValueMap } from '@backstage/version-bridge';\n\nconst NewEntityContext = createVersionedContext(\n \"entity-context\"\n);\nconst AsyncEntityProvider = (props) => {\n const { children, entity, loading, error, refresh } = props;\n const value = { entity, loading, error, refresh };\n return /* @__PURE__ */ jsx(NewEntityContext.Provider, { value: createVersionedValueMap({ 1: value }), children: /* @__PURE__ */ jsx(\n AnalyticsContext,\n {\n attributes: {\n ...entity ? { entityRef: stringifyEntityRef(entity) } : void 0\n },\n children\n }\n ) });\n};\nconst EntityProvider = (props) => /* @__PURE__ */ jsx(\n AsyncEntityProvider,\n {\n entity: props.entity,\n loading: !Boolean(props.entity),\n error: void 0,\n refresh: void 0,\n children: props.children\n }\n);\nfunction useEntity() {\n const versionedHolder = useVersionedContext(\n \"entity-context\"\n );\n if (!versionedHolder) {\n throw new Error(\"Entity context is not available\");\n }\n const value = versionedHolder.atVersion(1);\n if (!value) {\n throw new Error(\"EntityContext v1 not available\");\n }\n if (!value.entity) {\n throw new Error(\n \"useEntity hook is being called outside of an EntityLayout where the entity has not been loaded. If this is intentional, please use useAsyncEntity instead.\"\n );\n }\n return { entity: value.entity };\n}\nfunction useAsyncEntity() {\n const versionedHolder = useVersionedContext(\n \"entity-context\"\n );\n if (!versionedHolder) {\n throw new Error(\"Entity context is not available\");\n }\n const value = versionedHolder.atVersion(1);\n if (!value) {\n throw new Error(\"EntityContext v1 not available\");\n }\n const { entity, loading, error, refresh } = value;\n return { entity, loading, error, refresh };\n}\n\nexport { AsyncEntityProvider, EntityProvider, useAsyncEntity, useEntity };\n//# sourceMappingURL=useEntity.esm.js.map\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 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z\"\n}), 'Visibility');\n\nexports.default = _default;","import { useEffect } from 'react';\nimport useAsyncFn from './useAsyncFn';\nexport default function useAsync(fn, deps) {\n if (deps === void 0) { deps = []; }\n var _a = useAsyncFn(fn, deps, {\n loading: true,\n }), state = _a[0], callback = _a[1];\n useEffect(function () {\n callback();\n }, [callback]);\n return state;\n}\n","import { __assign } from \"tslib\";\nimport { useCallback, useRef, useState } from 'react';\nimport useMountedState from './useMountedState';\nexport default function useAsyncFn(fn, deps, initialState) {\n if (deps === void 0) { deps = []; }\n if (initialState === void 0) { initialState = { loading: false }; }\n var lastCallId = useRef(0);\n var isMounted = useMountedState();\n var _a = useState(initialState), state = _a[0], set = _a[1];\n var callback = useCallback(function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var callId = ++lastCallId.current;\n if (!state.loading) {\n set(function (prevState) { return (__assign(__assign({}, prevState), { loading: true })); });\n }\n return fn.apply(void 0, args).then(function (value) {\n isMounted() && callId === lastCallId.current && set({ value: value, loading: false });\n return value;\n }, function (error) {\n isMounted() && callId === lastCallId.current && set({ error: error, loading: false });\n return error;\n });\n }, deps);\n return [state, callback];\n}\n","import { jsxs, jsx } from 'react/jsx-runtime';\nimport { useAnalytics, useApp, useApi, configApiRef } from '@backstage/core-plugin-api';\nimport MaterialLink from '@material-ui/core/Link';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport classNames from 'classnames';\nimport { trimEnd } from 'lodash';\nimport { forwardRef } from 'react';\nimport { Link as Link$1, createRoutesFromChildren, Route } from 'react-router-dom';\nimport OpenInNew from '@material-ui/icons/OpenInNew';\n\nfunction isReactRouterBeta() {\n const [obj] = createRoutesFromChildren(/* @__PURE__ */ jsx(Route, { index: true, element: /* @__PURE__ */ jsx(\"div\", {}) }));\n return !obj.index;\n}\nconst useStyles = makeStyles(\n (theme) => ({\n visuallyHidden: {\n clip: \"rect(0 0 0 0)\",\n clipPath: \"inset(50%)\",\n overflow: \"hidden\",\n position: \"absolute\",\n userSelect: \"none\",\n whiteSpace: \"nowrap\",\n height: 1,\n width: 1\n },\n externalLink: {\n position: \"relative\"\n },\n externalLinkIcon: {\n verticalAlign: \"bottom\",\n marginLeft: theme.spacing(0.5)\n }\n }),\n { name: \"Link\" }\n);\nconst ExternalLinkIcon = () => {\n const app = useApp();\n const Icon = app.getSystemIcon(\"externalLink\") || OpenInNew;\n const classes = useStyles();\n return /* @__PURE__ */ jsx(Icon, { className: classes.externalLinkIcon });\n};\nconst isExternalUri = (uri) => /^([a-z+.-]+):/.test(uri);\nconst scriptProtocolPattern = (\n // eslint-disable-next-line no-control-regex\n /^[\\u0000-\\u001F ]*j[\\r\\n\\t]*a[\\r\\n\\t]*v[\\r\\n\\t]*a[\\r\\n\\t]*s[\\r\\n\\t]*c[\\r\\n\\t]*r[\\r\\n\\t]*i[\\r\\n\\t]*p[\\r\\n\\t]*t[\\r\\n\\t]*\\:/i\n);\nconst originalWindowOpen = window.open;\nif (originalWindowOpen && !originalWindowOpen.__backstage) {\n const newOpen = function open(...args) {\n const url = String(args[0]);\n if (scriptProtocolPattern.test(url)) {\n throw new Error(\n \"Rejected window.open() with a javascript: URL as a security precaution\"\n );\n }\n return originalWindowOpen.apply(this, args);\n };\n newOpen.__backstage = true;\n window.open = newOpen;\n}\nconst useBaseUrl = () => {\n try {\n const config = useApi(configApiRef);\n return config.getOptionalString(\"app.baseUrl\");\n } catch {\n return void 0;\n }\n};\nconst useBasePath = () => {\n const base = \"http://sample.dev\";\n const url = useBaseUrl() ?? \"/\";\n const { pathname } = new URL(url, base);\n return trimEnd(pathname, \"/\");\n};\nconst useResolvedPath = (uri) => {\n let resolvedPath = String(uri);\n const basePath = useBasePath();\n const external = isExternalUri(resolvedPath);\n const startsWithBasePath = resolvedPath.startsWith(basePath);\n if (!external && !startsWithBasePath) {\n resolvedPath = basePath.concat(resolvedPath);\n }\n return resolvedPath;\n};\nconst getNodeText = (node) => {\n if (node instanceof Array) {\n return node.map(getNodeText).join(\" \").trim();\n }\n if (typeof node === \"object\" && node) {\n return getNodeText(node?.props?.children);\n }\n if ([\"string\", \"number\"].includes(typeof node)) {\n return String(node);\n }\n return \"\";\n};\nconst Link = forwardRef(\n ({ onClick, noTrack, externalLinkIcon, ...props }, ref) => {\n const classes = useStyles();\n const analytics = useAnalytics();\n const to = isReactRouterBeta() ? useResolvedPath(props.to) : props.to;\n const linkText = getNodeText(props.children) || to;\n const external = isExternalUri(to);\n const newWindow = external && !!/^https?:/.exec(to);\n if (scriptProtocolPattern.test(to)) {\n throw new Error(\n \"Link component rejected javascript: URL as a security precaution\"\n );\n }\n const handleClick = (event) => {\n onClick?.(event);\n if (!noTrack) {\n analytics.captureEvent(\"click\", linkText, { attributes: { to } });\n }\n };\n return external ? (\n // External links\n /* @__PURE__ */ jsxs(\n MaterialLink,\n {\n ...newWindow ? { target: \"_blank\", rel: \"noopener\" } : {},\n ...props,\n ...props[\"aria-label\"] ? { \"aria-label\": `${props[\"aria-label\"]}, Opens in a new window` } : {},\n ref,\n href: to,\n onClick: handleClick,\n className: classNames(classes.externalLink, props.className),\n children: [\n props.children,\n externalLinkIcon && /* @__PURE__ */ jsx(ExternalLinkIcon, {}),\n /* @__PURE__ */ jsx(Typography, { component: \"span\", className: classes.visuallyHidden, children: \", Opens in a new window\" })\n ]\n }\n )\n ) : (\n // Interact with React Router for internal links\n /* @__PURE__ */ jsx(\n MaterialLink,\n {\n ...props,\n ref,\n component: Link$1,\n to,\n onClick: handleClick\n }\n )\n );\n }\n);\n\nexport { Link, isExternalUri, isReactRouterBeta, useResolvedPath };\n//# sourceMappingURL=Link.esm.js.map\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 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z\"\n}), 'Info');\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: \"M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z\"\n}), 'OpenInNew');\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: \"M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z\"\n}), 'ArrowForward');\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: \"M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46C3.08 8.3 1.78 10.02 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2zm4.31-.78l3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z\"\n}), 'VisibilityOff');\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: \"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z\"\n}), 'Warning');\n\nexports.default = _default;","import { jsxs, jsx } from 'react/jsx-runtime';\nimport Box from '@material-ui/core/Box';\nimport Divider from '@material-ui/core/Divider';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport ArrowIcon from '@material-ui/icons/ArrowForward';\nimport { Link } from '../../components/Link/Link.esm.js';\n\nconst useStyles = makeStyles(\n (theme) => ({\n root: {\n maxWidth: \"fit-content\",\n padding: theme.spacing(2, 2, 2, 2.5)\n },\n boxTitle: {\n margin: 0,\n color: theme.palette.textSubtle\n },\n arrow: {\n color: theme.palette.textSubtle\n }\n }),\n { name: \"BackstageBottomLink\" }\n);\nfunction BottomLink(props) {\n const { link, title, onClick } = props;\n const classes = useStyles();\n return /* @__PURE__ */ jsxs(Box, { children: [\n /* @__PURE__ */ jsx(Divider, {}),\n /* @__PURE__ */ jsx(Link, { to: link, onClick, underline: \"none\", children: /* @__PURE__ */ jsxs(Box, { display: \"flex\", alignItems: \"center\", className: classes.root, children: [\n /* @__PURE__ */ jsx(Box, { className: classes.boxTitle, fontWeight: \"fontWeightBold\", m: 1, children: /* @__PURE__ */ jsx(Typography, { children: /* @__PURE__ */ jsx(\"strong\", { children: title }) }) }),\n /* @__PURE__ */ jsx(ArrowIcon, { className: classes.arrow })\n ] }) })\n ] });\n}\n\nexport { BottomLink };\n//# sourceMappingURL=BottomLink.esm.js.map\n","import { jsx } from 'react/jsx-runtime';\nimport Button$1 from '@material-ui/core/Button';\nimport { forwardRef } from 'react';\nimport { Link } from '../Link/Link.esm.js';\n\nconst LinkWrapper = forwardRef((props, ref) => /* @__PURE__ */ jsx(Link, { ref, ...props, color: \"initial\" }));\nconst LinkButton = forwardRef((props, ref) => /* @__PURE__ */ jsx(Button$1, { ref, component: LinkWrapper, ...props }));\nconst Button = LinkButton;\n\nexport { Button, LinkButton };\n//# sourceMappingURL=LinkButton.esm.js.map\n","import { jsx } from 'react/jsx-runtime';\nimport Typography from '@material-ui/core/Typography';\nimport { Component } from 'react';\nimport { LinkButton } from '../../components/LinkButton/LinkButton.esm.js';\nimport { ErrorPanel } from '../../components/ErrorPanel/ErrorPanel.esm.js';\nimport { coreComponentsTranslationRef } from '../../translation.esm.js';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nconst SlackLink = (props) => {\n const { slackChannel } = props;\n const { t } = useTranslationRef(coreComponentsTranslationRef);\n if (!slackChannel) {\n return null;\n } else if (typeof slackChannel === \"string\") {\n return /* @__PURE__ */ jsx(Typography, { children: t(\"errorBoundary.title\", { slackChannel }) });\n } else if (!slackChannel.href) {\n return /* @__PURE__ */ jsx(Typography, { children: t(\"errorBoundary.title\", {\n slackChannel: slackChannel.name\n }) });\n }\n return /* @__PURE__ */ jsx(LinkButton, { to: slackChannel.href, variant: \"contained\", children: slackChannel.name });\n};\nconst ErrorBoundary = class ErrorBoundary2 extends Component {\n constructor(props) {\n super(props);\n this.state = {\n error: void 0,\n errorInfo: void 0\n };\n }\n componentDidCatch(error, errorInfo) {\n console.error(`ErrorBoundary, error: ${error}`, { error, errorInfo });\n this.setState({ error, errorInfo });\n }\n render() {\n const { slackChannel, children } = this.props;\n const { error } = this.state;\n if (!error) {\n return children;\n }\n return /* @__PURE__ */ jsx(ErrorPanel, { title: \"Something Went Wrong\", error, children: /* @__PURE__ */ jsx(SlackLink, { slackChannel }) });\n }\n};\n\nexport { ErrorBoundary };\n//# sourceMappingURL=ErrorBoundary.esm.js.map\n","import { jsx, jsxs } from 'react/jsx-runtime';\nimport Card from '@material-ui/core/Card';\nimport CardActions from '@material-ui/core/CardActions';\nimport CardContent from '@material-ui/core/CardContent';\nimport CardHeader from '@material-ui/core/CardHeader';\nimport Divider from '@material-ui/core/Divider';\nimport { makeStyles, withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\nimport { BottomLink } from '../BottomLink/BottomLink.esm.js';\nimport { ErrorBoundary } from '../ErrorBoundary/ErrorBoundary.esm.js';\n\nconst useStyles = makeStyles(\n (theme) => ({\n noPadding: {\n padding: 0,\n \"&:last-child\": {\n paddingBottom: 0\n }\n },\n contentAlignBottom: {\n display: \"flex\",\n alignItems: \"self-end\"\n },\n header: {\n padding: theme.spacing(2, 2, 2, 2.5)\n },\n headerTitle: {\n fontWeight: theme.typography.fontWeightBold\n },\n headerSubheader: {\n paddingTop: theme.spacing(1)\n },\n headerAvatar: {},\n headerAction: {},\n headerContent: {},\n subheader: {\n display: \"flex\"\n }\n }),\n { name: \"BackstageInfoCard\" }\n);\nconst CardActionsTopRight = withStyles(\n (theme) => ({\n root: {\n display: \"inline-block\",\n padding: theme.spacing(8, 8, 0, 0),\n float: \"right\"\n }\n }),\n { name: \"BackstageInfoCardCardActionsTopRight\" }\n)(CardActions);\nconst VARIANT_STYLES = {\n card: {\n flex: {\n display: \"flex\",\n flexDirection: \"column\"\n },\n fullHeight: {\n display: \"flex\",\n flexDirection: \"column\",\n height: \"100%\"\n },\n gridItem: {\n display: \"flex\",\n flexDirection: \"column\",\n height: \"calc(100% - 10px)\",\n // for pages without content header\n marginBottom: \"10px\",\n breakInside: \"avoid-page\",\n \"@media print\": {\n height: \"auto\"\n }\n }\n },\n cardContent: {\n fullHeight: {\n flex: 1\n },\n gridItem: {\n flex: 1\n }\n }\n};\nfunction InfoCard(props) {\n const {\n title,\n subheader,\n divider = true,\n deepLink,\n slackChannel,\n errorBoundaryProps,\n variant,\n alignContent = \"normal\",\n children,\n headerStyle,\n headerProps,\n icon,\n action,\n actionsClassName,\n actions,\n cardClassName,\n actionsTopRight,\n className,\n noPadding,\n titleTypographyProps,\n subheaderTypographyProps\n } = props;\n const classes = useStyles();\n let calculatedStyle = {};\n let calculatedCardStyle = {};\n if (variant) {\n const variants = variant.split(/[\\s]+/g);\n variants.forEach((name) => {\n calculatedStyle = {\n ...calculatedStyle,\n ...VARIANT_STYLES.card[name]\n };\n calculatedCardStyle = {\n ...calculatedCardStyle,\n ...VARIANT_STYLES.cardContent[name]\n };\n });\n }\n const cardSubTitle = () => {\n if (!subheader && !icon) {\n return null;\n }\n return /* @__PURE__ */ jsxs(\"div\", { \"data-testid\": \"info-card-subheader\", children: [\n subheader && /* @__PURE__ */ jsx(\"div\", { className: classes.subheader, children: subheader }),\n icon\n ] });\n };\n const errProps = errorBoundaryProps || (slackChannel ? { slackChannel } : {});\n return /* @__PURE__ */ jsx(Card, { style: calculatedStyle, className, children: /* @__PURE__ */ jsxs(ErrorBoundary, { ...errProps, children: [\n title && /* @__PURE__ */ jsx(\n CardHeader,\n {\n classes: {\n root: classNames(classes.header),\n title: classes.headerTitle,\n subheader: classes.headerSubheader,\n avatar: classes.headerAvatar,\n action: classes.headerAction,\n content: classes.headerContent\n },\n title,\n subheader: cardSubTitle(),\n action,\n style: { ...headerStyle },\n titleTypographyProps,\n subheaderTypographyProps,\n ...headerProps\n }\n ),\n actionsTopRight && /* @__PURE__ */ jsx(CardActionsTopRight, { children: actionsTopRight }),\n divider && /* @__PURE__ */ jsx(Divider, {}),\n /* @__PURE__ */ jsx(\n CardContent,\n {\n className: classNames(cardClassName, {\n [classes.noPadding]: noPadding,\n [classes.contentAlignBottom]: alignContent === \"bottom\"\n }),\n style: calculatedCardStyle,\n children\n }\n ),\n actions && /* @__PURE__ */ jsx(CardActions, { className: actionsClassName, children: actions }),\n deepLink && /* @__PURE__ */ jsx(BottomLink, { ...deepLink })\n ] }) });\n}\n\nexport { InfoCard };\n//# sourceMappingURL=InfoCard.esm.js.map\n"],"names":["_interopRequireDefault","_interopRequireWildcard","exports","React","_default","default","createElement","d","useEntity","versionedHolder","useVersionedContext","Error","value","atVersion","entity","createVersionedContext","useAsync","fn","deps","_a","initialState","loading","lastCallId","useRef","isMounted","useMountedState","useState","state","set","callback","useCallback","args","_i","arguments","length","callId","current","prevState","__assign","apply","then","error","useAsyncFn","useEffect","useStyles","makeStyles","theme","visuallyHidden","clip","clipPath","overflow","position","userSelect","whiteSpace","height","width","externalLink","externalLinkIcon","verticalAlign","marginLeft","spacing","name","ExternalLinkIcon","Icon","useApp","getSystemIcon","classes","jsx","className","isExternalUri","uri","test","scriptProtocolPattern","originalWindowOpen","window","open","__backstage","newOpen","url","String","this","getNodeText","node","Array","map","join","trim","props","children","includes","Link","forwardRef","onClick","noTrack","ref","analytics","useAnalytics","to","obj","createRoutesFromChildren","Route","index","element","isReactRouterBeta","resolvedPath","basePath","useApi","configApiRef","getOptionalString","useBaseUrl","pathname","URL","trimEnd","useBasePath","external","startsWithBasePath","startsWith","concat","useResolvedPath","linkText","newWindow","exec","handleClick","event","captureEvent","attributes","jsxs","target","rel","href","component","root","maxWidth","padding","boxTitle","margin","color","palette","textSubtle","arrow","BottomLink","link","title","Box","Divider","underline","display","alignItems","fontWeight","m","Typography","A","LinkWrapper","LinkButton","Button","SlackLink","slackChannel","t","useTranslationRef","variant","ErrorBoundary","Component","constructor","super","errorInfo","componentDidCatch","console","setState","render","noPadding","paddingBottom","contentAlignBottom","header","headerTitle","typography","fontWeightBold","headerSubheader","paddingTop","headerAvatar","headerAction","headerContent","subheader","CardActionsTopRight","withStyles","float","CardActions","VARIANT_STYLES","card","flex","flexDirection","fullHeight","gridItem","marginBottom","breakInside","cardContent","InfoCard","divider","deepLink","errorBoundaryProps","alignContent","headerStyle","headerProps","icon","action","actionsClassName","actions","cardClassName","actionsTopRight","titleTypographyProps","subheaderTypographyProps","calculatedStyle","calculatedCardStyle","split","forEach","errProps","Card","style","CardHeader","avatar","content","CardContent"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunkinternal_plugin_kuadrant=self.webpackChunkinternal_plugin_kuadrant||[]).push([[2967],{32269:(e,a,t)=>{var n=t(4293),r=t(78920);a.A=void 0;var i=r(t(95478)),s=(0,n(t(74044)).default)(i.createElement("path",{d:"M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"}),"Visibility");a.A=s},35015:(e,a,t)=>{t.d(a,{A:()=>s});var n=t(95478),r=t(85608),i=t(71581);function s(e,a){void 0===a&&(a=[]);var t=function(e,a,t){void 0===a&&(a=[]),void 0===t&&(t={loading:!1});var s=(0,n.useRef)(0),l=(0,i.A)(),o=(0,n.useState)(t),c=o[0],d=o[1],h=(0,n.useCallback)(function(){for(var a=[],t=0;t<arguments.length;t++)a[t]=arguments[t];var n=++s.current;return c.loading||d(function(e){return(0,r.__assign)((0,r.__assign)({},e),{loading:!0})}),e.apply(void 0,a).then(function(e){return l()&&n===s.current&&d({value:e,loading:!1}),e},function(e){return l()&&n===s.current&&d({error:e,loading:!1}),e})},a);return[c,h]}(e,a,{loading:!0}),s=t[0],l=t[1];return(0,n.useEffect)(function(){l()},[l]),s}},46299:(e,a,t)=>{t.d(a,{ee:()=>i,g9:()=>n,uU:()=>r});const n=e=>{const a={border:"none"};switch(e){case"Approved":return{...a,backgroundColor:"#1976d2",color:"#fff"};case"Rejected":return{...a,backgroundColor:"#d32f2f",color:"#fff"};default:return{...a,backgroundColor:"#9c27b0",color:"#fff"}}},r=e=>{const a={border:"none"};switch(e){case"Approved":return{...a,backgroundColor:"#2e7d32",color:"#fff"};case"Rejected":return{...a,backgroundColor:"#d32f2f",color:"#fff"};default:return{...a,backgroundColor:"#ed6c02",color:"#fff"}}},i=e=>{switch(e){case"production":return{backgroundColor:"#1976d2",color:"#fff"};case"experimental":return{backgroundColor:"#9c27b0",color:"#fff"};case"deprecated":return{backgroundColor:"#ff9800",color:"#fff"};case"retired":return{backgroundColor:"#d32f2f",color:"#fff"};default:return{}}}},52235:(e,a,t)=>{var n=t(4293),r=t(78920);a.A=void 0;var i=r(t(95478)),s=(0,n(t(74044)).default)(i.createElement("path",{d:"M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z"}),"ArrowForward");a.A=s},55735:(e,a,t)=>{var n=t(4293),r=t(78920);a.A=void 0;var i=r(t(95478)),s=(0,n(t(74044)).default)(i.createElement("path",{d:"M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z"}),"ArrowBack");a.A=s},61524:(e,a,t)=>{var n=t(4293),r=t(78920);a.A=void 0;var i=r(t(95478)),s=(0,n(t(74044)).default)(i.createElement("path",{d:"M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46C3.08 8.3 1.78 10.02 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2zm4.31-.78l3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z"}),"VisibilityOff");a.A=s},72967:(e,a,t)=>{t.r(a),t.d(a,{ApiKeyDetailPage:()=>M});var n=t(31085),r=t(95478),i=t(49634),s=t(22097),l=t(35015),o=t(86687),c=t(42367),d=t(289),h=t(15831),p=t(37725),u=t(46681),m=t(94641),x=t(96040),f=t(58837),A=t(10394),v=t(71677),y=t(29365),g=t(64947),j=t(72501),b=t(42899),k=t(67720),C=t(31653),w=t(38605),P=t(76891),N=t(61477),I=t(46805),S=t(93453),B=t(32269),R=t(61524),z=t(99594),T=t(77225),$=t(55735),L=t(39330),_=t(85121),E=t(46299);const K=(0,f.A)(e=>({label:{fontWeight:600,color:e.palette.text.secondary,marginBottom:e.spacing(.5)},value:{marginBottom:e.spacing(2)},codeBlock:{backgroundColor:e.palette.background.default,padding:e.spacing(2),borderRadius:e.shape.borderRadius,fontFamily:"monospace",fontSize:"0.875rem",overflow:"auto",whiteSpace:"pre-wrap",wordBreak:"break-all"},apiKeyContainer:{display:"flex",alignItems:"center",gap:e.spacing(1),padding:e.spacing(1.5),backgroundColor:e.palette.background.default,borderRadius:e.shape.borderRadius,fontFamily:"monospace"},tabPanel:{marginTop:e.spacing(2)}})),D=({code:e,onCopy:a})=>{const t=K();return(0,n.jsxs)(A.A,{position:"relative",children:[(0,n.jsx)(A.A,{className:t.codeBlock,children:e}),(0,n.jsx)(v.Ay,{title:"Copy code",children:(0,n.jsx)(y.A,{size:"small",style:{position:"absolute",top:8,right:8},onClick:a,children:(0,n.jsx)(z.A,{fontSize:"small"})})})]})},M=()=>{var e,a,t,f,M,W,H,q,F,U;const V=K(),{namespace:O,name:G}=(0,i.useParams)(),Y=(0,s.useApi)(s.configApiRef),J=(0,s.useApi)(s.fetchApiRef),Q=(0,s.useApi)(s.alertApiRef),X=Y.getString("backend.baseUrl"),[Z,ee]=(0,r.useState)(0),[ae,te]=(0,r.useState)(!1),[ne,re]=(0,r.useState)(null),[ie,se]=(0,r.useState)(!1),[le,oe]=(0,r.useState)(!1),[ce,de]=(0,r.useState)(!1),{value:he,loading:pe,error:ue}=(0,l.A)(async()=>{var e;const[a,t]=await Promise.all([J.fetch(`${X}/api/kuadrant/apikeys/${O}/${G}`),J.fetch(`${X}/api/kuadrant/apiproducts`)]);if(!a.ok)throw new Error("Failed to fetch API key");const n=await a.json();let r;return!1===(null===(e=n.status)||void 0===e?void 0:e.canReadSecret)&&oe(!0),t.ok&&(r=((await t.json()).items||[]).find(e=>{var a;return e.metadata.name===(null===(a=n.spec.apiProductRef)||void 0===a?void 0:a.name)&&e.metadata.namespace===n.metadata.namespace})),{apiKey:n,apiProduct:r}},[O,G,X,J]),me=null==he?void 0:he.apiKey,xe=null==he?void 0:he.apiProduct,fe=async e=>{await navigator.clipboard.writeText(e),Q.post({message:"Copied to clipboard",severity:"success",display:"transient"})};if(pe)return(0,n.jsx)(o.k,{});if(ue||!me)return(0,n.jsx)(c._,{error:ue||new Error("API key not found")});const Ae=(null===(e=me.status)||void 0===e?void 0:e.phase)||"Pending",ve="Approved"===Ae?"Active":Ae,ye=(null===(a=me.status)||void 0===a?void 0:a.apiHostname)||"api.example.com",ge=ne||"<your-api-key>",je=[{label:"cURL",code:`curl -H "Authorization: Bearer ${ge}" \\\n https://${ye}/`},{label:"Node.js",code:`const response = await fetch('https://${ye}/', {\n headers: {\n 'Authorization': 'Bearer ${ge}'\n }\n});\nconst data = await response.json();`},{label:"Python",code:`import requests\n\nresponse = requests.get(\n 'https://${ye}/',\n headers={'Authorization': 'Bearer ${ge}'}\n)\ndata = response.json()`},{label:"Go",code:`package main\n\nimport (\n "net/http"\n)\n\nfunc main() {\n client := &http.Client{}\n req, _ := http.NewRequest("GET", "https://${ye}/", nil)\n req.Header.Set("Authorization", "Bearer ${ge}")\n resp, _ := client.Do(req)\n defer resp.Body.Close()\n}`}];return(0,n.jsxs)(d.Y,{themeId:"tool",children:[(0,n.jsx)(h.Y,{title:me.metadata.name,subtitle:`API Key for ${(null===(t=me.spec.apiProductRef)||void 0===t?void 0:t.name)||"unknown"}`,children:(0,n.jsx)(p.N_,{to:"/kuadrant/my-api-keys",children:(0,n.jsx)(g.A,{startIcon:(0,n.jsx)($.A,{}),children:"Back to API Keys"})})}),(0,n.jsxs)(u.U,{children:[(0,n.jsx)(A.A,{mb:2,children:(0,n.jsxs)(m.B,{"aria-label":"breadcrumb",children:[(0,n.jsx)(p.N_,{to:"/kuadrant/my-api-keys",children:"API keys"}),(0,n.jsx)(j.A,{children:me.metadata.name})]})}),(0,n.jsxs)(A.A,{mb:3,display:"flex",style:{gap:8},children:[(0,n.jsx)(p.N_,{to:`/catalog/default/api/${null===(f=me.spec.apiProductRef)||void 0===f?void 0:f.name}`,children:(0,n.jsx)(g.A,{variant:"outlined",startIcon:(0,n.jsx)(L.A,{}),"data-testid":"view-api-button",children:"View API"})}),(null==xe||null===(M=xe.spec)||void 0===M?void 0:M.contact)&&(xe.spec.contact.email||xe.spec.contact.url||xe.spec.contact.slack)&&(0,n.jsx)(g.A,{variant:"outlined",startIcon:(0,n.jsx)(_.A,{}),href:xe.spec.contact.email?`mailto:${xe.spec.contact.email}`:xe.spec.contact.slack?xe.spec.contact.slack:xe.spec.contact.url||"#",target:"_blank",rel:"noopener noreferrer",children:"Contact Owner"})]}),(0,n.jsxs)(b.A,{container:!0,spacing:3,children:[(0,n.jsx)(b.A,{item:!0,xs:12,md:6,children:(0,n.jsx)(x.n,{title:"API Key Details",children:(0,n.jsxs)(A.A,{children:[(0,n.jsx)(j.A,{variant:"caption",className:V.label,children:"Status"}),(0,n.jsx)(A.A,{className:V.value,children:(0,n.jsx)(k.A,{label:ve,size:"small",style:(0,E.uU)(Ae),"data-testid":"api-key-status-chip"})}),(0,n.jsx)(j.A,{variant:"caption",className:V.label,children:"API Product"}),(0,n.jsx)(j.A,{variant:"body1",className:V.value,children:(0,n.jsx)(p.N_,{to:`/catalog/default/api/${null===(W=me.spec.apiProductRef)||void 0===W?void 0:W.name}/api-keys`,children:(null===(H=me.spec.apiProductRef)||void 0===H?void 0:H.name)||"unknown"})}),(0,n.jsx)(j.A,{variant:"caption",className:V.label,children:"Tier"}),(0,n.jsx)(A.A,{className:V.value,children:(0,n.jsx)(k.A,{label:me.spec.planTier,size:"small",variant:"outlined"})}),(0,n.jsx)(j.A,{variant:"caption",className:V.label,children:"Requester"}),(0,n.jsx)(j.A,{variant:"body1",className:V.value,children:null===(q=me.spec.requestedBy)||void 0===q?void 0:q.userId}),(0,n.jsx)(j.A,{variant:"caption",className:V.label,children:"Requested"}),(0,n.jsx)(j.A,{variant:"body1",className:V.value,children:me.metadata.creationTimestamp?new Date(me.metadata.creationTimestamp).toLocaleDateString():"-"}),(null===(F=me.status)||void 0===F?void 0:F.reviewedBy)&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(j.A,{variant:"caption",className:V.label,children:"Reviewed By"}),(0,n.jsxs)(j.A,{variant:"body1",className:V.value,children:[me.status.reviewedBy.replace(/^user:default\//,""),me.status.reviewedAt&&(0,n.jsxs)(j.A,{variant:"caption",color:"textSecondary",children:[" ","on"," ",new Date(me.status.reviewedAt).toLocaleDateString()]})]})]})]})})}),(0,n.jsxs)(b.A,{item:!0,xs:12,md:6,children:[(0,n.jsx)(x.n,{title:"Use Case",children:(0,n.jsx)(j.A,{variant:"body1",children:me.spec.useCase||"No use case provided"})}),"Approved"===Ae&&(0,n.jsx)(A.A,{mt:2,children:(0,n.jsx)(x.n,{title:"API Key",children:le&&!ne?(0,n.jsx)(v.Ay,{title:"This API key has already been viewed and cannot be retrieved again",children:(0,n.jsxs)(A.A,{display:"flex",alignItems:"center",children:[(0,n.jsx)(j.A,{variant:"body2",color:"textSecondary",children:"Already viewed - cannot be retrieved again"}),(0,n.jsx)(R.A,{fontSize:"small",color:"disabled",style:{marginLeft:8}})]})}):(0,n.jsxs)(A.A,{className:V.apiKeyContainer,children:[(0,n.jsx)(j.A,{variant:"body2",style:{fontFamily:"monospace",flex:1},children:ie?"Loading...":ae&&ne?ne:"•".repeat(32)}),ae&&ne&&(0,n.jsx)(v.Ay,{title:"Copy to clipboard",children:(0,n.jsx)(y.A,{size:"small",onClick:()=>fe(ne),children:(0,n.jsx)(z.A,{fontSize:"small"})})}),(0,n.jsx)(v.Ay,{title:ae?"Hide API key":"Reveal API key (one-time only)",children:(0,n.jsx)("span",{children:(0,n.jsx)(y.A,{size:"small",onClick:()=>{ae?(te(!1),re(null)):le||de(!0)},disabled:ie||le&&!ne,children:ae?(0,n.jsx)(R.A,{fontSize:"small"}):(0,n.jsx)(B.A,{fontSize:"small"})})})})]})})})]}),"Approved"===Ae&&(0,n.jsx)(b.A,{item:!0,xs:12,children:(0,n.jsx)(x.n,{title:"Code Examples",children:(0,n.jsxs)(A.A,{children:[(0,n.jsx)(C.A,{value:Z,onChange:(e,a)=>ee(a),indicatorColor:"primary",textColor:"primary",children:je.map(e=>(0,n.jsx)(w.A,{label:e.label},e.label))}),(0,n.jsx)(A.A,{className:V.tabPanel,children:(0,n.jsx)(D,{code:je[Z].code,onCopy:()=>fe(je[Z].code)})})]})})}),(null===(U=me.status)||void 0===U?void 0:U.limits)&&(0,n.jsx)(b.A,{item:!0,xs:12,children:(0,n.jsx)(x.n,{title:"Rate Limits",children:(0,n.jsxs)(b.A,{container:!0,spacing:2,children:[me.status.limits.daily&&(0,n.jsxs)(b.A,{item:!0,children:[(0,n.jsx)(j.A,{variant:"caption",className:V.label,children:"Daily"}),(0,n.jsx)(j.A,{variant:"h6",children:me.status.limits.daily.toLocaleString()})]}),me.status.limits.weekly&&(0,n.jsxs)(b.A,{item:!0,children:[(0,n.jsx)(j.A,{variant:"caption",className:V.label,children:"Weekly"}),(0,n.jsx)(j.A,{variant:"h6",children:me.status.limits.weekly.toLocaleString()})]}),me.status.limits.monthly&&(0,n.jsxs)(b.A,{item:!0,children:[(0,n.jsx)(j.A,{variant:"caption",className:V.label,children:"Monthly"}),(0,n.jsx)(j.A,{variant:"h6",children:me.status.limits.monthly.toLocaleString()})]})]})})})]})]}),(0,n.jsxs)(P.A,{open:ce,onClose:()=>de(!1),maxWidth:"sm",children:[(0,n.jsx)(N.A,{children:(0,n.jsxs)(A.A,{display:"flex",alignItems:"center",children:[(0,n.jsx)(T.A,{color:"primary",style:{marginRight:8}}),"View API Key"]})}),(0,n.jsxs)(I.A,{children:[(0,n.jsxs)(j.A,{variant:"body1",paragraph:!0,children:["This API key can only be viewed ",(0,n.jsx)("strong",{children:"once"}),". After you reveal it, you will not be able to retrieve it again."]}),(0,n.jsx)(j.A,{variant:"body2",color:"textSecondary",children:"Make sure to copy and store it securely before closing this view."})]}),(0,n.jsxs)(S.A,{children:[(0,n.jsx)(g.A,{onClick:()=>de(!1),children:"Cancel"}),(0,n.jsx)(g.A,{variant:"contained",color:"primary",onClick:()=>{de(!1),(async()=>{se(!0);try{const e=await J.fetch(`${X}/api/kuadrant/apikeys/${O}/${G}/secret`);if(e.ok){const a=await e.json();re(a.apiKey),oe(!0),te(!0)}else 403===e.status&&(oe(!0),Q.post({message:"This API key has already been viewed and cannot be retrieved again.",severity:"warning",display:"transient"}))}catch(e){console.error("Failed to fetch API key:",e);const a=e instanceof Error?e.message:"unknown error occurred";Q.post({message:`Failed to fetch APIKey. ${a}`,severity:"error",display:"transient"})}finally{se(!1)}})()},children:"Reveal API Key"})]})]})]})}},77225:(e,a,t)=>{var n=t(4293),r=t(78920);a.A=void 0;var i=r(t(95478)),s=(0,n(t(74044)).default)(i.createElement("path",{d:"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z"}),"Warning");a.A=s},85121:(e,a,t)=>{var n=t(4293),r=t(78920);a.A=void 0;var i=r(t(95478)),s=(0,n(t(74044)).default)(i.createElement("path",{d:"M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z"}),"Email");a.A=s},96040:(e,a,t)=>{t.d(a,{n:()=>B});var n=t(31085),r=t(40703),i=t(59469),s=t(48653),l=t(45685),o=t(37197),c=t(37976),d=t(53373),h=t.n(d),p=t(10394),u=t(72501),m=t(52235),x=t(37725);const f=(0,c.makeStyles)(e=>({root:{maxWidth:"fit-content",padding:e.spacing(2,2,2,2.5)},boxTitle:{margin:0,color:e.palette.textSubtle},arrow:{color:e.palette.textSubtle}}),{name:"BackstageBottomLink"});function A(e){const{link:a,title:t,onClick:r}=e,i=f();return(0,n.jsxs)(p.A,{children:[(0,n.jsx)(o.A,{}),(0,n.jsx)(x.N_,{to:a,onClick:r,underline:"none",children:(0,n.jsxs)(p.A,{display:"flex",alignItems:"center",className:i.root,children:[(0,n.jsx)(p.A,{className:i.boxTitle,fontWeight:"fontWeightBold",m:1,children:(0,n.jsx)(u.A,{children:(0,n.jsx)("strong",{children:t})})}),(0,n.jsx)(m.A,{className:i.arrow})]})})]})}var v=t(95478),y=t(64947);const g=(0,v.forwardRef)((e,a)=>(0,n.jsx)(x.N_,{ref:a,...e,color:"initial"})),j=(0,v.forwardRef)((e,a)=>(0,n.jsx)(y.A,{ref:a,component:g,...e}));var b=t(56573),k=t(21006),C=t(75501);const w=e=>{const{slackChannel:a}=e,{t}=(0,C.useTranslationRef)(k.O);return a?"string"==typeof a?(0,n.jsx)(u.A,{children:t("errorBoundary.title",{slackChannel:a})}):a.href?(0,n.jsx)(j,{to:a.href,variant:"contained",children:a.name}):(0,n.jsx)(u.A,{children:t("errorBoundary.title",{slackChannel:a.name})}):null},P=class extends v.Component{constructor(e){super(e),this.state={error:void 0,errorInfo:void 0}}componentDidCatch(e,a){console.error(`ErrorBoundary, error: ${e}`,{error:e,errorInfo:a}),this.setState({error:e,errorInfo:a})}render(){const{slackChannel:e,children:a}=this.props,{error:t}=this.state;return t?(0,n.jsx)(b.b,{title:"Something Went Wrong",error:t,children:(0,n.jsx)(w,{slackChannel:e})}):a}},N=(0,c.makeStyles)(e=>({noPadding:{padding:0,"&:last-child":{paddingBottom:0}},contentAlignBottom:{display:"flex",alignItems:"self-end"},header:{padding:e.spacing(2,2,2,2.5)},headerTitle:{fontWeight:e.typography.fontWeightBold},headerSubheader:{paddingTop:e.spacing(1)},headerAvatar:{},headerAction:{},headerContent:{},subheader:{display:"flex"}}),{name:"BackstageInfoCard"}),I=(0,c.withStyles)(e=>({root:{display:"inline-block",padding:e.spacing(8,8,0,0),float:"right"}}),{name:"BackstageInfoCardCardActionsTopRight"})(i.A),S={card:{flex:{display:"flex",flexDirection:"column"},fullHeight:{display:"flex",flexDirection:"column",height:"100%"},gridItem:{display:"flex",flexDirection:"column",height:"calc(100% - 10px)",marginBottom:"10px",breakInside:"avoid-page","@media print":{height:"auto"}}},cardContent:{fullHeight:{flex:1},gridItem:{flex:1}}};function B(e){const{title:a,subheader:t,divider:c=!0,deepLink:d,slackChannel:p,errorBoundaryProps:u,variant:m,alignContent:x="normal",children:f,headerStyle:v,headerProps:y,icon:g,action:j,actionsClassName:b,actions:k,cardClassName:C,actionsTopRight:w,className:B,noPadding:R,titleTypographyProps:z,subheaderTypographyProps:T}=e,$=N();let L={},_={};m&&m.split(/[\s]+/g).forEach(e=>{L={...L,...S.card[e]},_={..._,...S.cardContent[e]}});const E=u||(p?{slackChannel:p}:{});return(0,n.jsx)(r.A,{style:L,className:B,children:(0,n.jsxs)(P,{...E,children:[a&&(0,n.jsx)(l.A,{classes:{root:h()($.header),title:$.headerTitle,subheader:$.headerSubheader,avatar:$.headerAvatar,action:$.headerAction,content:$.headerContent},title:a,subheader:t||g?(0,n.jsxs)("div",{"data-testid":"info-card-subheader",children:[t&&(0,n.jsx)("div",{className:$.subheader,children:t}),g]}):null,action:j,style:{...v},titleTypographyProps:z,subheaderTypographyProps:T,...y}),w&&(0,n.jsx)(I,{children:w}),c&&(0,n.jsx)(o.A,{}),(0,n.jsx)(s.A,{className:h()(C,{[$.noPadding]:R,[$.contentAlignBottom]:"bottom"===x}),style:_,children:f}),k&&(0,n.jsx)(i.A,{className:b,children:k}),d&&(0,n.jsx)(A,{...d})]})})}}}]);
2
+ //# sourceMappingURL=2967.5bade048.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static/2967.5bade048.chunk.js","mappings":"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","sources":["webpack://internal.plugin-kuadrant/../../node_modules/@material-ui/icons/Visibility.js","webpack://internal.plugin-kuadrant/../../node_modules/react-use/esm/useAsync.js","webpack://internal.plugin-kuadrant/../../node_modules/react-use/esm/useAsyncFn.js","webpack://internal.plugin-kuadrant/./src/utils/styles.ts","webpack://internal.plugin-kuadrant/../../node_modules/@material-ui/icons/ArrowForward.js","webpack://internal.plugin-kuadrant/../../node_modules/@material-ui/icons/ArrowBack.js","webpack://internal.plugin-kuadrant/../../node_modules/@material-ui/icons/VisibilityOff.js","webpack://internal.plugin-kuadrant/./src/components/ApiKeyDetailPage/ApiKeyDetailPage.tsx","webpack://internal.plugin-kuadrant/../../node_modules/@material-ui/icons/Warning.js","webpack://internal.plugin-kuadrant/../../node_modules/@material-ui/icons/Email.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/core-components/dist/layout/BottomLink/BottomLink.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/core-components/dist/components/LinkButton/LinkButton.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/core-components/dist/layout/ErrorBoundary/ErrorBoundary.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/core-components/dist/layout/InfoCard/InfoCard.esm.js"],"sourcesContent":["\"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 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z\"\n}), 'Visibility');\n\nexports.default = _default;","import { useEffect } from 'react';\nimport useAsyncFn from './useAsyncFn';\nexport default function useAsync(fn, deps) {\n if (deps === void 0) { deps = []; }\n var _a = useAsyncFn(fn, deps, {\n loading: true,\n }), state = _a[0], callback = _a[1];\n useEffect(function () {\n callback();\n }, [callback]);\n return state;\n}\n","import { __assign } from \"tslib\";\nimport { useCallback, useRef, useState } from 'react';\nimport useMountedState from './useMountedState';\nexport default function useAsyncFn(fn, deps, initialState) {\n if (deps === void 0) { deps = []; }\n if (initialState === void 0) { initialState = { loading: false }; }\n var lastCallId = useRef(0);\n var isMounted = useMountedState();\n var _a = useState(initialState), state = _a[0], set = _a[1];\n var callback = useCallback(function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var callId = ++lastCallId.current;\n if (!state.loading) {\n set(function (prevState) { return (__assign(__assign({}, prevState), { loading: true })); });\n }\n return fn.apply(void 0, args).then(function (value) {\n isMounted() && callId === lastCallId.current && set({ value: value, loading: false });\n return value;\n }, function (error) {\n isMounted() && callId === lastCallId.current && set({ error: error, loading: false });\n return error;\n });\n }, deps);\n return [state, callback];\n}\n","import { CSSProperties } from \"react\";\n\n/**\n * Returns inline styles for API key status chips on the My API Keys page.\n */\nexport const getMyApiKeysStatusChipStyle = (phase: string): CSSProperties => {\n const base = { border: \"none\" };\n switch (phase) {\n case \"Approved\":\n return { ...base, backgroundColor: \"#1976d2\", color: \"#fff\" }; // Blue\n case \"Rejected\":\n return { ...base, backgroundColor: \"#d32f2f\", color: \"#fff\" }; // Red\n case \"Pending\":\n return { ...base, backgroundColor: \"#9c27b0\", color: \"#fff\" }; // Purple\n default:\n return { ...base, backgroundColor: \"#9c27b0\", color: \"#fff\" }; // Purple (fallback for Pending)\n }\n};\n\n/**\n * Returns inline styles for API key status chips on the Approval Queue page.\n * Uses inline styles to ensure proper specificity with Material-UI Chip.\n */\nexport const getApprovalQueueStatusChipStyle = (phase: string): CSSProperties => {\n const base = { border: \"none\" };\n switch (phase) {\n case \"Approved\":\n return { ...base, backgroundColor: \"#2e7d32\", color: \"#fff\" }; // Green\n case \"Rejected\":\n return { ...base, backgroundColor: \"#d32f2f\", color: \"#fff\" }; // Red\n case \"Pending\":\n return { ...base, backgroundColor: \"#ed6c02\", color: \"#fff\" }; // Orange\n default:\n return { ...base, backgroundColor: \"#ed6c02\", color: \"#fff\" }; // Orange (fallback for Pending)\n }\n};\n\n/**\n * Returns inline styles for lifecycle chips.\n * Uses inline styles to ensure proper specificity with Material-UI Chip.\n */\nexport const getLifecycleChipStyle = (lifecycle: string): CSSProperties => {\n switch (lifecycle) {\n case \"production\":\n return { backgroundColor: \"#1976d2\", color: \"#fff\" }; // Blue\n case \"experimental\":\n return { backgroundColor: \"#9c27b0\", color: \"#fff\" }; // Purple\n case \"deprecated\":\n return { backgroundColor: \"#ff9800\", color: \"#fff\" }; // Orange\n case \"retired\":\n return { backgroundColor: \"#d32f2f\", color: \"#fff\" }; // Red\n default:\n return {};\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 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z\"\n}), 'ArrowForward');\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: \"M20 11H7.83l5.59-5.59L12 4l-8 8 8 8 1.41-1.41L7.83 13H20v-2z\"\n}), 'ArrowBack');\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: \"M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46C3.08 8.3 1.78 10.02 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2zm4.31-.78l3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z\"\n}), 'VisibilityOff');\n\nexports.default = _default;","import React, { useState } from \"react\";\nimport { useParams } from \"react-router-dom\";\nimport {\n useApi,\n configApiRef,\n fetchApiRef,\n alertApiRef,\n} from \"@backstage/core-plugin-api\";\nimport { useAsync } from \"react-use\";\nimport {\n Header,\n Page,\n Content,\n Progress,\n ResponseErrorPanel,\n InfoCard,\n Link,\n Breadcrumbs,\n} from \"@backstage/core-components\";\nimport {\n Box,\n Grid,\n Typography,\n Chip,\n IconButton,\n Tooltip,\n Tabs,\n Tab,\n Button,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions,\n makeStyles,\n} from \"@material-ui/core\";\nimport VisibilityIcon from \"@material-ui/icons/Visibility\";\nimport VisibilityOffIcon from \"@material-ui/icons/VisibilityOff\";\nimport FileCopyIcon from \"@material-ui/icons/FileCopy\";\nimport WarningIcon from \"@material-ui/icons/Warning\";\nimport ArrowBackIcon from \"@material-ui/icons/ArrowBack\";\nimport OpenInNewIcon from \"@material-ui/icons/OpenInNew\";\nimport EmailIcon from \"@material-ui/icons/Email\";\nimport { APIKey, APIProduct } from \"../../types/api-management\";\nimport { getApprovalQueueStatusChipStyle } from \"../../utils/styles\";\n\nconst useStyles = makeStyles((theme) => ({\n label: {\n fontWeight: 600,\n color: theme.palette.text.secondary,\n marginBottom: theme.spacing(0.5),\n },\n value: {\n marginBottom: theme.spacing(2),\n },\n codeBlock: {\n backgroundColor: theme.palette.background.default,\n padding: theme.spacing(2),\n borderRadius: theme.shape.borderRadius,\n fontFamily: \"monospace\",\n fontSize: \"0.875rem\",\n overflow: \"auto\",\n whiteSpace: \"pre-wrap\",\n wordBreak: \"break-all\",\n },\n apiKeyContainer: {\n display: \"flex\",\n alignItems: \"center\",\n gap: theme.spacing(1),\n padding: theme.spacing(1.5),\n backgroundColor: theme.palette.background.default,\n borderRadius: theme.shape.borderRadius,\n fontFamily: \"monospace\",\n },\n tabPanel: {\n marginTop: theme.spacing(2),\n },\n}));\n\nconst CodeExample = ({\n code,\n onCopy,\n}: {\n code: string;\n onCopy: () => void;\n}) => {\n const classes = useStyles();\n\n return (\n <Box position=\"relative\">\n <Box className={classes.codeBlock}>{code}</Box>\n <Tooltip title=\"Copy code\">\n <IconButton\n size=\"small\"\n style={{ position: \"absolute\", top: 8, right: 8 }}\n onClick={onCopy}\n >\n <FileCopyIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n </Box>\n );\n};\n\nexport const ApiKeyDetailPage = () => {\n const classes = useStyles();\n const { namespace, name } = useParams<{ namespace: string; name: string }>();\n const config = useApi(configApiRef);\n const fetchApi = useApi(fetchApiRef);\n const alertApi = useApi(alertApiRef);\n const backendUrl = config.getString(\"backend.baseUrl\");\n\n const [selectedTab, setSelectedTab] = useState(0);\n const [showApiKey, setShowApiKey] = useState(false);\n const [apiKeyValue, setApiKeyValue] = useState<string | null>(null);\n const [apiKeyLoading, setApiKeyLoading] = useState(false);\n const [alreadyRead, setAlreadyRead] = useState(false);\n const [showWarning, setShowWarning] = useState(false);\n\n const {\n value: data,\n loading,\n error,\n } = useAsync(async () => {\n const [apiKeyResponse, productsResponse] = await Promise.all([\n fetchApi.fetch(`${backendUrl}/api/kuadrant/apikeys/${namespace}/${name}`),\n fetchApi.fetch(`${backendUrl}/api/kuadrant/apiproducts`),\n ]);\n\n if (!apiKeyResponse.ok) {\n throw new Error(\"Failed to fetch API key\");\n }\n const apiKeyData = await apiKeyResponse.json();\n\n // check if key has already been read\n if (apiKeyData.status?.canReadSecret === false) {\n setAlreadyRead(true);\n }\n\n // find matching api product to get contact info\n let apiProduct: APIProduct | undefined;\n if (productsResponse.ok) {\n const productsData = await productsResponse.json();\n apiProduct = (productsData.items || []).find(\n (p: APIProduct) =>\n p.metadata.name === apiKeyData.spec.apiProductRef?.name &&\n p.metadata.namespace === apiKeyData.metadata.namespace,\n );\n }\n\n return { apiKey: apiKeyData as APIKey, apiProduct };\n }, [namespace, name, backendUrl, fetchApi]);\n\n const apiKey = data?.apiKey;\n const apiProduct = data?.apiProduct;\n\n const fetchApiKeySecret = async () => {\n setApiKeyLoading(true);\n try {\n const response = await fetchApi.fetch(\n `${backendUrl}/api/kuadrant/apikeys/${namespace}/${name}/secret`,\n );\n if (response.ok) {\n const data = await response.json();\n setApiKeyValue(data.apiKey);\n setAlreadyRead(true);\n setShowApiKey(true);\n } else if (response.status === 403) {\n setAlreadyRead(true);\n alertApi.post({\n message:\n \"This API key has already been viewed and cannot be retrieved again.\",\n severity: \"warning\",\n display: \"transient\",\n });\n }\n } catch (err) {\n console.error(\"Failed to fetch API key:\", err);\n const errorMessage = err instanceof Error ? err.message : \"unknown error occurred\";\n alertApi.post({\n message: `Failed to fetch APIKey. ${errorMessage}`,\n severity: 'error',\n display: 'transient',\n });\n } finally {\n setApiKeyLoading(false);\n }\n };\n\n const handleRevealClick = () => {\n if (showApiKey) {\n setShowApiKey(false);\n setApiKeyValue(null);\n } else if (!alreadyRead) {\n setShowWarning(true);\n }\n };\n\n const handleConfirmReveal = () => {\n setShowWarning(false);\n fetchApiKeySecret();\n };\n\n const handleCopy = async (text: string) => {\n await navigator.clipboard.writeText(text);\n alertApi.post({\n message: \"Copied to clipboard\",\n severity: \"success\",\n display: \"transient\",\n });\n };\n\n if (loading) {\n return <Progress />;\n }\n\n if (error || !apiKey) {\n return (\n <ResponseErrorPanel error={error || new Error(\"API key not found\")} />\n );\n }\n\n const phase = apiKey.status?.phase || \"Pending\";\n const statusLabel = phase === \"Approved\" ? \"Active\" : phase;\n const hostname = apiKey.status?.apiHostname || \"api.example.com\";\n const displayApiKey = apiKeyValue || \"<your-api-key>\";\n\n // code examples\n const curlExample = `curl -H \"Authorization: Bearer ${displayApiKey}\" \\\\\n https://${hostname}/`;\n\n const nodeExample = `const response = await fetch('https://${hostname}/', {\n headers: {\n 'Authorization': 'Bearer ${displayApiKey}'\n }\n});\nconst data = await response.json();`;\n\n const pythonExample = `import requests\n\nresponse = requests.get(\n 'https://${hostname}/',\n headers={'Authorization': 'Bearer ${displayApiKey}'}\n)\ndata = response.json()`;\n\n const goExample = `package main\n\nimport (\n \"net/http\"\n)\n\nfunc main() {\n client := &http.Client{}\n req, _ := http.NewRequest(\"GET\", \"https://${hostname}/\", nil)\n req.Header.Set(\"Authorization\", \"Bearer ${displayApiKey}\")\n resp, _ := client.Do(req)\n defer resp.Body.Close()\n}`;\n\n const codeExamples = [\n { label: \"cURL\", code: curlExample },\n { label: \"Node.js\", code: nodeExample },\n { label: \"Python\", code: pythonExample },\n { label: \"Go\", code: goExample },\n ];\n\n return (\n <Page themeId=\"tool\">\n <Header\n title={apiKey.metadata.name}\n subtitle={`API Key for ${apiKey.spec.apiProductRef?.name || \"unknown\"}`}\n >\n <Link to=\"/kuadrant/my-api-keys\">\n <Button startIcon={<ArrowBackIcon />}>Back to API Keys</Button>\n </Link>\n </Header>\n <Content>\n <Box mb={2}>\n <Breadcrumbs aria-label=\"breadcrumb\">\n <Link to=\"/kuadrant/my-api-keys\">API keys</Link>\n <Typography>{apiKey.metadata.name}</Typography>\n </Breadcrumbs>\n </Box>\n\n <Box mb={3} display=\"flex\" style={{ gap: 8 }}>\n <Link to={`/catalog/default/api/${apiKey.spec.apiProductRef?.name}`}>\n <Button\n variant=\"outlined\"\n startIcon={<OpenInNewIcon />}\n data-testid=\"view-api-button\"\n >\n View API\n </Button>\n </Link>\n {apiProduct?.spec?.contact &&\n (apiProduct.spec.contact.email ||\n apiProduct.spec.contact.url ||\n apiProduct.spec.contact.slack) && (\n <Button\n variant=\"outlined\"\n startIcon={<EmailIcon />}\n href={\n apiProduct.spec.contact.email\n ? `mailto:${apiProduct.spec.contact.email}`\n : apiProduct.spec.contact.slack\n ? apiProduct.spec.contact.slack\n : apiProduct.spec.contact.url || \"#\"\n }\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n Contact Owner\n </Button>\n )}\n </Box>\n\n <Grid container spacing={3}>\n <Grid item xs={12} md={6}>\n <InfoCard title=\"API Key Details\">\n <Box>\n <Typography variant=\"caption\" className={classes.label}>\n Status\n </Typography>\n <Box className={classes.value}>\n <Chip\n label={statusLabel}\n size=\"small\"\n style={getApprovalQueueStatusChipStyle(phase)}\n data-testid=\"api-key-status-chip\"\n />\n </Box>\n\n <Typography variant=\"caption\" className={classes.label}>\n API Product\n </Typography>\n <Typography variant=\"body1\" className={classes.value}>\n <Link\n to={`/catalog/default/api/${apiKey.spec.apiProductRef?.name}/api-keys`}\n >\n {apiKey.spec.apiProductRef?.name || \"unknown\"}\n </Link>\n </Typography>\n\n <Typography variant=\"caption\" className={classes.label}>\n Tier\n </Typography>\n <Box className={classes.value}>\n <Chip\n label={apiKey.spec.planTier}\n size=\"small\"\n variant=\"outlined\"\n />\n </Box>\n\n <Typography variant=\"caption\" className={classes.label}>\n Requester\n </Typography>\n <Typography variant=\"body1\" className={classes.value}>\n {apiKey.spec.requestedBy?.userId}\n </Typography>\n\n <Typography variant=\"caption\" className={classes.label}>\n Requested\n </Typography>\n <Typography variant=\"body1\" className={classes.value}>\n {apiKey.metadata.creationTimestamp\n ? new Date(\n apiKey.metadata.creationTimestamp,\n ).toLocaleDateString()\n : \"-\"}\n </Typography>\n\n {apiKey.status?.reviewedBy && (\n <>\n <Typography variant=\"caption\" className={classes.label}>\n Reviewed By\n </Typography>\n <Typography variant=\"body1\" className={classes.value}>\n {apiKey.status.reviewedBy.replace(/^user:default\\//, \"\")}\n {apiKey.status.reviewedAt && (\n <Typography variant=\"caption\" color=\"textSecondary\">\n {\" \"}\n on{\" \"}\n {new Date(\n apiKey.status.reviewedAt,\n ).toLocaleDateString()}\n </Typography>\n )}\n </Typography>\n </>\n )}\n </Box>\n </InfoCard>\n </Grid>\n\n <Grid item xs={12} md={6}>\n <InfoCard title=\"Use Case\">\n <Typography variant=\"body1\">\n {apiKey.spec.useCase || \"No use case provided\"}\n </Typography>\n </InfoCard>\n\n {phase === \"Approved\" && (\n <Box mt={2}>\n <InfoCard title=\"API Key\">\n {alreadyRead && !apiKeyValue ? (\n <Tooltip title=\"This API key has already been viewed and cannot be retrieved again\">\n <Box display=\"flex\" alignItems=\"center\">\n <Typography variant=\"body2\" color=\"textSecondary\">\n Already viewed - cannot be retrieved again\n </Typography>\n <VisibilityOffIcon\n fontSize=\"small\"\n color=\"disabled\"\n style={{ marginLeft: 8 }}\n />\n </Box>\n </Tooltip>\n ) : (\n <Box className={classes.apiKeyContainer}>\n <Typography\n variant=\"body2\"\n style={{ fontFamily: \"monospace\", flex: 1 }}\n >\n {apiKeyLoading\n ? \"Loading...\"\n : showApiKey && apiKeyValue\n ? apiKeyValue\n : \"•\".repeat(32)}\n </Typography>\n {showApiKey && apiKeyValue && (\n <Tooltip title=\"Copy to clipboard\">\n <IconButton\n size=\"small\"\n onClick={() => handleCopy(apiKeyValue)}\n >\n <FileCopyIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n )}\n <Tooltip\n title={\n showApiKey\n ? \"Hide API key\"\n : \"Reveal API key (one-time only)\"\n }\n >\n <span>\n <IconButton\n size=\"small\"\n onClick={handleRevealClick}\n disabled={\n apiKeyLoading || (alreadyRead && !apiKeyValue)\n }\n >\n {showApiKey ? (\n <VisibilityOffIcon fontSize=\"small\" />\n ) : (\n <VisibilityIcon fontSize=\"small\" />\n )}\n </IconButton>\n </span>\n </Tooltip>\n </Box>\n )}\n </InfoCard>\n </Box>\n )}\n </Grid>\n\n {phase === \"Approved\" && (\n <Grid item xs={12}>\n <InfoCard title=\"Code Examples\">\n <Box>\n <Tabs\n value={selectedTab}\n onChange={(_, newValue) => setSelectedTab(newValue)}\n indicatorColor=\"primary\"\n textColor=\"primary\"\n >\n {codeExamples.map((ex) => (\n <Tab key={ex.label} label={ex.label} />\n ))}\n </Tabs>\n <Box className={classes.tabPanel}>\n <CodeExample\n code={codeExamples[selectedTab].code}\n onCopy={() => handleCopy(codeExamples[selectedTab].code)}\n />\n </Box>\n </Box>\n </InfoCard>\n </Grid>\n )}\n\n {apiKey.status?.limits && (\n <Grid item xs={12}>\n <InfoCard title=\"Rate Limits\">\n <Grid container spacing={2}>\n {apiKey.status.limits.daily && (\n <Grid item>\n <Typography variant=\"caption\" className={classes.label}>\n Daily\n </Typography>\n <Typography variant=\"h6\">\n {apiKey.status.limits.daily.toLocaleString()}\n </Typography>\n </Grid>\n )}\n {apiKey.status.limits.weekly && (\n <Grid item>\n <Typography variant=\"caption\" className={classes.label}>\n Weekly\n </Typography>\n <Typography variant=\"h6\">\n {apiKey.status.limits.weekly.toLocaleString()}\n </Typography>\n </Grid>\n )}\n {apiKey.status.limits.monthly && (\n <Grid item>\n <Typography variant=\"caption\" className={classes.label}>\n Monthly\n </Typography>\n <Typography variant=\"h6\">\n {apiKey.status.limits.monthly.toLocaleString()}\n </Typography>\n </Grid>\n )}\n </Grid>\n </InfoCard>\n </Grid>\n )}\n </Grid>\n </Content>\n\n <Dialog\n open={showWarning}\n onClose={() => setShowWarning(false)}\n maxWidth=\"sm\"\n >\n <DialogTitle>\n <Box display=\"flex\" alignItems=\"center\">\n <WarningIcon color=\"primary\" style={{ marginRight: 8 }} />\n View API Key\n </Box>\n </DialogTitle>\n <DialogContent>\n <Typography variant=\"body1\" paragraph>\n This API key can only be viewed <strong>once</strong>. After you\n reveal it, you will not be able to retrieve it again.\n </Typography>\n <Typography variant=\"body2\" color=\"textSecondary\">\n Make sure to copy and store it securely before closing this view.\n </Typography>\n </DialogContent>\n <DialogActions>\n <Button onClick={() => setShowWarning(false)}>Cancel</Button>\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={handleConfirmReveal}\n >\n Reveal API Key\n </Button>\n </DialogActions>\n </Dialog>\n </Page>\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: \"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z\"\n}), 'Warning');\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: \"M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z\"\n}), 'Email');\n\nexports.default = _default;","import { jsxs, jsx } from 'react/jsx-runtime';\nimport Box from '@material-ui/core/Box';\nimport Divider from '@material-ui/core/Divider';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport ArrowIcon from '@material-ui/icons/ArrowForward';\nimport { Link } from '../../components/Link/Link.esm.js';\n\nconst useStyles = makeStyles(\n (theme) => ({\n root: {\n maxWidth: \"fit-content\",\n padding: theme.spacing(2, 2, 2, 2.5)\n },\n boxTitle: {\n margin: 0,\n color: theme.palette.textSubtle\n },\n arrow: {\n color: theme.palette.textSubtle\n }\n }),\n { name: \"BackstageBottomLink\" }\n);\nfunction BottomLink(props) {\n const { link, title, onClick } = props;\n const classes = useStyles();\n return /* @__PURE__ */ jsxs(Box, { children: [\n /* @__PURE__ */ jsx(Divider, {}),\n /* @__PURE__ */ jsx(Link, { to: link, onClick, underline: \"none\", children: /* @__PURE__ */ jsxs(Box, { display: \"flex\", alignItems: \"center\", className: classes.root, children: [\n /* @__PURE__ */ jsx(Box, { className: classes.boxTitle, fontWeight: \"fontWeightBold\", m: 1, children: /* @__PURE__ */ jsx(Typography, { children: /* @__PURE__ */ jsx(\"strong\", { children: title }) }) }),\n /* @__PURE__ */ jsx(ArrowIcon, { className: classes.arrow })\n ] }) })\n ] });\n}\n\nexport { BottomLink };\n//# sourceMappingURL=BottomLink.esm.js.map\n","import { jsx } from 'react/jsx-runtime';\nimport Button$1 from '@material-ui/core/Button';\nimport { forwardRef } from 'react';\nimport { Link } from '../Link/Link.esm.js';\n\nconst LinkWrapper = forwardRef((props, ref) => /* @__PURE__ */ jsx(Link, { ref, ...props, color: \"initial\" }));\nconst LinkButton = forwardRef((props, ref) => /* @__PURE__ */ jsx(Button$1, { ref, component: LinkWrapper, ...props }));\nconst Button = LinkButton;\n\nexport { Button, LinkButton };\n//# sourceMappingURL=LinkButton.esm.js.map\n","import { jsx } from 'react/jsx-runtime';\nimport Typography from '@material-ui/core/Typography';\nimport { Component } from 'react';\nimport { LinkButton } from '../../components/LinkButton/LinkButton.esm.js';\nimport { ErrorPanel } from '../../components/ErrorPanel/ErrorPanel.esm.js';\nimport { coreComponentsTranslationRef } from '../../translation.esm.js';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\n\nconst SlackLink = (props) => {\n const { slackChannel } = props;\n const { t } = useTranslationRef(coreComponentsTranslationRef);\n if (!slackChannel) {\n return null;\n } else if (typeof slackChannel === \"string\") {\n return /* @__PURE__ */ jsx(Typography, { children: t(\"errorBoundary.title\", { slackChannel }) });\n } else if (!slackChannel.href) {\n return /* @__PURE__ */ jsx(Typography, { children: t(\"errorBoundary.title\", {\n slackChannel: slackChannel.name\n }) });\n }\n return /* @__PURE__ */ jsx(LinkButton, { to: slackChannel.href, variant: \"contained\", children: slackChannel.name });\n};\nconst ErrorBoundary = class ErrorBoundary2 extends Component {\n constructor(props) {\n super(props);\n this.state = {\n error: void 0,\n errorInfo: void 0\n };\n }\n componentDidCatch(error, errorInfo) {\n console.error(`ErrorBoundary, error: ${error}`, { error, errorInfo });\n this.setState({ error, errorInfo });\n }\n render() {\n const { slackChannel, children } = this.props;\n const { error } = this.state;\n if (!error) {\n return children;\n }\n return /* @__PURE__ */ jsx(ErrorPanel, { title: \"Something Went Wrong\", error, children: /* @__PURE__ */ jsx(SlackLink, { slackChannel }) });\n }\n};\n\nexport { ErrorBoundary };\n//# sourceMappingURL=ErrorBoundary.esm.js.map\n","import { jsx, jsxs } from 'react/jsx-runtime';\nimport Card from '@material-ui/core/Card';\nimport CardActions from '@material-ui/core/CardActions';\nimport CardContent from '@material-ui/core/CardContent';\nimport CardHeader from '@material-ui/core/CardHeader';\nimport Divider from '@material-ui/core/Divider';\nimport { makeStyles, withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\nimport { BottomLink } from '../BottomLink/BottomLink.esm.js';\nimport { ErrorBoundary } from '../ErrorBoundary/ErrorBoundary.esm.js';\n\nconst useStyles = makeStyles(\n (theme) => ({\n noPadding: {\n padding: 0,\n \"&:last-child\": {\n paddingBottom: 0\n }\n },\n contentAlignBottom: {\n display: \"flex\",\n alignItems: \"self-end\"\n },\n header: {\n padding: theme.spacing(2, 2, 2, 2.5)\n },\n headerTitle: {\n fontWeight: theme.typography.fontWeightBold\n },\n headerSubheader: {\n paddingTop: theme.spacing(1)\n },\n headerAvatar: {},\n headerAction: {},\n headerContent: {},\n subheader: {\n display: \"flex\"\n }\n }),\n { name: \"BackstageInfoCard\" }\n);\nconst CardActionsTopRight = withStyles(\n (theme) => ({\n root: {\n display: \"inline-block\",\n padding: theme.spacing(8, 8, 0, 0),\n float: \"right\"\n }\n }),\n { name: \"BackstageInfoCardCardActionsTopRight\" }\n)(CardActions);\nconst VARIANT_STYLES = {\n card: {\n flex: {\n display: \"flex\",\n flexDirection: \"column\"\n },\n fullHeight: {\n display: \"flex\",\n flexDirection: \"column\",\n height: \"100%\"\n },\n gridItem: {\n display: \"flex\",\n flexDirection: \"column\",\n height: \"calc(100% - 10px)\",\n // for pages without content header\n marginBottom: \"10px\",\n breakInside: \"avoid-page\",\n \"@media print\": {\n height: \"auto\"\n }\n }\n },\n cardContent: {\n fullHeight: {\n flex: 1\n },\n gridItem: {\n flex: 1\n }\n }\n};\nfunction InfoCard(props) {\n const {\n title,\n subheader,\n divider = true,\n deepLink,\n slackChannel,\n errorBoundaryProps,\n variant,\n alignContent = \"normal\",\n children,\n headerStyle,\n headerProps,\n icon,\n action,\n actionsClassName,\n actions,\n cardClassName,\n actionsTopRight,\n className,\n noPadding,\n titleTypographyProps,\n subheaderTypographyProps\n } = props;\n const classes = useStyles();\n let calculatedStyle = {};\n let calculatedCardStyle = {};\n if (variant) {\n const variants = variant.split(/[\\s]+/g);\n variants.forEach((name) => {\n calculatedStyle = {\n ...calculatedStyle,\n ...VARIANT_STYLES.card[name]\n };\n calculatedCardStyle = {\n ...calculatedCardStyle,\n ...VARIANT_STYLES.cardContent[name]\n };\n });\n }\n const cardSubTitle = () => {\n if (!subheader && !icon) {\n return null;\n }\n return /* @__PURE__ */ jsxs(\"div\", { \"data-testid\": \"info-card-subheader\", children: [\n subheader && /* @__PURE__ */ jsx(\"div\", { className: classes.subheader, children: subheader }),\n icon\n ] });\n };\n const errProps = errorBoundaryProps || (slackChannel ? { slackChannel } : {});\n return /* @__PURE__ */ jsx(Card, { style: calculatedStyle, className, children: /* @__PURE__ */ jsxs(ErrorBoundary, { ...errProps, children: [\n title && /* @__PURE__ */ jsx(\n CardHeader,\n {\n classes: {\n root: classNames(classes.header),\n title: classes.headerTitle,\n subheader: classes.headerSubheader,\n avatar: classes.headerAvatar,\n action: classes.headerAction,\n content: classes.headerContent\n },\n title,\n subheader: cardSubTitle(),\n action,\n style: { ...headerStyle },\n titleTypographyProps,\n subheaderTypographyProps,\n ...headerProps\n }\n ),\n actionsTopRight && /* @__PURE__ */ jsx(CardActionsTopRight, { children: actionsTopRight }),\n divider && /* @__PURE__ */ jsx(Divider, {}),\n /* @__PURE__ */ jsx(\n CardContent,\n {\n className: classNames(cardClassName, {\n [classes.noPadding]: noPadding,\n [classes.contentAlignBottom]: alignContent === \"bottom\"\n }),\n style: calculatedCardStyle,\n children\n }\n ),\n actions && /* @__PURE__ */ jsx(CardActions, { className: actionsClassName, children: actions }),\n deepLink && /* @__PURE__ */ jsx(BottomLink, { ...deepLink })\n ] }) });\n}\n\nexport { InfoCard };\n//# sourceMappingURL=InfoCard.esm.js.map\n"],"names":["_interopRequireDefault","_interopRequireWildcard","exports","React","_default","default","createElement","d","useAsync","fn","deps","_a","initialState","loading","lastCallId","useRef","isMounted","useMountedState","useState","state","set","callback","useCallback","args","_i","arguments","length","callId","current","prevState","__assign","apply","then","value","error","useAsyncFn","useEffect","getMyApiKeysStatusChipStyle","phase","base","border","backgroundColor","color","getApprovalQueueStatusChipStyle","getLifecycleChipStyle","lifecycle","useStyles","makeStyles","theme","label","fontWeight","palette","text","secondary","marginBottom","spacing","codeBlock","background","padding","borderRadius","shape","fontFamily","fontSize","overflow","whiteSpace","wordBreak","apiKeyContainer","display","alignItems","gap","tabPanel","marginTop","CodeExample","code","onCopy","classes","Box","position","className","Tooltip","title","IconButton","size","style","top","right","onClick","FileCopyIcon","ApiKeyDetailPage","apiKey","apiProduct","namespace","name","useParams","config","useApi","configApiRef","fetchApi","fetchApiRef","alertApi","alertApiRef","backendUrl","getString","selectedTab","setSelectedTab","showApiKey","setShowApiKey","apiKeyValue","setApiKeyValue","apiKeyLoading","setApiKeyLoading","alreadyRead","setAlreadyRead","showWarning","setShowWarning","data","async","apiKeyData","apiKeyResponse","productsResponse","Promise","all","fetch","ok","Error","json","status","canReadSecret","items","find","p","metadata","spec","apiProductRef","handleCopy","navigator","clipboard","writeText","post","message","severity","Progress","ResponseErrorPanel","statusLabel","hostname","apiHostname","displayApiKey","codeExamples","Page","themeId","Header","subtitle","Link","to","Button","startIcon","ArrowBackIcon","Content","mb","Breadcrumbs","aria-label","Typography","variant","OpenInNewIcon","data-testid","contact","email","url","slack","EmailIcon","href","target","rel","Grid","container","item","xs","md","InfoCard","Chip","planTier","requestedBy","userId","creationTimestamp","Date","toLocaleDateString","reviewedBy","replace","reviewedAt","useCase","mt","VisibilityOffIcon","marginLeft","flex","repeat","span","disabled","VisibilityIcon","Tabs","onChange","_","newValue","indicatorColor","textColor","map","ex","Tab","limits","daily","toLocaleString","weekly","monthly","Dialog","open","onClose","maxWidth","DialogTitle","WarningIcon","marginRight","DialogContent","paragraph","strong","DialogActions","response","err","console","errorMessage","fetchApiKeySecret","root","boxTitle","margin","textSubtle","arrow","BottomLink","props","link","jsxs","children","jsx","Divider","underline","m","A","LinkWrapper","forwardRef","ref","LinkButton","component","SlackLink","slackChannel","useTranslationRef","t","ErrorBoundary","Component","constructor","super","this","errorInfo","componentDidCatch","setState","render","noPadding","paddingBottom","contentAlignBottom","header","headerTitle","typography","fontWeightBold","headerSubheader","paddingTop","headerAvatar","headerAction","headerContent","subheader","CardActionsTopRight","withStyles","float","CardActions","VARIANT_STYLES","card","flexDirection","fullHeight","height","gridItem","breakInside","cardContent","divider","deepLink","errorBoundaryProps","alignContent","headerStyle","headerProps","icon","action","actionsClassName","actions","cardClassName","actionsTopRight","titleTypographyProps","subheaderTypographyProps","calculatedStyle","calculatedCardStyle","split","forEach","errProps","Card","CardHeader","avatar","content","CardContent"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunkinternal_plugin_kuadrant=self.webpackChunkinternal_plugin_kuadrant||[]).push([[3650],{14933:(e,t,n)=>{n.d(t,{c:()=>j});var a=n(31085),r=n(95478),i=n(76891),s=n(61477),o=n(46805),l=n(10394),d=n(72501),c=n(95061),u=n(48543),p=n(81215),h=n(26343),m=n(16249),y=n(93453),v=n(64947),A=n(78467),f=n(39053),g=n(22097),x=n(77318);const j=({open:e,onClose:t,onSuccess:n,apiProductName:j,namespace:b,userEmail:k,plans:w})=>{const $=(0,g.useApi)(g.configApiRef),C=(0,g.useApi)(g.fetchApiRef),S=(0,g.useApi)(g.alertApiRef),P=$.getString("backend.baseUrl"),[q,E]=(0,r.useState)(""),[R,T]=(0,r.useState)(""),[I,z]=(0,r.useState)(!1),[K,_]=(0,r.useState)(null),B=()=>{E(""),T(""),_(null),t()};return(0,a.jsxs)(i.A,{open:e,onClose:B,maxWidth:"sm",fullWidth:!0,children:[(0,a.jsx)(s.A,{children:"Request API Access"}),(0,a.jsxs)(o.A,{children:[(0,a.jsxs)(l.A,{mb:2,p:1.5,bgcolor:"info.light",borderRadius:1,display:"flex",alignItems:"flex-start",style:{gap:8},children:[(0,a.jsx)(f.A,{color:"primary",fontSize:"small",style:{marginTop:2}}),(0,a.jsx)(d.A,{variant:"body2",children:"Your request will be reviewed by an API owner before access is granted."})]}),K&&(0,a.jsx)(l.A,{mb:2,p:2,bgcolor:"error.main",color:"error.contrastText",borderRadius:1,children:(0,a.jsx)(d.A,{variant:"body2",children:K})}),(0,a.jsxs)(c.A,{fullWidth:!0,margin:"normal",disabled:I,"data-testid":"tier-select-form",children:[(0,a.jsx)(u.A,{id:"tier-select-label",children:"Select Tier"}),(0,a.jsx)(p.A,{labelId:"tier-select-label","data-testid":"tier-select",value:q,onChange:e=>E(e.target.value),disabled:I,children:w.map(e=>{const t=Object.entries(e.limits||{}).map(([e,t])=>`${t} per ${e}`).join(", ");return(0,a.jsxs)(h.A,{value:e.tier,"data-testid":`tier-option-${e.tier}`,children:[e.tier," ",t?`(${t})`:""]},e.tier)})})]}),(0,a.jsx)(m.A,{label:"Use Case (optional)",placeholder:"Describe how you plan to use this API",multiline:!0,rows:3,fullWidth:!0,margin:"normal",value:R,onChange:e=>T(e.target.value),helperText:"Explain your intended use of this API for admin review",disabled:I})]}),(0,a.jsxs)(y.A,{children:[(0,a.jsx)(v.A,{onClick:B,disabled:I,children:"Cancel"}),(0,a.jsx)(v.A,{onClick:async()=>{if(q){z(!0),_(null);try{const e=await C.fetch(`${P}/api/kuadrant/requests`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiProductName:j,namespace:b,planTier:q,useCase:R.trim()||"",userEmail:k})});if(!e.ok){const t=await(0,x.T)(e);throw new Error(`failed to create request: ${e.status}. ${t}`)}S.post({message:"API key requested successfully",severity:"success",display:"transient"}),E(""),T(""),n()}catch(e){const t=e instanceof Error?e.message:"unknown error occurred";S.post({message:`Failed to request API key: ${t}`,severity:"error",display:"transient"}),_(t)}finally{z(!1)}}},color:"primary",variant:"contained",disabled:!q||I,startIcon:I?(0,a.jsx)(A.A,{size:16,color:"inherit"}):void 0,children:I?"Submitting...":"Submit Request"})]})]})}},16397:(e,t,n)=>{n.d(t,{e:()=>x});var a=n(31085),r=n(95478),i=n(76891),s=n(61477),o=n(46805),l=n(10394),d=n(72501),c=n(95061),u=n(48543),p=n(81215),h=n(26343),m=n(16249),y=n(93453),v=n(64947),A=n(78467),f=n(22097),g=n(77318);const x=({open:e,onClose:t,onSuccess:n,request:x,availablePlans:j})=>{const b=(0,f.useApi)(f.configApiRef),k=(0,f.useApi)(f.fetchApiRef),w=b.getString("backend.baseUrl"),[$,C]=(0,r.useState)(""),[S,P]=(0,r.useState)(""),[q,E]=(0,r.useState)(!1),[R,T]=(0,r.useState)("");(0,r.useEffect)(()=>{e&&x&&(C(x.spec.planTier||""),P(x.spec.useCase||""),T(""))},[e,x]);const I=()=>{q||(T(""),t())};return(0,a.jsxs)(i.A,{open:e,onClose:I,maxWidth:"sm",fullWidth:!0,children:[(0,a.jsx)(s.A,{children:"Edit API Key"}),(0,a.jsxs)(o.A,{children:[R&&(0,a.jsx)(l.A,{mb:2,p:2,bgcolor:"error.main",color:"error.contrastText",borderRadius:1,children:(0,a.jsx)(d.A,{variant:"body2",children:R})}),(0,a.jsxs)(c.A,{fullWidth:!0,margin:"normal",children:[(0,a.jsx)(u.A,{children:"Tier"}),(0,a.jsx)(p.A,{value:$,onChange:e=>C(e.target.value),disabled:q,children:j.map(e=>{const t=Object.entries(e.limits||{}).map(([e,t])=>`${t} per ${e}`).join(", ");return(0,a.jsxs)(h.A,{value:e.tier,children:[e.tier," ",t?`(${t})`:""]},e.tier)})})]}),(0,a.jsx)(m.A,{label:"Use Case",placeholder:"Describe how you plan to use this API",multiline:!0,rows:3,fullWidth:!0,margin:"normal",value:S,onChange:e=>P(e.target.value),disabled:q,helperText:"Explain your intended use of this API for admin review"})]}),(0,a.jsxs)(y.A,{children:[(0,a.jsx)(v.A,{onClick:I,disabled:q,children:"Cancel"}),(0,a.jsx)(v.A,{onClick:async()=>{if($){T(""),E(!0);try{const e={spec:{planTier:$,useCase:S.trim()}},a=await k.fetch(`${w}/api/kuadrant/requests/${x.metadata.namespace}/${x.metadata.name}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!a.ok){const e=await(0,g.T)(a);throw new Error(`Failed to update request: ${a.status}. ${e}`)}n(),t()}catch(e){console.error("Error updating API key request:",e),T(e instanceof Error?e.message:"Unknown error occurred")}finally{E(!1)}}else T("Please select a tier")},color:"primary",variant:"contained",disabled:!$||q,startIcon:q?(0,a.jsx)(A.A,{size:16,color:"inherit"}):void 0,children:q?"Saving...":"Save Changes"})]})]})}},18466:(e,t,n)=>{var a=n(4293),r=n(78920);t.A=void 0;var i=r(n(95478)),s=(0,a(n(74044)).default)(i.createElement("path",{d:"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"}),"Add");t.A=s},23650:(e,t,n)=>{n.r(t),n.d(t,{ApiKeyManagementTab:()=>V});var a=n(31085),r=n(95478),i=n(35015),s=n(82300),o=n(86687),l=n(42367),d=n(25010),c=n(10394),u=n(72501),p=n(31653),h=n(38605),m=n(67720),y=n(71677),v=n(29365),A=n(78467),f=n(42899),g=n(64947),x=n(37757),j=n(26343),b=n(76891),k=n(61477),w=n(46805),$=n(93453),C=n(22097),S=n(25467),P=n(32269),q=n(61524),E=n(93246),R=n(92399),T=n(18466),I=n(71407),z=n(99594),K=n(77225),_=n(34955),B=n(46205),H=n(16397),W=n(63221);function D(e,t,n){const a=n?`${n} `:"";return{curl:`curl -X GET ${e} \\\n -H "Authorization: ${n?`${n} ${t}`:t}"`,nodejs:`const fetch = require('node-fetch');\n\nconst apiKey = '${t}';\nconst endpoint = '${e}';\n\nfetch(endpoint, {\n method: 'GET',\n headers: {\n 'Authorization': '${a}' + apiKey\n }\n})\n .then(response => response.json())\n .then(data => console.log(data))\n .catch(error => console.error('Error:', error));`,python:`import requests\n\napi_key = '${t}'\nendpoint = '${e}'\n\nheaders = {\n 'Authorization': '${a}' + api_key\n}\n\nresponse = requests.get(endpoint, headers=headers)\nprint(response.json())`,go:`package main\n\nimport (\n "fmt"\n "net/http"\n "io"\n)\n\nfunc main() {\n apiKey := "${t}"\n endpoint := "${e}"\n\n client := &http.Client{}\n req, _ := http.NewRequest("GET", endpoint, nil)\n req.Header.Add("Authorization", "${a}" + apiKey)\n\n resp, err := client.Do(req)\n if err != nil {\n fmt.Println("Error:", err)\n return\n }\n defer resp.Body.Close()\n\n body, _ := io.ReadAll(resp.Body)\n fmt.Println(string(body))\n}`}}var M=n(14933),N=n(77318);const V=({namespace:e})=>{var t,n,V,L,G;const{entity:U}=(0,S.tN)(),F=(0,C.useApi)(C.configApiRef),O=(0,C.useApi)(C.identityApiRef),X=(0,C.useApi)(C.fetchApiRef),J=(0,C.useApi)(C.alertApiRef),Y=F.getString("backend.baseUrl"),[Q,Z]=(0,r.useState)(new Set),[ee,te]=(0,r.useState)(0),[ne,ae]=(0,r.useState)(""),[re,ie]=(0,r.useState)(""),[se,oe]=(0,r.useState)(!1),[le,de]=(0,r.useState)(!1),[ce,ue]=(0,r.useState)(null),[pe,he]=(0,r.useState)(null),[me,ye]=(0,r.useState)(null),[ve,Ae]=(0,r.useState)(null),[fe,ge]=(0,r.useState)(new Set),[xe,je]=(0,r.useState)({open:!1,request:null}),[be,ke]=(0,r.useState)(new Map),[we,$e]=(0,r.useState)(new Set),[Ce,Se]=(0,r.useState)(new Set),[Pe,qe]=(0,r.useState)(!1),[Ee,Re]=(0,r.useState)(null),Te=(null===(t=U.metadata.annotations)||void 0===t?void 0:t["kuadrant.io/apiproduct"])||U.metadata.name,Ie=(null===(n=U.metadata.annotations)||void 0===n?void 0:n["kuadrant.io/namespace"])||e||"default";(0,i.A)(async()=>{const e=await O.getBackstageIdentity(),t=await O.getProfileInfo();ae(e.userEntityRef),ie(t.email||"")},[O]);const{value:ze,loading:Ke,error:_e}=(0,i.A)(async()=>{const e=await X.fetch(`${Y}/api/kuadrant/requests/my?namespace=${Ie}`);if(!e.ok){const t=await(0,N.T)(e);throw new Error(`failed to fetch requests. ${t}`)}return((await e.json()).items||[]).filter(e=>e.spec.apiProductRef.name===Te&&e.metadata.namespace===Ie)},[Te,Ie,ee,X,Y]),{value:Be,loading:He,error:We}=(0,i.A)(async()=>{var e;const t=await X.fetch(`${Y}/api/kuadrant/apiproducts`);if(!t.ok){const e=await(0,N.T)(t);throw new Error(`failed to fetch api products. ${e}`)}return null===(e=(await t.json()).items)||void 0===e?void 0:e.find(e=>e.metadata.namespace===Ie&&e.metadata.name===Te)},[Ie,Te,X]),De=Be?`apiproduct:${Be.metadata.namespace}/${Be.metadata.name}`:void 0,{allowed:Me,loading:Ne,error:Ve}=(0,B.l)(_.dp,De),{allowed:Le,loading:Ge,error:Ue}=(0,B.l)(_.uL),{allowed:Fe,loading:Oe,error:Xe}=(0,B.l)(_.jH),{allowed:Je,loading:Ye,error:Qe}=(0,B.l)(_.q0),Ze=()=>{he(null),ye(null)},et=()=>{me&&(ue(me),de(!0),Ze())},tt=()=>{if(!me)return;const e=me;Ze(),je({open:!0,request:e})},nt=e=>{Z(t=>{const n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},at=(0,r.useMemo)(()=>[{render:e=>{var t;const n=e.rowData;if(!(null==n||null===(t=n.metadata)||void 0===t?void 0:t.name))return(0,a.jsx)(c.A,{});const r=`${n.metadata.namespace}/${n.metadata.name}`,i=be.get(r);return(0,a.jsx)(rt,{request:n,apiName:Te,revealedApiKey:i})}}],[Te,be]),rt=({request:e,apiName:t,revealedApiKey:n})=>{var i,o,l;const[d,m]=(0,r.useState)(0),y=(null===(i=e.status)||void 0===i?void 0:i.apiHostname)||`${t}.apps.example.com`,v=n||"<your-api-key>",A=function(e,t,n){const a=`https://${t}/api/v1/endpoint`;return e?e.authorizationHeader?D(a,n,e.authorizationHeader.prefix||""):e.customHeader?function(e,t,n,a){return{curl:`curl -X GET ${e} \\\n -H "${n}: ${a?`${a}${t}`:t}"`,nodejs:`const fetch = require('node-fetch');\n\nconst apiKey = '${t}';\nconst endpoint = '${e}';\n\nfetch(endpoint, {\n method: 'GET',\n headers: {\n '${n}': '${a}' + apiKey\n }\n})\n .then(response => response.json())\n .then(data => console.log(data))\n .catch(error => console.error('Error:', error));`,python:`import requests\n\napi_key = '${t}'\nendpoint = '${e}'\n\nheaders = {\n '${n}': '${a}' + api_key\n}\n\nresponse = requests.get(endpoint, headers=headers)\nprint(response.json())`,go:`package main\n\nimport (\n "fmt"\n "net/http"\n "io"\n)\n\nfunc main() {\n apiKey := "${t}"\n endpoint := "${e}"\n\n client := &http.Client{}\n req, _ := http.NewRequest("GET", endpoint, nil)\n req.Header.Add("${n}", "${a}" + apiKey)\n\n resp, err := client.Do(req)\n if err != nil {\n fmt.Println("Error:", err)\n return\n }\n defer resp.Body.Close()\n\n body, _ := io.ReadAll(resp.Body)\n fmt.Println(string(body))\n}`}}(a,n,e.customHeader.name,e.customHeader.prefix||""):e.queryString?function(e,t,n){return{curl:`curl -X GET "${e}?${n}=${t}"`,nodejs:`const fetch = require('node-fetch');\n\nconst apiKey = '${t}';\nconst endpoint = '${e}?${n}=' + apiKey;\n\nfetch(endpoint, {\n method: 'GET'\n})\n .then(response => response.json())\n .then(data => console.log(data))\n .catch(error => console.error('Error:', error));`,python:`import requests\n\napi_key = '${t}'\nendpoint = '${e}'\n\nparams = {\n '${n}': api_key\n}\n\nresponse = requests.get(endpoint, params=params)\nprint(response.json())`,go:`package main\n\nimport (\n "fmt"\n "net/http"\n "io"\n)\n\nfunc main() {\n apiKey := "${t}"\n endpoint := "${e}?${n}=" + apiKey\n\n client := &http.Client{}\n req, _ := http.NewRequest("GET", endpoint, nil)\n\n resp, err := client.Do(req)\n if err != nil {\n fmt.Println("Error:", err)\n return\n }\n defer resp.Body.Close()\n\n body, _ := io.ReadAll(resp.Body)\n fmt.Println(string(body))\n}`}}(a,n,e.queryString.name):e.cookie?function(e,t,n){return{curl:`curl -X GET ${e} \\\n --cookie "${n}=${t}"`,nodejs:`const fetch = require('node-fetch');\n\nconst apiKey = '${t}';\nconst endpoint = '${e}';\n\nfetch(endpoint, {\n method: 'GET',\n headers: {\n 'Cookie': '${n}=' + apiKey\n }\n})\n .then(response => response.json())\n .then(data => console.log(data))\n .catch(error => console.error('Error:', error));`,python:`import requests\n\napi_key = '${t}'\nendpoint = '${e}'\n\ncookies = {\n '${n}': api_key\n}\n\nresponse = requests.get(endpoint, cookies=cookies)\nprint(response.json())`,go:`package main\n\nimport (\n "fmt"\n "net/http"\n "io"\n)\n\nfunc main() {\n apiKey := "${t}"\n endpoint := "${e}"\n\n client := &http.Client{}\n req, _ := http.NewRequest("GET", endpoint, nil)\n req.AddCookie(&http.Cookie{\n Name: "${n}",\n Value: apiKey,\n })\n\n resp, err := client.Do(req)\n if err != nil {\n fmt.Println("Error:", err)\n return\n }\n defer resp.Body.Close()\n\n body, _ := io.ReadAll(resp.Body)\n fmt.Println(string(body))\n}`}}(a,n,e.cookie.name):D(a,n,"Bearer"):D(a,n,"Bearer")}(null===(l=e.status)||void 0===l||null===(o=l.authScheme)||void 0===o?void 0:o.credentials,y,v);return(0,a.jsxs)(c.A,{p:3,bgcolor:"background.default",onClick:e=>e.stopPropagation(),children:[e.spec.useCase&&(0,a.jsxs)(c.A,{mb:3,children:[(0,a.jsx)(u.A,{variant:"h6",gutterBottom:!0,children:"Use Case"}),(0,a.jsx)(c.A,{p:2,bgcolor:"background.paper",borderRadius:1,border:"1px solid rgba(0, 0, 0, 0.12)",children:(0,a.jsx)(u.A,{variant:"body2",style:{whiteSpace:"pre-wrap",wordBreak:"break-word",overflowWrap:"break-word"},children:e.spec.useCase})})]}),(0,a.jsx)(u.A,{variant:"h6",gutterBottom:!0,children:"Usage Examples"}),(0,a.jsxs)(u.A,{variant:"body2",paragraph:!0,children:["Use these code examples to test the API with your"," ",e.spec.planTier," tier key."]}),(0,a.jsx)(c.A,{onClick:e=>e.stopPropagation(),children:(0,a.jsxs)(p.A,{value:d,onChange:(e,t)=>{e.stopPropagation(),m(t)},indicatorColor:"primary",children:[(0,a.jsx)(h.A,{label:"cURL",onClick:e=>e.stopPropagation()}),(0,a.jsx)(h.A,{label:"Node.js",onClick:e=>e.stopPropagation()}),(0,a.jsx)(h.A,{label:"Python",onClick:e=>e.stopPropagation()}),(0,a.jsx)(h.A,{label:"Go",onClick:e=>e.stopPropagation()})]})}),(0,a.jsxs)(c.A,{mt:2,children:[0===d&&(0,a.jsx)(s.z,{text:A.curl,language:"bash",showCopyCodeButton:!0}),1===d&&(0,a.jsx)(s.z,{text:A.nodejs,language:"javascript",showCopyCodeButton:!0}),2===d&&(0,a.jsx)(s.z,{text:A.python,language:"python",showCopyCodeButton:!0}),3===d&&(0,a.jsx)(s.z,{text:A.go,language:"go",showCopyCodeButton:!0})]})]})},it=_e||We,st=Ve||Ue||Xe||Qe;if(Ke||He||Ne||Ge||Oe||Ye)return(0,a.jsx)(o.k,{});if(it)return(0,a.jsx)(l._,{error:it});if(st){const e=Ve?"kuadrant.apikey.create":Ue?"kuadrant.apikey.delete.own":Xe?"kuadrant.apikey.delete.all":Qe?"kuadrant.apikey.update.own":"unknown";return(0,a.jsxs)(c.A,{p:2,children:[(0,a.jsxs)(u.A,{color:"error",children:["Unable to check permissions: ",st.message]}),(0,a.jsxs)(u.A,{variant:"body2",color:"textSecondary",children:["Permission: ",e]}),(0,a.jsx)(u.A,{variant:"body2",color:"textSecondary",children:"Please try again or contact your administrator"})]})}const ot=(ze||[]).filter(e=>!fe.has(e.metadata.name)),lt=(null==Be||null===(V=Be.status)||void 0===V?void 0:V.discoveredPlans)||[],dt=ot.filter(e=>{var t;return!(null===(t=e.status)||void 0===t?void 0:t.phase)||"Pending"===e.status.phase}),ct=ot.filter(e=>{var t;return"Approved"===(null===(t=e.status)||void 0===t?void 0:t.phase)}),ut=ot.filter(e=>{var t;return"Rejected"===(null===(t=e.status)||void 0===t?void 0:t.phase)}),pt=[{title:"Tier",field:"spec.planTier",render:e=>(0,a.jsx)(m.A,{label:e.spec.planTier,color:"primary",size:"small"})},{title:"Approved",field:"status.reviewedAt",render:e=>{var t;return(0,a.jsx)(u.A,{variant:"body2",children:(null===(t=e.status)||void 0===t?void 0:t.reviewedAt)?new Date(e.status.reviewedAt).toLocaleDateString():"-"})}},{title:"API Key",field:"status.secretRef",searchable:!1,filtering:!1,render:e=>{var t,n,r;const i=`${e.metadata.namespace}/${e.metadata.name}`,s=Q.has(e.metadata.name),o=we.has(i),l=be.get(i),d=null===(n=e.status)||void 0===n||null===(t=n.secretRef)||void 0===t?void 0:t.name,p=!1!==(null===(r=e.status)||void 0===r?void 0:r.canReadSecret),h=Ce.has(i)||!p;return d?h&&!l?(0,a.jsx)(y.Ay,{title:"This API key has already been viewed and cannot be retrieved again",children:(0,a.jsxs)(c.A,{display:"flex",alignItems:"center",children:[(0,a.jsx)(u.A,{variant:"body2",color:"textSecondary",style:{fontFamily:"monospace",marginRight:8},children:"Already viewed"}),(0,a.jsx)(q.A,{fontSize:"small",color:"disabled"})]})}):(0,a.jsxs)(c.A,{display:"flex",alignItems:"center",children:[(0,a.jsx)(u.A,{variant:"body2",style:{fontFamily:"monospace",marginRight:8},children:o?"Loading...":s&&l?l:"••••••••••••••••"}),s&&l&&(0,a.jsx)(y.Ay,{title:"Copy to clipboard",children:(0,a.jsx)(v.A,{size:"small",onClick:async()=>{l&&(await navigator.clipboard.writeText(l),J.post({message:"API key copied to clipboard",severity:"success",display:"transient"}))},children:(0,a.jsx)(z.A,{fontSize:"small"})})}),(0,a.jsx)(y.Ay,{title:s?"Hide API key":"Reveal API key (one-time only)",children:(0,a.jsx)("span",{children:(0,a.jsx)(v.A,{size:"small",onClick:()=>{s?(((e,t)=>{const n=`${e}/${t}`;ke(e=>{const t=new Map(e);return t.delete(n),t})})(e.metadata.namespace,e.metadata.name),nt(e.metadata.name)):h||(Re({namespace:e.metadata.namespace,name:e.metadata.name}),qe(!0))},disabled:o||h&&!l,children:s?(0,a.jsx)(q.A,{}):(0,a.jsx)(P.A,{})})})})]}):(0,a.jsx)(u.A,{variant:"body2",color:"textSecondary",children:"Awaiting secret..."})}},{title:"",field:"actions",searchable:!1,filtering:!1,render:e=>{if(ve===e.metadata.name)return(0,a.jsx)(A.A,{size:20});const t=e.spec.requestedBy.userId;return(0,B.W)(t,ne,Le,Fe)?(0,a.jsx)(v.A,{size:"small",onClick:t=>{t.stopPropagation();const n=t.currentTarget.getBoundingClientRect();he({top:n.bottom,left:n.left}),ye(e)},title:"Actions","aria-controls":pe?"actions-menu":void 0,"aria-haspopup":"true",children:(0,a.jsx)(I.A,{})}):null}}],ht=[{title:"Status",field:"status.phase",render:e=>{var t;const n=(null===(t=e.status)||void 0===t?void 0:t.phase)||"Pending",r="Pending"===n;return(0,a.jsx)(m.A,{label:n,size:"small",icon:r?(0,a.jsx)(E.A,{}):(0,a.jsx)(R.A,{}),color:r?"default":"secondary"})}},{title:"Tier",field:"spec.planTier",render:e=>(0,a.jsx)(m.A,{label:e.spec.planTier,color:"primary",size:"small"})},{title:"Use Case",field:"spec.useCase",render:e=>e.spec.useCase?(0,a.jsx)(y.Ay,{title:e.spec.useCase,placement:"top",children:(0,a.jsx)(u.A,{variant:"body2",style:{maxWidth:"200px",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:e.spec.useCase})}):(0,a.jsx)(u.A,{variant:"body2",children:"-"})},{title:"Requested",field:"metadata.creationTimestamp",render:e=>(0,a.jsx)(u.A,{variant:"body2",children:e.metadata.creationTimestamp?new Date(e.metadata.creationTimestamp).toLocaleDateString():"-"})},{title:"Reviewed",field:"status.reviewedAt",render:e=>{var t;return(null===(t=e.status)||void 0===t?void 0:t.reviewedAt)?(0,a.jsx)(u.A,{variant:"body2",children:new Date(e.status.reviewedAt).toLocaleDateString()}):(0,a.jsx)(u.A,{variant:"body2",children:"-"})}},{title:"",field:"actions",searchable:!1,filtering:!1,render:e=>{var t;if(ve===e.metadata.name)return(0,a.jsx)(A.A,{size:20});const n=!(null===(t=e.status)||void 0===t?void 0:t.phase)||"Pending"===e.status.phase,r=e.spec.requestedBy.userId,i=(0,B.W)(r,ne,Le,Fe);return n&&(Je&&r===ne||i)?(0,a.jsx)(v.A,{size:"small",onClick:t=>{t.stopPropagation();const n=t.currentTarget.getBoundingClientRect();he({top:n.bottom,left:n.left}),ye(e)},title:"Actions","aria-controls":pe?"actions-menu":void 0,"aria-haspopup":"true",children:(0,a.jsx)(I.A,{})}):null}}],mt=ht.filter(e=>"Reviewed"!==e.title&&"Reason"!==e.title);return(0,a.jsxs)(c.A,{p:2,children:[(0,a.jsxs)(f.A,{container:!0,spacing:3,direction:"column",children:[Me&&(0,a.jsx)(f.A,{item:!0,children:(0,a.jsxs)(c.A,{display:"flex",flexDirection:"column",alignItems:"flex-end",mb:2,children:[(0,a.jsx)(g.A,{variant:"contained",color:"primary",startIcon:(0,a.jsx)(T.A,{}),onClick:()=>oe(!0),disabled:0===lt.length,"data-testid":"request-api-access-button","data-plans-count":lt.length,children:"Request API Access"}),0===lt.length&&(0,a.jsx)(u.A,{variant:"caption",color:"textSecondary",style:{marginTop:4},"data-testid":"no-plans-message",children:Be?(()=>{var e,t,n,a;const r=null===(t=Be.status)||void 0===t||null===(e=t.conditions)||void 0===e?void 0:e.find(e=>"Ready"===e.type),i=null===(a=Be.status)||void 0===a||null===(n=a.conditions)||void 0===n?void 0:n.find(e=>"PlanPolicyDiscovered"===e.type);return"True"!==(null==r?void 0:r.status)?`HTTPRoute not ready: ${(null==r?void 0:r.message)||"unknown"}`:"True"!==(null==i?void 0:i.status)?`No plans discovered: ${(null==i?void 0:i.message)||"no PlanPolicy found"}`:"No plans available"})():"API product not found"})]})}),0===dt.length&&0===ut.length&&0===ct.length&&(0,a.jsx)(f.A,{item:!0,children:(0,a.jsx)(c.A,{p:3,textAlign:"center",children:(0,a.jsx)(u.A,{variant:"body1",color:"textSecondary",children:"No API keys yet. Request access to get started."})})}),dt.length>0&&(0,a.jsx)(f.A,{item:!0,children:(0,a.jsx)(d.X,{title:"Pending Requests",options:{paging:dt.length>5,pageSize:20,search:!0,filtering:!0,debounceInterval:300,toolbar:!0,emptyRowsWhenPaging:!1},columns:mt,data:dt})}),ut.length>0&&(0,a.jsx)(f.A,{item:!0,children:(0,a.jsx)(d.X,{title:"Rejected Requests",options:{paging:ut.length>5,pageSize:20,search:!0,filtering:!0,debounceInterval:300,toolbar:!0,emptyRowsWhenPaging:!1},columns:ht,data:ut})}),ct.length>0&&(0,a.jsx)(f.A,{item:!0,children:(0,a.jsx)(d.X,{title:"API Keys",options:{paging:ct.length>5,pageSize:20,search:!0,filtering:!0,debounceInterval:300,toolbar:!0,emptyRowsWhenPaging:!1},columns:pt,data:ct,detailPanel:at},"api-keys-table")})]}),(0,a.jsx)(M.c,{open:se,onClose:()=>oe(!1),onSuccess:()=>{oe(!1),te(e=>e+1)},apiProductName:Te,namespace:Ie,userEmail:re,plans:lt}),(0,a.jsx)(x.A,{id:"actions-menu",open:Boolean(pe),onClose:Ze,anchorReference:"anchorPosition",anchorPosition:pe||{top:0,left:0},children:me&&(()=>{var e;const t=!(null===(e=me.status)||void 0===e?void 0:e.phase)||"Pending"===me.status.phase,n=me.spec.requestedBy.userId,r=[];return Je&&n===ne&&t&&r.push((0,a.jsx)(j.A,{onClick:et,children:"Edit"},"edit")),r.push((0,a.jsx)(j.A,{onClick:tt,children:"Delete"},"delete")),r})()}),ce&&(0,a.jsx)(H.e,{open:le,onClose:()=>{de(!1),ue(null)},onSuccess:()=>{te(e=>e+1),de(!1),J.post({message:"API key updated",severity:"success",display:"transient"}),ue(null)},request:ce,availablePlans:lt}),(0,a.jsx)(W.K,{open:xe.open,title:"Delete Request",description:`Are you sure you want to delete this ${"Approved"===(null===(G=xe.request)||void 0===G||null===(L=G.status)||void 0===L?void 0:L.phase)?"API key":"request"}?`,deleting:null!==ve,onConfirm:async()=>{xe.request&&(await(async e=>{ge(t=>new Set(t).add(e)),Ae(e);try{const t=await X.fetch(`${Y}/api/kuadrant/requests/${Ie}/${e}`,{method:"DELETE"});if(!t.ok){const e=await(0,N.T)(t);throw new Error(e)}J.post({message:"API key deleted successfully",severity:"success",display:"transient"}),te(e=>e+1)}catch(t){const n=t instanceof Error?t.message:"unknown error occurred";ge(t=>{const n=new Set(t);return n.delete(e),n}),J.post({message:`Failed to delete API key: ${n}`,severity:"error",display:"transient"})}finally{Ae(null)}})(xe.request.metadata.name),je({open:!1,request:null}))},onCancel:()=>{je({open:!1,request:null})}}),(0,a.jsxs)(b.A,{open:Pe,onClose:()=>{qe(!1),Re(null)},maxWidth:"sm",children:[(0,a.jsx)(k.A,{children:(0,a.jsxs)(c.A,{display:"flex",alignItems:"center",children:[(0,a.jsx)(K.A,{color:"primary",style:{marginRight:8}}),"View API Key"]})}),(0,a.jsxs)(w.A,{children:[(0,a.jsxs)(u.A,{variant:"body1",paragraph:!0,children:["This API key can only be viewed ",(0,a.jsx)("strong",{children:"once"}),". After you reveal it, you will not be able to retrieve it again."]}),(0,a.jsx)(u.A,{variant:"body2",color:"textSecondary",children:"Make sure to copy and store it securely before closing this view."})]}),(0,a.jsxs)($.A,{children:[(0,a.jsx)(g.A,{onClick:()=>{qe(!1),Re(null)},children:"Cancel"}),(0,a.jsx)(g.A,{variant:"contained",color:"primary",onClick:()=>{Ee&&((async(e,t)=>{const n=`${e}/${t}`;if(!we.has(n)){$e(e=>new Set(e).add(n));try{const a=await X.fetch(`${Y}/api/kuadrant/apikeys/${e}/${t}/secret`);if(a.ok){const e=await a.json();ke(t=>new Map(t).set(n,e.apiKey)),Se(e=>new Set(e).add(n))}else 403===a.status&&(Se(e=>new Set(e).add(n)),J.post({message:"This API key has already been viewed and cannot be retrieved again.",severity:"warning",display:"transient"}))}catch(e){const t=e instanceof Error?e.message:"unknown error occurred";J.post({message:`Failed to fetch api key: ${t}`,severity:"error",display:"transient"})}finally{$e(e=>{const t=new Set(e);return t.delete(n),t})}}})(Ee.namespace,Ee.name),nt(Ee.name)),qe(!1),Re(null)},children:"Reveal API Key"})]})]})]})}},25467:(e,t,n)=>{n.d(t,{tN:()=>r}),n(31085),n(22097);var a=n(15427);function r(){const e=(0,a.useVersionedContext)("entity-context");if(!e)throw new Error("Entity context is not available");const t=e.atVersion(1);if(!t)throw new Error("EntityContext v1 not available");if(!t.entity)throw new Error("useEntity hook is being called outside of an EntityLayout where the entity has not been loaded. If this is intentional, please use useAsyncEntity instead.");return{entity:t.entity}}(0,a.createVersionedContext)("entity-context")},32269:(e,t,n)=>{var a=n(4293),r=n(78920);t.A=void 0;var i=r(n(95478)),s=(0,a(n(74044)).default)(i.createElement("path",{d:"M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"}),"Visibility");t.A=s},34955:(e,t,n)=>{n.d(t,{Al:()=>s,EM:()=>d,FL:()=>i,J:()=>r,KV:()=>A,R_:()=>c,U3:()=>o,dp:()=>p,jH:()=>v,q0:()=>h,uL:()=>y,v_:()=>l,vs:()=>u,z4:()=>m});var a=n(83572);(0,a.i)({name:"kuadrant.planpolicy.create",attributes:{action:"create"}}),(0,a.i)({name:"kuadrant.planpolicy.read",attributes:{action:"read"}}),(0,a.i)({name:"kuadrant.planpolicy.update",attributes:{action:"update"}}),(0,a.i)({name:"kuadrant.planpolicy.delete",attributes:{action:"delete"}});const r=(0,a.i)({name:"kuadrant.planpolicy.list",attributes:{action:"read"}}),i=(0,a.i)({name:"kuadrant.apiproduct.create",attributes:{action:"create"}}),s=((0,a.i)({name:"kuadrant.apiproduct.read.own",attributes:{action:"read"}}),(0,a.i)({name:"kuadrant.apiproduct.read.all",attributes:{action:"read"}})),o=(0,a.i)({name:"kuadrant.apiproduct.update.own",attributes:{action:"update"}}),l=(0,a.i)({name:"kuadrant.apiproduct.update.all",attributes:{action:"update"}}),d=(0,a.i)({name:"kuadrant.apiproduct.delete.own",attributes:{action:"delete"}}),c=(0,a.i)({name:"kuadrant.apiproduct.delete.all",attributes:{action:"delete"}}),u=(0,a.i)({name:"kuadrant.apiproduct.list",attributes:{action:"read"}}),p=(0,a.i)({name:"kuadrant.apikey.create",attributes:{action:"create"},resourceType:"apiproduct"}),h=((0,a.i)({name:"kuadrant.apikey.read.own",attributes:{action:"read"}}),(0,a.i)({name:"kuadrant.apikey.read.all",attributes:{action:"read"}}),(0,a.i)({name:"kuadrant.apikey.update.own",attributes:{action:"update"}})),m=(0,a.i)({name:"kuadrant.apikey.update.all",attributes:{action:"update"}}),y=(0,a.i)({name:"kuadrant.apikey.delete.own",attributes:{action:"delete"}}),v=(0,a.i)({name:"kuadrant.apikey.delete.all",attributes:{action:"delete"}}),A=(0,a.i)({name:"kuadrant.apikey.approve",attributes:{action:"update"}})},35015:(e,t,n)=>{n.d(t,{A:()=>s});var a=n(95478),r=n(85608),i=n(71581);function s(e,t){void 0===t&&(t=[]);var n=function(e,t,n){void 0===t&&(t=[]),void 0===n&&(n={loading:!1});var s=(0,a.useRef)(0),o=(0,i.A)(),l=(0,a.useState)(n),d=l[0],c=l[1],u=(0,a.useCallback)(function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];var a=++s.current;return d.loading||c(function(e){return(0,r.__assign)((0,r.__assign)({},e),{loading:!0})}),e.apply(void 0,t).then(function(e){return o()&&a===s.current&&c({value:e,loading:!1}),e},function(e){return o()&&a===s.current&&c({error:e,loading:!1}),e})},t);return[d,u]}(e,t,{loading:!0}),s=n[0],o=n[1];return(0,a.useEffect)(function(){o()},[o]),s}},39053:(e,t,n)=>{var a=n(4293),r=n(78920);t.A=void 0;var i=r(n(95478)),s=(0,a(n(74044)).default)(i.createElement("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"}),"Info");t.A=s},46205:(e,t,n)=>{n.d(t,{W:()=>i,l:()=>r});var a=n(24217);function r(e,t){const n="resourceType"in e?{permission:e,resourceRef:t}:{permission:e},r=(0,a.J)(n);return{allowed:r.allowed,loading:r.loading,error:r.error}}function i(e,t,n,a){return!!a||!(!n||e!==t)}},61524:(e,t,n)=>{var a=n(4293),r=n(78920);t.A=void 0;var i=r(n(95478)),s=(0,a(n(74044)).default)(i.createElement("path",{d:"M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7zM2 4.27l2.28 2.28.46.46C3.08 8.3 1.78 10.02 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3 2 4.27zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2zm4.31-.78l3.15 3.15.02-.16c0-1.66-1.34-3-3-3l-.17.01z"}),"VisibilityOff");t.A=s},63221:(e,t,n)=>{n.d(t,{K:()=>v});var a=n(31085),r=n(95478),i=n(76891),s=n(61477),o=n(10394),l=n(46805),d=n(59461),c=n(72501),u=n(16249),p=n(93453),h=n(64947),m=n(78467),y=n(77225);const v=({open:e,title:t,description:n,confirmText:v,severity:A="normal",deleting:f=!1,onConfirm:g,onCancel:x})=>{const[j,b]=(0,r.useState)("");(0,r.useEffect)(()=>{e||b("")},[e]);const k="high"===A&&v,w=!k||j===v;return(0,a.jsxs)(i.A,{open:e,onClose:f?void 0:x,maxWidth:"sm",fullWidth:!0,children:[(0,a.jsxs)(s.A,{children:["high"===A&&(0,a.jsxs)(o.A,{display:"flex",alignItems:"center",style:{gap:8},children:[(0,a.jsx)(y.A,{color:"error"}),(0,a.jsx)("span",{children:t})]}),"high"!==A&&t]}),(0,a.jsxs)(l.A,{children:[(0,a.jsx)(d.A,{style:{whiteSpace:"pre-line"},children:n}),k&&(0,a.jsxs)(o.A,{mt:2,children:[(0,a.jsxs)(c.A,{variant:"body2",color:"textSecondary",gutterBottom:!0,children:["Type ",(0,a.jsx)("strong",{children:v})," to confirm:"]}),(0,a.jsx)(u.A,{fullWidth:!0,variant:"outlined",size:"small",value:j,onChange:e=>b(e.target.value),disabled:f,autoFocus:!0,placeholder:v})]})]}),(0,a.jsxs)(p.A,{children:[(0,a.jsx)(h.A,{onClick:x,disabled:f,children:"Cancel"}),(0,a.jsx)(h.A,{onClick:()=>{w&&g()},color:"secondary",variant:"contained",disabled:f||!w,startIcon:f?(0,a.jsx)(m.A,{size:16,color:"inherit"}):void 0,children:f?"Deleting...":"Delete"})]})]})}},71407:(e,t,n)=>{var a=n(4293),r=n(78920);t.A=void 0;var i=r(n(95478)),s=(0,a(n(74044)).default)(i.createElement("path",{d:"M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"}),"MoreVert");t.A=s},77225:(e,t,n)=>{var a=n(4293),r=n(78920);t.A=void 0;var i=r(n(95478)),s=(0,a(n(74044)).default)(i.createElement("path",{d:"M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z"}),"Warning");t.A=s},77318:(e,t,n)=>{async function a(e){const t=await e.json().catch(()=>({}));switch(e.status){case 400:return t.error||"Invalid request. Please check your input.";case 403:return"Permission denied. Contact your administrator.";case 404:return"Resource not found. It may have been deleted.";case 409:return"Resource already exists or conflicts with existing data.";case 500:return"Server error. Please try again or contact support.";default:return t.error||`Request failed (${e.status})`}}n.d(t,{T:()=>a})},93246:(e,t,n)=>{var a=n(4293),r=n(78920);t.A=void 0;var i=r(n(95478)),s=(0,a(n(74044)).default)(i.createElement("path",{d:"M6 2v6h.01L6 8.01 10 12l-4 4 .01.01H6V22h12v-5.99h-.01L18 16l-4-4 4-3.99-.01-.01H18V2H6zm10 14.5V20H8v-3.5l4-4 4 4zm-4-5l-4-4V4h8v3.5l-4 4z"}),"HourglassEmpty");t.A=s}}]);
2
+ //# sourceMappingURL=3650.89dfc64c.chunk.js.map