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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/dist/components/ApiKeyManagementTab/ApiKeyManagementTab.esm.js +21 -3
  2. package/dist/components/ApiKeyManagementTab/ApiKeyManagementTab.esm.js.map +1 -1
  3. package/dist/components/CreateAPIProductDialog/CreateAPIProductDialog.esm.js +1 -7
  4. package/dist/components/CreateAPIProductDialog/CreateAPIProductDialog.esm.js.map +1 -1
  5. package/dist/components/KuadrantIcon/KuadrantIcon.esm.js +22 -0
  6. package/dist/components/KuadrantIcon/KuadrantIcon.esm.js.map +1 -0
  7. package/dist/components/icons.esm.js +11 -0
  8. package/dist/components/icons.esm.js.map +1 -0
  9. package/dist/index.d.ts +8 -1
  10. package/dist/index.esm.js +2 -0
  11. package/dist/index.esm.js.map +1 -1
  12. package/dist-scalprum/internal.plugin-kuadrant.c4fb9c2347d3ad03a5d0.js +2 -0
  13. package/dist-scalprum/internal.plugin-kuadrant.c4fb9c2347d3ad03a5d0.js.map +1 -0
  14. package/dist-scalprum/plugin-manifest.json +3 -3
  15. package/dist-scalprum/static/{1037.58dd29ad.chunk.js → 1037.25758556.chunk.js} +1 -1
  16. package/dist-scalprum/static/{1037.58dd29ad.chunk.js.map → 1037.25758556.chunk.js.map} +1 -1
  17. package/dist-scalprum/static/{1584.ae3779f0.chunk.js → 1584.1e45e570.chunk.js} +2 -2
  18. package/dist-scalprum/static/{1584.ae3779f0.chunk.js.map → 1584.1e45e570.chunk.js.map} +1 -1
  19. package/dist-scalprum/static/1719.246c020d.chunk.js +2 -0
  20. package/dist-scalprum/static/1719.246c020d.chunk.js.map +1 -0
  21. package/dist-scalprum/static/{1881.8221c002.chunk.js → 1881.56cde36b.chunk.js} +1 -1
  22. package/dist-scalprum/static/{1881.8221c002.chunk.js.map → 1881.56cde36b.chunk.js.map} +1 -1
  23. package/dist-scalprum/static/286.ee43f560.chunk.js +2 -0
  24. package/dist-scalprum/static/286.ee43f560.chunk.js.map +1 -0
  25. package/dist-scalprum/static/2952.b54bd390.chunk.js +2 -0
  26. package/dist-scalprum/static/2952.b54bd390.chunk.js.map +1 -0
  27. package/dist-scalprum/static/2967.0c2ef90e.chunk.js +2 -0
  28. package/dist-scalprum/static/2967.0c2ef90e.chunk.js.map +1 -0
  29. package/dist-scalprum/static/3015.1fe097c2.chunk.js +3 -0
  30. package/dist-scalprum/static/3015.1fe097c2.chunk.js.LICENSE.txt +9 -0
  31. package/dist-scalprum/static/3015.1fe097c2.chunk.js.map +1 -0
  32. package/dist-scalprum/static/{3581.b5b97f08.chunk.js → 3581.ebe5968a.chunk.js} +1 -1
  33. package/dist-scalprum/static/{3581.b5b97f08.chunk.js.map → 3581.ebe5968a.chunk.js.map} +1 -1
  34. package/dist-scalprum/static/3657.882640ca.chunk.js +3 -0
  35. package/dist-scalprum/static/3657.882640ca.chunk.js.LICENSE.txt +8 -0
  36. package/dist-scalprum/static/3657.882640ca.chunk.js.map +1 -0
  37. package/dist-scalprum/static/{3897.ef4554b5.chunk.js → 3897.6e9c07c0.chunk.js} +1 -1
  38. package/dist-scalprum/static/{3897.ef4554b5.chunk.js.map → 3897.6e9c07c0.chunk.js.map} +1 -1
  39. package/dist-scalprum/static/{3947.ad129ba4.chunk.js → 3947.4f4aa8c2.chunk.js} +1 -1
  40. package/dist-scalprum/static/{3947.ad129ba4.chunk.js.map → 3947.4f4aa8c2.chunk.js.map} +1 -1
  41. package/dist-scalprum/static/{3976.e0873210.chunk.js → 3976.e8a8fda2.chunk.js} +2 -2
  42. package/dist-scalprum/static/{3976.e0873210.chunk.js.map → 3976.e8a8fda2.chunk.js.map} +1 -1
  43. package/dist-scalprum/static/{4083.488ff7a9.chunk.js → 4083.811c4e7a.chunk.js} +2 -2
  44. package/dist-scalprum/static/{4083.488ff7a9.chunk.js.map → 4083.811c4e7a.chunk.js.map} +1 -1
  45. package/dist-scalprum/static/4908.196a4425.chunk.js +2 -0
  46. package/dist-scalprum/static/{5453.3c20d0a6.chunk.js.map → 4908.196a4425.chunk.js.map} +1 -1
  47. package/dist-scalprum/static/{5010.6241b64f.chunk.js → 5010.4f67737b.chunk.js} +2 -2
  48. package/dist-scalprum/static/{5010.6241b64f.chunk.js.map → 5010.4f67737b.chunk.js.map} +1 -1
  49. package/dist-scalprum/static/{512.f1c51799.chunk.js → 512.d592d164.chunk.js} +1 -1
  50. package/dist-scalprum/static/{512.f1c51799.chunk.js.map → 512.d592d164.chunk.js.map} +1 -1
  51. package/dist-scalprum/static/{5289.2e686027.chunk.js → 5289.55069930.chunk.js} +2 -2
  52. package/dist-scalprum/static/{5289.2e686027.chunk.js.map → 5289.55069930.chunk.js.map} +1 -1
  53. package/dist-scalprum/static/5605.430f697e.chunk.js +2 -0
  54. package/dist-scalprum/static/5605.430f697e.chunk.js.map +1 -0
  55. package/dist-scalprum/static/5978.bf347a09.chunk.js +2 -0
  56. package/dist-scalprum/static/5978.bf347a09.chunk.js.map +1 -0
  57. package/dist-scalprum/static/6038.63d1f832.chunk.js +3 -0
  58. package/dist-scalprum/static/6038.63d1f832.chunk.js.LICENSE.txt +8 -0
  59. package/dist-scalprum/static/6038.63d1f832.chunk.js.map +1 -0
  60. package/dist-scalprum/static/{6272.b5645dc2.chunk.js → 6272.3ed14ea4.chunk.js} +1 -1
  61. package/dist-scalprum/static/{6272.b5645dc2.chunk.js.map → 6272.3ed14ea4.chunk.js.map} +1 -1
  62. package/dist-scalprum/static/635.f63679a5.chunk.js +3 -0
  63. package/dist-scalprum/static/635.f63679a5.chunk.js.map +1 -0
  64. package/dist-scalprum/static/6371.7b57ac27.chunk.js +3 -0
  65. package/dist-scalprum/static/6371.7b57ac27.chunk.js.LICENSE.txt +9 -0
  66. package/dist-scalprum/static/6371.7b57ac27.chunk.js.map +1 -0
  67. package/dist-scalprum/static/{6386.2d20c412.chunk.js → 6386.5922f271.chunk.js} +3 -3
  68. package/dist-scalprum/static/{6386.2d20c412.chunk.js.map → 6386.5922f271.chunk.js.map} +1 -1
  69. package/dist-scalprum/static/{6426.bf20c588.chunk.js → 6426.4c18bab5.chunk.js} +1 -1
  70. package/dist-scalprum/static/{6426.bf20c588.chunk.js.map → 6426.4c18bab5.chunk.js.map} +1 -1
  71. package/dist-scalprum/static/6777.a2b77ec5.chunk.js +2 -0
  72. package/dist-scalprum/static/6777.a2b77ec5.chunk.js.map +1 -0
  73. package/dist-scalprum/static/{6800.ddabed69.chunk.js → 6800.a45da2f4.chunk.js} +2 -2
  74. package/dist-scalprum/static/{6800.ddabed69.chunk.js.map → 6800.a45da2f4.chunk.js.map} +1 -1
  75. package/dist-scalprum/static/{6972.e47ec97e.chunk.js → 6972.f22b9446.chunk.js} +1 -1
  76. package/dist-scalprum/static/{6972.e47ec97e.chunk.js.map → 6972.f22b9446.chunk.js.map} +1 -1
  77. package/dist-scalprum/static/7005.8190ad95.chunk.js +2 -0
  78. package/dist-scalprum/static/7005.8190ad95.chunk.js.map +1 -0
  79. package/dist-scalprum/static/7164.5dc4bc72.chunk.js +2 -0
  80. package/dist-scalprum/static/7164.5dc4bc72.chunk.js.map +1 -0
  81. package/dist-scalprum/static/{7266.e760b8c3.chunk.js → 7266.3c4174cc.chunk.js} +1 -1
  82. package/dist-scalprum/static/{7266.e760b8c3.chunk.js.map → 7266.3c4174cc.chunk.js.map} +1 -1
  83. package/dist-scalprum/static/7270.d52407cd.chunk.js +2 -0
  84. package/dist-scalprum/static/7270.d52407cd.chunk.js.map +1 -0
  85. package/dist-scalprum/static/7717.6f5b9dd7.chunk.js +3 -0
  86. package/dist-scalprum/static/7717.6f5b9dd7.chunk.js.map +1 -0
  87. package/dist-scalprum/static/{7791.8f84478d.chunk.js → 7791.ad31cf6d.chunk.js} +2 -2
  88. package/dist-scalprum/static/{7791.8f84478d.chunk.js.map → 7791.ad31cf6d.chunk.js.map} +1 -1
  89. package/dist-scalprum/static/{8563.46f1a3e1.chunk.js → 8563.6501eafb.chunk.js} +2 -2
  90. package/dist-scalprum/static/{8563.46f1a3e1.chunk.js.map → 8563.6501eafb.chunk.js.map} +1 -1
  91. package/dist-scalprum/static/{9079.b6d5c19c.chunk.js → 9079.2ddaea57.chunk.js} +1 -1
  92. package/dist-scalprum/static/{9079.b6d5c19c.chunk.js.map → 9079.2ddaea57.chunk.js.map} +1 -1
  93. package/dist-scalprum/static/9239.1acfe112.chunk.js +2 -0
  94. package/dist-scalprum/static/9239.1acfe112.chunk.js.map +1 -0
  95. package/dist-scalprum/static/exposed-KuadrantIcon.08abbb96.chunk.js +3 -0
  96. package/dist-scalprum/static/exposed-KuadrantIcon.08abbb96.chunk.js.LICENSE.txt +9 -0
  97. package/dist-scalprum/static/exposed-KuadrantIcon.08abbb96.chunk.js.map +1 -0
  98. package/dist-scalprum/static/exposed-KuadrantPage.5ae00605.chunk.js +2 -0
  99. package/dist-scalprum/static/exposed-KuadrantPage.5ae00605.chunk.js.map +1 -0
  100. package/dist-scalprum/static/exposed-PluginRoot.949381c2.chunk.js +2 -0
  101. package/dist-scalprum/static/exposed-PluginRoot.949381c2.chunk.js.map +1 -0
  102. package/package.json +6 -3
  103. package/dist-scalprum/internal.plugin-kuadrant.b3d35dc8b21ce867aa09.js +0 -2
  104. package/dist-scalprum/internal.plugin-kuadrant.b3d35dc8b21ce867aa09.js.map +0 -1
  105. package/dist-scalprum/static/1319.ac195ac2.chunk.js +0 -2
  106. package/dist-scalprum/static/1319.ac195ac2.chunk.js.map +0 -1
  107. package/dist-scalprum/static/2967.7c6a34cd.chunk.js +0 -2
  108. package/dist-scalprum/static/2967.7c6a34cd.chunk.js.map +0 -1
  109. package/dist-scalprum/static/3118.daee3324.chunk.js +0 -3
  110. package/dist-scalprum/static/3118.daee3324.chunk.js.map +0 -1
  111. package/dist-scalprum/static/483.d55d6ab2.chunk.js +0 -2
  112. package/dist-scalprum/static/483.d55d6ab2.chunk.js.map +0 -1
  113. package/dist-scalprum/static/5203.3df62d7e.chunk.js +0 -2
  114. package/dist-scalprum/static/5203.3df62d7e.chunk.js.map +0 -1
  115. package/dist-scalprum/static/5453.3c20d0a6.chunk.js +0 -2
  116. package/dist-scalprum/static/6371.f183dddb.chunk.js +0 -3
  117. package/dist-scalprum/static/6371.f183dddb.chunk.js.map +0 -1
  118. package/dist-scalprum/static/7005.d548f8f1.chunk.js +0 -2
  119. package/dist-scalprum/static/7005.d548f8f1.chunk.js.map +0 -1
  120. package/dist-scalprum/static/7270.301a3c46.chunk.js +0 -2
  121. package/dist-scalprum/static/7270.301a3c46.chunk.js.map +0 -1
  122. package/dist-scalprum/static/9051.f095a8a1.chunk.js +0 -2
  123. package/dist-scalprum/static/9051.f095a8a1.chunk.js.map +0 -1
  124. package/dist-scalprum/static/9838.589f2156.chunk.js +0 -2
  125. package/dist-scalprum/static/9838.589f2156.chunk.js.map +0 -1
  126. package/dist-scalprum/static/exposed-PluginRoot.a8448fcc.chunk.js +0 -2
  127. package/dist-scalprum/static/exposed-PluginRoot.a8448fcc.chunk.js.map +0 -1
  128. /package/dist-scalprum/static/{1584.ae3779f0.chunk.js.LICENSE.txt → 1584.1e45e570.chunk.js.LICENSE.txt} +0 -0
  129. /package/dist-scalprum/static/{4083.488ff7a9.chunk.js.LICENSE.txt → 4083.811c4e7a.chunk.js.LICENSE.txt} +0 -0
  130. /package/dist-scalprum/static/{5010.6241b64f.chunk.js.LICENSE.txt → 5010.4f67737b.chunk.js.LICENSE.txt} +0 -0
  131. /package/dist-scalprum/static/{6371.f183dddb.chunk.js.LICENSE.txt → 635.f63679a5.chunk.js.LICENSE.txt} +0 -0
  132. /package/dist-scalprum/static/{6386.2d20c412.chunk.js.LICENSE.txt → 6386.5922f271.chunk.js.LICENSE.txt} +0 -0
  133. /package/dist-scalprum/static/{3118.daee3324.chunk.js.LICENSE.txt → 7717.6f5b9dd7.chunk.js.LICENSE.txt} +0 -0
  134. /package/dist-scalprum/static/{8563.46f1a3e1.chunk.js.LICENSE.txt → 8563.6501eafb.chunk.js.LICENSE.txt} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"static/7266.e760b8c3.chunk.js","mappings":"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","sources":["webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/analytics/AnalyticsContext.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/apis/definitions/AnalyticsApi.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/analytics/Tracker.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/analytics/useAnalytics.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/apis/definitions/AppTreeApi.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/apis/definitions/SwappableComponentsApi.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/apis/definitions/IconsApi.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/apis/definitions/DialogApi.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/apis/definitions/RouteResolutionApi.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/wiring/createExtensionDataRef.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/frontend-internal/src/wiring/createExtensionDataContainer.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/wiring/resolveInputOverrides.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/schema/createSchemaFromZod.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/opaque-internal/src/OpaqueType.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/frontend-internal/src/wiring/InternalExtensionDefinition.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/wiring/createExtension.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/wiring/createExtensionBlueprint.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/blueprints/AnalyticsImplementationBlueprint.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/blueprints/ApiBlueprint.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/wiring/coreExtensionData.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/blueprints/AppRootElementBlueprint.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/blueprints/AppRootWrapperBlueprint.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/blueprints/IconBundleBlueprint.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/blueprints/NavContentBlueprint.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/blueprints/NavItemBlueprint.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/frontend-internal/src/wiring/InternalSwappableComponentRef.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/components/createSwappableComponent.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/components/DefaultSwappableComponents.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/components/ErrorBoundary.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/core-plugin-api/src/analytics/Tracker.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/components/AppNodeProvider.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/components/ExtensionBoundary.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/blueprints/PageBlueprint.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/blueprints/RouterBlueprint.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/blueprints/SignInPageBlueprint.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/blueprints/ThemeBlueprint.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/blueprints/TranslationBlueprint.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/blueprints/SwappableComponentBlueprint.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/routing/describeParentCallSite.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/routing/RouteRef.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/routing/SubRouteRef.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/routing/ExternalRouteRef.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/routing/useRouteRef.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/routing/useRouteRefParams.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/wiring/createExtensionInput.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/wiring/resolveExtensionDefinition.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/frontend-internal/src/wiring/InternalFrontendPlugin.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/wiring/createFrontendPlugin.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/wiring/createFrontendModule.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/wiring/createFrontendFeatureLoader.esm.js"],"sourcesContent":["import { jsx } from 'react/jsx-runtime';\nimport { createVersionedContext, createVersionedValueMap } from '@backstage/version-bridge';\nimport { useContext } from 'react';\n\nconst AnalyticsReactContext = createVersionedContext(\"analytics-context\");\nconst useAnalyticsContext = () => {\n const theContext = useContext(AnalyticsReactContext);\n if (theContext === void 0) {\n return {\n pluginId: \"app\",\n extensionId: \"app\"\n };\n }\n const theValue = theContext.atVersion(1);\n if (theValue === void 0) {\n throw new Error(\"No context found for version 1.\");\n }\n return theValue;\n};\nconst AnalyticsContext = (options) => {\n const { attributes, children } = options;\n const parentValues = useAnalyticsContext();\n const combinedValue = {\n ...parentValues,\n ...attributes\n };\n const versionedCombinedValue = createVersionedValueMap({ 1: combinedValue });\n return /* @__PURE__ */ jsx(AnalyticsReactContext.Provider, { value: versionedCombinedValue, children });\n};\n\nexport { AnalyticsContext, useAnalyticsContext };\n//# sourceMappingURL=AnalyticsContext.esm.js.map\n","import { createApiRef } from '@backstage/core-plugin-api';\n\nconst analyticsApiRef = createApiRef({\n id: \"core.analytics\"\n});\n\nexport { analyticsApiRef };\n//# sourceMappingURL=AnalyticsApi.esm.js.map\n","import { getOrCreateGlobalSingleton } from '@backstage/version-bridge';\n\nconst globalEvents = getOrCreateGlobalSingleton(\n \"core-plugin-api:analytics-tracker-events\",\n () => ({\n mostRecentGatheredNavigation: void 0,\n mostRecentRoutableExtensionRender: void 0,\n beforeUnloadRegistered: false\n })\n);\nconst routableExtensionRenderedEvent = \"_ROUTABLE-EXTENSION-RENDERED\";\nclass Tracker {\n constructor(analyticsApi, context = {\n pluginId: \"root\",\n extensionId: \"App\"\n }) {\n this.analyticsApi = analyticsApi;\n this.context = context;\n if (!globalEvents.beforeUnloadRegistered) {\n addEventListener(\n \"beforeunload\",\n () => {\n if (globalEvents.mostRecentGatheredNavigation) {\n this.analyticsApi.captureEvent({\n ...globalEvents.mostRecentGatheredNavigation,\n ...globalEvents.mostRecentRoutableExtensionRender\n });\n globalEvents.mostRecentGatheredNavigation = void 0;\n globalEvents.mostRecentRoutableExtensionRender = void 0;\n }\n },\n { once: true, passive: true }\n );\n globalEvents.beforeUnloadRegistered = true;\n }\n }\n setContext(context) {\n this.context = context;\n }\n captureEvent(action, subject, {\n value,\n attributes\n } = {}) {\n const context = this.context;\n if (action === routableExtensionRenderedEvent) {\n if (globalEvents.mostRecentGatheredNavigation) {\n globalEvents.mostRecentRoutableExtensionRender = {\n context: {\n ...context,\n extensionId: \"App\"\n }\n };\n }\n return;\n }\n if (globalEvents.mostRecentGatheredNavigation) {\n try {\n this.analyticsApi.captureEvent({\n ...globalEvents.mostRecentGatheredNavigation,\n ...globalEvents.mostRecentRoutableExtensionRender\n });\n } catch (e) {\n console.warn(\"Error during analytics event capture. %o\", e);\n }\n globalEvents.mostRecentGatheredNavigation = void 0;\n globalEvents.mostRecentRoutableExtensionRender = void 0;\n }\n if (action === \"navigate\" && context.pluginId === \"root\") {\n globalEvents.mostRecentGatheredNavigation = {\n action,\n subject,\n value,\n attributes,\n context\n };\n return;\n }\n try {\n this.analyticsApi.captureEvent({\n action,\n subject,\n value,\n attributes,\n context\n });\n } catch (e) {\n console.warn(\"Error during analytics event capture. %o\", e);\n }\n }\n}\n\nexport { Tracker, routableExtensionRenderedEvent };\n//# sourceMappingURL=Tracker.esm.js.map\n","import { useApi } from '@backstage/core-plugin-api';\nimport { useAnalyticsContext } from './AnalyticsContext.esm.js';\nimport '../apis/definitions/AppTreeApi.esm.js';\nimport '../apis/definitions/SwappableComponentsApi.esm.js';\nimport '../apis/definitions/IconsApi.esm.js';\nimport '../apis/definitions/DialogApi.esm.js';\nimport '../apis/definitions/RouteResolutionApi.esm.js';\nimport { analyticsApiRef } from '../apis/definitions/AnalyticsApi.esm.js';\nimport { useRef } from 'react';\nimport { Tracker } from './Tracker.esm.js';\n\nfunction useAnalyticsApi() {\n try {\n return useApi(analyticsApiRef);\n } catch (error) {\n if (error.name === \"NotImplementedError\") {\n return { captureEvent: () => {\n } };\n }\n throw error;\n }\n}\nfunction useAnalytics() {\n const trackerRef = useRef(null);\n const context = useAnalyticsContext();\n const analyticsApi = useAnalyticsApi();\n function getTracker() {\n if (trackerRef.current === null) {\n trackerRef.current = new Tracker(analyticsApi);\n }\n return trackerRef.current;\n }\n const tracker = getTracker();\n tracker.setContext(context);\n return tracker;\n}\n\nexport { useAnalytics };\n//# sourceMappingURL=useAnalytics.esm.js.map\n","import { createApiRef } from '@backstage/core-plugin-api';\n\nconst appTreeApiRef = createApiRef({ id: \"core.app-tree\" });\n\nexport { appTreeApiRef };\n//# sourceMappingURL=AppTreeApi.esm.js.map\n","import { createApiRef } from '@backstage/core-plugin-api';\n\nconst swappableComponentsApiRef = createApiRef({\n id: \"core.swappable-components\"\n});\n\nexport { swappableComponentsApiRef };\n//# sourceMappingURL=SwappableComponentsApi.esm.js.map\n","import { createApiRef } from '@backstage/core-plugin-api';\n\nconst iconsApiRef = createApiRef({\n id: \"core.icons\"\n});\n\nexport { iconsApiRef };\n//# sourceMappingURL=IconsApi.esm.js.map\n","import { createApiRef } from '@backstage/core-plugin-api';\n\nconst dialogApiRef = createApiRef({\n id: \"core.dialog\"\n});\n\nexport { dialogApiRef };\n//# sourceMappingURL=DialogApi.esm.js.map\n","import { createApiRef } from '@backstage/core-plugin-api';\n\nconst routeResolutionApiRef = createApiRef({\n id: \"core.route-resolution\"\n});\n\nexport { routeResolutionApiRef };\n//# sourceMappingURL=RouteResolutionApi.esm.js.map\n","function createExtensionDataRef() {\n const createRef = (refId) => Object.assign(\n (value) => ({\n $$type: \"@backstage/ExtensionDataValue\",\n id: refId,\n value\n }),\n {\n id: refId,\n $$type: \"@backstage/ExtensionDataRef\",\n config: {},\n optional() {\n return {\n ...this,\n config: { ...this.config, optional: true }\n };\n },\n toString() {\n const optional = Boolean(this.config.optional);\n return `ExtensionDataRef{id=${refId},optional=${optional}}`;\n }\n }\n );\n return {\n with(options) {\n return createRef(options.id);\n }\n };\n}\n\nexport { createExtensionDataRef };\n//# sourceMappingURL=createExtensionDataRef.esm.js.map\n","function createExtensionDataContainer(values, contextName, declaredRefs) {\n if (typeof values !== \"object\" || !values?.[Symbol.iterator]) {\n throw new Error(`${contextName} did not provide an iterable object`);\n }\n const container = /* @__PURE__ */ new Map();\n const verifyRefs = declaredRefs && new Map(declaredRefs.map((ref) => [ref.id, ref]));\n for (const output of values) {\n if (verifyRefs) {\n if (!verifyRefs.delete(output.id)) {\n throw new Error(\n `extension data '${output.id}' was provided but not declared`\n );\n }\n }\n container.set(output.id, output);\n }\n const remainingRefs = verifyRefs && Array.from(verifyRefs.values()).filter((ref) => !ref.config.optional);\n if (remainingRefs && remainingRefs.length > 0) {\n throw new Error(\n `missing required extension data value(s) '${remainingRefs.map((ref) => ref.id).join(\", \")}'`\n );\n }\n return {\n get(ref) {\n return container.get(ref.id)?.value;\n },\n [Symbol.iterator]() {\n return container.values();\n }\n };\n}\n\nexport { createExtensionDataContainer };\n//# sourceMappingURL=createExtensionDataContainer.esm.js.map\n","import { createExtensionDataContainer } from '../frontend-internal/src/wiring/createExtensionDataContainer.esm.js';\nimport '../frontend-internal/src/wiring/InternalSwappableComponentRef.esm.js';\nimport '../frontend-internal/src/wiring/InternalExtensionDefinition.esm.js';\nimport '../frontend-internal/src/wiring/InternalFrontendPlugin.esm.js';\n\nfunction expectArray(value) {\n return value;\n}\nfunction expectItem(value) {\n return value;\n}\nfunction resolveInputOverrides(declaredInputs, inputs, inputOverrides) {\n if (!declaredInputs || !inputs || !inputOverrides) {\n return inputs;\n }\n const newInputs = {};\n for (const name in declaredInputs) {\n if (!Object.hasOwn(declaredInputs, name)) {\n continue;\n }\n const declaredInput = declaredInputs[name];\n const providedData = inputOverrides[name];\n if (declaredInput.config.singleton) {\n const originalInput = expectItem(inputs[name]);\n if (providedData) {\n const providedContainer = createExtensionDataContainer(\n providedData,\n \"extension input override\",\n declaredInput.extensionData\n );\n if (!originalInput) {\n throw new Error(\n `attempted to override data of input '${name}' but it is not present in the original inputs`\n );\n }\n newInputs[name] = Object.assign(providedContainer, {\n node: originalInput.node\n });\n }\n } else {\n const originalInput = expectArray(inputs[name]);\n if (!Array.isArray(providedData)) {\n throw new Error(\n `override data provided for input '${name}' must be an array`\n );\n }\n if (providedData.length === 0) {\n newInputs[name] = [];\n } else {\n const withNodesCount = providedData.filter((d) => \"node\" in d).length;\n if (withNodesCount === 0) {\n if (originalInput.length !== providedData.length) {\n throw new Error(\n `override data provided for input '${name}' must match the length of the original inputs`\n );\n }\n newInputs[name] = providedData.map((data, i) => {\n const providedContainer = createExtensionDataContainer(\n data,\n \"extension input override\",\n declaredInput.extensionData\n );\n return Object.assign(providedContainer, {\n node: originalInput[i].node\n });\n });\n } else if (withNodesCount === providedData.length) {\n newInputs[name] = providedData;\n } else {\n throw new Error(\n `override data for input '${name}' may not mix forwarded inputs with data overrides`\n );\n }\n }\n }\n }\n return newInputs;\n}\n\nexport { resolveInputOverrides };\n//# sourceMappingURL=resolveInputOverrides.esm.js.map\n","import { z } from 'zod';\nimport zodToJsonSchema from 'zod-to-json-schema';\n\nfunction createSchemaFromZod(schemaCreator) {\n const schema = schemaCreator(z);\n return {\n // TODO: Types allow z.array etc here but it will break stuff\n parse: (input) => {\n const result = schema.safeParse(input);\n if (result.success) {\n return result.data;\n }\n throw new Error(result.error.issues.map(formatIssue).join(\"; \"));\n },\n // TODO: Verify why we are not compatible with the latest zodToJsonSchema.\n schema: zodToJsonSchema(schema)\n };\n}\nfunction formatIssue(issue) {\n if (issue.code === \"invalid_union\") {\n return formatIssue(issue.unionErrors[0].issues[0]);\n }\n let message = issue.message;\n if (message === \"Required\") {\n message = `Missing required value`;\n }\n if (issue.path.length) {\n message += ` at '${issue.path.join(\".\")}'`;\n }\n return message;\n}\n\nexport { createSchemaFromZod };\n//# sourceMappingURL=createSchemaFromZod.esm.js.map\n","class OpaqueType {\n /**\n * Creates a new opaque type.\n *\n * @param options.type The type identifier of the opaque type\n * @param options.versions The available versions of the opaque type\n * @returns A new opaque type helper\n */\n static create(options) {\n return new OpaqueType(options.type, new Set(options.versions));\n }\n #type;\n #versions;\n constructor(type, versions) {\n this.#type = type;\n this.#versions = versions;\n }\n /**\n * The internal version of the opaque type, used like this: `typeof MyOpaqueType.TPublic`\n *\n * @remarks\n *\n * This property is only useful for type checking, its runtime value is `undefined`.\n */\n TPublic = void 0;\n /**\n * The internal version of the opaque type, used like this: `typeof MyOpaqueType.TInternal`\n *\n * @remarks\n *\n * This property is only useful for type checking, its runtime value is `undefined`.\n */\n TInternal = void 0;\n /**\n * @param value Input value expected to be an instance of this opaque type\n * @returns True if the value matches this opaque type\n */\n isType = (value) => {\n return this.#isThisInternalType(value);\n };\n /**\n * @param value Input value expected to be an instance of this opaque type\n * @throws If the value is not an instance of this opaque type or is of an unsupported version\n * @returns The internal version of the opaque type\n */\n toInternal = (value) => {\n if (!this.#isThisInternalType(value)) {\n throw new TypeError(\n `Invalid opaque type, expected '${this.#type}', but got '${this.#stringifyUnknown(value)}'`\n );\n }\n if (!this.#versions.has(value.version)) {\n const versions = Array.from(this.#versions).map(this.#stringifyVersion);\n if (versions.length > 1) {\n versions[versions.length - 1] = `or ${versions[versions.length - 1]}`;\n }\n const expected = versions.length > 2 ? versions.join(\", \") : versions.join(\" \");\n throw new TypeError(\n `Invalid opaque type instance, got version ${this.#stringifyVersion(\n value.version\n )}, expected ${expected}`\n );\n }\n return value;\n };\n /**\n * Creates an instance of the opaque type, returning the public type.\n *\n * @param version The version of the instance to create\n * @param value The remaining public and internal properties of the instance\n * @returns An instance of the opaque type\n */\n createInstance(version, props) {\n return Object.assign(props, {\n $$type: this.#type,\n ...version && { version }\n });\n }\n #isThisInternalType(value) {\n if (value === null || typeof value !== \"object\") {\n return false;\n }\n return value.$$type === this.#type;\n }\n #stringifyUnknown(value) {\n if (typeof value !== \"object\") {\n return `<${typeof value}>`;\n }\n if (value === null) {\n return \"<null>\";\n }\n if (\"$$type\" in value) {\n return String(value.$$type);\n }\n return String(value);\n }\n #stringifyVersion = (version) => {\n return version ? `'${version}'` : \"undefined\";\n };\n}\n\nexport { OpaqueType };\n//# sourceMappingURL=OpaqueType.esm.js.map\n","import { OpaqueType } from '../../../opaque-internal/src/OpaqueType.esm.js';\n\nconst OpaqueExtensionDefinition = OpaqueType.create({\n type: \"@backstage/ExtensionDefinition\",\n versions: [\"v1\", \"v2\"]\n});\n\nexport { OpaqueExtensionDefinition };\n//# sourceMappingURL=InternalExtensionDefinition.esm.js.map\n","import { resolveInputOverrides } from './resolveInputOverrides.esm.js';\nimport { createSchemaFromZod } from '../schema/createSchemaFromZod.esm.js';\nimport { OpaqueExtensionDefinition } from '../frontend-internal/src/wiring/InternalExtensionDefinition.esm.js';\nimport { createExtensionDataContainer } from '../frontend-internal/src/wiring/createExtensionDataContainer.esm.js';\nimport '../frontend-internal/src/wiring/InternalSwappableComponentRef.esm.js';\nimport '../frontend-internal/src/wiring/InternalFrontendPlugin.esm.js';\n\nconst ctxParamsSymbol = Symbol(\"params\");\nfunction createExtension(options) {\n const schemaDeclaration = options.config?.schema;\n const configSchema = schemaDeclaration && createSchemaFromZod(\n (innerZ) => innerZ.object(\n Object.fromEntries(\n Object.entries(schemaDeclaration).map(([k, v]) => [k, v(innerZ)])\n )\n )\n );\n return OpaqueExtensionDefinition.createInstance(\"v2\", {\n T: void 0,\n kind: options.kind,\n name: options.name,\n attachTo: options.attachTo,\n disabled: options.disabled ?? false,\n inputs: options.inputs ?? {},\n output: options.output,\n configSchema,\n factory: options.factory,\n toString() {\n const parts = [];\n if (options.kind) {\n parts.push(`kind=${options.kind}`);\n }\n if (options.name) {\n parts.push(`name=${options.name}`);\n }\n parts.push(\n `attachTo=${[options.attachTo].flat().map((a) => `${a.id}@${a.input}`).join(\"+\")}`\n );\n return `ExtensionDefinition{${parts.join(\",\")}}`;\n },\n override(overrideOptions) {\n if (!Array.isArray(options.output)) {\n throw new Error(\n \"Cannot override an extension that is not declared using the new format with outputs as an array\"\n );\n }\n if (overrideOptions.output && !overrideOptions.factory) {\n throw new Error(\n \"Refused to override output without also overriding factory\"\n );\n }\n if (overrideOptions.params && overrideOptions.factory) {\n throw new Error(\n \"Refused to override params and factory at the same time\"\n );\n }\n return createExtension({\n kind: options.kind,\n name: options.name,\n attachTo: overrideOptions.attachTo ?? options.attachTo,\n disabled: overrideOptions.disabled ?? options.disabled,\n inputs: { ...overrideOptions.inputs, ...options.inputs },\n output: overrideOptions.output ?? options.output,\n config: options.config || overrideOptions.config ? {\n schema: {\n ...options.config?.schema,\n ...overrideOptions.config?.schema\n }\n } : void 0,\n factory: ({ node, apis, config, inputs }) => {\n if (!overrideOptions.factory) {\n return options.factory({\n node,\n apis,\n config,\n inputs,\n [ctxParamsSymbol]: overrideOptions.params\n });\n }\n const parentResult = overrideOptions.factory(\n (innerContext) => {\n return createExtensionDataContainer(\n options.factory({\n node,\n apis,\n config: innerContext?.config ?? config,\n inputs: resolveInputOverrides(\n options.inputs,\n inputs,\n innerContext?.inputs\n ),\n [ctxParamsSymbol]: innerContext?.params\n }),\n \"original extension factory\",\n options.output\n );\n },\n {\n node,\n apis,\n config,\n inputs\n }\n );\n if (typeof parentResult !== \"object\" || !parentResult?.[Symbol.iterator]) {\n throw new Error(\n \"extension factory override did not provide an iterable object\"\n );\n }\n const deduplicatedResult = /* @__PURE__ */ new Map();\n for (const item of parentResult) {\n deduplicatedResult.set(item.id, item);\n }\n return deduplicatedResult.values();\n }\n });\n }\n });\n}\n\nexport { createExtension, ctxParamsSymbol };\n//# sourceMappingURL=createExtension.esm.js.map\n","import { createExtension, ctxParamsSymbol } from './createExtension.esm.js';\nimport { resolveInputOverrides } from './resolveInputOverrides.esm.js';\nimport { OpaqueType } from '../opaque-internal/src/OpaqueType.esm.js';\nimport { createExtensionDataContainer } from '../frontend-internal/src/wiring/createExtensionDataContainer.esm.js';\n\nconst OpaqueBlueprintParams = OpaqueType.create({\n type: \"@backstage/BlueprintParams\",\n versions: [\"v1\"]\n});\nfunction createExtensionBlueprintParams(params) {\n return OpaqueBlueprintParams.createInstance(\"v1\", { T: null, params });\n}\nfunction unwrapParamsFactory(params, defineParams, kind) {\n const paramDefinition = params(defineParams);\n try {\n return OpaqueBlueprintParams.toInternal(paramDefinition).params;\n } catch (e) {\n throw new TypeError(\n `Invalid invocation of blueprint with kind '${kind}', the parameter definition callback function did not return a valid parameter definition object; Caused by: ${e.message}`\n );\n }\n}\nfunction unwrapParams(params, ctx, defineParams, kind) {\n const overrideParams = ctx[ctxParamsSymbol];\n if (defineParams) {\n if (overrideParams) {\n if (typeof overrideParams !== \"function\") {\n throw new TypeError(\n `Invalid extension override of blueprint with kind '${kind}', the override params were passed as a plain object, but this blueprint requires them to be passed in callback form`\n );\n }\n return unwrapParamsFactory(overrideParams, defineParams, kind);\n }\n if (typeof params !== \"function\") {\n throw new TypeError(\n `Invalid invocation of blueprint with kind '${kind}', the parameters where passed as a plain object, but this blueprint requires them to be passed in callback form`\n );\n }\n return unwrapParamsFactory(params, defineParams, kind);\n }\n const base = typeof params === \"function\" ? unwrapParamsFactory(\n params,\n createExtensionBlueprintParams,\n kind\n ) : params;\n const overrides = typeof overrideParams === \"function\" ? unwrapParamsFactory(\n overrideParams,\n createExtensionBlueprintParams,\n kind\n ) : overrideParams;\n return {\n ...base,\n ...overrides\n };\n}\nfunction createExtensionBlueprint(options) {\n const defineParams = options.defineParams;\n return {\n dataRefs: options.dataRefs,\n make(args) {\n return createExtension({\n kind: options.kind,\n name: args.name,\n attachTo: args.attachTo ?? options.attachTo,\n disabled: args.disabled ?? options.disabled,\n inputs: options.inputs,\n output: options.output,\n config: options.config,\n factory: (ctx) => options.factory(\n unwrapParams(args.params, ctx, defineParams, options.kind),\n ctx\n )\n });\n },\n makeWithOverrides(args) {\n return createExtension({\n kind: options.kind,\n name: args.name,\n attachTo: args.attachTo ?? options.attachTo,\n disabled: args.disabled ?? options.disabled,\n inputs: { ...args.inputs, ...options.inputs },\n output: args.output ?? options.output,\n config: options.config || args.config ? {\n schema: {\n ...options.config?.schema,\n ...args.config?.schema\n }\n } : void 0,\n factory: (ctx) => {\n const { node, config, inputs, apis } = ctx;\n return args.factory(\n (innerParams, innerContext) => {\n return createExtensionDataContainer(\n options.factory(\n unwrapParams(innerParams, ctx, defineParams, options.kind),\n {\n apis,\n node,\n config: innerContext?.config ?? config,\n inputs: resolveInputOverrides(\n options.inputs,\n inputs,\n innerContext?.inputs\n )\n }\n ),\n \"original blueprint factory\",\n options.output\n );\n },\n {\n apis,\n node,\n config,\n inputs\n }\n );\n }\n });\n }\n };\n}\n\nexport { createExtensionBlueprint, createExtensionBlueprintParams };\n//# sourceMappingURL=createExtensionBlueprint.esm.js.map\n","import '../wiring/coreExtensionData.esm.js';\nimport 'zod';\nimport 'zod-to-json-schema';\nimport { createExtensionDataRef } from '../wiring/createExtensionDataRef.esm.js';\nimport { createExtensionBlueprint, createExtensionBlueprintParams } from '../wiring/createExtensionBlueprint.esm.js';\n\nconst factoryDataRef = createExtensionDataRef().with({\n id: \"core.analytics.factory\"\n});\nconst AnalyticsImplementationBlueprint = createExtensionBlueprint({\n kind: \"analytics\",\n attachTo: [{ id: \"api:app/analytics\", input: \"implementations\" }],\n output: [factoryDataRef],\n dataRefs: {\n factory: factoryDataRef\n },\n defineParams: (params) => createExtensionBlueprintParams(params),\n *factory(params) {\n yield factoryDataRef(params);\n }\n});\n\nexport { AnalyticsImplementationBlueprint };\n//# sourceMappingURL=AnalyticsImplementationBlueprint.esm.js.map\n","import '../wiring/coreExtensionData.esm.js';\nimport 'zod';\nimport 'zod-to-json-schema';\nimport { createExtensionDataRef } from '../wiring/createExtensionDataRef.esm.js';\nimport { createExtensionBlueprint, createExtensionBlueprintParams } from '../wiring/createExtensionBlueprint.esm.js';\n\nconst factoryDataRef = createExtensionDataRef().with({\n id: \"core.api.factory\"\n});\nconst ApiBlueprint = createExtensionBlueprint({\n kind: \"api\",\n attachTo: { id: \"root\", input: \"apis\" },\n output: [factoryDataRef],\n dataRefs: {\n factory: factoryDataRef\n },\n defineParams: (params) => createExtensionBlueprintParams(params),\n *factory(params) {\n yield factoryDataRef(params);\n }\n});\n\nexport { ApiBlueprint };\n//# sourceMappingURL=ApiBlueprint.esm.js.map\n","import { createExtensionDataRef } from './createExtensionDataRef.esm.js';\n\nconst coreExtensionData = {\n reactElement: createExtensionDataRef().with({\n id: \"core.reactElement\"\n }),\n routePath: createExtensionDataRef().with({ id: \"core.routing.path\" }),\n routeRef: createExtensionDataRef().with({ id: \"core.routing.ref\" })\n};\n\nexport { coreExtensionData };\n//# sourceMappingURL=coreExtensionData.esm.js.map\n","import { coreExtensionData } from '../wiring/coreExtensionData.esm.js';\nimport 'zod';\nimport 'zod-to-json-schema';\nimport { createExtensionBlueprint } from '../wiring/createExtensionBlueprint.esm.js';\n\nconst AppRootElementBlueprint = createExtensionBlueprint({\n kind: \"app-root-element\",\n attachTo: { id: \"app/root\", input: \"elements\" },\n output: [coreExtensionData.reactElement],\n *factory(params) {\n yield coreExtensionData.reactElement(params.element);\n }\n});\n\nexport { AppRootElementBlueprint };\n//# sourceMappingURL=AppRootElementBlueprint.esm.js.map\n","import '../wiring/coreExtensionData.esm.js';\nimport 'zod';\nimport 'zod-to-json-schema';\nimport { createExtensionDataRef } from '../wiring/createExtensionDataRef.esm.js';\nimport { createExtensionBlueprint } from '../wiring/createExtensionBlueprint.esm.js';\n\nconst componentDataRef = createExtensionDataRef().with({ id: \"app.root.wrapper\" });\nconst AppRootWrapperBlueprint = createExtensionBlueprint({\n kind: \"app-root-wrapper\",\n attachTo: { id: \"app/root\", input: \"wrappers\" },\n output: [componentDataRef],\n dataRefs: {\n component: componentDataRef\n },\n *factory(params) {\n yield componentDataRef(params.component);\n }\n});\n\nexport { AppRootWrapperBlueprint };\n//# sourceMappingURL=AppRootWrapperBlueprint.esm.js.map\n","import '../wiring/coreExtensionData.esm.js';\nimport 'zod';\nimport 'zod-to-json-schema';\nimport { createExtensionDataRef } from '../wiring/createExtensionDataRef.esm.js';\nimport { createExtensionBlueprint } from '../wiring/createExtensionBlueprint.esm.js';\n\nconst iconsDataRef = createExtensionDataRef().with({ id: \"core.icons\" });\nconst IconBundleBlueprint = createExtensionBlueprint({\n kind: \"icon-bundle\",\n attachTo: { id: \"api:app/icons\", input: \"icons\" },\n output: [iconsDataRef],\n factory: (params) => [\n iconsDataRef(params.icons)\n ],\n dataRefs: {\n icons: iconsDataRef\n }\n});\n\nexport { IconBundleBlueprint };\n//# sourceMappingURL=IconBundleBlueprint.esm.js.map\n","import '../wiring/coreExtensionData.esm.js';\nimport 'zod';\nimport 'zod-to-json-schema';\nimport { createExtensionDataRef } from '../wiring/createExtensionDataRef.esm.js';\nimport { createExtensionBlueprint } from '../wiring/createExtensionBlueprint.esm.js';\n\nconst componentDataRef = createExtensionDataRef().with({\n id: \"core.nav-content.component\"\n});\nconst NavContentBlueprint = createExtensionBlueprint({\n kind: \"nav-content\",\n attachTo: { id: \"app/nav\", input: \"content\" },\n output: [componentDataRef],\n dataRefs: {\n component: componentDataRef\n },\n *factory(params) {\n yield componentDataRef(params.component);\n }\n});\n\nexport { NavContentBlueprint };\n//# sourceMappingURL=NavContentBlueprint.esm.js.map\n","import '../wiring/coreExtensionData.esm.js';\nimport 'zod';\nimport 'zod-to-json-schema';\nimport { createExtensionDataRef } from '../wiring/createExtensionDataRef.esm.js';\nimport { createExtensionBlueprint } from '../wiring/createExtensionBlueprint.esm.js';\n\nconst targetDataRef = createExtensionDataRef().with({ id: \"core.nav-item.target\" });\nconst NavItemBlueprint = createExtensionBlueprint({\n kind: \"nav-item\",\n attachTo: { id: \"app/nav\", input: \"items\" },\n output: [targetDataRef],\n dataRefs: {\n target: targetDataRef\n },\n factory: ({\n icon,\n routeRef,\n title\n }, { config }) => [\n targetDataRef({\n title: config.title ?? title,\n icon,\n routeRef\n })\n ],\n config: {\n schema: {\n title: (z) => z.string().optional()\n }\n }\n});\n\nexport { NavItemBlueprint };\n//# sourceMappingURL=NavItemBlueprint.esm.js.map\n","import { OpaqueType } from '../../../opaque-internal/src/OpaqueType.esm.js';\n\nconst OpaqueSwappableComponentRef = OpaqueType.create({\n versions: [\"v1\"],\n type: \"@backstage/SwappableComponentRef\"\n});\n\nexport { OpaqueSwappableComponentRef };\n//# sourceMappingURL=InternalSwappableComponentRef.esm.js.map\n","import { jsx } from 'react/jsx-runtime';\nimport '../apis/definitions/AppTreeApi.esm.js';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { swappableComponentsApiRef } from '../apis/definitions/SwappableComponentsApi.esm.js';\nimport '../apis/definitions/IconsApi.esm.js';\nimport '../apis/definitions/DialogApi.esm.js';\nimport '../apis/definitions/RouteResolutionApi.esm.js';\nimport '../apis/definitions/AnalyticsApi.esm.js';\nimport { lazy } from 'react';\nimport { OpaqueSwappableComponentRef } from '../frontend-internal/src/wiring/InternalSwappableComponentRef.esm.js';\nimport '../frontend-internal/src/wiring/InternalExtensionDefinition.esm.js';\nimport '../frontend-internal/src/wiring/InternalFrontendPlugin.esm.js';\n\nconst useComponentRefApi = () => {\n try {\n return useApi(swappableComponentsApiRef);\n } catch (e) {\n return void 0;\n }\n};\nfunction createSwappableComponent(options) {\n const FallbackComponent = (p) => /* @__PURE__ */ jsx(\"div\", { \"data-testid\": options.id, ...p });\n const ref = OpaqueSwappableComponentRef.createInstance(\"v1\", {\n id: options.id,\n TProps: null,\n TExternalProps: null,\n toString() {\n return `SwappableComponentRef{id=${options.id}}`;\n },\n defaultComponent: lazy(async () => {\n const Component = await options.loader?.() ?? FallbackComponent;\n return { default: Component };\n }),\n transformProps: options.transformProps\n });\n const ComponentRefImpl = (props) => {\n const api = useComponentRefApi();\n if (!api) {\n const internalRef = OpaqueSwappableComponentRef.toInternal(ref);\n const Component2 = internalRef.defaultComponent;\n const innerProps = internalRef.transformProps?.(props) ?? props;\n return /* @__PURE__ */ jsx(Component2, { ...innerProps });\n }\n const Component = api.getComponent(ref);\n return /* @__PURE__ */ jsx(Component, { ...props });\n };\n Object.assign(ComponentRefImpl, { ref });\n return ComponentRefImpl;\n}\n\nexport { createSwappableComponent };\n//# sourceMappingURL=createSwappableComponent.esm.js.map\n","import { jsx } from 'react/jsx-runtime';\nimport { createSwappableComponent } from './createSwappableComponent.esm.js';\n\nconst Progress = createSwappableComponent({\n id: \"core-progress\"\n});\nconst NotFoundErrorPage = createSwappableComponent({\n id: \"core-not-found-error-page\"\n});\nconst ErrorDisplay = createSwappableComponent({\n id: \"core-error-display\",\n loader: () => (props) => /* @__PURE__ */ jsx(\"div\", { \"data-testid\": \"core-error-display\", children: props.error.message })\n});\n\nexport { ErrorDisplay, NotFoundErrorPage, Progress };\n//# sourceMappingURL=DefaultSwappableComponents.esm.js.map\n","import { jsx } from 'react/jsx-runtime';\nimport { Component } from 'react';\nimport { ErrorDisplay } from './DefaultSwappableComponents.esm.js';\n\nclass ErrorBoundary extends Component {\n static getDerivedStateFromError(error) {\n return { error };\n }\n state = { error: void 0 };\n handleErrorReset = () => {\n this.setState({ error: void 0 });\n };\n render() {\n const { error } = this.state;\n const { plugin, children } = this.props;\n if (error) {\n return /* @__PURE__ */ jsx(\n ErrorDisplay,\n {\n plugin,\n error,\n resetError: this.handleErrorReset\n }\n );\n }\n return children;\n }\n}\n\nexport { ErrorBoundary };\n//# sourceMappingURL=ErrorBoundary.esm.js.map\n","import { getOrCreateGlobalSingleton } from '@backstage/version-bridge';\n\ngetOrCreateGlobalSingleton(\n \"core-plugin-api:analytics-tracker-events\",\n () => ({\n mostRecentGatheredNavigation: void 0,\n mostRecentRoutableExtensionRender: void 0,\n beforeUnloadRegistered: false\n })\n);\nconst routableExtensionRenderedEvent = \"_ROUTABLE-EXTENSION-RENDERED\";\n\nexport { routableExtensionRenderedEvent };\n//# sourceMappingURL=Tracker.esm.js.map\n","import { jsx } from 'react/jsx-runtime';\nimport { createVersionedContext, createVersionedValueMap, useVersionedContext } from '@backstage/version-bridge';\n\nconst CONTEXT_KEY = \"app-node-context\";\nconst AppNodeContext = createVersionedContext(CONTEXT_KEY);\nfunction AppNodeProvider({\n node,\n children\n}) {\n const versionedValue = createVersionedValueMap({ 1: { node } });\n return /* @__PURE__ */ jsx(AppNodeContext.Provider, { value: versionedValue, children });\n}\nfunction useAppNode() {\n const versionedContext = useVersionedContext(CONTEXT_KEY);\n if (!versionedContext) {\n return void 0;\n }\n const context = versionedContext.atVersion(1);\n if (!context) {\n throw new Error(\"AppNodeContext v1 not available\");\n }\n return context.node;\n}\n\nexport { AppNodeProvider, useAppNode };\n//# sourceMappingURL=AppNodeProvider.esm.js.map\n","import { jsx, Fragment } from 'react/jsx-runtime';\nimport { lazy, Suspense, useEffect } from 'react';\nimport { AnalyticsContext, useAnalytics } from '@backstage/core-plugin-api';\nimport { ErrorBoundary } from './ErrorBoundary.esm.js';\nimport { routableExtensionRenderedEvent } from '../core-plugin-api/src/analytics/Tracker.esm.js';\nimport { coreExtensionData } from '../wiring/coreExtensionData.esm.js';\nimport 'zod';\nimport 'zod-to-json-schema';\nimport '../wiring/createExtensionBlueprint.esm.js';\nimport { AppNodeProvider } from './AppNodeProvider.esm.js';\nimport { Progress } from './DefaultSwappableComponents.esm.js';\n\nconst RouteTracker = (props) => {\n const { enabled, children } = props;\n const analytics = useAnalytics();\n useEffect(() => {\n if (enabled) {\n analytics.captureEvent(routableExtensionRenderedEvent, \"\");\n }\n }, [analytics, enabled]);\n return /* @__PURE__ */ jsx(Fragment, { children });\n};\nfunction ExtensionBoundary(props) {\n const { node, children } = props;\n const hasRoutePathOutput = Boolean(\n node.instance?.getData(coreExtensionData.routePath)\n );\n const plugin = node.spec.plugin;\n const attributes = {\n extensionId: node.spec.id,\n pluginId: node.spec.plugin?.id ?? \"app\"\n };\n return /* @__PURE__ */ jsx(AppNodeProvider, { node, children: /* @__PURE__ */ jsx(Suspense, { fallback: /* @__PURE__ */ jsx(Progress, {}), children: /* @__PURE__ */ jsx(ErrorBoundary, { plugin, children: /* @__PURE__ */ jsx(AnalyticsContext, { attributes, children: /* @__PURE__ */ jsx(RouteTracker, { enabled: hasRoutePathOutput, children }) }) }) }) });\n}\n((ExtensionBoundary2) => {\n function lazy$1(appNode, loader) {\n const ExtensionComponent = lazy(\n () => loader().then((element) => ({ default: () => element }))\n );\n return /* @__PURE__ */ jsx(ExtensionBoundary2, { node: appNode, children: /* @__PURE__ */ jsx(ExtensionComponent, {}) });\n }\n ExtensionBoundary2.lazy = lazy$1;\n function lazyComponent(appNode, loader) {\n const ExtensionComponent = lazy(\n () => loader().then((Component) => ({ default: Component }))\n );\n return (props) => /* @__PURE__ */ jsx(ExtensionBoundary2, { node: appNode, children: /* @__PURE__ */ jsx(ExtensionComponent, { ...props }) });\n }\n ExtensionBoundary2.lazyComponent = lazyComponent;\n})(ExtensionBoundary || (ExtensionBoundary = {}));\n\nexport { ExtensionBoundary };\n//# sourceMappingURL=ExtensionBoundary.esm.js.map\n","import { coreExtensionData } from '../wiring/coreExtensionData.esm.js';\nimport 'zod';\nimport 'zod-to-json-schema';\nimport { createExtensionBlueprint } from '../wiring/createExtensionBlueprint.esm.js';\nimport { ExtensionBoundary } from '../components/ExtensionBoundary.esm.js';\nimport 'react/jsx-runtime';\nimport '../apis/definitions/AppTreeApi.esm.js';\nimport '@backstage/core-plugin-api';\nimport '../apis/definitions/SwappableComponentsApi.esm.js';\nimport '../apis/definitions/IconsApi.esm.js';\nimport '../apis/definitions/DialogApi.esm.js';\nimport '../apis/definitions/RouteResolutionApi.esm.js';\nimport '../apis/definitions/AnalyticsApi.esm.js';\nimport 'react';\nimport '../components/AppNodeProvider.esm.js';\nimport '../components/DefaultSwappableComponents.esm.js';\n\nconst PageBlueprint = createExtensionBlueprint({\n kind: \"page\",\n attachTo: { id: \"app/routes\", input: \"routes\" },\n output: [\n coreExtensionData.routePath,\n coreExtensionData.reactElement,\n coreExtensionData.routeRef.optional()\n ],\n config: {\n schema: {\n path: (z) => z.string().optional()\n }\n },\n *factory(params, { config, node }) {\n yield coreExtensionData.routePath(config.path ?? params.path);\n yield coreExtensionData.reactElement(\n ExtensionBoundary.lazy(node, params.loader)\n );\n if (params.routeRef) {\n yield coreExtensionData.routeRef(params.routeRef);\n }\n }\n});\n\nexport { PageBlueprint };\n//# sourceMappingURL=PageBlueprint.esm.js.map\n","import '../wiring/coreExtensionData.esm.js';\nimport 'zod';\nimport 'zod-to-json-schema';\nimport { createExtensionDataRef } from '../wiring/createExtensionDataRef.esm.js';\nimport { createExtensionBlueprint } from '../wiring/createExtensionBlueprint.esm.js';\n\nconst componentDataRef = createExtensionDataRef().with({ id: \"app.router.wrapper\" });\nconst RouterBlueprint = createExtensionBlueprint({\n kind: \"app-router-component\",\n attachTo: { id: \"app/root\", input: \"router\" },\n output: [componentDataRef],\n dataRefs: {\n component: componentDataRef\n },\n *factory(params) {\n yield componentDataRef(params.component);\n }\n});\n\nexport { RouterBlueprint };\n//# sourceMappingURL=RouterBlueprint.esm.js.map\n","import { jsx } from 'react/jsx-runtime';\nimport { lazy } from 'react';\nimport '../wiring/coreExtensionData.esm.js';\nimport 'zod';\nimport 'zod-to-json-schema';\nimport { createExtensionDataRef } from '../wiring/createExtensionDataRef.esm.js';\nimport { createExtensionBlueprint } from '../wiring/createExtensionBlueprint.esm.js';\nimport { ExtensionBoundary } from '../components/ExtensionBoundary.esm.js';\nimport '../apis/definitions/AppTreeApi.esm.js';\nimport '@backstage/core-plugin-api';\nimport '../apis/definitions/SwappableComponentsApi.esm.js';\nimport '../apis/definitions/IconsApi.esm.js';\nimport '../apis/definitions/DialogApi.esm.js';\nimport '../apis/definitions/RouteResolutionApi.esm.js';\nimport '../apis/definitions/AnalyticsApi.esm.js';\nimport '../components/AppNodeProvider.esm.js';\nimport '../components/DefaultSwappableComponents.esm.js';\n\nconst componentDataRef = createExtensionDataRef().with({ id: \"core.sign-in-page.component\" });\nconst SignInPageBlueprint = createExtensionBlueprint({\n kind: \"sign-in-page\",\n attachTo: { id: \"app/root\", input: \"signInPage\" },\n output: [componentDataRef],\n dataRefs: {\n component: componentDataRef\n },\n *factory({\n loader\n }, { node }) {\n const ExtensionComponent = lazy(\n () => loader().then((component) => ({ default: component }))\n );\n yield componentDataRef((props) => /* @__PURE__ */ jsx(ExtensionBoundary, { node, children: /* @__PURE__ */ jsx(ExtensionComponent, { ...props }) }));\n }\n});\n\nexport { SignInPageBlueprint };\n//# sourceMappingURL=SignInPageBlueprint.esm.js.map\n","import '../wiring/coreExtensionData.esm.js';\nimport 'zod';\nimport 'zod-to-json-schema';\nimport { createExtensionDataRef } from '../wiring/createExtensionDataRef.esm.js';\nimport { createExtensionBlueprint } from '../wiring/createExtensionBlueprint.esm.js';\n\nconst themeDataRef = createExtensionDataRef().with({\n id: \"core.theme.theme\"\n});\nconst ThemeBlueprint = createExtensionBlueprint({\n kind: \"theme\",\n attachTo: { id: \"api:app/app-theme\", input: \"themes\" },\n output: [themeDataRef],\n dataRefs: {\n theme: themeDataRef\n },\n factory: ({ theme }) => [themeDataRef(theme)]\n});\n\nexport { ThemeBlueprint };\n//# sourceMappingURL=ThemeBlueprint.esm.js.map\n","import '../wiring/coreExtensionData.esm.js';\nimport 'zod';\nimport 'zod-to-json-schema';\nimport { createExtensionDataRef } from '../wiring/createExtensionDataRef.esm.js';\nimport { createExtensionBlueprint } from '../wiring/createExtensionBlueprint.esm.js';\n\nconst translationDataRef = createExtensionDataRef().with({ id: \"core.translation.translation\" });\nconst TranslationBlueprint = createExtensionBlueprint({\n kind: \"translation\",\n attachTo: { id: \"api:app/translations\", input: \"translations\" },\n output: [translationDataRef],\n dataRefs: {\n translation: translationDataRef\n },\n factory: ({\n resource\n }) => [translationDataRef(resource)]\n});\n\nexport { TranslationBlueprint };\n//# sourceMappingURL=TranslationBlueprint.esm.js.map\n","import '../wiring/coreExtensionData.esm.js';\nimport 'zod';\nimport 'zod-to-json-schema';\nimport { createExtensionDataRef } from '../wiring/createExtensionDataRef.esm.js';\nimport { createExtensionBlueprint, createExtensionBlueprintParams } from '../wiring/createExtensionBlueprint.esm.js';\n\nconst componentDataRef = createExtensionDataRef().with({ id: \"core.swappableComponent\" });\nconst SwappableComponentBlueprint = createExtensionBlueprint({\n kind: \"component\",\n attachTo: { id: \"api:app/swappable-components\", input: \"components\" },\n output: [componentDataRef],\n dataRefs: {\n component: componentDataRef\n },\n defineParams(params) {\n return createExtensionBlueprintParams(params);\n },\n factory: (params) => [\n componentDataRef({\n ref: params.component.ref,\n loader: params.loader\n })\n ]\n});\n\nexport { SwappableComponentBlueprint, componentDataRef };\n//# sourceMappingURL=SwappableComponentBlueprint.esm.js.map\n","const MESSAGE_MARKER = \"eHgtF5hmbrXyiEvo\";\nfunction describeParentCallSite(ErrorConstructor = Error) {\n const { stack } = new ErrorConstructor(MESSAGE_MARKER);\n if (!stack) {\n return \"<unknown>\";\n }\n const startIndex = stack.includes(MESSAGE_MARKER) ? stack.indexOf(\"\\n\") + 1 : 0;\n const secondEntryStart = stack.indexOf(\"\\n\", stack.indexOf(\"\\n\", startIndex) + 1) + 1;\n const secondEntryEnd = stack.indexOf(\"\\n\", secondEntryStart);\n const line = stack.substring(secondEntryStart, secondEntryEnd).trim();\n if (!line) {\n return \"unknown\";\n }\n if (line.includes(\"(\")) {\n return line.substring(line.indexOf(\"(\") + 1, line.indexOf(\")\"));\n }\n if (line.includes(\"@\")) {\n return line.substring(line.indexOf(\"@\") + 1);\n }\n return line;\n}\n\nexport { describeParentCallSite };\n//# sourceMappingURL=describeParentCallSite.esm.js.map\n","import { describeParentCallSite } from './describeParentCallSite.esm.js';\n\nfunction toInternalRouteRef(resource) {\n const r = resource;\n if (r.$$type !== \"@backstage/RouteRef\") {\n throw new Error(`Invalid RouteRef, bad type '${r.$$type}'`);\n }\n return r;\n}\nclass RouteRefImpl {\n constructor(params = [], creationSite, alias) {\n this.params = params;\n this.#params = params;\n this.#creationSite = creationSite;\n this.#alias = alias;\n }\n $$type = \"@backstage/RouteRef\";\n version = \"v1\";\n #id;\n #params;\n #creationSite;\n #alias;\n getParams() {\n return this.#params;\n }\n get alias() {\n return this.#alias;\n }\n getDescription() {\n if (this.#id) {\n return this.#id;\n }\n return `created at '${this.#creationSite}'`;\n }\n get #name() {\n return this.$$type.slice(\"@backstage/\".length);\n }\n setId(id) {\n if (!id) {\n throw new Error(`${this.#name} id must be a non-empty string`);\n }\n if (this.#id && this.#id !== id) {\n throw new Error(\n `${this.#name} was referenced twice as both '${this.#id}' and '${id}'`\n );\n }\n this.#id = id;\n }\n toString() {\n return `${this.#name}{${this.getDescription()}}`;\n }\n}\nfunction createRouteRef(config) {\n return new RouteRefImpl(\n config?.params,\n describeParentCallSite(),\n config?.aliasFor\n );\n}\n\nexport { RouteRefImpl, createRouteRef, toInternalRouteRef };\n//# sourceMappingURL=RouteRef.esm.js.map\n","import { toInternalRouteRef } from './RouteRef.esm.js';\n\nconst PARAM_PATTERN = /^\\w+$/;\nclass SubRouteRefImpl {\n constructor(path, params, parent) {\n this.path = path;\n this.#params = params;\n this.#parent = parent;\n }\n $$type = \"@backstage/SubRouteRef\";\n version = \"v1\";\n #params;\n #parent;\n getParams() {\n return this.#params;\n }\n getParent() {\n return this.#parent;\n }\n getDescription() {\n const parent = toInternalRouteRef(this.#parent);\n return `at ${this.path} with parent ${parent.getDescription()}`;\n }\n toString() {\n return `SubRouteRef{${this.getDescription()}}`;\n }\n}\nfunction createSubRouteRef(config) {\n const { path, parent } = config;\n const internalParent = toInternalRouteRef(parent);\n const parentParams = internalParent.getParams();\n const pathParams = path.split(\"/\").filter((p) => p.startsWith(\":\")).map((p) => p.substring(1));\n const params = [...parentParams, ...pathParams];\n if (parentParams.some((p) => pathParams.includes(p))) {\n throw new Error(\n \"SubRouteRef may not have params that overlap with its parent\"\n );\n }\n if (!path.startsWith(\"/\")) {\n throw new Error(`SubRouteRef path must start with '/', got '${path}'`);\n }\n if (path.endsWith(\"/\")) {\n throw new Error(`SubRouteRef path must not end with '/', got '${path}'`);\n }\n for (const param of pathParams) {\n if (!PARAM_PATTERN.test(param)) {\n throw new Error(`SubRouteRef path has invalid param, got '${param}'`);\n }\n }\n const subRouteRef = new SubRouteRefImpl(\n path,\n params,\n parent\n );\n return subRouteRef;\n}\n\nexport { SubRouteRefImpl, createSubRouteRef };\n//# sourceMappingURL=SubRouteRef.esm.js.map\n","import { RouteRefImpl } from './RouteRef.esm.js';\nimport { describeParentCallSite } from './describeParentCallSite.esm.js';\n\nclass ExternalRouteRefImpl extends RouteRefImpl {\n constructor(params = [], defaultTarget, creationSite) {\n super(params, creationSite);\n this.params = params;\n this.defaultTarget = defaultTarget;\n }\n $$type = \"@backstage/ExternalRouteRef\";\n getDefaultTarget() {\n return this.defaultTarget;\n }\n}\nfunction createExternalRouteRef(options) {\n return new ExternalRouteRefImpl(\n options?.params,\n options?.defaultTarget,\n describeParentCallSite()\n );\n}\n\nexport { createExternalRouteRef };\n//# sourceMappingURL=ExternalRouteRef.esm.js.map\n","import { useMemo } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport '../apis/definitions/AppTreeApi.esm.js';\nimport { useApi } from '@backstage/core-plugin-api';\nimport '../apis/definitions/SwappableComponentsApi.esm.js';\nimport '../apis/definitions/IconsApi.esm.js';\nimport '../apis/definitions/DialogApi.esm.js';\nimport { routeResolutionApiRef } from '../apis/definitions/RouteResolutionApi.esm.js';\nimport '../apis/definitions/AnalyticsApi.esm.js';\n\nfunction useRouteRef(routeRef) {\n const { pathname } = useLocation();\n const routeResolutionApi = useApi(routeResolutionApiRef);\n const routeFunc = useMemo(\n () => routeResolutionApi.resolve(routeRef, { sourcePath: pathname }),\n [routeResolutionApi, routeRef, pathname]\n );\n return routeFunc;\n}\n\nexport { useRouteRef };\n//# sourceMappingURL=useRouteRef.esm.js.map\n","import { useParams } from 'react-router-dom';\n\nfunction useRouteRefParams(_routeRef) {\n return useParams();\n}\n\nexport { useRouteRefParams };\n//# sourceMappingURL=useRouteRefParams.esm.js.map\n","function createExtensionInput(extensionData, config) {\n if (process.env.NODE_ENV !== \"production\") {\n if (Array.isArray(extensionData)) {\n const seen = /* @__PURE__ */ new Set();\n const duplicates = [];\n for (const dataRef of extensionData) {\n if (seen.has(dataRef.id)) {\n duplicates.push(dataRef.id);\n } else {\n seen.add(dataRef.id);\n }\n }\n if (duplicates.length > 0) {\n throw new Error(\n `ExtensionInput may not have duplicate data refs: '${duplicates.join(\n \"', '\"\n )}'`\n );\n }\n }\n }\n return {\n $$type: \"@backstage/ExtensionInput\",\n extensionData,\n config: {\n singleton: Boolean(config?.singleton),\n optional: Boolean(config?.optional)\n },\n replaces: config?.replaces\n };\n}\n\nexport { createExtensionInput };\n//# sourceMappingURL=createExtensionInput.esm.js.map\n","import { OpaqueExtensionDefinition } from '../frontend-internal/src/wiring/InternalExtensionDefinition.esm.js';\n\nfunction resolveExtensionDefinition(definition, context) {\n const internalDefinition = OpaqueExtensionDefinition.toInternal(definition);\n const {\n name,\n kind,\n namespace: _skip1,\n override: _skip2,\n ...rest\n } = internalDefinition;\n const namespace = internalDefinition.namespace ?? context?.namespace;\n const namePart = name && namespace ? `${namespace}/${name}` : namespace || name;\n if (!namePart) {\n throw new Error(\n `Extension must declare an explicit namespace or name as it could not be resolved from context, kind=${kind} namespace=${namespace} name=${name}`\n );\n }\n const id = kind ? `${kind}:${namePart}` : namePart;\n return {\n ...rest,\n $$type: \"@backstage/Extension\",\n version: internalDefinition.version,\n id,\n toString() {\n return `Extension{id=${id}}`;\n }\n };\n}\n\nexport { resolveExtensionDefinition };\n//# sourceMappingURL=resolveExtensionDefinition.esm.js.map\n","import { OpaqueType } from '../../../opaque-internal/src/OpaqueType.esm.js';\n\nconst OpaqueFrontendPlugin = OpaqueType.create({\n type: \"@backstage/FrontendPlugin\",\n versions: [\"v1\"]\n});\n\nexport { OpaqueFrontendPlugin };\n//# sourceMappingURL=InternalFrontendPlugin.esm.js.map\n","import { resolveExtensionDefinition } from './resolveExtensionDefinition.esm.js';\nimport { OpaqueFrontendPlugin } from '../frontend-internal/src/wiring/InternalFrontendPlugin.esm.js';\nimport '../frontend-internal/src/wiring/InternalSwappableComponentRef.esm.js';\nimport { OpaqueExtensionDefinition } from '../frontend-internal/src/wiring/InternalExtensionDefinition.esm.js';\n\nfunction createFrontendPlugin(options) {\n const pluginId = options.pluginId;\n const extensions = new Array();\n const extensionDefinitionsById = /* @__PURE__ */ new Map();\n for (const def of options.extensions ?? []) {\n const internal = OpaqueExtensionDefinition.toInternal(def);\n const ext = resolveExtensionDefinition(def, { namespace: pluginId });\n extensions.push(ext);\n extensionDefinitionsById.set(ext.id, {\n ...internal,\n namespace: pluginId\n });\n }\n if (extensions.length !== extensionDefinitionsById.size) {\n const extensionIds = extensions.map((e) => e.id);\n const duplicates = Array.from(\n new Set(\n extensionIds.filter((id, index) => extensionIds.indexOf(id) !== index)\n )\n );\n throw new Error(\n `Plugin '${pluginId}' provided duplicate extensions: ${duplicates.join(\n \", \"\n )}`\n );\n }\n return OpaqueFrontendPlugin.createInstance(\"v1\", {\n id: pluginId,\n routes: options.routes ?? {},\n externalRoutes: options.externalRoutes ?? {},\n featureFlags: options.featureFlags ?? [],\n extensions,\n infoOptions: options.info,\n // This method is overridden when the plugin instance is installed in an app\n async info() {\n throw new Error(\n `Attempted to load plugin info for plugin '${pluginId}', but the plugin instance is not installed in an app`\n );\n },\n getExtension(id) {\n const ext = extensionDefinitionsById.get(id);\n if (!ext) {\n throw new Error(\n `Attempted to get non-existent extension '${id}' from plugin '${pluginId}'`\n );\n }\n return ext;\n },\n toString() {\n return `Plugin{id=${pluginId}}`;\n },\n withOverrides(overrides) {\n const overriddenExtensionIds = new Set(\n overrides.extensions.map(\n (e) => resolveExtensionDefinition(e, { namespace: pluginId }).id\n )\n );\n const nonOverriddenExtensions = (options.extensions ?? []).filter(\n (e) => !overriddenExtensionIds.has(\n resolveExtensionDefinition(e, { namespace: pluginId }).id\n )\n );\n return createFrontendPlugin({\n ...options,\n pluginId,\n extensions: [...nonOverriddenExtensions, ...overrides.extensions],\n info: {\n ...options.info,\n ...overrides.info\n }\n });\n }\n });\n}\n\nexport { createFrontendPlugin };\n//# sourceMappingURL=createFrontendPlugin.esm.js.map\n","import { resolveExtensionDefinition } from './resolveExtensionDefinition.esm.js';\nimport { OpaqueExtensionDefinition } from '../frontend-internal/src/wiring/InternalExtensionDefinition.esm.js';\n\nfunction createFrontendModule(options) {\n const { pluginId } = options;\n const extensions = new Array();\n const extensionDefinitionsById = /* @__PURE__ */ new Map();\n for (const def of options.extensions ?? []) {\n const internal = OpaqueExtensionDefinition.toInternal(def);\n const ext = resolveExtensionDefinition(def, { namespace: pluginId });\n extensions.push(ext);\n extensionDefinitionsById.set(ext.id, {\n ...internal,\n namespace: pluginId\n });\n }\n if (extensions.length !== extensionDefinitionsById.size) {\n const extensionIds = extensions.map((e) => e.id);\n const duplicates = Array.from(\n new Set(\n extensionIds.filter((id, index) => extensionIds.indexOf(id) !== index)\n )\n );\n throw new Error(\n `Plugin '${pluginId}' provided duplicate extensions: ${duplicates.join(\n \", \"\n )}`\n );\n }\n return {\n $$type: \"@backstage/FrontendModule\",\n version: \"v1\",\n pluginId,\n featureFlags: options.featureFlags ?? [],\n extensions,\n toString() {\n return `Module{pluginId=${pluginId}}`;\n }\n };\n}\n\nexport { createFrontendModule };\n//# sourceMappingURL=createFrontendModule.esm.js.map\n","import { describeParentCallSite } from '../routing/describeParentCallSite.esm.js';\n\nfunction createFrontendFeatureLoader(options) {\n const description = `created at '${describeParentCallSite()}'`;\n return {\n $$type: \"@backstage/FrontendFeatureLoader\",\n version: \"v1\",\n description,\n toString() {\n return `FeatureLoader{description=${description}}`;\n },\n async loader(deps) {\n const it = await options.loader(deps);\n const result = new Array();\n for await (const item of it) {\n if (isFeatureOrLoader(item)) {\n result.push(item);\n } else if (\"default\" in item) {\n result.push(item.default);\n } else {\n throw new Error(`Invalid item \"${item}\"`);\n }\n }\n return result;\n }\n };\n}\nfunction isFeatureOrLoader(obj) {\n if (obj !== null && typeof obj === \"object\" && \"$$type\" in obj) {\n return obj.$$type === \"@backstage/FrontendPlugin\" || obj.$$type === \"@backstage/FrontendModule\" || obj.$$type === \"@backstage/FrontendFeatureLoader\";\n }\n return false;\n}\n\nexport { createFrontendFeatureLoader };\n//# sourceMappingURL=createFrontendFeatureLoader.esm.js.map\n"],"names":["AnalyticsReactContext","createVersionedContext","useAnalyticsContext","theContext","useContext","pluginId","extensionId","theValue","atVersion","Error","AnalyticsContext","options","attributes","children","combinedValue","versionedCombinedValue","createVersionedValueMap","jsx","Provider","value","analyticsApiRef","createApiRef","id","globalEvents","getOrCreateGlobalSingleton","mostRecentGatheredNavigation","mostRecentRoutableExtensionRender","beforeUnloadRegistered","Tracker","constructor","analyticsApi","context","this","addEventListener","captureEvent","once","passive","setContext","action","subject","e","console","warn","useAnalytics","trackerRef","useRef","useApi","error","name","useAnalyticsApi","tracker","current","appTreeApiRef","swappableComponentsApiRef","iconsApiRef","dialogApiRef","routeResolutionApiRef","createExtensionDataRef","createRef","refId","Object","assign","$$type","config","optional","toString","Boolean","with","createExtensionDataContainer","values","contextName","declaredRefs","Symbol","iterator","container","Map","verifyRefs","map","ref","output","delete","set","remainingRefs","Array","from","filter","length","join","get","expectArray","expectItem","resolveInputOverrides","declaredInputs","inputs","inputOverrides","newInputs","hasOwn","declaredInput","providedData","singleton","originalInput","providedContainer","extensionData","node","isArray","withNodesCount","d","data","i","formatIssue","issue","code","unionErrors","issues","message","path","OpaqueType","create","type","Set","versions","TPublic","TInternal","isType","toInternal","TypeError","has","version","expected","createInstance","props","String","OpaqueExtensionDefinition","ctxParamsSymbol","createExtension","schemaDeclaration","schema","configSchema","innerZ","object","fromEntries","entries","k","v","parse","input","result","safeParse","success","createSchemaFromZod","T","kind","attachTo","disabled","factory","parts","push","flat","a","override","overrideOptions","params","apis","parentResult","innerContext","deduplicatedResult","item","OpaqueBlueprintParams","createExtensionBlueprintParams","unwrapParamsFactory","defineParams","paramDefinition","unwrapParams","ctx","overrideParams","createExtensionBlueprint","dataRefs","make","args","makeWithOverrides","innerParams","factoryDataRef","AnalyticsImplementationBlueprint","ApiBlueprint","coreExtensionData","reactElement","routePath","routeRef","AppRootElementBlueprint","element","componentDataRef","AppRootWrapperBlueprint","component","iconsDataRef","IconBundleBlueprint","icons","NavContentBlueprint","targetDataRef","NavItemBlueprint","target","icon","title","z","string","OpaqueSwappableComponentRef","useComponentRefApi","createSwappableComponent","FallbackComponent","p","TProps","TExternalProps","defaultComponent","lazy","async","default","loader","transformProps","ComponentRefImpl","api","internalRef","Component2","innerProps","Component","getComponent","Progress","NotFoundErrorPage","ErrorDisplay","ErrorBoundary","getDerivedStateFromError","state","handleErrorReset","setState","render","plugin","resetError","CONTEXT_KEY","AppNodeContext","AppNodeProvider","versionedValue","useAppNode","versionedContext","useVersionedContext","RouteTracker","enabled","analytics","useEffect","Fragment","ExtensionBoundary","hasRoutePathOutput","instance","getData","spec","Suspense","fallback","ExtensionBoundary2","appNode","ExtensionComponent","then","lazyComponent","PageBlueprint","RouterBlueprint","SignInPageBlueprint","themeDataRef","ThemeBlueprint","theme","translationDataRef","TranslationBlueprint","translation","resource","SwappableComponentBlueprint","MESSAGE_MARKER","describeParentCallSite","ErrorConstructor","stack","startIndex","includes","indexOf","secondEntryStart","secondEntryEnd","line","substring","trim","toInternalRouteRef","r","RouteRefImpl","creationSite","alias","getParams","getDescription","slice","setId","createRouteRef","aliasFor","PARAM_PATTERN","SubRouteRefImpl","parent","getParent","createSubRouteRef","parentParams","pathParams","split","startsWith","some","endsWith","param","test","ExternalRouteRefImpl","defaultTarget","super","getDefaultTarget","createExternalRouteRef","useRouteRef","pathname","useLocation","routeResolutionApi","useMemo","resolve","sourcePath","useRouteRefParams","_routeRef","useParams","createExtensionInput","replaces","resolveExtensionDefinition","definition","internalDefinition","namespace","_skip1","_skip2","rest","namePart","OpaqueFrontendPlugin","createFrontendPlugin","extensions","extensionDefinitionsById","def","internal","ext","size","extensionIds","duplicates","index","routes","externalRoutes","featureFlags","infoOptions","info","getExtension","withOverrides","overrides","overriddenExtensionIds","nonOverriddenExtensions","createFrontendModule","createFrontendFeatureLoader","description","deps","it","isFeatureOrLoader","obj"],"sourceRoot":""}
1
+ {"version":3,"file":"static/7266.3c4174cc.chunk.js","mappings":"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","sources":["webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/analytics/AnalyticsContext.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/apis/definitions/AnalyticsApi.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/analytics/Tracker.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/analytics/useAnalytics.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/apis/definitions/AppTreeApi.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/apis/definitions/SwappableComponentsApi.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/apis/definitions/IconsApi.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/apis/definitions/DialogApi.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/apis/definitions/RouteResolutionApi.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/wiring/createExtensionDataRef.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/frontend-internal/src/wiring/createExtensionDataContainer.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/wiring/resolveInputOverrides.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/schema/createSchemaFromZod.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/opaque-internal/src/OpaqueType.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/frontend-internal/src/wiring/InternalExtensionDefinition.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/wiring/createExtension.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/wiring/createExtensionBlueprint.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/blueprints/AnalyticsImplementationBlueprint.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/blueprints/ApiBlueprint.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/wiring/coreExtensionData.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/blueprints/AppRootElementBlueprint.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/blueprints/AppRootWrapperBlueprint.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/blueprints/IconBundleBlueprint.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/blueprints/NavContentBlueprint.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/blueprints/NavItemBlueprint.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/frontend-internal/src/wiring/InternalSwappableComponentRef.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/components/createSwappableComponent.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/components/DefaultSwappableComponents.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/components/ErrorBoundary.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/core-plugin-api/src/analytics/Tracker.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/components/AppNodeProvider.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/components/ExtensionBoundary.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/blueprints/PageBlueprint.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/blueprints/RouterBlueprint.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/blueprints/SignInPageBlueprint.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/blueprints/ThemeBlueprint.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/blueprints/TranslationBlueprint.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/blueprints/SwappableComponentBlueprint.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/routing/describeParentCallSite.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/routing/RouteRef.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/routing/SubRouteRef.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/routing/ExternalRouteRef.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/routing/useRouteRef.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/routing/useRouteRefParams.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/wiring/createExtensionInput.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/wiring/resolveExtensionDefinition.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/frontend-internal/src/wiring/InternalFrontendPlugin.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/wiring/createFrontendPlugin.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/wiring/createFrontendModule.esm.js","webpack://internal.plugin-kuadrant/./node_modules/@backstage/plugin-catalog/node_modules/@backstage/frontend-plugin-api/dist/wiring/createFrontendFeatureLoader.esm.js"],"sourcesContent":["import { jsx } from 'react/jsx-runtime';\nimport { createVersionedContext, createVersionedValueMap } from '@backstage/version-bridge';\nimport { useContext } from 'react';\n\nconst AnalyticsReactContext = createVersionedContext(\"analytics-context\");\nconst useAnalyticsContext = () => {\n const theContext = useContext(AnalyticsReactContext);\n if (theContext === void 0) {\n return {\n pluginId: \"app\",\n extensionId: \"app\"\n };\n }\n const theValue = theContext.atVersion(1);\n if (theValue === void 0) {\n throw new Error(\"No context found for version 1.\");\n }\n return theValue;\n};\nconst AnalyticsContext = (options) => {\n const { attributes, children } = options;\n const parentValues = useAnalyticsContext();\n const combinedValue = {\n ...parentValues,\n ...attributes\n };\n const versionedCombinedValue = createVersionedValueMap({ 1: combinedValue });\n return /* @__PURE__ */ jsx(AnalyticsReactContext.Provider, { value: versionedCombinedValue, children });\n};\n\nexport { AnalyticsContext, useAnalyticsContext };\n//# sourceMappingURL=AnalyticsContext.esm.js.map\n","import { createApiRef } from '@backstage/core-plugin-api';\n\nconst analyticsApiRef = createApiRef({\n id: \"core.analytics\"\n});\n\nexport { analyticsApiRef };\n//# sourceMappingURL=AnalyticsApi.esm.js.map\n","import { getOrCreateGlobalSingleton } from '@backstage/version-bridge';\n\nconst globalEvents = getOrCreateGlobalSingleton(\n \"core-plugin-api:analytics-tracker-events\",\n () => ({\n mostRecentGatheredNavigation: void 0,\n mostRecentRoutableExtensionRender: void 0,\n beforeUnloadRegistered: false\n })\n);\nconst routableExtensionRenderedEvent = \"_ROUTABLE-EXTENSION-RENDERED\";\nclass Tracker {\n constructor(analyticsApi, context = {\n pluginId: \"root\",\n extensionId: \"App\"\n }) {\n this.analyticsApi = analyticsApi;\n this.context = context;\n if (!globalEvents.beforeUnloadRegistered) {\n addEventListener(\n \"beforeunload\",\n () => {\n if (globalEvents.mostRecentGatheredNavigation) {\n this.analyticsApi.captureEvent({\n ...globalEvents.mostRecentGatheredNavigation,\n ...globalEvents.mostRecentRoutableExtensionRender\n });\n globalEvents.mostRecentGatheredNavigation = void 0;\n globalEvents.mostRecentRoutableExtensionRender = void 0;\n }\n },\n { once: true, passive: true }\n );\n globalEvents.beforeUnloadRegistered = true;\n }\n }\n setContext(context) {\n this.context = context;\n }\n captureEvent(action, subject, {\n value,\n attributes\n } = {}) {\n const context = this.context;\n if (action === routableExtensionRenderedEvent) {\n if (globalEvents.mostRecentGatheredNavigation) {\n globalEvents.mostRecentRoutableExtensionRender = {\n context: {\n ...context,\n extensionId: \"App\"\n }\n };\n }\n return;\n }\n if (globalEvents.mostRecentGatheredNavigation) {\n try {\n this.analyticsApi.captureEvent({\n ...globalEvents.mostRecentGatheredNavigation,\n ...globalEvents.mostRecentRoutableExtensionRender\n });\n } catch (e) {\n console.warn(\"Error during analytics event capture. %o\", e);\n }\n globalEvents.mostRecentGatheredNavigation = void 0;\n globalEvents.mostRecentRoutableExtensionRender = void 0;\n }\n if (action === \"navigate\" && context.pluginId === \"root\") {\n globalEvents.mostRecentGatheredNavigation = {\n action,\n subject,\n value,\n attributes,\n context\n };\n return;\n }\n try {\n this.analyticsApi.captureEvent({\n action,\n subject,\n value,\n attributes,\n context\n });\n } catch (e) {\n console.warn(\"Error during analytics event capture. %o\", e);\n }\n }\n}\n\nexport { Tracker, routableExtensionRenderedEvent };\n//# sourceMappingURL=Tracker.esm.js.map\n","import { useApi } from '@backstage/core-plugin-api';\nimport { useAnalyticsContext } from './AnalyticsContext.esm.js';\nimport '../apis/definitions/AppTreeApi.esm.js';\nimport '../apis/definitions/SwappableComponentsApi.esm.js';\nimport '../apis/definitions/IconsApi.esm.js';\nimport '../apis/definitions/DialogApi.esm.js';\nimport '../apis/definitions/RouteResolutionApi.esm.js';\nimport { analyticsApiRef } from '../apis/definitions/AnalyticsApi.esm.js';\nimport { useRef } from 'react';\nimport { Tracker } from './Tracker.esm.js';\n\nfunction useAnalyticsApi() {\n try {\n return useApi(analyticsApiRef);\n } catch (error) {\n if (error.name === \"NotImplementedError\") {\n return { captureEvent: () => {\n } };\n }\n throw error;\n }\n}\nfunction useAnalytics() {\n const trackerRef = useRef(null);\n const context = useAnalyticsContext();\n const analyticsApi = useAnalyticsApi();\n function getTracker() {\n if (trackerRef.current === null) {\n trackerRef.current = new Tracker(analyticsApi);\n }\n return trackerRef.current;\n }\n const tracker = getTracker();\n tracker.setContext(context);\n return tracker;\n}\n\nexport { useAnalytics };\n//# sourceMappingURL=useAnalytics.esm.js.map\n","import { createApiRef } from '@backstage/core-plugin-api';\n\nconst appTreeApiRef = createApiRef({ id: \"core.app-tree\" });\n\nexport { appTreeApiRef };\n//# sourceMappingURL=AppTreeApi.esm.js.map\n","import { createApiRef } from '@backstage/core-plugin-api';\n\nconst swappableComponentsApiRef = createApiRef({\n id: \"core.swappable-components\"\n});\n\nexport { swappableComponentsApiRef };\n//# sourceMappingURL=SwappableComponentsApi.esm.js.map\n","import { createApiRef } from '@backstage/core-plugin-api';\n\nconst iconsApiRef = createApiRef({\n id: \"core.icons\"\n});\n\nexport { iconsApiRef };\n//# sourceMappingURL=IconsApi.esm.js.map\n","import { createApiRef } from '@backstage/core-plugin-api';\n\nconst dialogApiRef = createApiRef({\n id: \"core.dialog\"\n});\n\nexport { dialogApiRef };\n//# sourceMappingURL=DialogApi.esm.js.map\n","import { createApiRef } from '@backstage/core-plugin-api';\n\nconst routeResolutionApiRef = createApiRef({\n id: \"core.route-resolution\"\n});\n\nexport { routeResolutionApiRef };\n//# sourceMappingURL=RouteResolutionApi.esm.js.map\n","function createExtensionDataRef() {\n const createRef = (refId) => Object.assign(\n (value) => ({\n $$type: \"@backstage/ExtensionDataValue\",\n id: refId,\n value\n }),\n {\n id: refId,\n $$type: \"@backstage/ExtensionDataRef\",\n config: {},\n optional() {\n return {\n ...this,\n config: { ...this.config, optional: true }\n };\n },\n toString() {\n const optional = Boolean(this.config.optional);\n return `ExtensionDataRef{id=${refId},optional=${optional}}`;\n }\n }\n );\n return {\n with(options) {\n return createRef(options.id);\n }\n };\n}\n\nexport { createExtensionDataRef };\n//# sourceMappingURL=createExtensionDataRef.esm.js.map\n","function createExtensionDataContainer(values, contextName, declaredRefs) {\n if (typeof values !== \"object\" || !values?.[Symbol.iterator]) {\n throw new Error(`${contextName} did not provide an iterable object`);\n }\n const container = /* @__PURE__ */ new Map();\n const verifyRefs = declaredRefs && new Map(declaredRefs.map((ref) => [ref.id, ref]));\n for (const output of values) {\n if (verifyRefs) {\n if (!verifyRefs.delete(output.id)) {\n throw new Error(\n `extension data '${output.id}' was provided but not declared`\n );\n }\n }\n container.set(output.id, output);\n }\n const remainingRefs = verifyRefs && Array.from(verifyRefs.values()).filter((ref) => !ref.config.optional);\n if (remainingRefs && remainingRefs.length > 0) {\n throw new Error(\n `missing required extension data value(s) '${remainingRefs.map((ref) => ref.id).join(\", \")}'`\n );\n }\n return {\n get(ref) {\n return container.get(ref.id)?.value;\n },\n [Symbol.iterator]() {\n return container.values();\n }\n };\n}\n\nexport { createExtensionDataContainer };\n//# sourceMappingURL=createExtensionDataContainer.esm.js.map\n","import { createExtensionDataContainer } from '../frontend-internal/src/wiring/createExtensionDataContainer.esm.js';\nimport '../frontend-internal/src/wiring/InternalSwappableComponentRef.esm.js';\nimport '../frontend-internal/src/wiring/InternalExtensionDefinition.esm.js';\nimport '../frontend-internal/src/wiring/InternalFrontendPlugin.esm.js';\n\nfunction expectArray(value) {\n return value;\n}\nfunction expectItem(value) {\n return value;\n}\nfunction resolveInputOverrides(declaredInputs, inputs, inputOverrides) {\n if (!declaredInputs || !inputs || !inputOverrides) {\n return inputs;\n }\n const newInputs = {};\n for (const name in declaredInputs) {\n if (!Object.hasOwn(declaredInputs, name)) {\n continue;\n }\n const declaredInput = declaredInputs[name];\n const providedData = inputOverrides[name];\n if (declaredInput.config.singleton) {\n const originalInput = expectItem(inputs[name]);\n if (providedData) {\n const providedContainer = createExtensionDataContainer(\n providedData,\n \"extension input override\",\n declaredInput.extensionData\n );\n if (!originalInput) {\n throw new Error(\n `attempted to override data of input '${name}' but it is not present in the original inputs`\n );\n }\n newInputs[name] = Object.assign(providedContainer, {\n node: originalInput.node\n });\n }\n } else {\n const originalInput = expectArray(inputs[name]);\n if (!Array.isArray(providedData)) {\n throw new Error(\n `override data provided for input '${name}' must be an array`\n );\n }\n if (providedData.length === 0) {\n newInputs[name] = [];\n } else {\n const withNodesCount = providedData.filter((d) => \"node\" in d).length;\n if (withNodesCount === 0) {\n if (originalInput.length !== providedData.length) {\n throw new Error(\n `override data provided for input '${name}' must match the length of the original inputs`\n );\n }\n newInputs[name] = providedData.map((data, i) => {\n const providedContainer = createExtensionDataContainer(\n data,\n \"extension input override\",\n declaredInput.extensionData\n );\n return Object.assign(providedContainer, {\n node: originalInput[i].node\n });\n });\n } else if (withNodesCount === providedData.length) {\n newInputs[name] = providedData;\n } else {\n throw new Error(\n `override data for input '${name}' may not mix forwarded inputs with data overrides`\n );\n }\n }\n }\n }\n return newInputs;\n}\n\nexport { resolveInputOverrides };\n//# sourceMappingURL=resolveInputOverrides.esm.js.map\n","import { z } from 'zod';\nimport zodToJsonSchema from 'zod-to-json-schema';\n\nfunction createSchemaFromZod(schemaCreator) {\n const schema = schemaCreator(z);\n return {\n // TODO: Types allow z.array etc here but it will break stuff\n parse: (input) => {\n const result = schema.safeParse(input);\n if (result.success) {\n return result.data;\n }\n throw new Error(result.error.issues.map(formatIssue).join(\"; \"));\n },\n // TODO: Verify why we are not compatible with the latest zodToJsonSchema.\n schema: zodToJsonSchema(schema)\n };\n}\nfunction formatIssue(issue) {\n if (issue.code === \"invalid_union\") {\n return formatIssue(issue.unionErrors[0].issues[0]);\n }\n let message = issue.message;\n if (message === \"Required\") {\n message = `Missing required value`;\n }\n if (issue.path.length) {\n message += ` at '${issue.path.join(\".\")}'`;\n }\n return message;\n}\n\nexport { createSchemaFromZod };\n//# sourceMappingURL=createSchemaFromZod.esm.js.map\n","class OpaqueType {\n /**\n * Creates a new opaque type.\n *\n * @param options.type The type identifier of the opaque type\n * @param options.versions The available versions of the opaque type\n * @returns A new opaque type helper\n */\n static create(options) {\n return new OpaqueType(options.type, new Set(options.versions));\n }\n #type;\n #versions;\n constructor(type, versions) {\n this.#type = type;\n this.#versions = versions;\n }\n /**\n * The internal version of the opaque type, used like this: `typeof MyOpaqueType.TPublic`\n *\n * @remarks\n *\n * This property is only useful for type checking, its runtime value is `undefined`.\n */\n TPublic = void 0;\n /**\n * The internal version of the opaque type, used like this: `typeof MyOpaqueType.TInternal`\n *\n * @remarks\n *\n * This property is only useful for type checking, its runtime value is `undefined`.\n */\n TInternal = void 0;\n /**\n * @param value Input value expected to be an instance of this opaque type\n * @returns True if the value matches this opaque type\n */\n isType = (value) => {\n return this.#isThisInternalType(value);\n };\n /**\n * @param value Input value expected to be an instance of this opaque type\n * @throws If the value is not an instance of this opaque type or is of an unsupported version\n * @returns The internal version of the opaque type\n */\n toInternal = (value) => {\n if (!this.#isThisInternalType(value)) {\n throw new TypeError(\n `Invalid opaque type, expected '${this.#type}', but got '${this.#stringifyUnknown(value)}'`\n );\n }\n if (!this.#versions.has(value.version)) {\n const versions = Array.from(this.#versions).map(this.#stringifyVersion);\n if (versions.length > 1) {\n versions[versions.length - 1] = `or ${versions[versions.length - 1]}`;\n }\n const expected = versions.length > 2 ? versions.join(\", \") : versions.join(\" \");\n throw new TypeError(\n `Invalid opaque type instance, got version ${this.#stringifyVersion(\n value.version\n )}, expected ${expected}`\n );\n }\n return value;\n };\n /**\n * Creates an instance of the opaque type, returning the public type.\n *\n * @param version The version of the instance to create\n * @param value The remaining public and internal properties of the instance\n * @returns An instance of the opaque type\n */\n createInstance(version, props) {\n return Object.assign(props, {\n $$type: this.#type,\n ...version && { version }\n });\n }\n #isThisInternalType(value) {\n if (value === null || typeof value !== \"object\") {\n return false;\n }\n return value.$$type === this.#type;\n }\n #stringifyUnknown(value) {\n if (typeof value !== \"object\") {\n return `<${typeof value}>`;\n }\n if (value === null) {\n return \"<null>\";\n }\n if (\"$$type\" in value) {\n return String(value.$$type);\n }\n return String(value);\n }\n #stringifyVersion = (version) => {\n return version ? `'${version}'` : \"undefined\";\n };\n}\n\nexport { OpaqueType };\n//# sourceMappingURL=OpaqueType.esm.js.map\n","import { OpaqueType } from '../../../opaque-internal/src/OpaqueType.esm.js';\n\nconst OpaqueExtensionDefinition = OpaqueType.create({\n type: \"@backstage/ExtensionDefinition\",\n versions: [\"v1\", \"v2\"]\n});\n\nexport { OpaqueExtensionDefinition };\n//# sourceMappingURL=InternalExtensionDefinition.esm.js.map\n","import { resolveInputOverrides } from './resolveInputOverrides.esm.js';\nimport { createSchemaFromZod } from '../schema/createSchemaFromZod.esm.js';\nimport { OpaqueExtensionDefinition } from '../frontend-internal/src/wiring/InternalExtensionDefinition.esm.js';\nimport { createExtensionDataContainer } from '../frontend-internal/src/wiring/createExtensionDataContainer.esm.js';\nimport '../frontend-internal/src/wiring/InternalSwappableComponentRef.esm.js';\nimport '../frontend-internal/src/wiring/InternalFrontendPlugin.esm.js';\n\nconst ctxParamsSymbol = Symbol(\"params\");\nfunction createExtension(options) {\n const schemaDeclaration = options.config?.schema;\n const configSchema = schemaDeclaration && createSchemaFromZod(\n (innerZ) => innerZ.object(\n Object.fromEntries(\n Object.entries(schemaDeclaration).map(([k, v]) => [k, v(innerZ)])\n )\n )\n );\n return OpaqueExtensionDefinition.createInstance(\"v2\", {\n T: void 0,\n kind: options.kind,\n name: options.name,\n attachTo: options.attachTo,\n disabled: options.disabled ?? false,\n inputs: options.inputs ?? {},\n output: options.output,\n configSchema,\n factory: options.factory,\n toString() {\n const parts = [];\n if (options.kind) {\n parts.push(`kind=${options.kind}`);\n }\n if (options.name) {\n parts.push(`name=${options.name}`);\n }\n parts.push(\n `attachTo=${[options.attachTo].flat().map((a) => `${a.id}@${a.input}`).join(\"+\")}`\n );\n return `ExtensionDefinition{${parts.join(\",\")}}`;\n },\n override(overrideOptions) {\n if (!Array.isArray(options.output)) {\n throw new Error(\n \"Cannot override an extension that is not declared using the new format with outputs as an array\"\n );\n }\n if (overrideOptions.output && !overrideOptions.factory) {\n throw new Error(\n \"Refused to override output without also overriding factory\"\n );\n }\n if (overrideOptions.params && overrideOptions.factory) {\n throw new Error(\n \"Refused to override params and factory at the same time\"\n );\n }\n return createExtension({\n kind: options.kind,\n name: options.name,\n attachTo: overrideOptions.attachTo ?? options.attachTo,\n disabled: overrideOptions.disabled ?? options.disabled,\n inputs: { ...overrideOptions.inputs, ...options.inputs },\n output: overrideOptions.output ?? options.output,\n config: options.config || overrideOptions.config ? {\n schema: {\n ...options.config?.schema,\n ...overrideOptions.config?.schema\n }\n } : void 0,\n factory: ({ node, apis, config, inputs }) => {\n if (!overrideOptions.factory) {\n return options.factory({\n node,\n apis,\n config,\n inputs,\n [ctxParamsSymbol]: overrideOptions.params\n });\n }\n const parentResult = overrideOptions.factory(\n (innerContext) => {\n return createExtensionDataContainer(\n options.factory({\n node,\n apis,\n config: innerContext?.config ?? config,\n inputs: resolveInputOverrides(\n options.inputs,\n inputs,\n innerContext?.inputs\n ),\n [ctxParamsSymbol]: innerContext?.params\n }),\n \"original extension factory\",\n options.output\n );\n },\n {\n node,\n apis,\n config,\n inputs\n }\n );\n if (typeof parentResult !== \"object\" || !parentResult?.[Symbol.iterator]) {\n throw new Error(\n \"extension factory override did not provide an iterable object\"\n );\n }\n const deduplicatedResult = /* @__PURE__ */ new Map();\n for (const item of parentResult) {\n deduplicatedResult.set(item.id, item);\n }\n return deduplicatedResult.values();\n }\n });\n }\n });\n}\n\nexport { createExtension, ctxParamsSymbol };\n//# sourceMappingURL=createExtension.esm.js.map\n","import { createExtension, ctxParamsSymbol } from './createExtension.esm.js';\nimport { resolveInputOverrides } from './resolveInputOverrides.esm.js';\nimport { OpaqueType } from '../opaque-internal/src/OpaqueType.esm.js';\nimport { createExtensionDataContainer } from '../frontend-internal/src/wiring/createExtensionDataContainer.esm.js';\n\nconst OpaqueBlueprintParams = OpaqueType.create({\n type: \"@backstage/BlueprintParams\",\n versions: [\"v1\"]\n});\nfunction createExtensionBlueprintParams(params) {\n return OpaqueBlueprintParams.createInstance(\"v1\", { T: null, params });\n}\nfunction unwrapParamsFactory(params, defineParams, kind) {\n const paramDefinition = params(defineParams);\n try {\n return OpaqueBlueprintParams.toInternal(paramDefinition).params;\n } catch (e) {\n throw new TypeError(\n `Invalid invocation of blueprint with kind '${kind}', the parameter definition callback function did not return a valid parameter definition object; Caused by: ${e.message}`\n );\n }\n}\nfunction unwrapParams(params, ctx, defineParams, kind) {\n const overrideParams = ctx[ctxParamsSymbol];\n if (defineParams) {\n if (overrideParams) {\n if (typeof overrideParams !== \"function\") {\n throw new TypeError(\n `Invalid extension override of blueprint with kind '${kind}', the override params were passed as a plain object, but this blueprint requires them to be passed in callback form`\n );\n }\n return unwrapParamsFactory(overrideParams, defineParams, kind);\n }\n if (typeof params !== \"function\") {\n throw new TypeError(\n `Invalid invocation of blueprint with kind '${kind}', the parameters where passed as a plain object, but this blueprint requires them to be passed in callback form`\n );\n }\n return unwrapParamsFactory(params, defineParams, kind);\n }\n const base = typeof params === \"function\" ? unwrapParamsFactory(\n params,\n createExtensionBlueprintParams,\n kind\n ) : params;\n const overrides = typeof overrideParams === \"function\" ? unwrapParamsFactory(\n overrideParams,\n createExtensionBlueprintParams,\n kind\n ) : overrideParams;\n return {\n ...base,\n ...overrides\n };\n}\nfunction createExtensionBlueprint(options) {\n const defineParams = options.defineParams;\n return {\n dataRefs: options.dataRefs,\n make(args) {\n return createExtension({\n kind: options.kind,\n name: args.name,\n attachTo: args.attachTo ?? options.attachTo,\n disabled: args.disabled ?? options.disabled,\n inputs: options.inputs,\n output: options.output,\n config: options.config,\n factory: (ctx) => options.factory(\n unwrapParams(args.params, ctx, defineParams, options.kind),\n ctx\n )\n });\n },\n makeWithOverrides(args) {\n return createExtension({\n kind: options.kind,\n name: args.name,\n attachTo: args.attachTo ?? options.attachTo,\n disabled: args.disabled ?? options.disabled,\n inputs: { ...args.inputs, ...options.inputs },\n output: args.output ?? options.output,\n config: options.config || args.config ? {\n schema: {\n ...options.config?.schema,\n ...args.config?.schema\n }\n } : void 0,\n factory: (ctx) => {\n const { node, config, inputs, apis } = ctx;\n return args.factory(\n (innerParams, innerContext) => {\n return createExtensionDataContainer(\n options.factory(\n unwrapParams(innerParams, ctx, defineParams, options.kind),\n {\n apis,\n node,\n config: innerContext?.config ?? config,\n inputs: resolveInputOverrides(\n options.inputs,\n inputs,\n innerContext?.inputs\n )\n }\n ),\n \"original blueprint factory\",\n options.output\n );\n },\n {\n apis,\n node,\n config,\n inputs\n }\n );\n }\n });\n }\n };\n}\n\nexport { createExtensionBlueprint, createExtensionBlueprintParams };\n//# sourceMappingURL=createExtensionBlueprint.esm.js.map\n","import '../wiring/coreExtensionData.esm.js';\nimport 'zod';\nimport 'zod-to-json-schema';\nimport { createExtensionDataRef } from '../wiring/createExtensionDataRef.esm.js';\nimport { createExtensionBlueprint, createExtensionBlueprintParams } from '../wiring/createExtensionBlueprint.esm.js';\n\nconst factoryDataRef = createExtensionDataRef().with({\n id: \"core.analytics.factory\"\n});\nconst AnalyticsImplementationBlueprint = createExtensionBlueprint({\n kind: \"analytics\",\n attachTo: [{ id: \"api:app/analytics\", input: \"implementations\" }],\n output: [factoryDataRef],\n dataRefs: {\n factory: factoryDataRef\n },\n defineParams: (params) => createExtensionBlueprintParams(params),\n *factory(params) {\n yield factoryDataRef(params);\n }\n});\n\nexport { AnalyticsImplementationBlueprint };\n//# sourceMappingURL=AnalyticsImplementationBlueprint.esm.js.map\n","import '../wiring/coreExtensionData.esm.js';\nimport 'zod';\nimport 'zod-to-json-schema';\nimport { createExtensionDataRef } from '../wiring/createExtensionDataRef.esm.js';\nimport { createExtensionBlueprint, createExtensionBlueprintParams } from '../wiring/createExtensionBlueprint.esm.js';\n\nconst factoryDataRef = createExtensionDataRef().with({\n id: \"core.api.factory\"\n});\nconst ApiBlueprint = createExtensionBlueprint({\n kind: \"api\",\n attachTo: { id: \"root\", input: \"apis\" },\n output: [factoryDataRef],\n dataRefs: {\n factory: factoryDataRef\n },\n defineParams: (params) => createExtensionBlueprintParams(params),\n *factory(params) {\n yield factoryDataRef(params);\n }\n});\n\nexport { ApiBlueprint };\n//# sourceMappingURL=ApiBlueprint.esm.js.map\n","import { createExtensionDataRef } from './createExtensionDataRef.esm.js';\n\nconst coreExtensionData = {\n reactElement: createExtensionDataRef().with({\n id: \"core.reactElement\"\n }),\n routePath: createExtensionDataRef().with({ id: \"core.routing.path\" }),\n routeRef: createExtensionDataRef().with({ id: \"core.routing.ref\" })\n};\n\nexport { coreExtensionData };\n//# sourceMappingURL=coreExtensionData.esm.js.map\n","import { coreExtensionData } from '../wiring/coreExtensionData.esm.js';\nimport 'zod';\nimport 'zod-to-json-schema';\nimport { createExtensionBlueprint } from '../wiring/createExtensionBlueprint.esm.js';\n\nconst AppRootElementBlueprint = createExtensionBlueprint({\n kind: \"app-root-element\",\n attachTo: { id: \"app/root\", input: \"elements\" },\n output: [coreExtensionData.reactElement],\n *factory(params) {\n yield coreExtensionData.reactElement(params.element);\n }\n});\n\nexport { AppRootElementBlueprint };\n//# sourceMappingURL=AppRootElementBlueprint.esm.js.map\n","import '../wiring/coreExtensionData.esm.js';\nimport 'zod';\nimport 'zod-to-json-schema';\nimport { createExtensionDataRef } from '../wiring/createExtensionDataRef.esm.js';\nimport { createExtensionBlueprint } from '../wiring/createExtensionBlueprint.esm.js';\n\nconst componentDataRef = createExtensionDataRef().with({ id: \"app.root.wrapper\" });\nconst AppRootWrapperBlueprint = createExtensionBlueprint({\n kind: \"app-root-wrapper\",\n attachTo: { id: \"app/root\", input: \"wrappers\" },\n output: [componentDataRef],\n dataRefs: {\n component: componentDataRef\n },\n *factory(params) {\n yield componentDataRef(params.component);\n }\n});\n\nexport { AppRootWrapperBlueprint };\n//# sourceMappingURL=AppRootWrapperBlueprint.esm.js.map\n","import '../wiring/coreExtensionData.esm.js';\nimport 'zod';\nimport 'zod-to-json-schema';\nimport { createExtensionDataRef } from '../wiring/createExtensionDataRef.esm.js';\nimport { createExtensionBlueprint } from '../wiring/createExtensionBlueprint.esm.js';\n\nconst iconsDataRef = createExtensionDataRef().with({ id: \"core.icons\" });\nconst IconBundleBlueprint = createExtensionBlueprint({\n kind: \"icon-bundle\",\n attachTo: { id: \"api:app/icons\", input: \"icons\" },\n output: [iconsDataRef],\n factory: (params) => [\n iconsDataRef(params.icons)\n ],\n dataRefs: {\n icons: iconsDataRef\n }\n});\n\nexport { IconBundleBlueprint };\n//# sourceMappingURL=IconBundleBlueprint.esm.js.map\n","import '../wiring/coreExtensionData.esm.js';\nimport 'zod';\nimport 'zod-to-json-schema';\nimport { createExtensionDataRef } from '../wiring/createExtensionDataRef.esm.js';\nimport { createExtensionBlueprint } from '../wiring/createExtensionBlueprint.esm.js';\n\nconst componentDataRef = createExtensionDataRef().with({\n id: \"core.nav-content.component\"\n});\nconst NavContentBlueprint = createExtensionBlueprint({\n kind: \"nav-content\",\n attachTo: { id: \"app/nav\", input: \"content\" },\n output: [componentDataRef],\n dataRefs: {\n component: componentDataRef\n },\n *factory(params) {\n yield componentDataRef(params.component);\n }\n});\n\nexport { NavContentBlueprint };\n//# sourceMappingURL=NavContentBlueprint.esm.js.map\n","import '../wiring/coreExtensionData.esm.js';\nimport 'zod';\nimport 'zod-to-json-schema';\nimport { createExtensionDataRef } from '../wiring/createExtensionDataRef.esm.js';\nimport { createExtensionBlueprint } from '../wiring/createExtensionBlueprint.esm.js';\n\nconst targetDataRef = createExtensionDataRef().with({ id: \"core.nav-item.target\" });\nconst NavItemBlueprint = createExtensionBlueprint({\n kind: \"nav-item\",\n attachTo: { id: \"app/nav\", input: \"items\" },\n output: [targetDataRef],\n dataRefs: {\n target: targetDataRef\n },\n factory: ({\n icon,\n routeRef,\n title\n }, { config }) => [\n targetDataRef({\n title: config.title ?? title,\n icon,\n routeRef\n })\n ],\n config: {\n schema: {\n title: (z) => z.string().optional()\n }\n }\n});\n\nexport { NavItemBlueprint };\n//# sourceMappingURL=NavItemBlueprint.esm.js.map\n","import { OpaqueType } from '../../../opaque-internal/src/OpaqueType.esm.js';\n\nconst OpaqueSwappableComponentRef = OpaqueType.create({\n versions: [\"v1\"],\n type: \"@backstage/SwappableComponentRef\"\n});\n\nexport { OpaqueSwappableComponentRef };\n//# sourceMappingURL=InternalSwappableComponentRef.esm.js.map\n","import { jsx } from 'react/jsx-runtime';\nimport '../apis/definitions/AppTreeApi.esm.js';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { swappableComponentsApiRef } from '../apis/definitions/SwappableComponentsApi.esm.js';\nimport '../apis/definitions/IconsApi.esm.js';\nimport '../apis/definitions/DialogApi.esm.js';\nimport '../apis/definitions/RouteResolutionApi.esm.js';\nimport '../apis/definitions/AnalyticsApi.esm.js';\nimport { lazy } from 'react';\nimport { OpaqueSwappableComponentRef } from '../frontend-internal/src/wiring/InternalSwappableComponentRef.esm.js';\nimport '../frontend-internal/src/wiring/InternalExtensionDefinition.esm.js';\nimport '../frontend-internal/src/wiring/InternalFrontendPlugin.esm.js';\n\nconst useComponentRefApi = () => {\n try {\n return useApi(swappableComponentsApiRef);\n } catch (e) {\n return void 0;\n }\n};\nfunction createSwappableComponent(options) {\n const FallbackComponent = (p) => /* @__PURE__ */ jsx(\"div\", { \"data-testid\": options.id, ...p });\n const ref = OpaqueSwappableComponentRef.createInstance(\"v1\", {\n id: options.id,\n TProps: null,\n TExternalProps: null,\n toString() {\n return `SwappableComponentRef{id=${options.id}}`;\n },\n defaultComponent: lazy(async () => {\n const Component = await options.loader?.() ?? FallbackComponent;\n return { default: Component };\n }),\n transformProps: options.transformProps\n });\n const ComponentRefImpl = (props) => {\n const api = useComponentRefApi();\n if (!api) {\n const internalRef = OpaqueSwappableComponentRef.toInternal(ref);\n const Component2 = internalRef.defaultComponent;\n const innerProps = internalRef.transformProps?.(props) ?? props;\n return /* @__PURE__ */ jsx(Component2, { ...innerProps });\n }\n const Component = api.getComponent(ref);\n return /* @__PURE__ */ jsx(Component, { ...props });\n };\n Object.assign(ComponentRefImpl, { ref });\n return ComponentRefImpl;\n}\n\nexport { createSwappableComponent };\n//# sourceMappingURL=createSwappableComponent.esm.js.map\n","import { jsx } from 'react/jsx-runtime';\nimport { createSwappableComponent } from './createSwappableComponent.esm.js';\n\nconst Progress = createSwappableComponent({\n id: \"core-progress\"\n});\nconst NotFoundErrorPage = createSwappableComponent({\n id: \"core-not-found-error-page\"\n});\nconst ErrorDisplay = createSwappableComponent({\n id: \"core-error-display\",\n loader: () => (props) => /* @__PURE__ */ jsx(\"div\", { \"data-testid\": \"core-error-display\", children: props.error.message })\n});\n\nexport { ErrorDisplay, NotFoundErrorPage, Progress };\n//# sourceMappingURL=DefaultSwappableComponents.esm.js.map\n","import { jsx } from 'react/jsx-runtime';\nimport { Component } from 'react';\nimport { ErrorDisplay } from './DefaultSwappableComponents.esm.js';\n\nclass ErrorBoundary extends Component {\n static getDerivedStateFromError(error) {\n return { error };\n }\n state = { error: void 0 };\n handleErrorReset = () => {\n this.setState({ error: void 0 });\n };\n render() {\n const { error } = this.state;\n const { plugin, children } = this.props;\n if (error) {\n return /* @__PURE__ */ jsx(\n ErrorDisplay,\n {\n plugin,\n error,\n resetError: this.handleErrorReset\n }\n );\n }\n return children;\n }\n}\n\nexport { ErrorBoundary };\n//# sourceMappingURL=ErrorBoundary.esm.js.map\n","import { getOrCreateGlobalSingleton } from '@backstage/version-bridge';\n\ngetOrCreateGlobalSingleton(\n \"core-plugin-api:analytics-tracker-events\",\n () => ({\n mostRecentGatheredNavigation: void 0,\n mostRecentRoutableExtensionRender: void 0,\n beforeUnloadRegistered: false\n })\n);\nconst routableExtensionRenderedEvent = \"_ROUTABLE-EXTENSION-RENDERED\";\n\nexport { routableExtensionRenderedEvent };\n//# sourceMappingURL=Tracker.esm.js.map\n","import { jsx } from 'react/jsx-runtime';\nimport { createVersionedContext, createVersionedValueMap, useVersionedContext } from '@backstage/version-bridge';\n\nconst CONTEXT_KEY = \"app-node-context\";\nconst AppNodeContext = createVersionedContext(CONTEXT_KEY);\nfunction AppNodeProvider({\n node,\n children\n}) {\n const versionedValue = createVersionedValueMap({ 1: { node } });\n return /* @__PURE__ */ jsx(AppNodeContext.Provider, { value: versionedValue, children });\n}\nfunction useAppNode() {\n const versionedContext = useVersionedContext(CONTEXT_KEY);\n if (!versionedContext) {\n return void 0;\n }\n const context = versionedContext.atVersion(1);\n if (!context) {\n throw new Error(\"AppNodeContext v1 not available\");\n }\n return context.node;\n}\n\nexport { AppNodeProvider, useAppNode };\n//# sourceMappingURL=AppNodeProvider.esm.js.map\n","import { jsx, Fragment } from 'react/jsx-runtime';\nimport { lazy, Suspense, useEffect } from 'react';\nimport { AnalyticsContext, useAnalytics } from '@backstage/core-plugin-api';\nimport { ErrorBoundary } from './ErrorBoundary.esm.js';\nimport { routableExtensionRenderedEvent } from '../core-plugin-api/src/analytics/Tracker.esm.js';\nimport { coreExtensionData } from '../wiring/coreExtensionData.esm.js';\nimport 'zod';\nimport 'zod-to-json-schema';\nimport '../wiring/createExtensionBlueprint.esm.js';\nimport { AppNodeProvider } from './AppNodeProvider.esm.js';\nimport { Progress } from './DefaultSwappableComponents.esm.js';\n\nconst RouteTracker = (props) => {\n const { enabled, children } = props;\n const analytics = useAnalytics();\n useEffect(() => {\n if (enabled) {\n analytics.captureEvent(routableExtensionRenderedEvent, \"\");\n }\n }, [analytics, enabled]);\n return /* @__PURE__ */ jsx(Fragment, { children });\n};\nfunction ExtensionBoundary(props) {\n const { node, children } = props;\n const hasRoutePathOutput = Boolean(\n node.instance?.getData(coreExtensionData.routePath)\n );\n const plugin = node.spec.plugin;\n const attributes = {\n extensionId: node.spec.id,\n pluginId: node.spec.plugin?.id ?? \"app\"\n };\n return /* @__PURE__ */ jsx(AppNodeProvider, { node, children: /* @__PURE__ */ jsx(Suspense, { fallback: /* @__PURE__ */ jsx(Progress, {}), children: /* @__PURE__ */ jsx(ErrorBoundary, { plugin, children: /* @__PURE__ */ jsx(AnalyticsContext, { attributes, children: /* @__PURE__ */ jsx(RouteTracker, { enabled: hasRoutePathOutput, children }) }) }) }) });\n}\n((ExtensionBoundary2) => {\n function lazy$1(appNode, loader) {\n const ExtensionComponent = lazy(\n () => loader().then((element) => ({ default: () => element }))\n );\n return /* @__PURE__ */ jsx(ExtensionBoundary2, { node: appNode, children: /* @__PURE__ */ jsx(ExtensionComponent, {}) });\n }\n ExtensionBoundary2.lazy = lazy$1;\n function lazyComponent(appNode, loader) {\n const ExtensionComponent = lazy(\n () => loader().then((Component) => ({ default: Component }))\n );\n return (props) => /* @__PURE__ */ jsx(ExtensionBoundary2, { node: appNode, children: /* @__PURE__ */ jsx(ExtensionComponent, { ...props }) });\n }\n ExtensionBoundary2.lazyComponent = lazyComponent;\n})(ExtensionBoundary || (ExtensionBoundary = {}));\n\nexport { ExtensionBoundary };\n//# sourceMappingURL=ExtensionBoundary.esm.js.map\n","import { coreExtensionData } from '../wiring/coreExtensionData.esm.js';\nimport 'zod';\nimport 'zod-to-json-schema';\nimport { createExtensionBlueprint } from '../wiring/createExtensionBlueprint.esm.js';\nimport { ExtensionBoundary } from '../components/ExtensionBoundary.esm.js';\nimport 'react/jsx-runtime';\nimport '../apis/definitions/AppTreeApi.esm.js';\nimport '@backstage/core-plugin-api';\nimport '../apis/definitions/SwappableComponentsApi.esm.js';\nimport '../apis/definitions/IconsApi.esm.js';\nimport '../apis/definitions/DialogApi.esm.js';\nimport '../apis/definitions/RouteResolutionApi.esm.js';\nimport '../apis/definitions/AnalyticsApi.esm.js';\nimport 'react';\nimport '../components/AppNodeProvider.esm.js';\nimport '../components/DefaultSwappableComponents.esm.js';\n\nconst PageBlueprint = createExtensionBlueprint({\n kind: \"page\",\n attachTo: { id: \"app/routes\", input: \"routes\" },\n output: [\n coreExtensionData.routePath,\n coreExtensionData.reactElement,\n coreExtensionData.routeRef.optional()\n ],\n config: {\n schema: {\n path: (z) => z.string().optional()\n }\n },\n *factory(params, { config, node }) {\n yield coreExtensionData.routePath(config.path ?? params.path);\n yield coreExtensionData.reactElement(\n ExtensionBoundary.lazy(node, params.loader)\n );\n if (params.routeRef) {\n yield coreExtensionData.routeRef(params.routeRef);\n }\n }\n});\n\nexport { PageBlueprint };\n//# sourceMappingURL=PageBlueprint.esm.js.map\n","import '../wiring/coreExtensionData.esm.js';\nimport 'zod';\nimport 'zod-to-json-schema';\nimport { createExtensionDataRef } from '../wiring/createExtensionDataRef.esm.js';\nimport { createExtensionBlueprint } from '../wiring/createExtensionBlueprint.esm.js';\n\nconst componentDataRef = createExtensionDataRef().with({ id: \"app.router.wrapper\" });\nconst RouterBlueprint = createExtensionBlueprint({\n kind: \"app-router-component\",\n attachTo: { id: \"app/root\", input: \"router\" },\n output: [componentDataRef],\n dataRefs: {\n component: componentDataRef\n },\n *factory(params) {\n yield componentDataRef(params.component);\n }\n});\n\nexport { RouterBlueprint };\n//# sourceMappingURL=RouterBlueprint.esm.js.map\n","import { jsx } from 'react/jsx-runtime';\nimport { lazy } from 'react';\nimport '../wiring/coreExtensionData.esm.js';\nimport 'zod';\nimport 'zod-to-json-schema';\nimport { createExtensionDataRef } from '../wiring/createExtensionDataRef.esm.js';\nimport { createExtensionBlueprint } from '../wiring/createExtensionBlueprint.esm.js';\nimport { ExtensionBoundary } from '../components/ExtensionBoundary.esm.js';\nimport '../apis/definitions/AppTreeApi.esm.js';\nimport '@backstage/core-plugin-api';\nimport '../apis/definitions/SwappableComponentsApi.esm.js';\nimport '../apis/definitions/IconsApi.esm.js';\nimport '../apis/definitions/DialogApi.esm.js';\nimport '../apis/definitions/RouteResolutionApi.esm.js';\nimport '../apis/definitions/AnalyticsApi.esm.js';\nimport '../components/AppNodeProvider.esm.js';\nimport '../components/DefaultSwappableComponents.esm.js';\n\nconst componentDataRef = createExtensionDataRef().with({ id: \"core.sign-in-page.component\" });\nconst SignInPageBlueprint = createExtensionBlueprint({\n kind: \"sign-in-page\",\n attachTo: { id: \"app/root\", input: \"signInPage\" },\n output: [componentDataRef],\n dataRefs: {\n component: componentDataRef\n },\n *factory({\n loader\n }, { node }) {\n const ExtensionComponent = lazy(\n () => loader().then((component) => ({ default: component }))\n );\n yield componentDataRef((props) => /* @__PURE__ */ jsx(ExtensionBoundary, { node, children: /* @__PURE__ */ jsx(ExtensionComponent, { ...props }) }));\n }\n});\n\nexport { SignInPageBlueprint };\n//# sourceMappingURL=SignInPageBlueprint.esm.js.map\n","import '../wiring/coreExtensionData.esm.js';\nimport 'zod';\nimport 'zod-to-json-schema';\nimport { createExtensionDataRef } from '../wiring/createExtensionDataRef.esm.js';\nimport { createExtensionBlueprint } from '../wiring/createExtensionBlueprint.esm.js';\n\nconst themeDataRef = createExtensionDataRef().with({\n id: \"core.theme.theme\"\n});\nconst ThemeBlueprint = createExtensionBlueprint({\n kind: \"theme\",\n attachTo: { id: \"api:app/app-theme\", input: \"themes\" },\n output: [themeDataRef],\n dataRefs: {\n theme: themeDataRef\n },\n factory: ({ theme }) => [themeDataRef(theme)]\n});\n\nexport { ThemeBlueprint };\n//# sourceMappingURL=ThemeBlueprint.esm.js.map\n","import '../wiring/coreExtensionData.esm.js';\nimport 'zod';\nimport 'zod-to-json-schema';\nimport { createExtensionDataRef } from '../wiring/createExtensionDataRef.esm.js';\nimport { createExtensionBlueprint } from '../wiring/createExtensionBlueprint.esm.js';\n\nconst translationDataRef = createExtensionDataRef().with({ id: \"core.translation.translation\" });\nconst TranslationBlueprint = createExtensionBlueprint({\n kind: \"translation\",\n attachTo: { id: \"api:app/translations\", input: \"translations\" },\n output: [translationDataRef],\n dataRefs: {\n translation: translationDataRef\n },\n factory: ({\n resource\n }) => [translationDataRef(resource)]\n});\n\nexport { TranslationBlueprint };\n//# sourceMappingURL=TranslationBlueprint.esm.js.map\n","import '../wiring/coreExtensionData.esm.js';\nimport 'zod';\nimport 'zod-to-json-schema';\nimport { createExtensionDataRef } from '../wiring/createExtensionDataRef.esm.js';\nimport { createExtensionBlueprint, createExtensionBlueprintParams } from '../wiring/createExtensionBlueprint.esm.js';\n\nconst componentDataRef = createExtensionDataRef().with({ id: \"core.swappableComponent\" });\nconst SwappableComponentBlueprint = createExtensionBlueprint({\n kind: \"component\",\n attachTo: { id: \"api:app/swappable-components\", input: \"components\" },\n output: [componentDataRef],\n dataRefs: {\n component: componentDataRef\n },\n defineParams(params) {\n return createExtensionBlueprintParams(params);\n },\n factory: (params) => [\n componentDataRef({\n ref: params.component.ref,\n loader: params.loader\n })\n ]\n});\n\nexport { SwappableComponentBlueprint, componentDataRef };\n//# sourceMappingURL=SwappableComponentBlueprint.esm.js.map\n","const MESSAGE_MARKER = \"eHgtF5hmbrXyiEvo\";\nfunction describeParentCallSite(ErrorConstructor = Error) {\n const { stack } = new ErrorConstructor(MESSAGE_MARKER);\n if (!stack) {\n return \"<unknown>\";\n }\n const startIndex = stack.includes(MESSAGE_MARKER) ? stack.indexOf(\"\\n\") + 1 : 0;\n const secondEntryStart = stack.indexOf(\"\\n\", stack.indexOf(\"\\n\", startIndex) + 1) + 1;\n const secondEntryEnd = stack.indexOf(\"\\n\", secondEntryStart);\n const line = stack.substring(secondEntryStart, secondEntryEnd).trim();\n if (!line) {\n return \"unknown\";\n }\n if (line.includes(\"(\")) {\n return line.substring(line.indexOf(\"(\") + 1, line.indexOf(\")\"));\n }\n if (line.includes(\"@\")) {\n return line.substring(line.indexOf(\"@\") + 1);\n }\n return line;\n}\n\nexport { describeParentCallSite };\n//# sourceMappingURL=describeParentCallSite.esm.js.map\n","import { describeParentCallSite } from './describeParentCallSite.esm.js';\n\nfunction toInternalRouteRef(resource) {\n const r = resource;\n if (r.$$type !== \"@backstage/RouteRef\") {\n throw new Error(`Invalid RouteRef, bad type '${r.$$type}'`);\n }\n return r;\n}\nclass RouteRefImpl {\n constructor(params = [], creationSite, alias) {\n this.params = params;\n this.#params = params;\n this.#creationSite = creationSite;\n this.#alias = alias;\n }\n $$type = \"@backstage/RouteRef\";\n version = \"v1\";\n #id;\n #params;\n #creationSite;\n #alias;\n getParams() {\n return this.#params;\n }\n get alias() {\n return this.#alias;\n }\n getDescription() {\n if (this.#id) {\n return this.#id;\n }\n return `created at '${this.#creationSite}'`;\n }\n get #name() {\n return this.$$type.slice(\"@backstage/\".length);\n }\n setId(id) {\n if (!id) {\n throw new Error(`${this.#name} id must be a non-empty string`);\n }\n if (this.#id && this.#id !== id) {\n throw new Error(\n `${this.#name} was referenced twice as both '${this.#id}' and '${id}'`\n );\n }\n this.#id = id;\n }\n toString() {\n return `${this.#name}{${this.getDescription()}}`;\n }\n}\nfunction createRouteRef(config) {\n return new RouteRefImpl(\n config?.params,\n describeParentCallSite(),\n config?.aliasFor\n );\n}\n\nexport { RouteRefImpl, createRouteRef, toInternalRouteRef };\n//# sourceMappingURL=RouteRef.esm.js.map\n","import { toInternalRouteRef } from './RouteRef.esm.js';\n\nconst PARAM_PATTERN = /^\\w+$/;\nclass SubRouteRefImpl {\n constructor(path, params, parent) {\n this.path = path;\n this.#params = params;\n this.#parent = parent;\n }\n $$type = \"@backstage/SubRouteRef\";\n version = \"v1\";\n #params;\n #parent;\n getParams() {\n return this.#params;\n }\n getParent() {\n return this.#parent;\n }\n getDescription() {\n const parent = toInternalRouteRef(this.#parent);\n return `at ${this.path} with parent ${parent.getDescription()}`;\n }\n toString() {\n return `SubRouteRef{${this.getDescription()}}`;\n }\n}\nfunction createSubRouteRef(config) {\n const { path, parent } = config;\n const internalParent = toInternalRouteRef(parent);\n const parentParams = internalParent.getParams();\n const pathParams = path.split(\"/\").filter((p) => p.startsWith(\":\")).map((p) => p.substring(1));\n const params = [...parentParams, ...pathParams];\n if (parentParams.some((p) => pathParams.includes(p))) {\n throw new Error(\n \"SubRouteRef may not have params that overlap with its parent\"\n );\n }\n if (!path.startsWith(\"/\")) {\n throw new Error(`SubRouteRef path must start with '/', got '${path}'`);\n }\n if (path.endsWith(\"/\")) {\n throw new Error(`SubRouteRef path must not end with '/', got '${path}'`);\n }\n for (const param of pathParams) {\n if (!PARAM_PATTERN.test(param)) {\n throw new Error(`SubRouteRef path has invalid param, got '${param}'`);\n }\n }\n const subRouteRef = new SubRouteRefImpl(\n path,\n params,\n parent\n );\n return subRouteRef;\n}\n\nexport { SubRouteRefImpl, createSubRouteRef };\n//# sourceMappingURL=SubRouteRef.esm.js.map\n","import { RouteRefImpl } from './RouteRef.esm.js';\nimport { describeParentCallSite } from './describeParentCallSite.esm.js';\n\nclass ExternalRouteRefImpl extends RouteRefImpl {\n constructor(params = [], defaultTarget, creationSite) {\n super(params, creationSite);\n this.params = params;\n this.defaultTarget = defaultTarget;\n }\n $$type = \"@backstage/ExternalRouteRef\";\n getDefaultTarget() {\n return this.defaultTarget;\n }\n}\nfunction createExternalRouteRef(options) {\n return new ExternalRouteRefImpl(\n options?.params,\n options?.defaultTarget,\n describeParentCallSite()\n );\n}\n\nexport { createExternalRouteRef };\n//# sourceMappingURL=ExternalRouteRef.esm.js.map\n","import { useMemo } from 'react';\nimport { useLocation } from 'react-router-dom';\nimport '../apis/definitions/AppTreeApi.esm.js';\nimport { useApi } from '@backstage/core-plugin-api';\nimport '../apis/definitions/SwappableComponentsApi.esm.js';\nimport '../apis/definitions/IconsApi.esm.js';\nimport '../apis/definitions/DialogApi.esm.js';\nimport { routeResolutionApiRef } from '../apis/definitions/RouteResolutionApi.esm.js';\nimport '../apis/definitions/AnalyticsApi.esm.js';\n\nfunction useRouteRef(routeRef) {\n const { pathname } = useLocation();\n const routeResolutionApi = useApi(routeResolutionApiRef);\n const routeFunc = useMemo(\n () => routeResolutionApi.resolve(routeRef, { sourcePath: pathname }),\n [routeResolutionApi, routeRef, pathname]\n );\n return routeFunc;\n}\n\nexport { useRouteRef };\n//# sourceMappingURL=useRouteRef.esm.js.map\n","import { useParams } from 'react-router-dom';\n\nfunction useRouteRefParams(_routeRef) {\n return useParams();\n}\n\nexport { useRouteRefParams };\n//# sourceMappingURL=useRouteRefParams.esm.js.map\n","function createExtensionInput(extensionData, config) {\n if (process.env.NODE_ENV !== \"production\") {\n if (Array.isArray(extensionData)) {\n const seen = /* @__PURE__ */ new Set();\n const duplicates = [];\n for (const dataRef of extensionData) {\n if (seen.has(dataRef.id)) {\n duplicates.push(dataRef.id);\n } else {\n seen.add(dataRef.id);\n }\n }\n if (duplicates.length > 0) {\n throw new Error(\n `ExtensionInput may not have duplicate data refs: '${duplicates.join(\n \"', '\"\n )}'`\n );\n }\n }\n }\n return {\n $$type: \"@backstage/ExtensionInput\",\n extensionData,\n config: {\n singleton: Boolean(config?.singleton),\n optional: Boolean(config?.optional)\n },\n replaces: config?.replaces\n };\n}\n\nexport { createExtensionInput };\n//# sourceMappingURL=createExtensionInput.esm.js.map\n","import { OpaqueExtensionDefinition } from '../frontend-internal/src/wiring/InternalExtensionDefinition.esm.js';\n\nfunction resolveExtensionDefinition(definition, context) {\n const internalDefinition = OpaqueExtensionDefinition.toInternal(definition);\n const {\n name,\n kind,\n namespace: _skip1,\n override: _skip2,\n ...rest\n } = internalDefinition;\n const namespace = internalDefinition.namespace ?? context?.namespace;\n const namePart = name && namespace ? `${namespace}/${name}` : namespace || name;\n if (!namePart) {\n throw new Error(\n `Extension must declare an explicit namespace or name as it could not be resolved from context, kind=${kind} namespace=${namespace} name=${name}`\n );\n }\n const id = kind ? `${kind}:${namePart}` : namePart;\n return {\n ...rest,\n $$type: \"@backstage/Extension\",\n version: internalDefinition.version,\n id,\n toString() {\n return `Extension{id=${id}}`;\n }\n };\n}\n\nexport { resolveExtensionDefinition };\n//# sourceMappingURL=resolveExtensionDefinition.esm.js.map\n","import { OpaqueType } from '../../../opaque-internal/src/OpaqueType.esm.js';\n\nconst OpaqueFrontendPlugin = OpaqueType.create({\n type: \"@backstage/FrontendPlugin\",\n versions: [\"v1\"]\n});\n\nexport { OpaqueFrontendPlugin };\n//# sourceMappingURL=InternalFrontendPlugin.esm.js.map\n","import { resolveExtensionDefinition } from './resolveExtensionDefinition.esm.js';\nimport { OpaqueFrontendPlugin } from '../frontend-internal/src/wiring/InternalFrontendPlugin.esm.js';\nimport '../frontend-internal/src/wiring/InternalSwappableComponentRef.esm.js';\nimport { OpaqueExtensionDefinition } from '../frontend-internal/src/wiring/InternalExtensionDefinition.esm.js';\n\nfunction createFrontendPlugin(options) {\n const pluginId = options.pluginId;\n const extensions = new Array();\n const extensionDefinitionsById = /* @__PURE__ */ new Map();\n for (const def of options.extensions ?? []) {\n const internal = OpaqueExtensionDefinition.toInternal(def);\n const ext = resolveExtensionDefinition(def, { namespace: pluginId });\n extensions.push(ext);\n extensionDefinitionsById.set(ext.id, {\n ...internal,\n namespace: pluginId\n });\n }\n if (extensions.length !== extensionDefinitionsById.size) {\n const extensionIds = extensions.map((e) => e.id);\n const duplicates = Array.from(\n new Set(\n extensionIds.filter((id, index) => extensionIds.indexOf(id) !== index)\n )\n );\n throw new Error(\n `Plugin '${pluginId}' provided duplicate extensions: ${duplicates.join(\n \", \"\n )}`\n );\n }\n return OpaqueFrontendPlugin.createInstance(\"v1\", {\n id: pluginId,\n routes: options.routes ?? {},\n externalRoutes: options.externalRoutes ?? {},\n featureFlags: options.featureFlags ?? [],\n extensions,\n infoOptions: options.info,\n // This method is overridden when the plugin instance is installed in an app\n async info() {\n throw new Error(\n `Attempted to load plugin info for plugin '${pluginId}', but the plugin instance is not installed in an app`\n );\n },\n getExtension(id) {\n const ext = extensionDefinitionsById.get(id);\n if (!ext) {\n throw new Error(\n `Attempted to get non-existent extension '${id}' from plugin '${pluginId}'`\n );\n }\n return ext;\n },\n toString() {\n return `Plugin{id=${pluginId}}`;\n },\n withOverrides(overrides) {\n const overriddenExtensionIds = new Set(\n overrides.extensions.map(\n (e) => resolveExtensionDefinition(e, { namespace: pluginId }).id\n )\n );\n const nonOverriddenExtensions = (options.extensions ?? []).filter(\n (e) => !overriddenExtensionIds.has(\n resolveExtensionDefinition(e, { namespace: pluginId }).id\n )\n );\n return createFrontendPlugin({\n ...options,\n pluginId,\n extensions: [...nonOverriddenExtensions, ...overrides.extensions],\n info: {\n ...options.info,\n ...overrides.info\n }\n });\n }\n });\n}\n\nexport { createFrontendPlugin };\n//# sourceMappingURL=createFrontendPlugin.esm.js.map\n","import { resolveExtensionDefinition } from './resolveExtensionDefinition.esm.js';\nimport { OpaqueExtensionDefinition } from '../frontend-internal/src/wiring/InternalExtensionDefinition.esm.js';\n\nfunction createFrontendModule(options) {\n const { pluginId } = options;\n const extensions = new Array();\n const extensionDefinitionsById = /* @__PURE__ */ new Map();\n for (const def of options.extensions ?? []) {\n const internal = OpaqueExtensionDefinition.toInternal(def);\n const ext = resolveExtensionDefinition(def, { namespace: pluginId });\n extensions.push(ext);\n extensionDefinitionsById.set(ext.id, {\n ...internal,\n namespace: pluginId\n });\n }\n if (extensions.length !== extensionDefinitionsById.size) {\n const extensionIds = extensions.map((e) => e.id);\n const duplicates = Array.from(\n new Set(\n extensionIds.filter((id, index) => extensionIds.indexOf(id) !== index)\n )\n );\n throw new Error(\n `Plugin '${pluginId}' provided duplicate extensions: ${duplicates.join(\n \", \"\n )}`\n );\n }\n return {\n $$type: \"@backstage/FrontendModule\",\n version: \"v1\",\n pluginId,\n featureFlags: options.featureFlags ?? [],\n extensions,\n toString() {\n return `Module{pluginId=${pluginId}}`;\n }\n };\n}\n\nexport { createFrontendModule };\n//# sourceMappingURL=createFrontendModule.esm.js.map\n","import { describeParentCallSite } from '../routing/describeParentCallSite.esm.js';\n\nfunction createFrontendFeatureLoader(options) {\n const description = `created at '${describeParentCallSite()}'`;\n return {\n $$type: \"@backstage/FrontendFeatureLoader\",\n version: \"v1\",\n description,\n toString() {\n return `FeatureLoader{description=${description}}`;\n },\n async loader(deps) {\n const it = await options.loader(deps);\n const result = new Array();\n for await (const item of it) {\n if (isFeatureOrLoader(item)) {\n result.push(item);\n } else if (\"default\" in item) {\n result.push(item.default);\n } else {\n throw new Error(`Invalid item \"${item}\"`);\n }\n }\n return result;\n }\n };\n}\nfunction isFeatureOrLoader(obj) {\n if (obj !== null && typeof obj === \"object\" && \"$$type\" in obj) {\n return obj.$$type === \"@backstage/FrontendPlugin\" || obj.$$type === \"@backstage/FrontendModule\" || obj.$$type === \"@backstage/FrontendFeatureLoader\";\n }\n return false;\n}\n\nexport { createFrontendFeatureLoader };\n//# sourceMappingURL=createFrontendFeatureLoader.esm.js.map\n"],"names":["AnalyticsReactContext","createVersionedContext","useAnalyticsContext","theContext","useContext","pluginId","extensionId","theValue","atVersion","Error","AnalyticsContext","options","attributes","children","combinedValue","versionedCombinedValue","createVersionedValueMap","jsx","Provider","value","analyticsApiRef","createApiRef","id","globalEvents","getOrCreateGlobalSingleton","mostRecentGatheredNavigation","mostRecentRoutableExtensionRender","beforeUnloadRegistered","Tracker","constructor","analyticsApi","context","this","addEventListener","captureEvent","once","passive","setContext","action","subject","e","console","warn","useAnalytics","trackerRef","useRef","useApi","error","name","useAnalyticsApi","tracker","current","appTreeApiRef","swappableComponentsApiRef","iconsApiRef","dialogApiRef","routeResolutionApiRef","createExtensionDataRef","createRef","refId","Object","assign","$$type","config","optional","toString","Boolean","with","createExtensionDataContainer","values","contextName","declaredRefs","Symbol","iterator","container","Map","verifyRefs","map","ref","output","delete","set","remainingRefs","Array","from","filter","length","join","get","expectArray","expectItem","resolveInputOverrides","declaredInputs","inputs","inputOverrides","newInputs","hasOwn","declaredInput","providedData","singleton","originalInput","providedContainer","extensionData","node","isArray","withNodesCount","d","data","i","formatIssue","issue","code","unionErrors","issues","message","path","OpaqueType","create","type","Set","versions","TPublic","TInternal","isType","toInternal","TypeError","has","version","expected","createInstance","props","String","OpaqueExtensionDefinition","ctxParamsSymbol","createExtension","schemaDeclaration","schema","configSchema","innerZ","object","fromEntries","entries","k","v","parse","input","result","safeParse","success","createSchemaFromZod","T","kind","attachTo","disabled","factory","parts","push","flat","a","override","overrideOptions","params","apis","parentResult","innerContext","deduplicatedResult","item","OpaqueBlueprintParams","createExtensionBlueprintParams","unwrapParamsFactory","defineParams","paramDefinition","unwrapParams","ctx","overrideParams","createExtensionBlueprint","dataRefs","make","args","makeWithOverrides","innerParams","factoryDataRef","AnalyticsImplementationBlueprint","ApiBlueprint","coreExtensionData","reactElement","routePath","routeRef","AppRootElementBlueprint","element","componentDataRef","AppRootWrapperBlueprint","component","iconsDataRef","IconBundleBlueprint","icons","NavContentBlueprint","targetDataRef","NavItemBlueprint","target","icon","title","z","string","OpaqueSwappableComponentRef","useComponentRefApi","createSwappableComponent","FallbackComponent","p","TProps","TExternalProps","defaultComponent","lazy","async","default","loader","transformProps","ComponentRefImpl","api","internalRef","Component2","innerProps","Component","getComponent","Progress","NotFoundErrorPage","ErrorDisplay","ErrorBoundary","getDerivedStateFromError","state","handleErrorReset","setState","render","plugin","resetError","CONTEXT_KEY","AppNodeContext","AppNodeProvider","versionedValue","useAppNode","versionedContext","useVersionedContext","RouteTracker","enabled","analytics","useEffect","Fragment","ExtensionBoundary","hasRoutePathOutput","instance","getData","spec","Suspense","fallback","ExtensionBoundary2","appNode","ExtensionComponent","then","lazyComponent","PageBlueprint","RouterBlueprint","SignInPageBlueprint","themeDataRef","ThemeBlueprint","theme","translationDataRef","TranslationBlueprint","translation","resource","SwappableComponentBlueprint","MESSAGE_MARKER","describeParentCallSite","ErrorConstructor","stack","startIndex","includes","indexOf","secondEntryStart","secondEntryEnd","line","substring","trim","toInternalRouteRef","r","RouteRefImpl","creationSite","alias","getParams","getDescription","slice","setId","createRouteRef","aliasFor","PARAM_PATTERN","SubRouteRefImpl","parent","getParent","createSubRouteRef","parentParams","pathParams","split","startsWith","some","endsWith","param","test","ExternalRouteRefImpl","defaultTarget","super","getDefaultTarget","createExternalRouteRef","useRouteRef","pathname","useLocation","routeResolutionApi","useMemo","resolve","sourcePath","useRouteRefParams","_routeRef","useParams","createExtensionInput","replaces","resolveExtensionDefinition","definition","internalDefinition","namespace","_skip1","_skip2","rest","namePart","OpaqueFrontendPlugin","createFrontendPlugin","extensions","extensionDefinitionsById","def","internal","ext","size","extensionIds","duplicates","index","routes","externalRoutes","featureFlags","infoOptions","info","getExtension","withOverrides","overrides","overriddenExtensionIds","nonOverriddenExtensions","createFrontendModule","createFrontendFeatureLoader","description","deps","it","isFeatureOrLoader","obj"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunkinternal_plugin_kuadrant=self.webpackChunkinternal_plugin_kuadrant||[]).push([[7270],{12229:(e,t,a)=>{a.d(t,{Z:()=>g});var s=a(31085),r=a(95478),n=a.n(r),i=a(10394),o=a(72501),l=a(64947),c=a(37197),d=a(69621),u=a(12981),h=a(86901),p=a(69076),m=a(58837),y=a(6924),f=a(23164);const A=(0,m.A)(e=>({root:{width:240,minWidth:240,padding:e.spacing(2),borderRight:`1px solid ${e.palette.divider}`,backgroundColor:e.palette.background.paper,height:"100%",overflowY:"auto"},sectionTitle:{fontWeight:600,fontSize:"0.75rem",textTransform:"uppercase",letterSpacing:"0.05em",color:e.palette.text.secondary,marginBottom:e.spacing(1),display:"flex",alignItems:"center",justifyContent:"space-between",cursor:"pointer",userSelect:"none"},filterSection:{marginBottom:e.spacing(2)},checkbox:{padding:e.spacing(.5)},checkboxLabel:{fontSize:"0.875rem"},clearButton:{marginTop:e.spacing(2)},count:{fontSize:"0.75rem",color:e.palette.text.secondary,marginLeft:e.spacing(1)}})),g=({sections:e,filters:t,onChange:a,onClear:r})=>{const m=A(),[g,x]=n().useState(new Set(e.filter(e=>e.collapsed).map(e=>e.id))),v=Object.values(t).some(e=>e.length>0);return(0,s.jsxs)(i.A,{className:m.root,children:[(0,s.jsxs)(i.A,{display:"flex",justifyContent:"space-between",alignItems:"center",mb:2,children:[(0,s.jsx)(o.A,{variant:"subtitle2",children:"Filters"}),v&&(0,s.jsx)(l.A,{size:"small",color:"primary",onClick:()=>{const t={};e.forEach(e=>{t[e.id]=[]}),a(t),null==r||r()},children:"Clear all"})]}),(0,s.jsx)(c.A,{}),e.map(e=>{const r=g.has(e.id),n=(t[e.id]||[]).length;return(0,s.jsxs)(i.A,{className:m.filterSection,mt:2,children:[(0,s.jsxs)(i.A,{className:m.sectionTitle,onClick:()=>{return t=e.id,void x(e=>{const a=new Set(e);return a.has(t)?a.delete(t):a.add(t),a});var t},children:[(0,s.jsxs)(i.A,{display:"flex",alignItems:"center",children:[(0,s.jsx)("span",{children:e.title}),n>0&&(0,s.jsxs)("span",{className:m.count,children:["(",n,")"]})]}),r?(0,s.jsx)(y.A,{fontSize:"small"}):(0,s.jsx)(f.A,{fontSize:"small"})]}),(0,s.jsx)(d.A,{in:!r,children:(0,s.jsx)(u.A,{children:e.options.map(r=>(0,s.jsx)(h.A,{control:(0,s.jsx)(p.A,{checked:(t[e.id]||[]).includes(r.value),onChange:()=>((e,s)=>{const r=t[e]||[],n=r.includes(s)?r.filter(e=>e!==s):[...r,s];a({...t,[e]:n})})(e.id,r.value),size:"small",className:m.checkbox,color:"primary"}),label:(0,s.jsxs)(i.A,{display:"flex",alignItems:"center",children:[(0,s.jsx)("span",{className:m.checkboxLabel,children:r.label}),void 0!==r.count&&(0,s.jsxs)("span",{className:m.count,children:["(",r.count,")"]})]})},r.value))})})]},e.id)})]})}},16397:(e,t,a)=>{a.d(t,{e:()=>v});var s=a(31085),r=a(95478),n=a(76891),i=a(61477),o=a(46805),l=a(10394),c=a(72501),d=a(95061),u=a(48543),h=a(81215),p=a(26343),m=a(16249),y=a(93453),f=a(64947),A=a(78467),g=a(22097),x=a(70980);const v=({open:e,onClose:t,onSuccess:a,request:v,availablePlans:j})=>{const b=(0,g.useApi)(x.s),[P,w]=(0,r.useState)(""),[k,S]=(0,r.useState)(""),[$,R]=(0,r.useState)(!1),[C,q]=(0,r.useState)("");(0,r.useEffect)(()=>{e&&v&&(w(v.spec.planTier||""),S(v.spec.useCase||""),q(""))},[e,v]);const I=()=>{$||(q(""),t())};return(0,s.jsxs)(n.A,{open:e,onClose:I,maxWidth:"sm",fullWidth:!0,children:[(0,s.jsx)(i.A,{children:"Edit API Key"}),(0,s.jsxs)(o.A,{children:[C&&(0,s.jsx)(l.A,{mb:2,p:2,bgcolor:"error.main",color:"error.contrastText",borderRadius:1,children:(0,s.jsx)(c.A,{variant:"body2",children:C})}),(0,s.jsxs)(d.A,{fullWidth:!0,margin:"normal",children:[(0,s.jsx)(u.A,{children:"Tier"}),(0,s.jsx)(h.A,{value:P,onChange:e=>w(e.target.value),disabled:$,children:j.map(e=>{const t=Object.entries(e.limits||{}).map(([e,t])=>`${t} per ${e}`).join(", ");return(0,s.jsxs)(p.A,{value:e.tier,children:[e.tier," ",t?`(${t})`:""]},e.tier)})})]}),(0,s.jsx)(m.A,{label:"Use Case",placeholder:"Describe how you plan to use this API",multiline:!0,rows:3,fullWidth:!0,margin:"normal",value:k,onChange:e=>S(e.target.value),disabled:$,helperText:"Explain your intended use of this API for admin review"})]}),(0,s.jsxs)(y.A,{children:[(0,s.jsx)(f.A,{onClick:I,disabled:$,children:"Cancel"}),(0,s.jsx)(f.A,{onClick:async()=>{if(P){q(""),R(!0);try{const e={spec:{planTier:P,useCase:k.trim()}};await b.updateRequest(v.metadata.name,v.metadata.namespace,e),a(),t()}catch(e){console.error("Error updating API key request:",e),q(e instanceof Error?e.message:"Unknown error occurred")}finally{R(!1)}}else q("Please select a tier")},color:"primary",variant:"contained",disabled:!P||$,startIcon:$?(0,s.jsx)(A.A,{size:16,color:"inherit"}):void 0,children:$?"Saving...":"Save Changes"})]})]})}},37270:(e,t,a)=>{a.r(t),a.d(t,{MyApiKeysPage:()=>Y});var s=a(31085),r=a(95478),n=a(289),i=a(15831),o=a(45210),l=a(46681),c=a(49634),d=a(37725),u=a(42367),h=a(25010),p=a(22097),m=a(70980),y=a(91638),f=a(58837),A=a(10394),g=a(72501),x=a(67720),v=a(71677),j=a(29365),b=a(78467),P=a(64947),w=a(37757),k=a(26343),S=a(76891),$=a(61477),R=a(46805),C=a(93453),q=a(4387),I=a(95061),T=a(48543),B=a(81215),W=a(51253),E=a(16249);const F=({open:e,onClose:t,onSuccess:a})=>{var n;const i=(0,p.useApi)(p.configApiRef),o=(0,p.useApi)(p.fetchApiRef),l=(0,p.useApi)(p.alertApiRef),c=(0,p.useApi)(p.identityApiRef),d=i.getString("backend.baseUrl"),[u,h]=(0,r.useState)(""),[m,f]=(0,r.useState)(""),[A,x]=(0,r.useState)(""),[v,j]=(0,r.useState)(!1),{value:w,loading:q}=(0,y.A)(async()=>{if(!e)return[];const t=await o.fetch(`${d}/api/kuadrant/apiproducts`);if(!t.ok)throw new Error("Failed to fetch API products");return((await t.json()).items||[]).filter(e=>{var t;return"Published"===(null===(t=e.spec)||void 0===t?void 0:t.publishStatus)})},[d,o,e]),{value:F}=(0,y.A)(async()=>`${(await c.getBackstageIdentity()).userEntityRef.split("/")[1]||"unknown"}@example.com`,[c]),U=null==w?void 0:w.find(e=>`${e.metadata.namespace}/${e.metadata.name}`===u),N=(null==U||null===(n=U.status)||void 0===n?void 0:n.discoveredPlans)||[],z=()=>{h(""),f(""),x(""),t()};return(0,s.jsxs)(S.A,{open:e,onClose:z,maxWidth:"sm",fullWidth:!0,children:[(0,s.jsx)($.A,{children:"Request API key"}),(0,s.jsxs)(R.A,{children:[(0,s.jsx)(g.A,{variant:"body2",color:"textSecondary",children:"Submit your request to generate an API key."}),(0,s.jsxs)(I.A,{fullWidth:!0,margin:"normal",disabled:v||q,children:[(0,s.jsx)(T.A,{id:"api-select-label",required:!0,children:"API"}),(0,s.jsx)(B.A,{labelId:"api-select-label",value:u,onChange:e=>{h(e.target.value),f("")},disabled:v||q,"data-testid":"api-select",children:q?(0,s.jsx)(k.A,{disabled:!0,children:"Loading..."}):null==w?void 0:w.map(e=>(0,s.jsx)(k.A,{value:`${e.metadata.namespace}/${e.metadata.name}`,children:e.metadata.name},`${e.metadata.namespace}/${e.metadata.name}`))}),(0,s.jsx)(W.A,{children:"Select one API. Please submit separate requests for multiple APIs."})]}),(0,s.jsxs)(I.A,{fullWidth:!0,margin:"normal",disabled:v||!u,required:!0,children:[(0,s.jsx)(T.A,{id:"tier-select-label",children:"Tiers"}),(0,s.jsx)(B.A,{labelId:"tier-select-label",value:m,onChange:e=>f(e.target.value),disabled:v||!u,"data-testid":"tier-select",children:u?0===N.length?(0,s.jsx)(k.A,{disabled:!0,children:"No tiers available"}):N.map(e=>{const t=Object.entries(e.limits||{}).map(([e,t])=>`${t} per ${e}`).join(", ");return(0,s.jsxs)(k.A,{value:e.tier,children:[e.tier," ",t?`(${t})`:""]},e.tier)}):(0,s.jsx)(k.A,{disabled:!0,children:"Select an API first"})}),(0,s.jsx)(W.A,{children:"Select an API to view available tiers."})]}),(0,s.jsx)(E.A,{label:"Use case",placeholder:"Briefly describe your specific use case of using this API key",multiline:!0,rows:2,fullWidth:!0,margin:"normal",value:A,onChange:e=>x(e.target.value),disabled:v,inputProps:{"data-testid":"usecase-input"}})]}),(0,s.jsxs)(C.A,{children:[(0,s.jsx)(P.A,{onClick:z,disabled:v,"data-testid":"cancel-button",children:"Cancel"}),(0,s.jsx)(P.A,{onClick:async()=>{if(!u||!m)return;const[e,t]=u.split("/");j(!0);try{const s=await o.fetch(`${d}/api/kuadrant/requests`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiProductName:t,namespace:e,planTier:m,useCase:A.trim()||"",userEmail:F||"unknown"})});if(!s.ok){let a;try{a=await s.json()}catch{a={error:`Server returned ${s.status} ${s.statusText}`}}console.error("Backend error response:",{status:s.status,statusText:s.statusText,errorData:a,requestBody:{apiProductName:t,namespace:e,planTier:m,useCase:A.trim()||"",userEmail:F||"unknown"}});const r=a.error||a.message||`Server returned ${s.status}`;let n=r;if(r.includes("spec.requestedBy.email"))n="Invalid email format. Please contact your administrator to update your profile email.";else if(r.includes("is invalid:")){const e=r.match(/is invalid: (.+?)(?:\s+\(|$)/);e&&(n=`Validation error: ${e[1]}`)}else 403===s.status?n="You do not have permission to request access to this API.":404===s.status?n="The selected API or tier was not found.":s.status>=500&&(n=`Server error: ${r}`);throw new Error(n)}l.post({message:"API key requested successfully",severity:"success",display:"transient"}),z(),a()}catch(e){const t=e instanceof Error?e.message:"unknown error occurred";console.error("Failed to create API key request:",{error:e,selectedApi:u,selectedTier:m,userEmail:F}),l.post({message:`Failed to request API key: ${t}`,severity:"error",display:"permanent"})}finally{j(!1)}},color:"primary",variant:"contained",disabled:!u||!m||v,startIcon:v?(0,s.jsx)(b.A,{size:16,color:"inherit"}):void 0,"data-testid":"submit-button",children:v?"Submitting...":"Request"})]})]})};var U=a(32269),N=a(61524),z=a(99594),K=a(77225),O=a(39590),M=a(16397),D=a(63221),L=a(12229),J=a(46299);const _=(0,f.A)(e=>({container:{display:"flex",height:"100%",minHeight:400},tableContainer:{flex:1,overflow:"auto",padding:10},useCasePanel:{padding:e.spacing(2),backgroundColor:e.palette.background.default},useCaseLabel:{fontWeight:600,marginBottom:e.spacing(1),color:e.palette.text.secondary,textTransform:"uppercase",fontSize:"0.75rem"},rejectedBanner:{backgroundColor:e.palette.error.light,border:`1px solid ${e.palette.error.main}`,borderRadius:e.shape.borderRadius,padding:e.spacing(1.5,2),marginBottom:e.spacing(2),display:"flex",alignItems:"center",gap:e.spacing(1)}})),H=({request:e})=>{var t,a;const r=_(),n="Rejected"===(null===(t=e.status)||void 0===t?void 0:t.phase),i=(null===(a=e.spec.apiProductRef)||void 0===a?void 0:a.name)||"unknown";return(0,s.jsxs)(A.A,{className:r.useCasePanel,onClick:e=>e.stopPropagation(),children:[n&&(0,s.jsxs)(A.A,{className:r.rejectedBanner,children:[(0,s.jsx)(K.A,{color:"error",fontSize:"small"}),(0,s.jsxs)(g.A,{variant:"body2",children:["This API key was rejected."," ",(0,s.jsx)(d.N_,{to:`/catalog/default/api/${i}/api-keys`,children:"Request a new API key"})]})]}),(0,s.jsx)(g.A,{className:r.useCaseLabel,children:"Use Case"}),(0,s.jsx)(g.A,{variant:"body2",children:e.spec.useCase||"No use case provided"})]})},V=()=>{var e,t;const a=_(),n=(0,c.useNavigate)(),i=(0,p.useApi)(m.s),o=(0,p.useApi)(p.alertApiRef),[l,f]=(0,r.useState)(!1),[I,T]=(0,r.useState)(new Set),[B,W]=(0,r.useState)(null),[E,V]=(0,r.useState)(null),[Y,Z]=(0,r.useState)({open:!1,request:null,plans:[]}),[X,G]=(0,r.useState)(0),[Q,ee]=(0,r.useState)(null),[te,ae]=(0,r.useState)({open:!1,request:null}),[se,re]=(0,r.useState)(new Map),[ne,ie]=(0,r.useState)(new Set),[oe,le]=(0,r.useState)(new Set),[ce,de]=(0,r.useState)(!1),[ue,he]=(0,r.useState)(null),[pe,me]=(0,r.useState)(new Set),[ye,fe]=(0,r.useState)({status:[],apiProduct:[],tier:[]}),{value:Ae,loading:ge,error:xe}=(0,y.A)(async()=>{const[e,t]=await Promise.all([i.getRequests(),i.getApiProducts()]),a=e.items||[],s=t.items||[],r=new Map;return s.forEach(e=>{var t;const a=`${e.metadata.namespace}/${e.metadata.name}`,s=(null===(t=e.metadata.annotations)||void 0===t?void 0:t["backstage.io/owner"])||"unknown";r.set(a,s)}),{requests:a,products:s,ownerMap:r}},[i,X]),ve=(0,r.useMemo)(()=>(null==Ae?void 0:Ae.requests)?Ae.requests.filter(e=>!pe.has(e.metadata.name)):[],[null==Ae?void 0:Ae.requests,pe]),je=(0,r.useMemo)(()=>{const e={Approved:0,Pending:0,Rejected:0},t=new Map,a=new Map;return ve.forEach(s=>{var r,n;const i=(null===(r=s.status)||void 0===r?void 0:r.phase)||"Pending";e[i]++;const o=(null===(n=s.spec.apiProductRef)||void 0===n?void 0:n.name)||"unknown";t.set(o,(t.get(o)||0)+1);const l=s.spec.planTier||"unknown";a.set(l,(a.get(l)||0)+1)}),[{id:"status",title:"Status",options:[{value:"Approved",label:"Active",count:e.Approved},{value:"Pending",label:"Pending",count:e.Pending},{value:"Rejected",label:"Rejected",count:e.Rejected}]},{id:"apiProduct",title:"API Product",options:Array.from(t.entries()).map(([e,t])=>({value:e,label:e,count:t})),collapsed:t.size>5},{id:"tier",title:"Tier",options:Array.from(a.entries()).map(([e,t])=>({value:e,label:e.charAt(0).toUpperCase()+e.slice(1),count:t}))}]},[ve]),be=(0,r.useMemo)(()=>ve.filter(e=>{if(ye.status.length>0){var t;const a=(null===(t=e.status)||void 0===t?void 0:t.phase)||"Pending";if(!ye.status.includes(a))return!1}if(ye.apiProduct.length>0){var a;const t=(null===(a=e.spec.apiProductRef)||void 0===a?void 0:a.name)||"unknown";if(!ye.apiProduct.includes(t))return!1}if(ye.tier.length>0){const t=e.spec.planTier||"unknown";if(!ye.tier.includes(t))return!1}return!0}),[ve,ye]),Pe=e=>{T(t=>{const a=new Set(t);return a.has(e)?a.delete(e):a.add(e),a})},we=()=>{W(null),V(null)},ke=async()=>{if(!E)return;const e=E;we();try{var t,a;const s=null===(t=e.spec.apiProductRef)||void 0===t?void 0:t.name,r=e.metadata.namespace,n=(null===(a=(await i.getApiProduct(r,s)).status)||void 0===a?void 0:a.discoveredPlans)||[];Z({open:!0,request:e,plans:n})}catch(e){console.error("Error fetching plans:",e),Z({open:!0,request:E,plans:[]});const t=e instanceof Error?e.message:"unknown error occurred";o.post({message:`Failed to fetch Plans. ${t}`,severity:"error",display:"transient"})}},Se=()=>{if(!E)return;const e=E;we(),ae({open:!0,request:e})},$e=[{title:"API Product",field:"spec.apiProductRef.name",render:e=>{var t;const a=(null===(t=e.spec.apiProductRef)||void 0===t?void 0:t.name)||"unknown";return(0,s.jsx)(d.N_,{to:`/catalog/default/api/${a}/api-keys`,children:(0,s.jsx)("strong",{children:a})})}},{title:"Owner",field:"owner",render:e=>{var t,a;const r=`${e.metadata.namespace}/${null===(t=e.spec.apiProductRef)||void 0===t?void 0:t.name}`,n=((null==Ae||null===(a=Ae.ownerMap)||void 0===a?void 0:a.get(r))||"unknown").replace(/^user:default\//,"");return(0,s.jsx)(g.A,{variant:"body2",children:n})}},{title:"Status",field:"status.phase",render:e=>{var t;const a=(null===(t=e.status)||void 0===t?void 0:t.phase)||"Pending",r="Approved"===a?"Active":a;return(0,s.jsx)(x.A,{label:r,size:"small",style:(0,J.g9)(a)})}},{title:"Tier",field:"spec.planTier",render:e=>(0,s.jsx)(x.A,{label:e.spec.planTier,size:"small",variant:"outlined"})},{title:"API Key",field:"status.secretRef",filtering:!1,render:e=>{var t,a,r,n;if("Approved"!==(null===(t=e.status)||void 0===t?void 0:t.phase))return(0,s.jsx)(g.A,{variant:"body2",color:"textSecondary",children:"-"});const i=`${e.metadata.namespace}/${e.metadata.name}`,l=null===(r=e.status)||void 0===r||null===(a=r.secretRef)||void 0===a?void 0:a.name,c=I.has(e.metadata.name),d=ne.has(i),u=se.get(i),h=!1!==(null===(n=e.status)||void 0===n?void 0:n.canReadSecret),p=oe.has(i)||!h;return l?p&&!u?(0,s.jsx)(v.Ay,{title:"This API key has already been viewed and cannot be retrieved again",children:(0,s.jsxs)(A.A,{display:"flex",alignItems:"center",children:[(0,s.jsx)(g.A,{variant:"body2",color:"textSecondary",style:{fontFamily:"monospace",marginRight:8},children:"Already viewed"}),(0,s.jsx)(N.A,{fontSize:"small",color:"disabled"})]})}):(0,s.jsxs)(A.A,{display:"flex",alignItems:"center",style:{gap:8},children:[(0,s.jsx)(A.A,{fontFamily:"monospace",fontSize:"0.875rem",children:d?"Loading...":c&&u?u:"•".repeat(20)+"..."}),c&&u&&(0,s.jsx)(v.Ay,{title:"Copy to clipboard",children:(0,s.jsx)(j.A,{size:"small",onClick:async()=>{u&&(await navigator.clipboard.writeText(u),o.post({message:"API key copied to clipboard",severity:"success",display:"transient"}))},children:(0,s.jsx)(z.A,{fontSize:"small"})})}),(0,s.jsx)(v.Ay,{title:c?"Hide API key":"Reveal API key (one-time only)",children:(0,s.jsx)("span",{children:(0,s.jsx)(j.A,{size:"small",onClick:()=>{c?(((e,t)=>{const a=`${e}/${t}`;re(e=>{const t=new Map(e);return t.delete(a),t})})(e.metadata.namespace,e.metadata.name),Pe(e.metadata.name)):p||(he({namespace:e.metadata.namespace,name:e.metadata.name}),de(!0))},disabled:d||p&&!u,children:c?(0,s.jsx)(N.A,{fontSize:"small"}):(0,s.jsx)(U.A,{fontSize:"small"})})})})]}):(0,s.jsx)(g.A,{variant:"body2",color:"textSecondary",children:"Awaiting secret..."})}},{title:"Requested",field:"metadata.creationTimestamp",render:e=>{if(!e.metadata.creationTimestamp)return(0,s.jsx)(g.A,{variant:"body2",children:"-"});const t=new Date(e.metadata.creationTimestamp);return(0,s.jsx)(g.A,{variant:"body2",children:t.toLocaleDateString()})}},{title:"Actions",filtering:!1,width:"100px",render:e=>Q===e.metadata.name?(0,s.jsx)(b.A,{size:20}):(0,s.jsxs)(A.A,{display:"flex",style:{gap:4},children:[(0,s.jsx)(v.Ay,{title:"View details",children:(0,s.jsx)(j.A,{size:"small",onClick:t=>{t.stopPropagation(),n(`/kuadrant/api-keys/${e.metadata.namespace}/${e.metadata.name}`)},children:(0,s.jsx)(U.A,{fontSize:"small"})})}),(0,s.jsx)(v.Ay,{title:"Delete",children:(0,s.jsx)(j.A,{size:"small",onClick:t=>{t.stopPropagation(),ae({open:!0,request:e})},children:(0,s.jsx)(O.A,{fontSize:"small"})})})]})}],Re=(0,r.useMemo)(()=>[{render:e=>{var t;const a=e.rowData;return(null==a||null===(t=a.metadata)||void 0===t?void 0:t.name)?(0,s.jsx)(H,{request:a}):(0,s.jsx)(A.A,{})}}],[]);return ge?(0,s.jsx)(A.A,{p:2,children:[...Array(5)].map((e,t)=>(0,s.jsx)(A.A,{p:2,children:(0,s.jsx)(q.A,{variant:"text",width:"100%"})},t))}):xe?(0,s.jsx)(u._,{error:xe}):(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(A.A,{display:"flex",justifyContent:"flex-end",mb:2,px:2,children:(0,s.jsx)(P.A,{variant:"contained",color:"primary",onClick:()=>f(!0),"data-testid":"request-access-button",children:"Request Access"})}),(0,s.jsxs)(A.A,{className:a.container,children:[(0,s.jsx)(L.Z,{sections:je,filters:ye,onChange:fe}),(0,s.jsx)(A.A,{className:a.tableContainer,children:0===ve.length?(0,s.jsx)(A.A,{p:4,textAlign:"center",children:(0,s.jsx)(g.A,{variant:"body1",color:"textSecondary",gutterBottom:!0,children:"No API keys found. Request access to an API to get started."})}):0===be.length?(0,s.jsx)(A.A,{p:4,textAlign:"center",children:(0,s.jsx)(g.A,{variant:"body1",color:"textSecondary",children:"No API keys match the selected filters."})}):(0,s.jsx)(h.X,{options:{paging:be.length>10,pageSize:20,search:!0,filtering:!1,debounceInterval:300,toolbar:!0,emptyRowsWhenPaging:!1},columns:$e,data:be.map(e=>({...e,id:e.metadata.name})),detailPanel:Re})})]}),(0,s.jsx)(w.A,{id:"myapikeys-menu",open:Boolean(B),onClose:we,anchorReference:"anchorPosition",anchorPosition:B||{top:0,left:0},children:E&&(()=>{const e=[];var t;return e.push((0,s.jsx)(k.A,{onClick:()=>{n(`/kuadrant/api-keys/${E.metadata.namespace}/${E.metadata.name}`),we()},children:"View Details"},"view")),(t=E).status&&"Pending"!==t.status.phase||e.push((0,s.jsx)(k.A,{onClick:ke,children:"Edit"},"edit")),e.push((0,s.jsx)(k.A,{onClick:Se,children:"Delete"},"delete")),e})()}),Y.request&&(0,s.jsx)(M.e,{open:Y.open,request:Y.request,availablePlans:Y.plans,onClose:()=>Z({open:!1,request:null,plans:[]}),onSuccess:()=>{Z({open:!1,request:null,plans:[]}),G(e=>e+1)}}),(0,s.jsx)(D.K,{open:te.open,title:"Delete API Key",description:`Are you sure you want to delete this API key for ${(null===(t=te.request)||void 0===t||null===(e=t.spec.apiProductRef)||void 0===e?void 0:e.name)||"this API"}?`,deleting:null!==Q,onConfirm:async()=>{if(!te.request)return;const e=te.request,t=e.metadata.name;me(e=>new Set(e).add(t)),ee(t);try{await i.deleteRequest(e.metadata.namespace,e.metadata.name),G(e=>e+1),o.post({message:"API key deleted",severity:"success",display:"transient"}),ae({open:!1,request:null})}catch(e){console.error("Error deleting request:",e),me(e=>{const a=new Set(e);return a.delete(t),a});const a=e instanceof Error?e.message:"unknown error occurred";o.post({message:`Failed to delete APIKey. ${a}`,severity:"error",display:"transient"})}finally{ee(null)}},onCancel:()=>{ae({open:!1,request:null})}}),(0,s.jsxs)(S.A,{open:ce,onClose:()=>{de(!1),he(null)},maxWidth:"sm",children:[(0,s.jsx)($.A,{children:(0,s.jsxs)(A.A,{display:"flex",alignItems:"center",children:[(0,s.jsx)(K.A,{color:"primary",style:{marginRight:8}}),"View API Key"]})}),(0,s.jsxs)(R.A,{children:[(0,s.jsxs)(g.A,{variant:"body1",paragraph:!0,children:["This API key can only be viewed ",(0,s.jsx)("strong",{children:"once"}),". After you reveal it, you will not be able to retrieve it again."]}),(0,s.jsx)(g.A,{variant:"body2",color:"textSecondary",children:"Make sure to copy and store it securely before closing this view."})]}),(0,s.jsxs)(C.A,{children:[(0,s.jsx)(P.A,{onClick:()=>{de(!1),he(null)},children:"Cancel"}),(0,s.jsx)(P.A,{variant:"contained",color:"primary",onClick:()=>{ue&&((async(e,t)=>{const a=`${e}/${t}`;if(!ne.has(a)){ie(e=>new Set(e).add(a));try{const s=await i.getApiKeySecret(e,t);re(e=>new Map(e).set(a,s.apiKey)),le(e=>new Set(e).add(a))}catch(e){const t=e instanceof Error?e.message:"unknown error occurred";t.includes("403")||t.includes("already been viewed")?(le(e=>new Set(e).add(a)),o.post({message:"This API key has already been viewed and cannot be retrieved again.",severity:"warning",display:"transient"})):o.post({message:`Failed to fetch api key: ${t}`,severity:"error",display:"transient"})}finally{ie(e=>{const t=new Set(e);return t.delete(a),t})}}})(ue.namespace,ue.name),Pe(ue.name)),de(!1),he(null)},children:"Reveal API Key"})]})]}),(0,s.jsx)(F,{open:l,onClose:()=>f(!1),onSuccess:()=>{f(!1),G(e=>e+1)}})]})},Y=()=>(0,s.jsxs)(n.Y,{themeId:"tool",children:[(0,s.jsx)(i.Y,{title:"My API Keys",subtitle:"View and manage your API keys",children:(0,s.jsx)(o.Y,{children:"Manage your API keys and access requests"})}),(0,s.jsx)(l.U,{children:(0,s.jsx)(V,{})})]})},46299:(e,t,a)=>{a.d(t,{ee:()=>n,g9:()=>s,uU:()=>r});const s=e=>{const t={border:"none"};switch(e){case"Approved":return{...t,backgroundColor:"#1976d2",color:"#fff"};case"Rejected":return{...t,backgroundColor:"#d32f2f",color:"#fff"};default:return{...t,backgroundColor:"#9c27b0",color:"#fff"}}},r=e=>{const t={border:"none"};switch(e){case"Approved":return{...t,backgroundColor:"#2e7d32",color:"#fff"};case"Rejected":return{...t,backgroundColor:"#d32f2f",color:"#fff"};default:return{...t,backgroundColor:"#ed6c02",color:"#fff"}}},n=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{}}}},63221:(e,t,a)=>{a.d(t,{K:()=>f});var s=a(31085),r=a(95478),n=a(76891),i=a(61477),o=a(10394),l=a(46805),c=a(59461),d=a(72501),u=a(16249),h=a(93453),p=a(64947),m=a(78467),y=a(77225);const f=({open:e,title:t,description:a,confirmText:f,severity:A="normal",deleting:g=!1,onConfirm:x,onCancel:v})=>{const[j,b]=(0,r.useState)("");(0,r.useEffect)(()=>{e||b("")},[e]);const P="high"===A&&f,w=!P||j===f;return(0,s.jsxs)(n.A,{open:e,onClose:g?void 0:v,maxWidth:"sm",fullWidth:!0,children:[(0,s.jsxs)(i.A,{children:["high"===A&&(0,s.jsxs)(o.A,{display:"flex",alignItems:"center",style:{gap:8},children:[(0,s.jsx)(y.A,{color:"error"}),(0,s.jsx)("span",{children:t})]}),"high"!==A&&t]}),(0,s.jsxs)(l.A,{children:[(0,s.jsx)(c.A,{style:{whiteSpace:"pre-line"},children:a}),P&&(0,s.jsxs)(o.A,{mt:2,children:[(0,s.jsxs)(d.A,{variant:"body2",color:"textSecondary",gutterBottom:!0,children:["Type ",(0,s.jsx)("strong",{children:f})," to confirm:"]}),(0,s.jsx)(u.A,{fullWidth:!0,variant:"outlined",size:"small",value:j,onChange:e=>b(e.target.value),disabled:g,autoFocus:!0,placeholder:f})]})]}),(0,s.jsxs)(h.A,{children:[(0,s.jsx)(p.A,{onClick:v,disabled:g,children:"Cancel"}),(0,s.jsx)(p.A,{onClick:()=>{w&&x()},color:"secondary",variant:"contained",disabled:g||!w,startIcon:g?(0,s.jsx)(m.A,{size:16,color:"inherit"}):void 0,children:g?"Deleting...":"Delete"})]})]})}},70980:(e,t,a)=>{a.d(t,{y:()=>d,s:()=>c});var s=a(18990),r=a(22097),n=a(54209),i=a.n(n);async function o(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})`}}const l={retries:3,factor:2,minTimeout:300,maxTimeout:3e3,randomize:!0},c=(0,r.createApiRef)({id:"plugin.kuadrant.service"});class d{async getBaseUrl(){return await this.discoveryApi.getBaseUrl("")}async fetchWithRetry(e,t=""){return i()(async a=>{const s=await this.fetchApi.fetch(e);if(401===s.status||403===s.status){const e=await o(s);a(new Error(e))}else if(!s.ok){const e=await o(s);throw new Error(`${t} ${e}`)}return await s.json()},l)}async fetchWithoutRetry(e,t,a=""){const s=await this.fetchApi.fetch(e,{headers:{"Content-Type":"application/json"},...t});if(!s.ok){const e=await o(s);throw new Error(`${a} ${e}`)}if("DELETE"!==t.method)return await s.json()}async getRequests(){const e=await this.getBaseUrl();return this.fetchWithRetry(`${e}kuadrant/requests/my`,"Failed to fetch API Key requests.")}async getAllRequests(){const e=await this.getBaseUrl();return this.fetchWithRetry(`${e}kuadrant/requests`,"Failed to fetch API Key requests.")}async getRequestsByNamespace(e){const t=await this.getBaseUrl(),a=e?`${t}kuadrant/requests/my?namespace=${e}`:`${t}kuadrant/requests/my`;return this.fetchWithRetry(a,"Failed to fetch API Key requests by namespace.")}async getRequest(e,t){const a=await this.getBaseUrl();return this.fetchWithRetry(`${a}kuadrant/requests/${e}/${t}`,"Failed to fetch API Key request.")}async createRequest(e){const t=await this.getBaseUrl();return this.fetchWithoutRetry(`${t}kuadrant/requests`,{method:"POST",body:JSON.stringify(e)},"Failed to create APIKey request.")}async updateRequest(e,t,a){const s=await this.getBaseUrl();return this.fetchWithoutRetry(`${s}kuadrant/requests/${e}/${t}`,{method:"PATCH",body:JSON.stringify(a)},"Failed to update APIKey request.")}async deleteRequest(e,t){const a=await this.getBaseUrl();return this.fetchWithoutRetry(`${a}kuadrant/requests/${e}/${t}`,{method:"DELETE"},"Failed to delete APIKey request.")}async approveRequest(e,t,a="system"){const s=await this.getBaseUrl();return this.fetchWithoutRetry(`${s}kuadrant/requests/${e}/${t}/approve`,{method:"POST",body:JSON.stringify({reviewedBy:a})},"Failed to approve APIKey request.")}async rejectRequest(e,t,a="system"){const s=await this.getBaseUrl();return this.fetchWithoutRetry(`${s}kuadrant/requests/${e}/${t}/reject`,{method:"POST",body:JSON.stringify({reviewedBy:a})},"Failed to reject APIKey request.")}async bulkApproveRequests(e,t){const a=await this.getBaseUrl();return this.fetchWithoutRetry(`${a}kuadrant/requests/bulk-approve`,{method:"POST",body:JSON.stringify({requests:e,reviewedBy:t})},"Failed to bulk approve APIKey requests.")}async bulkRejectRequests(e,t){const a=await this.getBaseUrl();return this.fetchWithoutRetry(`${a}kuadrant/requests/bulk-reject`,{method:"POST",body:JSON.stringify({requests:e,reviewedBy:t})},"Failed to bulk reject APIKey requests")}async getApiKey(e,t){const a=await this.getBaseUrl();return this.fetchWithRetry(`${a}kuadrant/apikeys/${e}/${t}`,"Failed to fetch API Key.")}async getApiKeySecret(e,t){const a=await this.getBaseUrl();return this.fetchWithRetry(`${a}kuadrant/apikeys/${e}/${t}/secret`,"Failed to fetch API Key Secret.")}async getApiProducts(){const e=await this.getBaseUrl();return this.fetchWithRetry(`${e}kuadrant/apiproducts`,"Failed to fetch API Products.")}async getApiProduct(e,t){const a=await this.getBaseUrl();return this.fetchWithRetry(`${a}kuadrant/apiproducts/${e}/${t}`,"Failed to fetch API Product.")}async createApiProduct(e){const t=await this.getBaseUrl();return this.fetchWithoutRetry(`${t}kuadrant/apiproducts`,{method:"POST",body:JSON.stringify(e)},"Failed to create API Product.")}async updateApiProduct(e,t,a){const s=await this.getBaseUrl();return this.fetchWithoutRetry(`${s}kuadrant/apiproducts/${e}/${t}`,{method:"PATCH",body:JSON.stringify(a)},"Failed to update API Product.")}async deleteApiProduct(e,t){const a=await this.getBaseUrl();return this.fetchWithoutRetry(`${a}kuadrant/apiproducts/${e}/${t}`,{method:"DELETE"},"Failed to delete API Product.")}async getHttpRoutes(){const e=await this.getBaseUrl();return this.fetchWithRetry(`${e}kuadrant/httproutes`,"Failed to fetch HTTPRoutes.")}async getHttpRoute(e,t){const a=await this.getBaseUrl();return this.fetchWithRetry(`${a}kuadrant/httproutes/${e}/${t}`,`Failed to fetc HTTPRoute ${e}/${t}.`)}async getPlanPolicies(){const e=await this.getBaseUrl();return this.fetchWithRetry(`${e}kuadrant/planpolicies`,"Failed to fetch PlanPolicies.")}async getAuthPolicies(){const e=await this.getBaseUrl();return this.fetchWithRetry(`${e}kuadrant/authpolicies`,"Failed to fetch AuthPolicies.")}async getRateLimitPolicies(){const e=await this.getBaseUrl();return this.fetchWithRetry(`${e}kuadrant/ratelimitpolicies`,"Failed to fetch RateLimitPolicies.")}constructor(e){(0,s._)(this,"discoveryApi",void 0),(0,s._)(this,"fetchApi",void 0),this.discoveryApi=e.discoveryApi,this.fetchApi=e.fetchApi}}}}]);
2
+ //# sourceMappingURL=7270.d52407cd.chunk.js.map