@veecode-platform/plugin-veecode-homepage-dynamic 0.1.5 → 0.1.7
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.
- package/dist-scalprum/plugin-manifest.json +3 -3
- package/dist-scalprum/static/4327.1a031031.chunk.js +2 -0
- package/dist-scalprum/static/4327.1a031031.chunk.js.map +1 -0
- package/dist-scalprum/static/{5689.ba470bd3.chunk.js → 5689.44adcfd6.chunk.js} +1 -1
- package/dist-scalprum/static/{5689.ba470bd3.chunk.js.map → 5689.44adcfd6.chunk.js.map} +1 -1
- package/dist-scalprum/static/8391.7b3a3f25.chunk.js +206 -0
- package/dist-scalprum/static/8391.7b3a3f25.chunk.js.map +1 -0
- package/dist-scalprum/static/{8505.bd5ab33a.chunk.js → 8505.9dd864c9.chunk.js} +1 -1
- package/dist-scalprum/static/{8505.bd5ab33a.chunk.js.map → 8505.9dd864c9.chunk.js.map} +1 -1
- package/dist-scalprum/static/{9286.0bf88601.chunk.js → 9286.e13da971.chunk.js} +2 -2
- package/dist-scalprum/static/{9286.0bf88601.chunk.js.map → 9286.e13da971.chunk.js.map} +1 -1
- package/dist-scalprum/static/avatar.82d1e940..svg +1 -0
- package/dist-scalprum/static/{exposed-PluginRoot.7c0308e7.chunk.js → exposed-PluginRoot.bbe04ca6.chunk.js} +2 -2
- package/dist-scalprum/static/{exposed-PluginRoot.7c0308e7.chunk.js.map → exposed-PluginRoot.bbe04ca6.chunk.js.map} +1 -1
- package/dist-scalprum/{veecode-platform.plugin-veecode-homepage.f5e3396deb211e8548f4.js → veecode-platform.plugin-veecode-homepage.0adabea53a5aa82d663c.js} +2 -2
- package/dist-scalprum/{veecode-platform.plugin-veecode-homepage.f5e3396deb211e8548f4.js.map → veecode-platform.plugin-veecode-homepage.0adabea53a5aa82d663c.js.map} +1 -1
- package/package.json +1 -1
- package/dist-scalprum/static/2235.1e9c55f2.chunk.js +0 -206
- package/dist-scalprum/static/2235.1e9c55f2.chunk.js.map +0 -1
- package/dist-scalprum/static/7499.53d03b96.chunk.js +0 -2
- package/dist-scalprum/static/7499.53d03b96.chunk.js.map +0 -1
- package/dist-scalprum/static/avatar.e87ac168..svg +0 -1
- /package/dist-scalprum/static/{2235.1e9c55f2.chunk.js.LICENSE.txt → 8391.7b3a3f25.chunk.js.LICENSE.txt} +0 -0
- /package/dist-scalprum/static/{9286.0bf88601.chunk.js.LICENSE.txt → 9286.e13da971.chunk.js.LICENSE.txt} +0 -0
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"static/9286.0bf88601.chunk.js","mappings":"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","sources":["webpack://veecode-platform.plugin-veecode-homepage/../../node_modules/react/jsx-runtime.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/system/ApiAggregator.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/system/ApiProvider.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/system/ApiResolver.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/system/ApiFactoryRegistry.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/lib/loginPopup.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/lib/AuthConnector/DefaultAuthConnector.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/lib/AuthSessionManager/common.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/lib/subjects.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/lib/AuthSessionManager/SessionStateTracker.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/lib/AuthSessionManager/RefreshingAuthSessionManager.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/auth/oauth2/OAuth2.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/auth/github/GithubAuth.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/auth/gitlab/GitlabAuth.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/auth/google/GoogleAuth.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/auth/okta/OktaAuth.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/lib/AuthConnector/DirectAuthConnector.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/lib/AuthSessionManager/StaticAuthSessionManager.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/lib/AuthSessionManager/AuthSessionStore.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/auth/saml/types.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/auth/saml/SamlAuth.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/auth/microsoft/MicrosoftAuth.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/auth/onelogin/OneLoginAuth.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/auth/bitbucket/BitbucketAuth.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/auth/bitbucketServer/BitbucketServerAuth.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/auth/atlassian/AtlassianAuth.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/auth/vmwareCloud/VMwareCloudAuth.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/AlertApi/AlertApiForwarder.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/AnalyticsApi/MultipleAnalyticsApi.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/AnalyticsApi/NoOpAnalyticsApi.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/AppThemeApi/AppThemeSelector.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/DiscoveryApi/UrlPatternDiscovery.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/DiscoveryApi/FrontendHostDiscovery.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/ErrorApi/ErrorAlerter.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/ErrorApi/ErrorApiForwarder.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/ErrorApi/UnhandledErrorForwarder.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/FeatureFlagsApi/LocalStorageFeatureFlags.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/FetchApi/createFetchApi.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/FetchApi/IdentityAuthInjectorFetchMiddleware.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/FetchApi/PluginProtocolResolverFetchMiddleware.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/FetchApi/FetchMiddlewares.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/OAuthRequestApi/OAuthPendingRequests.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/OAuthRequestApi/OAuthRequestManager.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/StorageApi/WebStorage.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/app/InternalAppContext.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/app/isReactRouterBeta.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/routing/RouteTracker.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/app/AppRouter.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/core-plugin-api/dist/apis/definitions/AppLanguageApi.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/extensions/traversal.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/plugins/collectors.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/routing/FeatureFlagged.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/routing/collectors.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/routing/types.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/routing/helpers.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/routing/RouteResolver.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/routing/RoutingProvider.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/app/AppContext.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/IdentityApi/AppIdentityProxy.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/IdentityApi/startCookieAuthRefresh.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/app/AppThemeProvider.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/app/defaultConfigLoader.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/system/ApiRegistry.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/AppLanguageApi/AppLanguageSelector.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/core-plugin-api/src/translation/TranslationRef.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/TranslationApi/I18nextTranslationApi.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/core-plugin-api/src/translation/TranslationResource.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/app/overrideBaseUrlConfigs.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/app/AppManager.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/app/resolveRouteBindings.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/routing/validation.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/app/isProtectedApp.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/app/createSpecializedApp.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/routing/FlatRoutes.esm.js","webpack://veecode-platform.plugin-veecode-homepage/../../node_modules/react/cjs/react-jsx-runtime.production.min.js"],"sourcesContent":["'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","class ApiAggregator {\n holders;\n constructor(...holders) {\n this.holders = holders;\n }\n get(apiRef) {\n for (const holder of this.holders) {\n const api = holder.get(apiRef);\n if (api) {\n return api;\n }\n }\n return void 0;\n }\n}\n\nexport { ApiAggregator };\n//# sourceMappingURL=ApiAggregator.esm.js.map\n","import { jsx } from 'react/jsx-runtime';\nimport { useContext } from 'react';\nimport PropTypes from 'prop-types';\nimport { ApiAggregator } from './ApiAggregator.esm.js';\nimport { createVersionedContext, createVersionedValueMap } from '@backstage/version-bridge';\n\nconst ApiContext = createVersionedContext(\"api-context\");\nconst ApiProvider = (props) => {\n const { apis, children } = props;\n const parentHolder = useContext(ApiContext)?.atVersion(1);\n const holder = parentHolder ? new ApiAggregator(apis, parentHolder) : apis;\n return /* @__PURE__ */ jsx(\n ApiContext.Provider,\n {\n value: createVersionedValueMap({ 1: holder }),\n children\n }\n );\n};\nApiProvider.propTypes = {\n apis: PropTypes.shape({ get: PropTypes.func.isRequired }).isRequired,\n children: PropTypes.node\n};\n\nexport { ApiProvider };\n//# sourceMappingURL=ApiProvider.esm.js.map\n","class ApiResolver {\n constructor(factories) {\n this.factories = factories;\n }\n /**\n * Validate factories by making sure that each of the apis can be created\n * without hitting any circular dependencies.\n */\n static validateFactories(factories, apis) {\n for (const api of apis) {\n const heap = [api];\n const allDeps = /* @__PURE__ */ new Set();\n while (heap.length) {\n const apiRef = heap.shift();\n const factory = factories.get(apiRef);\n if (!factory) {\n continue;\n }\n for (const dep of Object.values(factory.deps)) {\n if (dep.id === api.id) {\n throw new Error(`Circular dependency of api factory for ${api}`);\n }\n if (!allDeps.has(dep)) {\n allDeps.add(dep);\n heap.push(dep);\n }\n }\n }\n }\n }\n apis = /* @__PURE__ */ new Map();\n get(ref) {\n return this.load(ref);\n }\n load(ref, loading = []) {\n const impl = this.apis.get(ref.id);\n if (impl) {\n return impl;\n }\n const factory = this.factories.get(ref);\n if (!factory) {\n return void 0;\n }\n if (loading.includes(factory.api)) {\n throw new Error(`Circular dependency of api factory for ${factory.api}`);\n }\n const deps = this.loadDeps(ref, factory.deps, [...loading, factory.api]);\n const api = factory.factory(deps);\n this.apis.set(ref.id, api);\n return api;\n }\n loadDeps(dependent, apis, loading) {\n const impls = {};\n for (const key in apis) {\n if (apis.hasOwnProperty(key)) {\n const ref = apis[key];\n const api = this.load(ref, loading);\n if (!api) {\n throw new Error(\n `No API factory available for dependency ${ref} of dependent ${dependent}`\n );\n }\n impls[key] = api;\n }\n }\n return impls;\n }\n}\n\nexport { ApiResolver };\n//# sourceMappingURL=ApiResolver.esm.js.map\n","var ScopePriority = /* @__PURE__ */ ((ScopePriority2) => {\n ScopePriority2[ScopePriority2[\"default\"] = 10] = \"default\";\n ScopePriority2[ScopePriority2[\"app\"] = 50] = \"app\";\n ScopePriority2[ScopePriority2[\"static\"] = 100] = \"static\";\n return ScopePriority2;\n})(ScopePriority || {});\nclass ApiFactoryRegistry {\n factories = /* @__PURE__ */ new Map();\n /**\n * Register a new API factory. Returns true if the factory was added\n * to the registry.\n *\n * A factory will not be added to the registry if there is already\n * an existing factory with the same or higher priority.\n */\n register(scope, factory) {\n const priority = ScopePriority[scope];\n const existing = this.factories.get(factory.api.id);\n if (existing && existing.priority >= priority) {\n return false;\n }\n this.factories.set(factory.api.id, { priority, factory });\n return true;\n }\n get(api) {\n const tuple = this.factories.get(api.id);\n if (!tuple) {\n return void 0;\n }\n return tuple.factory;\n }\n getAllApis() {\n const refs = /* @__PURE__ */ new Set();\n for (const { factory } of this.factories.values()) {\n refs.add(factory.api);\n }\n return refs;\n }\n}\n\nexport { ApiFactoryRegistry };\n//# sourceMappingURL=ApiFactoryRegistry.esm.js.map\n","function openLoginPopup(options) {\n return new Promise((resolve, reject) => {\n const width = options.width || 500;\n const height = options.height || 700;\n const left = window.screen.width / 2 - width / 2;\n const top = window.screen.height / 2 - height / 2;\n const origin = new URL(options.url).origin;\n const popup = window.open(\n options.url,\n options.name,\n `menubar=no,location=no,resizable=no,scrollbars=no,status=no,width=${width},height=${height},top=${top},left=${left}`\n );\n let targetOrigin = \"\";\n if (!popup || typeof popup.closed === \"undefined\" || popup.closed) {\n const error = new Error(\"Failed to open auth popup.\");\n error.name = \"PopupRejectedError\";\n reject(error);\n return;\n }\n const messageListener = (event) => {\n if (event.source !== popup) {\n return;\n }\n if (event.origin !== origin) {\n return;\n }\n const { data } = event;\n if (data.type === \"config_info\") {\n targetOrigin = data.targetOrigin;\n return;\n }\n if (data.type !== \"authorization_response\") {\n return;\n }\n const authResult = data;\n if (\"error\" in authResult) {\n const error = new Error(authResult.error.message);\n error.name = authResult.error.name;\n reject(error);\n } else {\n resolve(authResult.response);\n }\n done();\n };\n const intervalId = setInterval(() => {\n if (popup.closed) {\n const errMessage = `Login failed, ${targetOrigin && targetOrigin !== window.location.origin ? `Incorrect app origin, expected ${targetOrigin}` : \"popup was closed\"}`;\n const error = new Error(errMessage);\n error.name = \"PopupClosedError\";\n reject(error);\n done();\n }\n }, 100);\n function done() {\n window.removeEventListener(\"message\", messageListener);\n clearInterval(intervalId);\n }\n window.addEventListener(\"message\", messageListener);\n });\n}\n\nexport { openLoginPopup };\n//# sourceMappingURL=loginPopup.esm.js.map\n","import { openLoginPopup } from '../loginPopup.esm.js';\n\nlet warned = false;\nfunction defaultJoinScopes(scopes) {\n return [...scopes].join(\" \");\n}\nclass DefaultAuthConnector {\n discoveryApi;\n environment;\n provider;\n joinScopesFunc;\n authRequester;\n sessionTransform;\n enableExperimentalRedirectFlow;\n popupOptions;\n constructor(options) {\n const {\n configApi,\n discoveryApi,\n environment,\n provider,\n joinScopes = defaultJoinScopes,\n oauthRequestApi,\n sessionTransform = (id) => id,\n popupOptions\n } = options;\n if (!warned && !configApi) {\n console.warn(\n \"DEPRECATION WARNING: Authentication providers require a configApi instance to configure the authentication flow. Please provide one to the authentication provider constructor.\"\n );\n warned = true;\n }\n this.enableExperimentalRedirectFlow = configApi ? configApi.getOptionalBoolean(\"enableExperimentalRedirectFlow\") ?? false : false;\n this.authRequester = oauthRequestApi.createAuthRequester({\n provider,\n onAuthRequest: async (scopes) => {\n if (!this.enableExperimentalRedirectFlow) {\n return this.showPopup(scopes);\n }\n return this.executeRedirect(scopes);\n }\n });\n this.discoveryApi = discoveryApi;\n this.environment = environment;\n this.provider = provider;\n this.joinScopesFunc = joinScopes;\n this.sessionTransform = sessionTransform;\n this.popupOptions = popupOptions;\n }\n async createSession(options) {\n if (options.instantPopup) {\n if (this.enableExperimentalRedirectFlow) {\n return this.executeRedirect(options.scopes);\n }\n return this.showPopup(options.scopes);\n }\n return this.authRequester(options.scopes);\n }\n async refreshSession(options) {\n const res = await fetch(\n await this.buildUrl(\"/refresh\", {\n optional: true,\n ...options && { scope: this.joinScopesFunc(options.scopes) }\n }),\n {\n headers: {\n \"x-requested-with\": \"XMLHttpRequest\"\n },\n credentials: \"include\"\n }\n ).catch((error) => {\n throw new Error(`Auth refresh request failed, ${error}`);\n });\n if (!res.ok) {\n const error = new Error(\n `Auth refresh request failed, ${res.statusText}`\n );\n error.status = res.status;\n throw error;\n }\n const authInfo = await res.json();\n if (authInfo.error) {\n const error = new Error(authInfo.error.message);\n if (authInfo.error.name) {\n error.name = authInfo.error.name;\n }\n throw error;\n }\n return await this.sessionTransform(authInfo);\n }\n async removeSession() {\n const res = await fetch(await this.buildUrl(\"/logout\"), {\n method: \"POST\",\n headers: {\n \"x-requested-with\": \"XMLHttpRequest\"\n },\n credentials: \"include\"\n }).catch((error) => {\n throw new Error(`Logout request failed, ${error}`);\n });\n if (!res.ok) {\n const error = new Error(`Logout request failed, ${res.statusText}`);\n error.status = res.status;\n throw error;\n }\n }\n async showPopup(scopes) {\n const scope = this.joinScopesFunc(scopes);\n const popupUrl = await this.buildUrl(\"/start\", {\n scope,\n origin: window.location.origin,\n flow: \"popup\"\n });\n const width = this.popupOptions?.size?.fullscreen ? window.screen.width : this.popupOptions?.size?.width || 450;\n const height = this.popupOptions?.size?.fullscreen ? window.screen.height : this.popupOptions?.size?.height || 730;\n const payload = await openLoginPopup({\n url: popupUrl,\n name: `${this.provider.title} Login`,\n width,\n height\n });\n return await this.sessionTransform(payload);\n }\n async executeRedirect(scopes) {\n const scope = this.joinScopesFunc(scopes);\n window.location.href = await this.buildUrl(\"/start\", {\n scope,\n origin: window.location.origin,\n redirectUrl: window.location.href,\n flow: \"redirect\"\n });\n return new Promise(() => {\n });\n }\n async buildUrl(path, query) {\n const baseUrl = await this.discoveryApi.getBaseUrl(\"auth\");\n const queryString = this.buildQueryString({\n ...query,\n env: this.environment\n });\n return `${baseUrl}/${this.provider.id}${path}${queryString}`;\n }\n buildQueryString(query) {\n if (!query) {\n return \"\";\n }\n const queryString = Object.entries(query).map(([key, value]) => {\n if (typeof value === \"string\") {\n return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;\n } else if (value) {\n return encodeURIComponent(key);\n }\n return void 0;\n }).filter(Boolean).join(\"&\");\n if (!queryString) {\n return \"\";\n }\n return `?${queryString}`;\n }\n}\n\nexport { DefaultAuthConnector };\n//# sourceMappingURL=DefaultAuthConnector.esm.js.map\n","function hasScopes(searched, searchFor) {\n for (const scope of searchFor) {\n if (!searched.has(scope)) {\n return false;\n }\n }\n return true;\n}\nclass SessionScopeHelper {\n constructor(options) {\n this.options = options;\n }\n sessionExistsAndHasScope(session, scopes) {\n if (!session) {\n return false;\n }\n if (!scopes) {\n return true;\n }\n if (this.options.sessionScopes === void 0) {\n return true;\n }\n const sessionScopes = this.options.sessionScopes(session);\n return hasScopes(sessionScopes, scopes);\n }\n getExtendedScope(session, scopes) {\n const newScope = new Set(this.options.defaultScopes);\n if (session && this.options.sessionScopes !== void 0) {\n const sessionScopes = this.options.sessionScopes(session);\n for (const scope of sessionScopes) {\n newScope.add(scope);\n }\n }\n if (scopes) {\n for (const scope of scopes) {\n newScope.add(scope);\n }\n }\n return newScope;\n }\n}\n\nexport { SessionScopeHelper, hasScopes };\n//# sourceMappingURL=common.esm.js.map\n","import ObservableImpl from 'zen-observable';\n\nclass PublishSubject {\n isClosed = false;\n terminatingError;\n observable = new ObservableImpl((subscriber) => {\n if (this.isClosed) {\n if (this.terminatingError) {\n subscriber.error(this.terminatingError);\n } else {\n subscriber.complete();\n }\n return () => {\n };\n }\n this.subscribers.add(subscriber);\n return () => {\n this.subscribers.delete(subscriber);\n };\n });\n subscribers = /* @__PURE__ */ new Set();\n [Symbol.observable]() {\n return this;\n }\n get closed() {\n return this.isClosed;\n }\n next(value) {\n if (this.isClosed) {\n throw new Error(\"PublishSubject is closed\");\n }\n this.subscribers.forEach((subscriber) => subscriber.next(value));\n }\n error(error) {\n if (this.isClosed) {\n throw new Error(\"PublishSubject is closed\");\n }\n this.isClosed = true;\n this.terminatingError = error;\n this.subscribers.forEach((subscriber) => subscriber.error(error));\n }\n complete() {\n if (this.isClosed) {\n throw new Error(\"PublishSubject is closed\");\n }\n this.isClosed = true;\n this.subscribers.forEach((subscriber) => subscriber.complete());\n }\n subscribe(onNext, onError, onComplete) {\n const observer = typeof onNext === \"function\" ? {\n next: onNext,\n error: onError,\n complete: onComplete\n } : onNext;\n return this.observable.subscribe(observer);\n }\n}\nclass BehaviorSubject {\n isClosed;\n currentValue;\n terminatingError;\n observable;\n constructor(value) {\n this.isClosed = false;\n this.currentValue = value;\n this.terminatingError = void 0;\n this.observable = new ObservableImpl((subscriber) => {\n if (this.isClosed) {\n if (this.terminatingError) {\n subscriber.error(this.terminatingError);\n } else {\n subscriber.complete();\n }\n return () => {\n };\n }\n subscriber.next(this.currentValue);\n this.subscribers.add(subscriber);\n return () => {\n this.subscribers.delete(subscriber);\n };\n });\n }\n subscribers = /* @__PURE__ */ new Set();\n [Symbol.observable]() {\n return this;\n }\n get closed() {\n return this.isClosed;\n }\n next(value) {\n if (this.isClosed) {\n throw new Error(\"BehaviorSubject is closed\");\n }\n this.currentValue = value;\n this.subscribers.forEach((subscriber) => subscriber.next(value));\n }\n error(error) {\n if (this.isClosed) {\n throw new Error(\"BehaviorSubject is closed\");\n }\n this.isClosed = true;\n this.terminatingError = error;\n this.subscribers.forEach((subscriber) => subscriber.error(error));\n }\n complete() {\n if (this.isClosed) {\n throw new Error(\"BehaviorSubject is closed\");\n }\n this.isClosed = true;\n this.subscribers.forEach((subscriber) => subscriber.complete());\n }\n subscribe(onNext, onError, onComplete) {\n const observer = typeof onNext === \"function\" ? {\n next: onNext,\n error: onError,\n complete: onComplete\n } : onNext;\n return this.observable.subscribe(observer);\n }\n}\n\nexport { BehaviorSubject, PublishSubject };\n//# sourceMappingURL=subjects.esm.js.map\n","import { BehaviorSubject } from '../subjects.esm.js';\nimport { SessionState } from '@backstage/core-plugin-api';\n\nclass SessionStateTracker {\n subject = new BehaviorSubject(\n SessionState.SignedOut\n );\n signedIn = false;\n setIsSignedIn(isSignedIn) {\n if (this.signedIn !== isSignedIn) {\n this.signedIn = isSignedIn;\n this.subject.next(\n this.signedIn ? SessionState.SignedIn : SessionState.SignedOut\n );\n }\n }\n sessionState$() {\n return this.subject;\n }\n}\n\nexport { SessionStateTracker };\n//# sourceMappingURL=SessionStateTracker.esm.js.map\n","import { SessionScopeHelper, hasScopes } from './common.esm.js';\nimport { SessionStateTracker } from './SessionStateTracker.esm.js';\n\nclass RefreshingAuthSessionManager {\n connector;\n helper;\n sessionScopesFunc;\n sessionShouldRefreshFunc;\n stateTracker = new SessionStateTracker();\n refreshPromise;\n currentSession;\n constructor(options) {\n const {\n connector,\n defaultScopes = /* @__PURE__ */ new Set(),\n sessionScopes,\n sessionShouldRefresh\n } = options;\n this.connector = connector;\n this.sessionScopesFunc = sessionScopes;\n this.sessionShouldRefreshFunc = sessionShouldRefresh;\n this.helper = new SessionScopeHelper({ sessionScopes, defaultScopes });\n }\n async getSession(options) {\n if (this.helper.sessionExistsAndHasScope(this.currentSession, options.scopes)) {\n const shouldRefresh = this.sessionShouldRefreshFunc(this.currentSession);\n if (!shouldRefresh) {\n return this.currentSession;\n }\n try {\n const refreshedSession = await this.collapsedSessionRefresh(\n options.scopes\n );\n const currentScopes = this.sessionScopesFunc(this.currentSession);\n const refreshedScopes = this.sessionScopesFunc(refreshedSession);\n if (hasScopes(refreshedScopes, currentScopes)) {\n this.currentSession = refreshedSession;\n }\n return refreshedSession;\n } catch (error) {\n if (options.optional) {\n return void 0;\n }\n throw error;\n }\n }\n if (!options.instantPopup) {\n try {\n const newSession = await this.collapsedSessionRefresh(options.scopes);\n this.currentSession = newSession;\n return this.getSession(options);\n } catch {\n }\n }\n if (options.optional) {\n return void 0;\n }\n this.currentSession = await this.connector.createSession({\n ...options,\n scopes: this.helper.getExtendedScope(this.currentSession, options.scopes)\n });\n this.stateTracker.setIsSignedIn(true);\n return this.currentSession;\n }\n async removeSession() {\n this.currentSession = void 0;\n await this.connector.removeSession();\n this.stateTracker.setIsSignedIn(false);\n }\n sessionState$() {\n return this.stateTracker.sessionState$();\n }\n async collapsedSessionRefresh(scopes) {\n if (this.refreshPromise) {\n return this.refreshPromise;\n }\n this.refreshPromise = this.connector.refreshSession({\n scopes: this.helper.getExtendedScope(this.currentSession, scopes)\n });\n try {\n const session = await this.refreshPromise;\n if (!this.helper.sessionExistsAndHasScope(session, scopes)) {\n throw new Error(\n \"Refreshed session did not receive the required scopes\"\n );\n }\n this.stateTracker.setIsSignedIn(true);\n return session;\n } finally {\n delete this.refreshPromise;\n }\n }\n}\n\nexport { RefreshingAuthSessionManager };\n//# sourceMappingURL=RefreshingAuthSessionManager.esm.js.map\n","import { DefaultAuthConnector } from '../../../../lib/AuthConnector/DefaultAuthConnector.esm.js';\nimport { RefreshingAuthSessionManager } from '../../../../lib/AuthSessionManager/RefreshingAuthSessionManager.esm.js';\nimport 'zen-observable';\nimport '@backstage/core-plugin-api';\n\nconst DEFAULT_PROVIDER = {\n id: \"oauth2\",\n title: \"Your Identity Provider\",\n icon: () => null\n};\nclass OAuth2 {\n static createAuthConnector(options) {\n if (\"authConnector\" in options) {\n return options.authConnector;\n }\n const {\n scopeTransform = (x) => x,\n configApi,\n discoveryApi,\n environment = \"development\",\n provider = DEFAULT_PROVIDER,\n oauthRequestApi,\n popupOptions\n } = options;\n return new DefaultAuthConnector({\n configApi,\n discoveryApi,\n environment,\n provider,\n oauthRequestApi,\n sessionTransform({\n backstageIdentity,\n ...res\n }) {\n const session = {\n ...res,\n providerInfo: {\n idToken: res.providerInfo.idToken,\n accessToken: res.providerInfo.accessToken,\n scopes: OAuth2.normalizeScopes(res.providerInfo.scope, {\n scopeTransform\n }),\n expiresAt: res.providerInfo.expiresInSeconds ? new Date(Date.now() + res.providerInfo.expiresInSeconds * 1e3) : void 0\n }\n };\n if (backstageIdentity) {\n session.backstageIdentity = {\n token: backstageIdentity.token,\n identity: backstageIdentity.identity,\n expiresAt: backstageIdentity.expiresInSeconds ? new Date(Date.now() + backstageIdentity.expiresInSeconds * 1e3) : void 0\n };\n }\n return session;\n },\n popupOptions\n });\n }\n static create(options) {\n const { defaultScopes = [], scopeTransform = (x) => x } = options;\n const connector = OAuth2.createAuthConnector(options);\n const sessionManager = new RefreshingAuthSessionManager({\n connector,\n defaultScopes: new Set(defaultScopes),\n sessionScopes: (session) => session.providerInfo.scopes,\n sessionShouldRefresh: (session) => {\n let min = Infinity;\n if (session.providerInfo?.expiresAt) {\n min = Math.min(\n min,\n (session.providerInfo.expiresAt.getTime() - Date.now()) / 1e3\n );\n }\n if (session.backstageIdentity?.expiresAt) {\n min = Math.min(\n min,\n (session.backstageIdentity.expiresAt.getTime() - Date.now()) / 1e3\n );\n }\n return min < 60 * 3;\n }\n });\n return new OAuth2({ sessionManager, scopeTransform });\n }\n sessionManager;\n scopeTransform;\n constructor(options) {\n this.sessionManager = options.sessionManager;\n this.scopeTransform = options.scopeTransform;\n }\n async signIn() {\n await this.getAccessToken();\n }\n async signOut() {\n await this.sessionManager.removeSession();\n }\n sessionState$() {\n return this.sessionManager.sessionState$();\n }\n async getAccessToken(scope, options) {\n const normalizedScopes = OAuth2.normalizeScopes(scope, {\n scopeTransform: this.scopeTransform\n });\n const session = await this.sessionManager.getSession({\n ...options,\n scopes: normalizedScopes\n });\n return session?.providerInfo.accessToken ?? \"\";\n }\n async getIdToken(options = {}) {\n const session = await this.sessionManager.getSession({\n ...options,\n scopes: /* @__PURE__ */ new Set([\"openid\"])\n });\n return session?.providerInfo.idToken ?? \"\";\n }\n async getBackstageIdentity(options = {}) {\n const session = await this.sessionManager.getSession(options);\n return session?.backstageIdentity;\n }\n async getProfile(options = {}) {\n const session = await this.sessionManager.getSession(options);\n return session?.profile;\n }\n /**\n * @public\n */\n static normalizeScopes(scopes, options) {\n if (!scopes) {\n return /* @__PURE__ */ new Set();\n }\n const scopeList = Array.isArray(scopes) ? scopes : scopes.split(/[\\s|,]/).filter(Boolean);\n const transformedScopes = options ? options.scopeTransform(scopeList) : scopeList;\n return new Set(transformedScopes);\n }\n}\n\nexport { OAuth2 as default };\n//# sourceMappingURL=OAuth2.esm.js.map\n","import OAuth2 from '../oauth2/OAuth2.esm.js';\n\nconst DEFAULT_PROVIDER = {\n id: \"github\",\n title: \"GitHub\",\n icon: () => null\n};\nclass GithubAuth {\n static create(options) {\n const {\n configApi,\n discoveryApi,\n environment = \"development\",\n provider = DEFAULT_PROVIDER,\n oauthRequestApi,\n defaultScopes = [\"read:user\"]\n } = options;\n return OAuth2.create({\n configApi,\n discoveryApi,\n oauthRequestApi,\n provider,\n environment,\n defaultScopes\n });\n }\n}\n\nexport { GithubAuth as default };\n//# sourceMappingURL=GithubAuth.esm.js.map\n","import OAuth2 from '../oauth2/OAuth2.esm.js';\n\nconst DEFAULT_PROVIDER = {\n id: \"gitlab\",\n title: \"GitLab\",\n icon: () => null\n};\nclass GitlabAuth {\n static create(options) {\n const {\n configApi,\n discoveryApi,\n environment = \"development\",\n provider = DEFAULT_PROVIDER,\n oauthRequestApi,\n defaultScopes = [\"read_user\"]\n } = options;\n return OAuth2.create({\n configApi,\n discoveryApi,\n oauthRequestApi,\n provider,\n environment,\n defaultScopes\n });\n }\n}\n\nexport { GitlabAuth as default };\n//# sourceMappingURL=GitlabAuth.esm.js.map\n","import OAuth2 from '../oauth2/OAuth2.esm.js';\n\nconst DEFAULT_PROVIDER = {\n id: \"google\",\n title: \"Google\",\n icon: () => null\n};\nconst SCOPE_PREFIX = \"https://www.googleapis.com/auth/\";\nclass GoogleAuth {\n static create(options) {\n const {\n configApi,\n discoveryApi,\n oauthRequestApi,\n environment = \"development\",\n provider = DEFAULT_PROVIDER,\n defaultScopes = [\n \"openid\",\n `${SCOPE_PREFIX}userinfo.email`,\n `${SCOPE_PREFIX}userinfo.profile`\n ]\n } = options;\n return OAuth2.create({\n configApi,\n discoveryApi,\n oauthRequestApi,\n provider,\n environment,\n defaultScopes,\n scopeTransform(scopes) {\n return scopes.map((scope) => {\n if (scope === \"openid\") {\n return scope;\n }\n if (scope === \"profile\" || scope === \"email\") {\n return `${SCOPE_PREFIX}userinfo.${scope}`;\n }\n if (scope.startsWith(SCOPE_PREFIX)) {\n return scope;\n }\n return `${SCOPE_PREFIX}${scope}`;\n });\n }\n });\n }\n}\n\nexport { GoogleAuth as default };\n//# sourceMappingURL=GoogleAuth.esm.js.map\n","import OAuth2 from '../oauth2/OAuth2.esm.js';\n\nconst DEFAULT_PROVIDER = {\n id: \"okta\",\n title: \"Okta\",\n icon: () => null\n};\nconst OKTA_OIDC_SCOPES = /* @__PURE__ */ new Set([\n \"openid\",\n \"profile\",\n \"email\",\n \"phone\",\n \"address\",\n \"groups\",\n \"offline_access\"\n]);\nconst OKTA_SCOPE_PREFIX = \"okta.\";\nclass OktaAuth {\n static create(options) {\n const {\n configApi,\n discoveryApi,\n environment = \"development\",\n provider = DEFAULT_PROVIDER,\n oauthRequestApi,\n defaultScopes = [\"openid\", \"email\", \"profile\", \"offline_access\"]\n } = options;\n return OAuth2.create({\n configApi,\n discoveryApi,\n oauthRequestApi,\n provider,\n environment,\n defaultScopes,\n scopeTransform(scopes) {\n return scopes.map((scope) => {\n if (OKTA_OIDC_SCOPES.has(scope)) {\n return scope;\n }\n if (scope.startsWith(OKTA_SCOPE_PREFIX)) {\n return scope;\n }\n return `${OKTA_SCOPE_PREFIX}${scope}`;\n });\n }\n });\n }\n}\n\nexport { OktaAuth as default };\n//# sourceMappingURL=OktaAuth.esm.js.map\n","import { openLoginPopup } from '../loginPopup.esm.js';\n\nclass DirectAuthConnector {\n discoveryApi;\n environment;\n provider;\n constructor(options) {\n const { discoveryApi, environment, provider } = options;\n this.discoveryApi = discoveryApi;\n this.environment = environment;\n this.provider = provider;\n }\n async createSession() {\n const popupUrl = await this.buildUrl(\"/start\");\n const payload = await openLoginPopup({\n url: popupUrl,\n name: `${this.provider.title} Login`,\n width: 450,\n height: 730\n });\n return {\n ...payload,\n id: payload.profile.email\n };\n }\n async refreshSession() {\n }\n async removeSession() {\n const res = await fetch(await this.buildUrl(\"/logout\"), {\n method: \"POST\",\n headers: {\n \"x-requested-with\": \"XMLHttpRequest\"\n },\n credentials: \"include\"\n }).catch((error) => {\n throw new Error(`Logout request failed, ${error}`);\n });\n if (!res.ok) {\n const error = new Error(`Logout request failed, ${res.statusText}`);\n error.status = res.status;\n throw error;\n }\n }\n async buildUrl(path) {\n const baseUrl = await this.discoveryApi.getBaseUrl(\"auth\");\n return `${baseUrl}/${this.provider.id}${path}?env=${this.environment}`;\n }\n}\n\nexport { DirectAuthConnector };\n//# sourceMappingURL=DirectAuthConnector.esm.js.map\n","import { SessionScopeHelper } from './common.esm.js';\nimport { SessionStateTracker } from './SessionStateTracker.esm.js';\n\nclass StaticAuthSessionManager {\n connector;\n helper;\n stateTracker = new SessionStateTracker();\n currentSession;\n constructor(options) {\n const { connector, defaultScopes = /* @__PURE__ */ new Set(), sessionScopes } = options;\n this.connector = connector;\n this.helper = new SessionScopeHelper({ sessionScopes, defaultScopes });\n }\n setSession(session) {\n this.currentSession = session;\n this.stateTracker.setIsSignedIn(Boolean(session));\n }\n async getSession(options) {\n if (this.helper.sessionExistsAndHasScope(this.currentSession, options.scopes)) {\n return this.currentSession;\n }\n if (options.optional) {\n return void 0;\n }\n this.currentSession = await this.connector.createSession({\n ...options,\n scopes: this.helper.getExtendedScope(this.currentSession, options.scopes)\n });\n this.stateTracker.setIsSignedIn(true);\n return this.currentSession;\n }\n /**\n * We don't call this.connector.removeSession here, since this session manager\n * is intended to be static. As such there's no need to hit the remote logout\n * endpoint - simply discarding the local session state when signing out is\n * enough.\n */\n async removeSession() {\n this.currentSession = void 0;\n this.stateTracker.setIsSignedIn(false);\n }\n sessionState$() {\n return this.stateTracker.sessionState$();\n }\n}\n\nexport { StaticAuthSessionManager };\n//# sourceMappingURL=StaticAuthSessionManager.esm.js.map\n","import { SessionScopeHelper } from './common.esm.js';\n\nclass AuthSessionStore {\n manager;\n storageKey;\n schema;\n sessionShouldRefreshFunc;\n helper;\n constructor(options) {\n const {\n manager,\n storageKey,\n schema,\n sessionScopes,\n sessionShouldRefresh = () => false\n } = options;\n this.manager = manager;\n this.storageKey = storageKey;\n this.schema = schema;\n this.sessionShouldRefreshFunc = sessionShouldRefresh;\n this.helper = new SessionScopeHelper({\n sessionScopes,\n defaultScopes: /* @__PURE__ */ new Set()\n });\n }\n setSession(session) {\n this.manager.setSession(session);\n this.saveSession(session);\n }\n async getSession(options) {\n const { scopes } = options;\n const session = this.loadSession();\n if (this.helper.sessionExistsAndHasScope(session, scopes)) {\n const shouldRefresh = this.sessionShouldRefreshFunc(session);\n if (!shouldRefresh) {\n this.manager.setSession(session);\n return session;\n }\n }\n const newSession = await this.manager.getSession(options);\n this.saveSession(newSession);\n return newSession;\n }\n async removeSession() {\n localStorage.removeItem(this.storageKey);\n await this.manager.removeSession();\n }\n sessionState$() {\n return this.manager.sessionState$();\n }\n loadSession() {\n try {\n const sessionJson = localStorage.getItem(this.storageKey);\n if (sessionJson) {\n const session = JSON.parse(sessionJson, (_key, value) => {\n if (value?.__type === \"Set\") {\n return new Set(value.__value);\n }\n return value;\n });\n try {\n return this.schema.parse(session);\n } catch (e) {\n console.log(\n `Failed to load session from local storage because it did not conform to the expected schema, ${e}`\n );\n throw e;\n }\n }\n return void 0;\n } catch (error) {\n localStorage.removeItem(this.storageKey);\n return void 0;\n }\n }\n saveSession(session) {\n if (session === void 0) {\n localStorage.removeItem(this.storageKey);\n return;\n }\n try {\n this.schema.parse(session);\n } catch (e) {\n console.warn(\n `Failed to save session to local storage because it did not conform to the expected schema, ${e}`\n );\n return;\n }\n localStorage.setItem(\n this.storageKey,\n JSON.stringify(session, (_key, value) => {\n if (value instanceof Set) {\n return {\n __type: \"Set\",\n __value: Array.from(value)\n };\n }\n return value;\n })\n );\n }\n}\n\nexport { AuthSessionStore };\n//# sourceMappingURL=AuthSessionStore.esm.js.map\n","import { z } from 'zod';\n\nconst samlSessionSchema = z.object({\n profile: z.object({\n email: z.string().optional(),\n displayName: z.string().optional(),\n picture: z.string().optional()\n }),\n backstageIdentity: z.object({\n token: z.string(),\n identity: z.object({\n type: z.literal(\"user\"),\n userEntityRef: z.string(),\n ownershipEntityRefs: z.array(z.string())\n })\n })\n});\n\nexport { samlSessionSchema };\n//# sourceMappingURL=types.esm.js.map\n","import { DirectAuthConnector } from '../../../../lib/AuthConnector/DirectAuthConnector.esm.js';\nimport 'zen-observable';\nimport '@backstage/core-plugin-api';\nimport { StaticAuthSessionManager } from '../../../../lib/AuthSessionManager/StaticAuthSessionManager.esm.js';\nimport { AuthSessionStore } from '../../../../lib/AuthSessionManager/AuthSessionStore.esm.js';\nimport { samlSessionSchema } from './types.esm.js';\n\nconst DEFAULT_PROVIDER = {\n id: \"saml\",\n title: \"SAML\",\n icon: () => null\n};\nclass SamlAuth {\n constructor(sessionManager) {\n this.sessionManager = sessionManager;\n }\n static create(options) {\n const {\n discoveryApi,\n environment = \"development\",\n provider = DEFAULT_PROVIDER\n } = options;\n const connector = new DirectAuthConnector({\n discoveryApi,\n environment,\n provider\n });\n const sessionManager = new StaticAuthSessionManager({\n connector\n });\n const authSessionStore = new AuthSessionStore({\n manager: sessionManager,\n storageKey: `${provider.id}Session`,\n schema: samlSessionSchema\n });\n return new SamlAuth(authSessionStore);\n }\n sessionState$() {\n return this.sessionManager.sessionState$();\n }\n async signIn() {\n await this.getBackstageIdentity({});\n }\n async signOut() {\n await this.sessionManager.removeSession();\n }\n async getBackstageIdentity(options = {}) {\n const session = await this.sessionManager.getSession(options);\n return session?.backstageIdentity;\n }\n async getProfile(options = {}) {\n const session = await this.sessionManager.getSession(options);\n return session?.profile;\n }\n}\n\nexport { SamlAuth as default };\n//# sourceMappingURL=SamlAuth.esm.js.map\n","import OAuth2 from '../oauth2/OAuth2.esm.js';\n\nconst DEFAULT_PROVIDER = {\n id: \"microsoft\",\n title: \"Microsoft\",\n icon: () => null\n};\nclass MicrosoftAuth {\n oauth2;\n configApi;\n environment;\n provider;\n oauthRequestApi;\n discoveryApi;\n scopeTransform;\n static MicrosoftGraphID = \"00000003-0000-0000-c000-000000000000\";\n static create(options) {\n return new MicrosoftAuth(options);\n }\n constructor(options) {\n const {\n configApi,\n environment = \"development\",\n provider = DEFAULT_PROVIDER,\n oauthRequestApi,\n discoveryApi,\n defaultScopes = [\n \"openid\",\n \"offline_access\",\n \"profile\",\n \"email\",\n \"User.Read\"\n ],\n scopeTransform = (scopes) => scopes.concat(\"offline_access\")\n } = options;\n this.configApi = configApi;\n this.environment = environment;\n this.provider = provider;\n this.oauthRequestApi = oauthRequestApi;\n this.discoveryApi = discoveryApi;\n this.scopeTransform = scopeTransform;\n this.oauth2 = {\n [MicrosoftAuth.MicrosoftGraphID]: OAuth2.create({\n configApi: this.configApi,\n discoveryApi: this.discoveryApi,\n oauthRequestApi: this.oauthRequestApi,\n provider: this.provider,\n environment: this.environment,\n scopeTransform: this.scopeTransform,\n defaultScopes\n })\n };\n }\n microsoftGraph() {\n return this.oauth2[MicrosoftAuth.MicrosoftGraphID];\n }\n static resourceForScopes(scope) {\n const audiences = [\n ...new Set(\n scope.split(\" \").map(MicrosoftAuth.resourceForScope).filter((aud) => aud !== \"openid\")\n )\n ];\n if (audiences.length > 1) {\n return Promise.reject(\n new Error(\n `Requested access token with scopes from multiple Azure resources: ${audiences.join(\n \", \"\n )}. Access tokens can only have a single audience.`\n )\n );\n }\n const audience = audiences[0] ?? MicrosoftAuth.MicrosoftGraphID;\n return Promise.resolve(audience);\n }\n static resourceForScope(scope) {\n const groups = scope.match(/^(?<resourceURI>.*)\\/(?<scp>[^\\/]*)$/)?.groups;\n if (groups) {\n const { resourceURI } = groups;\n const aud = resourceURI.replace(/^api:\\/\\//, \"\");\n return aud;\n }\n switch (scope) {\n case \"email\":\n case \"openid\":\n case \"offline_access\":\n case \"profile\": {\n return \"openid\";\n }\n default:\n return MicrosoftAuth.MicrosoftGraphID;\n }\n }\n async getAccessToken(scope, options) {\n const aud = scope === void 0 ? MicrosoftAuth.MicrosoftGraphID : await MicrosoftAuth.resourceForScopes(\n Array.isArray(scope) ? scope.join(\" \") : scope\n );\n if (!(aud in this.oauth2)) {\n this.oauth2[aud] = OAuth2.create({\n configApi: this.configApi,\n discoveryApi: this.discoveryApi,\n oauthRequestApi: this.oauthRequestApi,\n provider: this.provider,\n environment: this.environment,\n scopeTransform: this.scopeTransform\n });\n }\n return this.oauth2[aud].getAccessToken(scope, options);\n }\n getIdToken(options) {\n return this.microsoftGraph().getIdToken(options);\n }\n getProfile(options) {\n return this.microsoftGraph().getProfile(options);\n }\n getBackstageIdentity(options) {\n return this.microsoftGraph().getBackstageIdentity(options);\n }\n signIn() {\n return this.microsoftGraph().signIn();\n }\n signOut() {\n return this.microsoftGraph().signOut();\n }\n sessionState$() {\n return this.microsoftGraph().sessionState$();\n }\n}\n\nexport { MicrosoftAuth as default };\n//# sourceMappingURL=MicrosoftAuth.esm.js.map\n","import OAuth2 from '../oauth2/OAuth2.esm.js';\n\nconst DEFAULT_PROVIDER = {\n id: \"onelogin\",\n title: \"onelogin\",\n icon: () => null\n};\nconst OIDC_SCOPES = /* @__PURE__ */ new Set([\n \"openid\",\n \"profile\",\n \"email\",\n \"phone\",\n \"address\",\n \"groups\",\n \"offline_access\"\n]);\nconst SCOPE_PREFIX = \"onelogin.\";\nclass OneLoginAuth {\n static create(options) {\n const {\n configApi,\n discoveryApi,\n environment = \"development\",\n provider = DEFAULT_PROVIDER,\n oauthRequestApi\n } = options;\n return OAuth2.create({\n configApi,\n discoveryApi,\n oauthRequestApi,\n provider,\n environment,\n defaultScopes: [\"openid\", \"email\", \"profile\", \"offline_access\"],\n scopeTransform(scopes) {\n return scopes.map((scope) => {\n if (OIDC_SCOPES.has(scope)) {\n return scope;\n }\n if (scope.startsWith(SCOPE_PREFIX)) {\n return scope;\n }\n return `${SCOPE_PREFIX}${scope}`;\n });\n }\n });\n }\n}\n\nexport { OneLoginAuth as default };\n//# sourceMappingURL=OneLoginAuth.esm.js.map\n","import OAuth2 from '../oauth2/OAuth2.esm.js';\n\nconst DEFAULT_PROVIDER = {\n id: \"bitbucket\",\n title: \"Bitbucket\",\n icon: () => null\n};\nclass BitbucketAuth {\n static create(options) {\n const {\n configApi,\n discoveryApi,\n environment = \"development\",\n provider = DEFAULT_PROVIDER,\n oauthRequestApi,\n defaultScopes = [\"account\"]\n } = options;\n return OAuth2.create({\n configApi,\n discoveryApi,\n oauthRequestApi,\n provider,\n environment,\n defaultScopes\n });\n }\n}\n\nexport { BitbucketAuth as default };\n//# sourceMappingURL=BitbucketAuth.esm.js.map\n","import OAuth2 from '../oauth2/OAuth2.esm.js';\n\nconst DEFAULT_PROVIDER = {\n id: \"bitbucketServer\",\n title: \"Bitbucket Server\",\n icon: () => null\n};\nclass BitbucketServerAuth {\n static create(options) {\n const {\n configApi,\n discoveryApi,\n environment = \"development\",\n provider = DEFAULT_PROVIDER,\n oauthRequestApi,\n defaultScopes = [\"PROJECT_ADMIN\"]\n } = options;\n return OAuth2.create({\n configApi,\n discoveryApi,\n oauthRequestApi,\n provider,\n environment,\n defaultScopes\n });\n }\n}\n\nexport { BitbucketServerAuth as default };\n//# sourceMappingURL=BitbucketServerAuth.esm.js.map\n","import OAuth2 from '../oauth2/OAuth2.esm.js';\n\nconst DEFAULT_PROVIDER = {\n id: \"atlassian\",\n title: \"Atlassian\",\n icon: () => null\n};\nclass AtlassianAuth {\n static create(options) {\n const {\n configApi,\n discoveryApi,\n environment = \"development\",\n provider = DEFAULT_PROVIDER,\n oauthRequestApi\n } = options;\n return OAuth2.create({\n configApi,\n discoveryApi,\n oauthRequestApi,\n provider,\n environment\n });\n }\n}\n\nexport { AtlassianAuth as default };\n//# sourceMappingURL=AtlassianAuth.esm.js.map\n","import OAuth2 from '../oauth2/OAuth2.esm.js';\n\nconst DEFAULT_PROVIDER = {\n id: \"vmwareCloudServices\",\n title: \"VMware Cloud\",\n icon: () => null\n};\nclass VMwareCloudAuth {\n static create(options) {\n const {\n configApi,\n discoveryApi,\n oauthRequestApi,\n environment = \"development\",\n provider = DEFAULT_PROVIDER,\n defaultScopes = [\"openid\"]\n } = options;\n return OAuth2.create({\n configApi,\n discoveryApi,\n oauthRequestApi,\n provider,\n environment,\n defaultScopes\n });\n }\n}\n\nexport { VMwareCloudAuth as default };\n//# sourceMappingURL=VMwareCloudAuth.esm.js.map\n","import { PublishSubject } from '../../../lib/subjects.esm.js';\n\nclass AlertApiForwarder {\n subject = new PublishSubject();\n post(alert) {\n this.subject.next(alert);\n }\n alert$() {\n return this.subject;\n }\n}\n\nexport { AlertApiForwarder };\n//# sourceMappingURL=AlertApiForwarder.esm.js.map\n","class MultipleAnalyticsApi {\n constructor(actualApis) {\n this.actualApis = actualApis;\n }\n /**\n * Create an AnalyticsApi implementation from an array of concrete\n * implementations.\n *\n * @example\n *\n * ```jsx\n * MultipleAnalyticsApi.fromApis([\n * SomeAnalyticsApi.fromConfig(configApi),\n * new CustomAnalyticsApi(),\n * ]);\n * ```\n */\n static fromApis(actualApis) {\n return new MultipleAnalyticsApi(actualApis);\n }\n /**\n * Forward the event to all configured analytics API implementations.\n */\n captureEvent(event) {\n this.actualApis.forEach((analyticsApi) => {\n try {\n analyticsApi.captureEvent(event);\n } catch {\n }\n });\n }\n}\n\nexport { MultipleAnalyticsApi };\n//# sourceMappingURL=MultipleAnalyticsApi.esm.js.map\n","class NoOpAnalyticsApi {\n captureEvent(_event) {\n }\n}\n\nexport { NoOpAnalyticsApi };\n//# sourceMappingURL=NoOpAnalyticsApi.esm.js.map\n","import { BehaviorSubject } from '../../../lib/subjects.esm.js';\n\nconst STORAGE_KEY = \"theme\";\nclass AppThemeSelector {\n constructor(themes) {\n this.themes = themes;\n }\n static createWithStorage(themes) {\n const selector = new AppThemeSelector(themes);\n if (!window.localStorage) {\n return selector;\n }\n const initialThemeId = window.localStorage.getItem(STORAGE_KEY) ?? void 0;\n selector.setActiveThemeId(initialThemeId);\n selector.activeThemeId$().subscribe((themeId) => {\n if (themeId) {\n window.localStorage.setItem(STORAGE_KEY, themeId);\n } else {\n window.localStorage.removeItem(STORAGE_KEY);\n }\n });\n window.addEventListener(\"storage\", (event) => {\n if (event.key === STORAGE_KEY) {\n const themeId = localStorage.getItem(STORAGE_KEY) ?? void 0;\n selector.setActiveThemeId(themeId);\n }\n });\n return selector;\n }\n activeThemeId;\n subject = new BehaviorSubject(void 0);\n getInstalledThemes() {\n return this.themes.slice();\n }\n activeThemeId$() {\n return this.subject;\n }\n getActiveThemeId() {\n return this.activeThemeId;\n }\n setActiveThemeId(themeId) {\n this.activeThemeId = themeId;\n this.subject.next(themeId);\n }\n}\n\nexport { AppThemeSelector };\n//# sourceMappingURL=AppThemeSelector.esm.js.map\n","const ERROR_PREFIX = \"Invalid discovery URL pattern,\";\nclass UrlPatternDiscovery {\n constructor(parts) {\n this.parts = parts;\n }\n /**\n * Creates a new UrlPatternDiscovery given a template. The only\n * interpolation done for the template is to replace instances of `{{pluginId}}`\n * with the ID of the plugin being requested.\n *\n * Example pattern: `http://localhost:7007/api/{{ pluginId }}`\n */\n static compile(pattern) {\n const parts = pattern.split(/\\{\\{\\s*pluginId\\s*\\}\\}/);\n const urlStr = parts.join(\"pluginId\");\n let url;\n try {\n url = new URL(urlStr);\n } catch {\n throw new Error(`${ERROR_PREFIX} URL '${urlStr}' is invalid`);\n }\n if (url.hash) {\n throw new Error(`${ERROR_PREFIX} URL must not have a hash`);\n }\n if (url.search) {\n throw new Error(`${ERROR_PREFIX} URL must not have a query`);\n }\n if (urlStr.endsWith(\"/\")) {\n throw new Error(`${ERROR_PREFIX} URL must not end with a slash`);\n }\n return new UrlPatternDiscovery(parts);\n }\n async getBaseUrl(pluginId) {\n return this.parts.join(encodeURIComponent(pluginId));\n }\n}\n\nexport { UrlPatternDiscovery };\n//# sourceMappingURL=UrlPatternDiscovery.esm.js.map\n","import { UrlPatternDiscovery } from './UrlPatternDiscovery.esm.js';\n\nclass FrontendHostDiscovery {\n constructor(endpoints, defaultEndpoint) {\n this.endpoints = endpoints;\n this.defaultEndpoint = defaultEndpoint;\n }\n /**\n * Creates a new FrontendHostDiscovery discovery instance by reading\n * the external target URL from the `discovery.endpoints` config section.\n *\n * eg.\n * ```yaml\n * discovery:\n * endpoints:\n * - target: https://internal.example.com/internal-catalog\n * plugins: [catalog]\n * - target: https://internal.example.com/secure/api/{{pluginId}}\n * plugins: [auth, permissions]\n * - target:\n * internal: https://internal.example.com/search\n * external: https://example.com/search\n * plugins: [search]\n * ```\n *\n * If a plugin is not declared in the config, the discovery will fall back to using the baseUrl with\n * the provided `pathPattern` appended. The default path pattern is `\"/api/{{ pluginId }}\"`.\n */\n static fromConfig(config, options) {\n const path = options?.pathPattern ?? \"/api/{{ pluginId }}\";\n const baseUrl = config.getString(\"backend.baseUrl\");\n const endpoints = config.getOptionalConfigArray(\"discovery.endpoints\")?.flatMap((e) => {\n const target = typeof e.get(\"target\") === \"object\" ? e.getOptionalString(\"target.external\") : e.getString(\"target\");\n if (!target) {\n return [];\n }\n const discovery = UrlPatternDiscovery.compile(target);\n return e.getStringArray(\"plugins\").map((pluginId) => [pluginId, discovery]);\n });\n return new FrontendHostDiscovery(\n new Map(endpoints),\n UrlPatternDiscovery.compile(`${baseUrl}${path}`)\n );\n }\n async getBaseUrl(pluginId) {\n const endpoint = this.endpoints.get(pluginId);\n if (endpoint) {\n return endpoint.getBaseUrl(pluginId);\n }\n return this.defaultEndpoint.getBaseUrl(pluginId);\n }\n}\n\nexport { FrontendHostDiscovery };\n//# sourceMappingURL=FrontendHostDiscovery.esm.js.map\n","class ErrorAlerter {\n constructor(alertApi, errorApi) {\n this.alertApi = alertApi;\n this.errorApi = errorApi;\n }\n post(error, context) {\n if (!context?.hidden) {\n this.alertApi.post({ message: error.message, severity: \"error\" });\n }\n return this.errorApi.post(error, context);\n }\n error$() {\n return this.errorApi.error$();\n }\n}\n\nexport { ErrorAlerter };\n//# sourceMappingURL=ErrorAlerter.esm.js.map\n","import { PublishSubject } from '../../../lib/subjects.esm.js';\n\nclass ErrorApiForwarder {\n subject = new PublishSubject();\n post(error, context) {\n this.subject.next({ error, context });\n }\n error$() {\n return this.subject;\n }\n}\n\nexport { ErrorApiForwarder };\n//# sourceMappingURL=ErrorApiForwarder.esm.js.map\n","class UnhandledErrorForwarder {\n /**\n * Add event listener, such that unhandled errors can be forwarded using an given `ErrorApi` instance\n */\n static forward(errorApi, errorContext) {\n window.addEventListener(\n \"unhandledrejection\",\n (e) => {\n errorApi.post(e.reason, errorContext);\n }\n );\n }\n}\n\nexport { UnhandledErrorForwarder };\n//# sourceMappingURL=UnhandledErrorForwarder.esm.js.map\n","import { FeatureFlagState } from '@backstage/core-plugin-api';\n\nfunction validateFlagName(name) {\n if (name.length < 3) {\n throw new Error(\n `The '${name}' feature flag must have a minimum length of three characters.`\n );\n }\n if (name.length > 150) {\n throw new Error(\n `The '${name}' feature flag must not exceed 150 characters.`\n );\n }\n if (!name.match(/^[a-z]+[a-z0-9-]+$/)) {\n throw new Error(\n `The '${name}' feature flag must start with a lowercase letter and only contain lowercase letters, numbers and hyphens. Examples: feature-flag-one, alpha, release-2020`\n );\n }\n}\nclass LocalStorageFeatureFlags {\n registeredFeatureFlags = [];\n flags;\n registerFlag(flag) {\n validateFlagName(flag.name);\n this.registeredFeatureFlags.push(flag);\n }\n getRegisteredFlags() {\n return this.registeredFeatureFlags.slice();\n }\n isActive(name) {\n if (!this.flags) {\n this.flags = this.load();\n }\n return this.flags.get(name) === FeatureFlagState.Active;\n }\n save(options) {\n if (!this.flags) {\n this.flags = this.load();\n }\n if (!options.merge) {\n this.flags.clear();\n }\n for (const [name, state] of Object.entries(options.states)) {\n this.flags.set(name, state);\n }\n const enabled = Array.from(this.flags.entries()).filter(\n ([, state]) => state === FeatureFlagState.Active\n );\n window.localStorage.setItem(\n \"featureFlags\",\n JSON.stringify(Object.fromEntries(enabled))\n );\n }\n load() {\n try {\n const jsonStr = window.localStorage.getItem(\"featureFlags\");\n if (!jsonStr) {\n return /* @__PURE__ */ new Map();\n }\n const json = JSON.parse(jsonStr);\n if (typeof json !== \"object\" || json === null || Array.isArray(json)) {\n return /* @__PURE__ */ new Map();\n }\n const entries = Object.entries(json).filter(([name, value]) => {\n validateFlagName(name);\n return value === FeatureFlagState.Active;\n });\n return new Map(entries);\n } catch {\n return /* @__PURE__ */ new Map();\n }\n }\n}\n\nexport { LocalStorageFeatureFlags, validateFlagName };\n//# sourceMappingURL=LocalStorageFeatureFlags.esm.js.map\n","function createFetchApi(options) {\n let result = options.baseImplementation || global.fetch;\n const middleware = [options.middleware ?? []].flat().reverse();\n for (const m of middleware) {\n result = m.apply(result);\n }\n return {\n fetch: result\n };\n}\n\nexport { createFetchApi };\n//# sourceMappingURL=createFetchApi.esm.js.map\n","class IdentityAuthInjectorFetchMiddleware {\n constructor(identityApi, allowUrl, headerName, headerValue) {\n this.identityApi = identityApi;\n this.allowUrl = allowUrl;\n this.headerName = headerName;\n this.headerValue = headerValue;\n }\n static create(options) {\n const matcher = buildMatcher(options);\n const headerName = options.header?.name || \"authorization\";\n const headerValue = options.header?.value || ((token) => `Bearer ${token}`);\n return new IdentityAuthInjectorFetchMiddleware(\n options.identityApi,\n matcher,\n headerName,\n headerValue\n );\n }\n /**\n * Returns an array of plugin URL prefixes derived from the static `discovery`\n * configuration, to be used as `urlPrefixAllowlist` option of {@link create}.\n */\n static getDiscoveryUrlPrefixes(config) {\n const endpointConfigs = config.getOptionalConfigArray(\"discovery.endpoints\") || [];\n return endpointConfigs.flatMap((c) => {\n const target = typeof c.get(\"target\") === \"object\" ? c.getString(\"target.external\") : c.getString(\"target\");\n const plugins = c.getStringArray(\"plugins\");\n return plugins.map(\n (pluginId) => target.replace(/\\{\\{\\s*pluginId\\s*\\}\\}/g, pluginId)\n );\n });\n }\n apply(next) {\n return async (input, init) => {\n const request = new Request(input, init);\n const { token } = await this.identityApi.getCredentials();\n if (request.headers.get(this.headerName) || typeof token !== \"string\" || !token || !this.allowUrl(request.url)) {\n return next(input, init);\n }\n request.headers.set(this.headerName, this.headerValue(token));\n return next(request);\n };\n }\n}\nfunction buildMatcher(options) {\n if (options.allowUrl) {\n return options.allowUrl;\n } else if (options.urlPrefixAllowlist) {\n return buildPrefixMatcher(options.urlPrefixAllowlist);\n } else if (options.config) {\n return buildPrefixMatcher([\n options.config.getString(\"backend.baseUrl\"),\n ...IdentityAuthInjectorFetchMiddleware.getDiscoveryUrlPrefixes(\n options.config\n )\n ]);\n }\n return () => false;\n}\nfunction buildPrefixMatcher(prefixes) {\n const trimmedPrefixes = prefixes.map((prefix) => prefix.replace(/\\/$/, \"\"));\n return (url) => trimmedPrefixes.some(\n (prefix) => url === prefix || url.startsWith(`${prefix}/`)\n );\n}\n\nexport { IdentityAuthInjectorFetchMiddleware };\n//# sourceMappingURL=IdentityAuthInjectorFetchMiddleware.esm.js.map\n","function join(left, right) {\n if (!right || right === \"/\") {\n return left;\n }\n return `${left.replace(/\\/$/, \"\")}/${right.replace(/^\\//, \"\")}`;\n}\nclass PluginProtocolResolverFetchMiddleware {\n constructor(discoveryApi) {\n this.discoveryApi = discoveryApi;\n }\n apply(next) {\n return async (input, init) => {\n const request = new Request(input, init);\n const prefix = \"plugin://\";\n if (!request.url.startsWith(prefix)) {\n return next(input, init);\n }\n const { hostname, pathname, search, hash, username, password } = new URL(\n `http://${request.url.substring(prefix.length)}`\n );\n let base = await this.discoveryApi.getBaseUrl(hostname);\n if (username || password) {\n const baseUrl = new URL(base);\n const authority = `${username}${password ? `:${password}` : \"\"}@`;\n base = `${baseUrl.protocol}//${authority}${baseUrl.host}${baseUrl.pathname}`;\n }\n const target = `${join(base, pathname)}${search}${hash}`;\n return next(\n target,\n typeof input === \"string\" || isUrl(input) ? init : input\n );\n };\n }\n}\nfunction isUrl(a) {\n return typeof a === \"object\" && a?.constructor === URL;\n}\n\nexport { PluginProtocolResolverFetchMiddleware };\n//# sourceMappingURL=PluginProtocolResolverFetchMiddleware.esm.js.map\n","import { IdentityAuthInjectorFetchMiddleware } from './IdentityAuthInjectorFetchMiddleware.esm.js';\nimport { PluginProtocolResolverFetchMiddleware } from './PluginProtocolResolverFetchMiddleware.esm.js';\n\nclass FetchMiddlewares {\n /**\n * Handles translation from `plugin://` URLs to concrete http(s) URLs based on\n * the discovery API.\n *\n * @remarks\n *\n * If the request is for `plugin://catalog/entities?filter=x=y`, the discovery\n * API will be queried for `'catalog'`. If it returned\n * `https://backstage.example.net/api/catalog`, the resulting query would be\n * `https://backstage.example.net/api/catalog/entities?filter=x=y`.\n *\n * If the incoming URL protocol was not `plugin`, the request is just passed\n * through verbatim to the underlying implementation.\n */\n static resolvePluginProtocol(options) {\n return new PluginProtocolResolverFetchMiddleware(options.discoveryApi);\n }\n /**\n * Injects a Backstage token header when the user is signed in.\n *\n * @remarks\n *\n * Per default, an `Authorization: Bearer <token>` is generated. This can be\n * customized using the `header` option.\n *\n * The header injection only happens on allowlisted URLs. Per default, if the\n * `config` option is passed in, the `backend.baseUrl` is allowlisted, unless\n * the `urlPrefixAllowlist` or `allowUrl` options are passed in, in which case\n * they take precedence. If you pass in neither config nor an\n * allowlist/callback, the middleware will have no effect since effectively no\n * request will match the (nonexistent) rules.\n */\n static injectIdentityAuth(options) {\n return IdentityAuthInjectorFetchMiddleware.create(options);\n }\n constructor() {\n }\n}\n\nexport { FetchMiddlewares };\n//# sourceMappingURL=FetchMiddlewares.esm.js.map\n","import { BehaviorSubject } from '../../../lib/subjects.esm.js';\n\nfunction hasScopes(searched, searchFor) {\n for (const scope of searchFor) {\n if (!searched.has(scope)) {\n return false;\n }\n }\n return true;\n}\nfunction joinScopes(scopes, ...moreScopess) {\n const result = new Set(scopes);\n for (const moreScopes of moreScopess) {\n for (const scope of moreScopes) {\n result.add(scope);\n }\n }\n return result;\n}\nclass OAuthPendingRequests {\n requests = [];\n subject = new BehaviorSubject(\n this.getCurrentPending()\n );\n request(scopes) {\n return new Promise((resolve, reject) => {\n this.requests.push({ scopes, resolve, reject });\n this.subject.next(this.getCurrentPending());\n });\n }\n resolve(scopes, result) {\n this.requests = this.requests.filter((request) => {\n if (hasScopes(scopes, request.scopes)) {\n request.resolve(result);\n return false;\n }\n return true;\n });\n this.subject.next(this.getCurrentPending());\n }\n reject(error) {\n this.requests.forEach((request) => request.reject(error));\n this.requests = [];\n this.subject.next(this.getCurrentPending());\n }\n pending() {\n return this.subject;\n }\n getCurrentPending() {\n const currentScopes = this.requests.length === 0 ? void 0 : this.requests.slice(1).reduce(\n (acc, current) => joinScopes(acc, current.scopes),\n this.requests[0].scopes\n );\n return {\n scopes: currentScopes,\n resolve: (value) => {\n if (currentScopes) {\n this.resolve(currentScopes, value);\n }\n },\n reject: (reason) => {\n if (currentScopes) {\n this.reject(reason);\n }\n }\n };\n }\n}\n\nexport { OAuthPendingRequests, hasScopes, joinScopes };\n//# sourceMappingURL=OAuthPendingRequests.esm.js.map\n","import { OAuthPendingRequests } from './OAuthPendingRequests.esm.js';\nimport { PublishSubject } from '../../../lib/subjects.esm.js';\n\nclass OAuthRequestManager {\n subject = new PublishSubject();\n currentRequests = [];\n handlerCount = 0;\n createAuthRequester(options) {\n const handler = new OAuthPendingRequests();\n const index = this.handlerCount;\n this.handlerCount++;\n handler.pending().subscribe({\n next: (scopeRequest) => {\n const newRequests = this.currentRequests.slice();\n const request = this.makeAuthRequest(scopeRequest, options);\n if (!request) {\n delete newRequests[index];\n } else {\n newRequests[index] = request;\n }\n this.currentRequests = newRequests;\n this.subject.next(newRequests.filter(Boolean));\n }\n });\n return (scopes) => {\n return handler.request(scopes);\n };\n }\n // Converts the pending request and popup options into a popup request that we can forward to subscribers.\n makeAuthRequest(request, options) {\n const { scopes } = request;\n if (!scopes) {\n return void 0;\n }\n return {\n provider: options.provider,\n trigger: async () => {\n const result = await options.onAuthRequest(scopes);\n request.resolve(result);\n },\n reject: () => {\n const error = new Error(\"Login failed, rejected by user\");\n error.name = \"RejectedError\";\n request.reject(error);\n }\n };\n }\n authRequest$() {\n return this.subject;\n }\n}\n\nexport { OAuthRequestManager };\n//# sourceMappingURL=OAuthRequestManager.esm.js.map\n","import ObservableImpl from 'zen-observable';\n\nconst buckets = /* @__PURE__ */ new Map();\nclass WebStorage {\n constructor(namespace, errorApi) {\n this.namespace = namespace;\n this.errorApi = errorApi;\n }\n static hasSubscribed = false;\n static create(options) {\n return new WebStorage(options.namespace ?? \"\", options.errorApi);\n }\n static addStorageEventListener() {\n window.addEventListener(\"storage\", (event) => {\n for (const [bucketPath, webStorage] of buckets.entries()) {\n if (event.key?.startsWith(bucketPath)) {\n webStorage.handleStorageChange(event.key);\n }\n }\n });\n }\n get(key) {\n return this.snapshot(key).value;\n }\n snapshot(key) {\n let value = void 0;\n let presence = \"absent\";\n try {\n const item = localStorage.getItem(this.getKeyName(key));\n if (item) {\n value = JSON.parse(item, (_key, val) => {\n if (typeof val === \"object\" && val !== null) {\n Object.freeze(val);\n }\n return val;\n });\n presence = \"present\";\n }\n } catch (e) {\n this.errorApi.post(\n new Error(`Error when parsing JSON config from storage for: ${key}`)\n );\n }\n return { key, value, presence };\n }\n forBucket(name) {\n const bucketPath = `${this.namespace}/${name}`;\n if (!buckets.has(bucketPath)) {\n buckets.set(bucketPath, new WebStorage(bucketPath, this.errorApi));\n }\n return buckets.get(bucketPath);\n }\n async set(key, data) {\n localStorage.setItem(this.getKeyName(key), JSON.stringify(data));\n this.notifyChanges(key);\n }\n async remove(key) {\n localStorage.removeItem(this.getKeyName(key));\n this.notifyChanges(key);\n }\n observe$(key) {\n if (!WebStorage.hasSubscribed) {\n WebStorage.addStorageEventListener();\n WebStorage.hasSubscribed = true;\n }\n return this.observable.filter(({ key: messageKey }) => messageKey === key);\n }\n handleStorageChange(eventKey) {\n if (!eventKey?.startsWith(this.namespace)) {\n return;\n }\n const trimmedKey = eventKey?.slice(`${this.namespace}/`.length);\n if (!trimmedKey.includes(\"/\")) {\n this.notifyChanges(decodeURIComponent(trimmedKey));\n }\n }\n getKeyName(key) {\n return `${this.namespace}/${encodeURIComponent(key)}`;\n }\n notifyChanges(key) {\n const snapshot = this.snapshot(key);\n for (const subscription of this.subscribers) {\n subscription.next(snapshot);\n }\n }\n subscribers = /* @__PURE__ */ new Set();\n observable = new ObservableImpl((subscriber) => {\n this.subscribers.add(subscriber);\n return () => {\n this.subscribers.delete(subscriber);\n };\n });\n}\n\nexport { WebStorage, buckets };\n//# sourceMappingURL=WebStorage.esm.js.map\n","import { createContext } from 'react';\n\nconst InternalAppContext = createContext(void 0);\n\nexport { InternalAppContext };\n//# sourceMappingURL=InternalAppContext.esm.js.map\n","import { jsx } from 'react/jsx-runtime';\nimport { createRoutesFromChildren, Route } from 'react-router-dom';\n\nfunction isReactRouterBeta() {\n const [obj] = createRoutesFromChildren(/* @__PURE__ */ jsx(Route, { index: true, element: /* @__PURE__ */ jsx(\"div\", {}) }));\n return !obj.index;\n}\n\nexport { isReactRouterBeta };\n//# sourceMappingURL=isReactRouterBeta.esm.js.map\n","import { jsx } from 'react/jsx-runtime';\nimport { useEffect } from 'react';\nimport { useLocation, matchRoutes } from 'react-router-dom';\nimport { AnalyticsContext, useAnalytics } from '@backstage/core-plugin-api';\n\nconst getExtensionContext = (pathname, routes) => {\n try {\n const matches = matchRoutes(routes, { pathname });\n const routeMatch = matches?.filter((match) => match?.route.routeRefs?.size > 0).pop();\n const routeObject = routeMatch?.route;\n if (!routeObject) {\n return void 0;\n }\n if (routeObject.path === \"\" && pathname !== \"/\") {\n return void 0;\n }\n let routeRef;\n if (routeObject.routeRefs.size === 1) {\n routeRef = routeObject.routeRefs.values().next().value;\n }\n let plugin;\n if (routeObject.plugins.size === 1) {\n plugin = routeObject.plugins.values().next().value;\n }\n const params = Object.entries(\n routeMatch?.params || {}\n ).reduce((acc, [key, value]) => {\n if (value !== void 0 && key !== \"*\") {\n acc[key] = value;\n }\n return acc;\n }, {});\n return {\n extension: \"App\",\n pluginId: plugin?.getId() || \"root\",\n ...routeRef ? { routeRef: routeRef.id } : {},\n _routeNodeType: routeObject.element,\n params\n };\n } catch {\n return void 0;\n }\n};\nconst TrackNavigation = ({\n pathname,\n search,\n hash,\n attributes\n}) => {\n const analytics = useAnalytics();\n useEffect(() => {\n analytics.captureEvent(\"navigate\", `${pathname}${search}${hash}`, {\n attributes\n });\n }, [analytics, pathname, search, hash, attributes]);\n return null;\n};\nconst RouteTracker = ({\n routeObjects\n}) => {\n const { pathname, search, hash } = useLocation();\n const { params, ...attributes } = getExtensionContext(\n pathname,\n routeObjects\n ) || { params: {} };\n return /* @__PURE__ */ jsx(AnalyticsContext, { attributes, children: /* @__PURE__ */ jsx(\n TrackNavigation,\n {\n pathname,\n search,\n hash,\n attributes: params\n }\n ) });\n};\n\nexport { RouteTracker };\n//# sourceMappingURL=RouteTracker.esm.js.map\n","import { jsxs, jsx, Fragment } from 'react/jsx-runtime';\nimport { useContext, useState } from 'react';\nimport { attachComponentData, useApp, useApi, configApiRef } from '@backstage/core-plugin-api';\nimport { InternalAppContext } from './InternalAppContext.esm.js';\nimport { isReactRouterBeta } from './isReactRouterBeta.esm.js';\nimport { RouteTracker } from '../routing/RouteTracker.esm.js';\nimport { Routes, Route } from 'react-router-dom';\n\nfunction getBasePath(configApi) {\n if (!isReactRouterBeta()) {\n return \"\";\n }\n return readBasePath(configApi);\n}\nfunction readBasePath(configApi) {\n let { pathname } = new URL(\n configApi.getOptionalString(\"app.baseUrl\") ?? \"/\",\n \"http://sample.dev\"\n // baseUrl can be specified as just a path\n );\n pathname = pathname.replace(/\\/*$/, \"\");\n return pathname;\n}\nfunction SignInPageWrapper({\n component: Component,\n appIdentityProxy,\n children\n}) {\n const [identityApi, setIdentityApi] = useState();\n const configApi = useApi(configApiRef);\n const basePath = readBasePath(configApi);\n if (!identityApi) {\n return /* @__PURE__ */ jsx(Component, { onSignInSuccess: setIdentityApi });\n }\n appIdentityProxy.setTarget(identityApi, {\n signOutTargetUrl: basePath || \"/\"\n });\n return /* @__PURE__ */ jsx(Fragment, { children });\n}\nfunction AppRouter(props) {\n const { Router: RouterComponent, SignInPage: SignInPageComponent } = useApp().getComponents();\n const configApi = useApi(configApiRef);\n const basePath = readBasePath(configApi);\n const mountPath = `${basePath}/*`;\n const internalAppContext = useContext(InternalAppContext);\n if (!internalAppContext) {\n throw new Error(\"AppRouter must be rendered within the AppProvider\");\n }\n const { routeObjects, appIdentityProxy } = internalAppContext;\n if (!SignInPageComponent) {\n appIdentityProxy.setTarget(\n {\n getUserId: () => \"guest\",\n getIdToken: async () => void 0,\n getProfile: () => ({\n email: \"guest@example.com\",\n displayName: \"Guest\"\n }),\n getProfileInfo: async () => ({\n email: \"guest@example.com\",\n displayName: \"Guest\"\n }),\n getBackstageIdentity: async () => ({\n type: \"user\",\n userEntityRef: \"user:default/guest\",\n ownershipEntityRefs: [\"user:default/guest\"]\n }),\n getCredentials: async () => ({}),\n signOut: async () => {\n }\n },\n { signOutTargetUrl: basePath || \"/\" }\n );\n if (isReactRouterBeta()) {\n return /* @__PURE__ */ jsxs(RouterComponent, { children: [\n /* @__PURE__ */ jsx(RouteTracker, { routeObjects }),\n /* @__PURE__ */ jsx(Routes, { children: /* @__PURE__ */ jsx(Route, { path: mountPath, element: /* @__PURE__ */ jsx(Fragment, { children: props.children }) }) })\n ] });\n }\n return /* @__PURE__ */ jsxs(RouterComponent, { basename: basePath, children: [\n /* @__PURE__ */ jsx(RouteTracker, { routeObjects }),\n props.children\n ] });\n }\n if (isReactRouterBeta()) {\n return /* @__PURE__ */ jsxs(RouterComponent, { children: [\n /* @__PURE__ */ jsx(RouteTracker, { routeObjects }),\n /* @__PURE__ */ jsx(\n SignInPageWrapper,\n {\n component: SignInPageComponent,\n appIdentityProxy,\n children: /* @__PURE__ */ jsx(Routes, { children: /* @__PURE__ */ jsx(Route, { path: mountPath, element: /* @__PURE__ */ jsx(Fragment, { children: props.children }) }) })\n }\n )\n ] });\n }\n return /* @__PURE__ */ jsxs(RouterComponent, { basename: basePath, children: [\n /* @__PURE__ */ jsx(RouteTracker, { routeObjects }),\n /* @__PURE__ */ jsx(\n SignInPageWrapper,\n {\n component: SignInPageComponent,\n appIdentityProxy,\n children: props.children\n }\n )\n ] });\n}\nattachComponentData(AppRouter, \"core.type\", \"AppRouter\");\n\nexport { AppRouter, getBasePath };\n//# sourceMappingURL=AppRouter.esm.js.map\n","import { createApiRef } from '@backstage/core-plugin-api';\n\nconst appLanguageApiRef = createApiRef({\n id: \"core.applanguage\"\n});\n\nexport { appLanguageApiRef };\n//# sourceMappingURL=AppLanguageApi.esm.js.map\n","import { Children, isValidElement } from 'react';\n\nfunction traverseElementTree(options) {\n const collectors = {};\n for (const name in options.collectors) {\n if (options.collectors.hasOwnProperty(name)) {\n collectors[name] = options.collectors[name]();\n }\n }\n const queue = [\n {\n node: Children.toArray(options.root),\n parent: void 0,\n contexts: {}\n }\n ];\n while (queue.length !== 0) {\n const { node, parent, contexts } = queue.shift();\n Children.forEach(node, (element) => {\n if (!isValidElement(element)) {\n return;\n }\n const nextContexts = {};\n for (const name in collectors) {\n if (collectors.hasOwnProperty(name)) {\n const collector = collectors[name];\n nextContexts[name] = collector.visit(\n collector.accumulator,\n element,\n parent,\n contexts[name]\n );\n }\n }\n for (const discoverer of options.discoverers) {\n const children = discoverer(element);\n if (children) {\n queue.push({\n node: children,\n parent: element,\n contexts: nextContexts\n });\n }\n }\n });\n }\n return Object.fromEntries(\n Object.entries(collectors).map(([name, c]) => [name, c.accumulator])\n );\n}\nfunction createCollector(accumulatorFactory, visit) {\n return () => ({ accumulator: accumulatorFactory(), visit });\n}\nfunction childDiscoverer(element) {\n return element.props?.children;\n}\nfunction routeElementDiscoverer(element) {\n if (element.props?.path && element.props?.element) {\n return element.props?.element;\n }\n return void 0;\n}\n\nexport { childDiscoverer, createCollector, routeElementDiscoverer, traverseElementTree };\n//# sourceMappingURL=traversal.esm.js.map\n","import { getComponentData } from '@backstage/core-plugin-api';\nimport { createCollector } from '../extensions/traversal.esm.js';\n\nconst pluginCollector = createCollector(\n () => /* @__PURE__ */ new Set(),\n (acc, node) => {\n const plugin = getComponentData(node, \"core.plugin\");\n if (plugin) {\n acc.add(plugin);\n }\n }\n);\n\nexport { pluginCollector };\n//# sourceMappingURL=collectors.esm.js.map\n","import { jsx, Fragment } from 'react/jsx-runtime';\nimport { attachComponentData, useApi, featureFlagsApiRef } from '@backstage/core-plugin-api';\n\nconst FeatureFlagged = (props) => {\n const { children } = props;\n const featureFlagApi = useApi(featureFlagsApiRef);\n const isEnabled = \"with\" in props ? featureFlagApi.isActive(props.with) : !featureFlagApi.isActive(props.without);\n return /* @__PURE__ */ jsx(Fragment, { children: isEnabled ? children : null });\n};\nattachComponentData(FeatureFlagged, \"core.featureFlagged\", true);\n\nexport { FeatureFlagged };\n//# sourceMappingURL=FeatureFlagged.esm.js.map\n","import { getComponentData } from '@backstage/core-plugin-api';\nimport { isValidElement, Children } from 'react';\nimport { createCollector } from '../extensions/traversal.esm.js';\nimport { FeatureFlagged } from './FeatureFlagged.esm.js';\n\nconst MATCH_ALL_ROUTE = {\n caseSensitive: false,\n path: \"*\",\n element: \"match-all\",\n // These elements aren't used, so we add in a bit of debug information\n routeRefs: /* @__PURE__ */ new Set(),\n plugins: /* @__PURE__ */ new Set()\n};\nfunction stringifyNode(node) {\n const anyNode = node;\n if (anyNode?.type) {\n return anyNode.type.displayName ?? anyNode.type.name ?? String(anyNode.type);\n }\n return String(anyNode);\n}\nconst pluginSet = (plugin) => {\n const set = /* @__PURE__ */ new Set();\n if (plugin) {\n set.add(plugin);\n }\n return set;\n};\nfunction collectSubTree(node, entries = new Array()) {\n Children.forEach(node, (element) => {\n if (!isValidElement(element)) {\n return;\n }\n const routeRef = getComponentData(element, \"core.mountPoint\");\n if (routeRef) {\n const plugin = getComponentData(element, \"core.plugin\");\n entries.push({ routeRef, plugin });\n }\n collectSubTree(element.props.children, entries);\n });\n return entries;\n}\nconst routingV2Collector = createCollector(\n () => ({\n paths: /* @__PURE__ */ new Map(),\n parents: /* @__PURE__ */ new Map(),\n objects: new Array()\n }),\n (acc, node, parent, ctx) => {\n if (ctx?.isElementAncestor) {\n return ctx;\n }\n if (parent?.props.element === node) {\n return { ...ctx, isElementAncestor: true };\n }\n const pathProp = node.props?.path;\n const mountPoint = getComponentData(node, \"core.mountPoint\");\n if (mountPoint && pathProp) {\n throw new Error(\n `Path property may not be set directly on a routable extension \"${stringifyNode(\n node\n )}\"`\n );\n }\n const parentChildren = ctx?.obj?.children ?? acc.objects;\n if (pathProp !== void 0) {\n if (typeof pathProp !== \"string\") {\n throw new Error(\n `Element path must be a string at \"${stringifyNode(node)}\"`\n );\n }\n const path = pathProp.startsWith(\"/\") ? pathProp.slice(1) : pathProp;\n const elementProp = node.props.element;\n if (getComponentData(node, \"core.gatherMountPoints\")) {\n if (elementProp) {\n throw new Error(\n `Mount point gatherers may not have an element prop \"${stringifyNode(\n node\n )}\"`\n );\n }\n const newObj = {\n path,\n element: \"gathered\",\n routeRefs: /* @__PURE__ */ new Set(),\n caseSensitive: Boolean(node.props?.caseSensitive),\n children: [MATCH_ALL_ROUTE],\n plugins: /* @__PURE__ */ new Set()\n };\n parentChildren.push(newObj);\n return {\n obj: newObj,\n gatherPath: path,\n routeRef: ctx?.routeRef,\n gatherRouteRef: ctx?.routeRef\n };\n }\n if (elementProp) {\n const [extension, ...others] = collectSubTree(elementProp);\n if (others.length > 0) {\n throw new Error(\n `Route element with path \"${pathProp}\" may not contain multiple routable extensions`\n );\n }\n if (!extension) {\n return ctx;\n }\n const { routeRef, plugin } = extension;\n const newObj = {\n path,\n element: \"mounted\",\n routeRefs: /* @__PURE__ */ new Set([routeRef]),\n caseSensitive: Boolean(node.props?.caseSensitive),\n children: [MATCH_ALL_ROUTE],\n plugins: pluginSet(plugin)\n };\n parentChildren.push(newObj);\n acc.paths.set(routeRef, path);\n acc.parents.set(routeRef, ctx?.routeRef);\n return {\n obj: newObj,\n routeRef: routeRef ?? ctx?.routeRef,\n gatherPath: path,\n gatherRouteRef: ctx?.gatherRouteRef\n };\n }\n }\n if (mountPoint) {\n if (ctx?.gatherPath === void 0) {\n throw new Error(\n `Routable extension \"${stringifyNode(\n node\n )}\" with mount point \"${mountPoint}\" must be assigned a path`\n );\n }\n ctx?.obj?.routeRefs.add(mountPoint);\n const mountPointPlugin = getComponentData(\n node,\n \"core.plugin\"\n );\n if (mountPointPlugin) {\n ctx?.obj?.plugins.add(mountPointPlugin);\n }\n acc.paths.set(mountPoint, ctx.gatherPath);\n acc.parents.set(mountPoint, ctx?.gatherRouteRef);\n return {\n ...ctx,\n routeRef: mountPoint\n };\n }\n return ctx;\n }\n);\nconst routingV1Collector = createCollector(\n () => ({\n paths: /* @__PURE__ */ new Map(),\n parents: /* @__PURE__ */ new Map(),\n objects: new Array()\n }),\n (acc, node, parent, ctx) => {\n if (parent?.props.element === node) {\n return ctx;\n }\n let currentObj = ctx?.obj;\n let currentParentRouteRef = ctx?.routeRef;\n let sticky = ctx?.sticky;\n const path = node.props?.path;\n const parentChildren = currentObj?.children ?? acc.objects;\n const caseSensitive = Boolean(node.props?.caseSensitive);\n let currentCtxPath = ctx?.path;\n if (getComponentData(node, \"core.gatherMountPoints\")) {\n if (!path) {\n throw new Error(\"Mount point gatherer must have a path\");\n }\n currentCtxPath = path;\n }\n const element = node.props?.element;\n let routeRef = getComponentData(node, \"core.mountPoint\");\n if (!routeRef && isValidElement(element)) {\n routeRef = getComponentData(element, \"core.mountPoint\");\n }\n if (routeRef) {\n let routePath = path;\n if (currentCtxPath) {\n if (routePath) {\n currentCtxPath = void 0;\n } else {\n routePath = currentCtxPath;\n }\n }\n if (!routePath) {\n throw new Error(\"Mounted routable extension must have a path\");\n }\n acc.paths.set(routeRef, routePath);\n if (currentParentRouteRef && sticky) {\n acc.parents.set(routeRef, currentParentRouteRef);\n if (path) {\n currentParentRouteRef = routeRef;\n sticky = false;\n }\n } else {\n acc.parents.set(routeRef, currentParentRouteRef);\n currentParentRouteRef = routeRef;\n }\n if (path) {\n currentObj = {\n caseSensitive,\n path,\n element: \"mounted\",\n routeRefs: /* @__PURE__ */ new Set([routeRef]),\n children: [MATCH_ALL_ROUTE],\n plugins: pluginSet(\n getComponentData(\n node.props.element,\n \"core.plugin\"\n )\n )\n };\n parentChildren.push(currentObj);\n } else {\n currentObj?.routeRefs.add(routeRef);\n }\n }\n if (getComponentData(node, \"core.gatherMountPoints\")) {\n sticky = true;\n }\n const isGatherer = getComponentData(\n node,\n \"core.gatherMountPoints\"\n );\n if (isGatherer) {\n if (!path) {\n throw new Error(\"Mount point gatherer must have a path\");\n }\n if (!routeRef) {\n currentObj = {\n caseSensitive,\n path,\n element: \"gathered\",\n routeRefs: /* @__PURE__ */ new Set(),\n children: [MATCH_ALL_ROUTE],\n plugins: ctx?.obj?.plugins || /* @__PURE__ */ new Set()\n };\n parentChildren.push(currentObj);\n }\n }\n return {\n obj: currentObj,\n path: currentCtxPath,\n routeRef: currentParentRouteRef,\n sticky\n };\n }\n);\nconst featureFlagCollector = createCollector(\n () => /* @__PURE__ */ new Set(),\n (acc, node) => {\n if (node.type === FeatureFlagged) {\n const props = node.props;\n acc.add(\"with\" in props ? props.with : props.without);\n }\n }\n);\n\nexport { MATCH_ALL_ROUTE, featureFlagCollector, routingV1Collector, routingV2Collector };\n//# sourceMappingURL=collectors.esm.js.map\n","import { getOrCreateGlobalSingleton } from '@backstage/version-bridge';\n\nconst routeRefType = getOrCreateGlobalSingleton(\n \"route-ref-type\",\n () => Symbol(\"route-ref-type\")\n);\nfunction isRouteRef(routeRef) {\n return routeRef[routeRefType] === \"absolute\";\n}\nfunction isSubRouteRef(routeRef) {\n return routeRef[routeRefType] === \"sub\";\n}\nfunction isExternalRouteRef(routeRef) {\n return routeRef[routeRefType] === \"external\";\n}\n\nexport { isExternalRouteRef, isRouteRef, isSubRouteRef, routeRefType };\n//# sourceMappingURL=types.esm.js.map\n","function joinPaths(...paths) {\n const normalized = paths.join(\"/\").replace(/\\/\\/+/g, \"/\");\n if (normalized !== \"/\" && normalized.endsWith(\"/\")) {\n return normalized.slice(0, -1);\n }\n return normalized;\n}\n\nexport { joinPaths };\n//# sourceMappingURL=helpers.esm.js.map\n","import { matchRoutes, generatePath } from 'react-router-dom';\nimport { isRouteRef, isSubRouteRef, isExternalRouteRef, routeRefType } from './types.esm.js';\nimport { joinPaths } from './helpers.esm.js';\nimport mapValues from 'lodash/mapValues';\n\nfunction resolveTargetRef(anyRouteRef, routePaths, routeBindings) {\n let targetRef;\n let subRoutePath = \"\";\n if (isRouteRef(anyRouteRef)) {\n targetRef = anyRouteRef;\n } else if (isSubRouteRef(anyRouteRef)) {\n targetRef = anyRouteRef.parent;\n subRoutePath = anyRouteRef.path;\n } else if (isExternalRouteRef(anyRouteRef)) {\n const resolvedRoute = routeBindings.get(anyRouteRef);\n if (!resolvedRoute) {\n return [void 0, \"\"];\n }\n if (isRouteRef(resolvedRoute)) {\n targetRef = resolvedRoute;\n } else if (isSubRouteRef(resolvedRoute)) {\n targetRef = resolvedRoute.parent;\n subRoutePath = resolvedRoute.path;\n } else {\n throw new Error(\n `ExternalRouteRef was bound to invalid target, ${resolvedRoute}`\n );\n }\n } else if (anyRouteRef[routeRefType]) {\n throw new Error(\n `Unknown or invalid route ref type, ${anyRouteRef[routeRefType]}`\n );\n } else {\n throw new Error(`Unknown object passed to useRouteRef, got ${anyRouteRef}`);\n }\n if (!targetRef) {\n return [void 0, \"\"];\n }\n const resolvedPath = routePaths.get(targetRef);\n if (resolvedPath === void 0) {\n return [void 0, \"\"];\n }\n const targetPath = joinPaths(resolvedPath, subRoutePath);\n return [targetRef, targetPath];\n}\nfunction resolveBasePath(targetRef, sourceLocation, routePaths, routeParents, routeObjects) {\n const match = matchRoutes(routeObjects, sourceLocation) ?? [];\n const refDiffList = Array();\n let matchIndex = -1;\n for (let targetSearchRef = targetRef; targetSearchRef; targetSearchRef = routeParents.get(targetSearchRef)) {\n matchIndex = match.findIndex(\n (m) => m.route.routeRefs.has(targetSearchRef)\n );\n if (matchIndex !== -1) {\n break;\n }\n refDiffList.unshift(targetSearchRef);\n }\n if (refDiffList.length === 0) {\n matchIndex -= 1;\n }\n const parentPath = matchIndex === -1 ? \"\" : match[matchIndex].pathname;\n const diffPaths = refDiffList.slice(0, -1).map((ref) => {\n const path = routePaths.get(ref);\n if (path === void 0) {\n throw new Error(`No path for ${ref}`);\n }\n if (path.includes(\":\")) {\n throw new Error(\n `Cannot route to ${targetRef} with parent ${ref} as it has parameters`\n );\n }\n return path;\n });\n return `${joinPaths(parentPath, ...diffPaths)}/`;\n}\nclass RouteResolver {\n constructor(routePaths, routeParents, routeObjects, routeBindings, appBasePath) {\n this.routePaths = routePaths;\n this.routeParents = routeParents;\n this.routeObjects = routeObjects;\n this.routeBindings = routeBindings;\n this.appBasePath = appBasePath;\n }\n resolve(anyRouteRef, sourceLocation) {\n const [targetRef, targetPath] = resolveTargetRef(\n anyRouteRef,\n this.routePaths,\n this.routeBindings\n );\n if (!targetRef) {\n return void 0;\n }\n let relativeSourceLocation;\n if (typeof sourceLocation === \"string\") {\n relativeSourceLocation = this.trimPath(sourceLocation);\n } else if (sourceLocation.pathname) {\n relativeSourceLocation = {\n ...sourceLocation,\n pathname: this.trimPath(sourceLocation.pathname)\n };\n } else {\n relativeSourceLocation = sourceLocation;\n }\n const basePath = this.appBasePath + resolveBasePath(\n targetRef,\n relativeSourceLocation,\n this.routePaths,\n this.routeParents,\n this.routeObjects\n );\n const routeFunc = (...[params]) => {\n const encodedParams = params && mapValues(params, (value) => {\n if (typeof value === \"string\") {\n return value.replaceAll(/[&?#;\\/]/g, (c) => encodeURIComponent(c));\n }\n return value;\n });\n return joinPaths(basePath, generatePath(targetPath, encodedParams));\n };\n return routeFunc;\n }\n trimPath(targetPath) {\n if (!targetPath) {\n return targetPath;\n }\n if (targetPath.startsWith(this.appBasePath)) {\n return targetPath.slice(this.appBasePath.length);\n }\n return targetPath;\n }\n}\n\nexport { RouteResolver };\n//# sourceMappingURL=RouteResolver.esm.js.map\n","import { jsx } from 'react/jsx-runtime';\nimport { createVersionedContext, createVersionedValueMap } from '@backstage/version-bridge';\nimport { RouteResolver } from './RouteResolver.esm.js';\n\nconst RoutingContext = createVersionedContext(\n \"routing-context\"\n);\nconst RoutingProvider = ({\n routePaths,\n routeParents,\n routeObjects,\n routeBindings,\n basePath = \"\",\n children\n}) => {\n const resolver = new RouteResolver(\n routePaths,\n routeParents,\n routeObjects,\n routeBindings,\n basePath\n );\n const versionedValue = createVersionedValueMap({ 1: resolver });\n return /* @__PURE__ */ jsx(RoutingContext.Provider, { value: versionedValue, children });\n};\n\nexport { RoutingProvider };\n//# sourceMappingURL=RoutingProvider.esm.js.map\n","import { jsx } from 'react/jsx-runtime';\nimport { createVersionedContext, createVersionedValueMap } from '@backstage/version-bridge';\n\nconst AppContext = createVersionedContext(\"app-context\");\nconst AppContextProvider = ({\n appContext,\n children\n}) => {\n const versionedValue = createVersionedValueMap({ 1: appContext });\n return /* @__PURE__ */ jsx(AppContext.Provider, { value: versionedValue, children });\n};\n\nexport { AppContextProvider };\n//# sourceMappingURL=AppContext.esm.js.map\n","import { startCookieAuthRefresh } from './startCookieAuthRefresh.esm.js';\n\nfunction mkError(thing) {\n return new Error(\n `Tried to access IdentityApi ${thing} before app was loaded`\n );\n}\nfunction logDeprecation(thing) {\n console.warn(\n `WARNING: Call to ${thing} is deprecated and will break in the future`\n );\n}\nclass AppIdentityProxy {\n target;\n waitForTarget;\n resolveTarget = () => {\n };\n signOutTargetUrl = \"/\";\n #cookieAuthSignOut;\n constructor() {\n this.waitForTarget = new Promise((resolve) => {\n this.resolveTarget = resolve;\n });\n }\n // This is called by the app manager once the sign-in page provides us with an implementation\n setTarget(identityApi, targetOptions) {\n this.target = identityApi;\n this.signOutTargetUrl = targetOptions.signOutTargetUrl;\n this.resolveTarget(identityApi);\n }\n getUserId() {\n if (!this.target) {\n throw mkError(\"getUserId\");\n }\n if (!this.target.getUserId) {\n throw new Error(\"IdentityApi does not implement getUserId\");\n }\n logDeprecation(\"getUserId\");\n return this.target.getUserId();\n }\n getProfile() {\n if (!this.target) {\n throw mkError(\"getProfile\");\n }\n if (!this.target.getProfile) {\n throw new Error(\"IdentityApi does not implement getProfile\");\n }\n logDeprecation(\"getProfile\");\n return this.target.getProfile();\n }\n async getProfileInfo() {\n return this.waitForTarget.then((target) => target.getProfileInfo());\n }\n async getBackstageIdentity() {\n const identity = await this.waitForTarget.then(\n (target) => target.getBackstageIdentity()\n );\n if (!identity.userEntityRef.match(/^.*:.*\\/.*$/)) {\n console.warn(\n `WARNING: The App IdentityApi provided an invalid userEntityRef, '${identity.userEntityRef}'. It must be a full Entity Reference of the form '<kind>:<namespace>/<name>'.`\n );\n }\n return identity;\n }\n async getCredentials() {\n return this.waitForTarget.then((target) => target.getCredentials());\n }\n async getIdToken() {\n return this.waitForTarget.then((target) => {\n if (!target.getIdToken) {\n throw new Error(\"IdentityApi does not implement getIdToken\");\n }\n logDeprecation(\"getIdToken\");\n return target.getIdToken();\n });\n }\n async signOut() {\n await this.waitForTarget.then((target) => target.signOut());\n await this.#cookieAuthSignOut?.();\n window.location.href = this.signOutTargetUrl;\n }\n enableCookieAuth(ctx) {\n if (this.#cookieAuthSignOut) {\n return;\n }\n const stopRefresh = startCookieAuthRefresh(ctx);\n this.#cookieAuthSignOut = async () => {\n stopRefresh();\n const appBaseUrl = await ctx.discoveryApi.getBaseUrl(\"app\");\n try {\n await fetch(`${appBaseUrl}/.backstage/auth/v1/cookie`, {\n method: \"DELETE\",\n credentials: \"include\"\n });\n } catch {\n }\n };\n }\n}\n\nexport { AppIdentityProxy };\n//# sourceMappingURL=AppIdentityProxy.esm.js.map\n","const PLUGIN_ID = \"app\";\nconst CHANNEL_ID = `${PLUGIN_ID}-auth-cookie-expires-at`;\nconst MIN_BASE_DELAY_MS = 5 * 6e4;\nconst ERROR_BACKOFF_START = 5e3;\nconst ERROR_BACKOFF_FACTOR = 2;\nconst ERROR_BACKOFF_MAX = 5 * 6e4;\nfunction startCookieAuthRefresh({\n discoveryApi,\n fetchApi,\n errorApi\n}) {\n let stopped = false;\n let timeout;\n let firstError = true;\n let errorBackoff = ERROR_BACKOFF_START;\n const channel = \"BroadcastChannel\" in window ? new BroadcastChannel(CHANNEL_ID) : void 0;\n const getDelay = (expiresAt) => {\n const margin = (1 + 3 * Math.random()) * 6e4;\n const delay = Math.max(expiresAt - Date.now(), MIN_BASE_DELAY_MS) - margin;\n return delay;\n };\n const refresh = async () => {\n try {\n const baseUrl = await discoveryApi.getBaseUrl(PLUGIN_ID);\n const requestUrl = `${baseUrl}/.backstage/auth/v1/cookie`;\n const res = await fetchApi.fetch(requestUrl, {\n credentials: \"include\"\n });\n if (!res.ok) {\n throw new Error(\n `Request failed with status ${res.status} ${res.statusText}, see request towards ${requestUrl} for more details`\n );\n }\n const data = await res.json();\n if (!data.expiresAt) {\n throw new Error(\"No expiration date in response\");\n }\n const expiresAt = Date.parse(data.expiresAt);\n if (Number.isNaN(expiresAt)) {\n throw new Error(\"Invalid expiration date in response\");\n }\n firstError = true;\n channel?.postMessage({\n action: \"COOKIE_REFRESH_SUCCESS\",\n payload: { expiresAt: new Date(expiresAt).toISOString() }\n });\n scheduleRefresh(getDelay(expiresAt));\n } catch (error) {\n if (firstError) {\n firstError = false;\n errorBackoff = ERROR_BACKOFF_START;\n } else {\n errorBackoff = Math.min(\n ERROR_BACKOFF_MAX,\n errorBackoff * ERROR_BACKOFF_FACTOR\n );\n console.error(\"Session cookie refresh failed\", error);\n errorApi.post(\n new Error(\n `Session refresh failed, see developer console for details`\n )\n );\n }\n scheduleRefresh(errorBackoff);\n }\n };\n const onMessage = (event) => {\n const { data } = event;\n if (data === null || typeof data !== \"object\") {\n return;\n }\n if (\"action\" in data && data.action === \"COOKIE_REFRESH_SUCCESS\") {\n const expiresAt = Date.parse(data.payload.expiresAt);\n if (Number.isNaN(expiresAt)) {\n console.warn(\n \"Received invalid expiration from session refresh channel\"\n );\n return;\n }\n scheduleRefresh(getDelay(expiresAt));\n }\n };\n function scheduleRefresh(delayMs) {\n if (stopped) {\n return;\n }\n if (timeout) {\n clearTimeout(timeout);\n }\n timeout = setTimeout(refresh, delayMs);\n }\n channel?.addEventListener(\"message\", onMessage);\n refresh();\n return () => {\n stopped = true;\n if (timeout) {\n clearTimeout(timeout);\n }\n channel?.removeEventListener(\"message\", onMessage);\n channel?.close();\n };\n}\n\nexport { startCookieAuthRefresh };\n//# sourceMappingURL=startCookieAuthRefresh.esm.js.map\n","import { jsx } from 'react/jsx-runtime';\nimport { useMemo, useState, useEffect } from 'react';\nimport { useApi, appThemeApiRef } from '@backstage/core-plugin-api';\nimport useObservable from 'react-use/esm/useObservable';\n\nfunction resolveTheme(themeId, shouldPreferDark, themes) {\n if (themeId !== void 0) {\n const selectedTheme = themes.find((theme) => theme.id === themeId);\n if (selectedTheme) {\n return selectedTheme;\n }\n }\n if (shouldPreferDark) {\n const darkTheme = themes.find((theme) => theme.variant === \"dark\");\n if (darkTheme) {\n return darkTheme;\n }\n }\n const lightTheme = themes.find((theme) => theme.variant === \"light\");\n if (lightTheme) {\n return lightTheme;\n }\n return themes[0];\n}\nconst useShouldPreferDarkTheme = () => {\n const mediaQuery = useMemo(\n () => window.matchMedia(\"(prefers-color-scheme: dark)\"),\n []\n );\n const [shouldPreferDark, setPrefersDark] = useState(mediaQuery.matches);\n useEffect(() => {\n const listener = (event) => {\n setPrefersDark(event.matches);\n };\n mediaQuery.addListener(listener);\n return () => {\n mediaQuery.removeListener(listener);\n };\n }, [mediaQuery]);\n return shouldPreferDark;\n};\nfunction AppThemeProvider({ children }) {\n const appThemeApi = useApi(appThemeApiRef);\n const themeId = useObservable(\n appThemeApi.activeThemeId$(),\n appThemeApi.getActiveThemeId()\n );\n const shouldPreferDark = Boolean(window.matchMedia) ? useShouldPreferDarkTheme() : false;\n const appTheme = resolveTheme(\n themeId,\n shouldPreferDark,\n appThemeApi.getInstalledThemes()\n );\n if (!appTheme) {\n throw new Error(\"App has no themes\");\n }\n return /* @__PURE__ */ jsx(appTheme.Provider, { children });\n}\n\nexport { AppThemeProvider };\n//# sourceMappingURL=AppThemeProvider.esm.js.map\n","const defaultConfigLoader = async () => defaultConfigLoaderSync();\nfunction defaultConfigLoaderSync(runtimeConfigJson = \"__APP_INJECTED_RUNTIME_CONFIG__\") {\n const configs = new Array();\n const staticConfig = process.env.APP_CONFIG;\n if (staticConfig) {\n if (!Array.isArray(staticConfig)) {\n throw new Error(\"Static configuration has invalid format\");\n }\n configs.push(...staticConfig);\n }\n const configScripts = document.querySelectorAll(\n 'script[type=\"backstage.io/config\"]'\n );\n if (configScripts.length > 0) {\n for (const el of configScripts) {\n try {\n const content = el.textContent;\n if (!content) {\n throw new Error(\"tag is empty\");\n }\n let data;\n try {\n data = JSON.parse(content);\n } catch (error) {\n throw new Error(`failed to parse config; ${error}`);\n }\n if (!Array.isArray(data)) {\n throw new Error(\"data is not an array\");\n }\n configs.push(...data);\n } catch (error) {\n throw new Error(\n `Failed to load config from script tag, ${error.message}`\n );\n }\n }\n } else if (runtimeConfigJson !== // Avoiding this string also being replaced at runtime\n \"__app_injected_runtime_config__\".toLocaleUpperCase(\"en-US\")) {\n try {\n const data = JSON.parse(runtimeConfigJson);\n if (Array.isArray(data)) {\n configs.push(...data);\n } else {\n configs.push({ data, context: \"env\" });\n }\n } catch (error) {\n throw new Error(`Failed to load runtime configuration, ${error}`);\n }\n }\n const windowAppConfig = window.__APP_CONFIG__;\n if (windowAppConfig) {\n configs.push({\n context: \"window\",\n data: windowAppConfig\n });\n }\n return configs;\n}\n\nexport { defaultConfigLoader, defaultConfigLoaderSync };\n//# sourceMappingURL=defaultConfigLoader.esm.js.map\n","class ApiRegistryBuilder {\n apis = [];\n add(api, impl) {\n this.apis.push([api.id, impl]);\n return impl;\n }\n build() {\n return new ApiRegistry(new Map(this.apis));\n }\n}\nclass ApiRegistry {\n constructor(apis) {\n this.apis = apis;\n }\n static builder() {\n return new ApiRegistryBuilder();\n }\n /**\n * Creates a new ApiRegistry with a list of API implementations.\n *\n * @param apis - A list of pairs mapping an ApiRef to its respective implementation\n */\n static from(apis) {\n return new ApiRegistry(new Map(apis.map(([api, impl]) => [api.id, impl])));\n }\n /**\n * Creates a new ApiRegistry with a single API implementation.\n *\n * @param api - ApiRef for the API to add\n * @param impl - Implementation of the API to add\n */\n static with(api, impl) {\n return new ApiRegistry(/* @__PURE__ */ new Map([[api.id, impl]]));\n }\n /**\n * Returns a new ApiRegistry with the provided API added to the existing ones.\n *\n * @param api - ApiRef for the API to add\n * @param impl - Implementation of the API to add\n */\n with(api, impl) {\n return new ApiRegistry(new Map([...this.apis, [api.id, impl]]));\n }\n get(api) {\n return this.apis.get(api.id);\n }\n}\n\nexport { ApiRegistry };\n//# sourceMappingURL=ApiRegistry.esm.js.map\n","import { BehaviorSubject } from '../../../lib/subjects.esm.js';\nimport '@backstage/core-plugin-api';\n\nconst STORAGE_KEY = \"language\";\nconst DEFAULT_LANGUAGE = \"en\";\nclass AppLanguageSelector {\n static create(options) {\n const languages = options?.availableLanguages ?? [DEFAULT_LANGUAGE];\n if (languages.length !== new Set(languages).size) {\n throw new Error(\n `Supported languages may not contain duplicates, got '${languages.join(\n \"', '\"\n )}'`\n );\n }\n if (!languages.includes(DEFAULT_LANGUAGE)) {\n throw new Error(`Supported languages must include '${DEFAULT_LANGUAGE}'`);\n }\n const initialLanguage = options?.defaultLanguage ?? DEFAULT_LANGUAGE;\n if (!languages.includes(initialLanguage)) {\n throw new Error(\n `Initial language must be one of the supported languages, got '${initialLanguage}'`\n );\n }\n return new AppLanguageSelector(languages, initialLanguage);\n }\n static createWithStorage(options) {\n const selector = AppLanguageSelector.create(options);\n if (!window.localStorage) {\n return selector;\n }\n const storedLanguage = window.localStorage.getItem(STORAGE_KEY);\n const { languages } = selector.getAvailableLanguages();\n if (storedLanguage && languages.includes(storedLanguage)) {\n selector.setLanguage(storedLanguage);\n }\n selector.language$().subscribe(({ language }) => {\n if (language !== window.localStorage.getItem(STORAGE_KEY)) {\n window.localStorage.setItem(STORAGE_KEY, language);\n }\n });\n window.addEventListener(\"storage\", (event) => {\n if (event.key === STORAGE_KEY) {\n const language = localStorage.getItem(STORAGE_KEY) ?? void 0;\n if (language) {\n selector.setLanguage(language);\n }\n }\n });\n return selector;\n }\n #languages;\n #language;\n #subject;\n constructor(languages, initialLanguage) {\n this.#languages = languages;\n this.#language = initialLanguage;\n this.#subject = new BehaviorSubject({\n language: this.#language\n });\n }\n getAvailableLanguages() {\n return { languages: this.#languages.slice() };\n }\n setLanguage(language) {\n const lng = language ?? DEFAULT_LANGUAGE;\n if (lng === this.#language) {\n return;\n }\n if (lng && !this.#languages.includes(lng)) {\n throw new Error(\n `Failed to change language to '${lng}', available languages are '${this.#languages.join(\n \"', '\"\n )}'`\n );\n }\n this.#language = lng;\n this.#subject.next({ language: lng });\n }\n getLanguage() {\n return { language: this.#language };\n }\n language$() {\n return this.#subject;\n }\n}\n\nexport { AppLanguageSelector, DEFAULT_LANGUAGE };\n//# sourceMappingURL=AppLanguageSelector.esm.js.map\n","function toInternalTranslationRef(ref) {\n const r = ref;\n if (r.$$type !== \"@backstage/TranslationRef\") {\n throw new Error(`Invalid translation ref, bad type '${r.$$type}'`);\n }\n if (r.version !== \"v1\") {\n throw new Error(`Invalid translation ref, bad version '${r.version}'`);\n }\n return r;\n}\n\nexport { toInternalTranslationRef };\n//# sourceMappingURL=TranslationRef.esm.js.map\n","import { createInstance } from 'i18next';\nimport ObservableImpl from 'zen-observable';\nimport { toInternalTranslationResource } from '../../../core-plugin-api/src/translation/TranslationResource.esm.js';\nimport { toInternalTranslationRef } from '../../../core-plugin-api/src/translation/TranslationRef.esm.js';\nimport { DEFAULT_LANGUAGE } from '../AppLanguageApi/AppLanguageSelector.esm.js';\nimport { isValidElement, createElement, Fragment } from 'react';\n\nfunction removeNulls(messages) {\n return Object.fromEntries(\n Object.entries(messages).filter(\n (e) => e[1] !== null\n )\n );\n}\nclass ResourceLoader {\n constructor(onLoad) {\n this.onLoad = onLoad;\n }\n /** Loaded resources by loader key */\n #loaded = /* @__PURE__ */ new Set();\n /** Resource loading promises by loader key */\n #loading = /* @__PURE__ */ new Map();\n /** Loaders for each resource language */\n #loaders = /* @__PURE__ */ new Map();\n addTranslationResource(resource) {\n const internalResource = toInternalTranslationResource(resource);\n for (const entry of internalResource.resources) {\n const key = this.#getLoaderKey(entry.language, internalResource.id);\n if (!this.#loaders.has(key)) {\n this.#loaders.set(key, entry.loader);\n }\n }\n }\n #getLoaderKey(language, namespace) {\n return `${language}/${namespace}`;\n }\n needsLoading(language, namespace) {\n const key = this.#getLoaderKey(language, namespace);\n const loader = this.#loaders.get(key);\n if (!loader) {\n return false;\n }\n return !this.#loaded.has(key);\n }\n async load(language, namespace) {\n const key = this.#getLoaderKey(language, namespace);\n const loader = this.#loaders.get(key);\n if (!loader) {\n return;\n }\n if (this.#loaded.has(key)) {\n return;\n }\n const loading = this.#loading.get(key);\n if (loading) {\n await loading;\n return;\n }\n const load = loader().then(\n (result) => {\n this.onLoad({ language, namespace, messages: result.messages });\n this.#loaded.add(key);\n },\n (error) => {\n this.#loaded.add(key);\n throw error;\n }\n );\n this.#loading.set(key, load);\n await load;\n }\n}\nclass JsxInterpolator {\n #setFormatHook;\n #marker;\n #pattern;\n static fromI18n(i18n) {\n const interpolator = i18n.services.interpolator;\n const originalFormat = interpolator.format;\n let formatHook;\n interpolator.format = (value, format, lng, formatOpts) => {\n if (format) {\n return originalFormat(value, format, lng, formatOpts);\n }\n return formatHook?.(value, format, lng, formatOpts) ?? value;\n };\n return new JsxInterpolator(\n // Using a random marker to ensure it can't be misused\n Math.random().toString(36).substring(2, 8),\n (hook) => {\n formatHook = hook;\n }\n );\n }\n constructor(marker, setFormatHook) {\n this.#setFormatHook = setFormatHook;\n this.#marker = marker;\n this.#pattern = new RegExp(`\\\\$${marker}\\\\(([^)]+)\\\\)`);\n }\n wrapT(originalT) {\n return (key, options) => {\n let elementsMap = void 0;\n this.#setFormatHook((value) => {\n if (isValidElement(value)) {\n if (!elementsMap) {\n elementsMap = /* @__PURE__ */ new Map();\n }\n const elementKey = elementsMap.size.toString();\n elementsMap.set(elementKey, value);\n return `$${this.#marker}(${elementKey})`;\n }\n return value;\n });\n const result = originalT(key, options);\n if (!elementsMap) {\n return result;\n }\n const split = result.split(this.#pattern);\n return createElement(\n Fragment,\n null,\n ...split.map((part, index) => {\n if (index % 2 === 0) {\n return part;\n }\n return elementsMap?.get(part);\n }).filter(Boolean)\n );\n };\n }\n}\nclass I18nextTranslationApi {\n static create(options) {\n const { languages } = options.languageApi.getAvailableLanguages();\n const i18n = createInstance({\n fallbackLng: DEFAULT_LANGUAGE,\n supportedLngs: languages,\n interpolation: {\n escapeValue: false,\n // Used for the JsxInterpolator format hook\n alwaysFormat: true\n },\n ns: [],\n defaultNS: false,\n fallbackNS: false,\n // Disable resource loading on init, meaning i18n will be ready to use immediately\n initImmediate: false\n });\n i18n.init();\n if (!i18n.isInitialized) {\n throw new Error(\"i18next was unexpectedly not initialized\");\n }\n const interpolator = JsxInterpolator.fromI18n(i18n);\n const { language: initialLanguage } = options.languageApi.getLanguage();\n if (initialLanguage !== DEFAULT_LANGUAGE) {\n i18n.changeLanguage(initialLanguage);\n }\n const loader = new ResourceLoader((loaded) => {\n i18n.addResourceBundle(\n loaded.language,\n loaded.namespace,\n removeNulls(loaded.messages),\n false,\n // do not merge with existing translations\n true\n // overwrite translations\n );\n });\n const resources = options?.resources || [];\n for (let i = resources.length - 1; i >= 0; i--) {\n const resource = resources[i];\n if (resource.$$type === \"@backstage/TranslationResource\") {\n loader.addTranslationResource(resource);\n } else if (resource.$$type === \"@backstage/TranslationMessages\") {\n i18n.addResourceBundle(\n DEFAULT_LANGUAGE,\n resource.id,\n removeNulls(resource.messages),\n true,\n // merge with existing translations\n false\n // do not overwrite translations\n );\n }\n }\n const instance = new I18nextTranslationApi(\n i18n,\n loader,\n options.languageApi.getLanguage().language,\n interpolator\n );\n options.languageApi.language$().subscribe(({ language }) => {\n instance.#changeLanguage(language);\n });\n return instance;\n }\n #i18n;\n #loader;\n #language;\n #jsxInterpolator;\n /** Keep track of which refs we have registered default resources for */\n #registeredRefs = /* @__PURE__ */ new Set();\n /** Notify observers when language changes */\n #languageChangeListeners = /* @__PURE__ */ new Set();\n constructor(i18n, loader, language, jsxInterpolator) {\n this.#i18n = i18n;\n this.#loader = loader;\n this.#language = language;\n this.#jsxInterpolator = jsxInterpolator;\n }\n getTranslation(translationRef) {\n const internalRef = toInternalTranslationRef(translationRef);\n this.#registerDefaults(internalRef);\n return this.#createSnapshot(internalRef);\n }\n translation$(translationRef) {\n const internalRef = toInternalTranslationRef(translationRef);\n this.#registerDefaults(internalRef);\n return new ObservableImpl((subscriber) => {\n let loadTicket = {};\n const loadResource = () => {\n loadTicket = {};\n const ticket = loadTicket;\n this.#loader.load(this.#language, internalRef.id).then(\n () => {\n if (ticket === loadTicket) {\n const snapshot = this.#createSnapshot(internalRef);\n if (snapshot.ready) {\n subscriber.next(snapshot);\n }\n }\n },\n (error) => {\n if (ticket === loadTicket) {\n subscriber.error(Array.isArray(error) ? error[0] : error);\n }\n }\n );\n };\n const onChange = () => {\n const snapshot = this.#createSnapshot(internalRef);\n if (snapshot.ready) {\n subscriber.next(snapshot);\n } else {\n loadResource();\n }\n };\n if (this.#loader.needsLoading(this.#language, internalRef.id)) {\n loadResource();\n }\n this.#languageChangeListeners.add(onChange);\n return () => {\n this.#languageChangeListeners.delete(onChange);\n };\n });\n }\n #changeLanguage(language) {\n if (this.#language !== language) {\n this.#language = language;\n this.#i18n.changeLanguage(language);\n this.#languageChangeListeners.forEach((listener) => listener());\n }\n }\n #createSnapshot(internalRef) {\n if (this.#loader.needsLoading(this.#language, internalRef.id)) {\n return { ready: false };\n }\n const unwrappedT = this.#i18n.getFixedT(null, internalRef.id);\n const t = this.#jsxInterpolator.wrapT(unwrappedT);\n return {\n ready: true,\n t\n };\n }\n #registerDefaults(internalRef) {\n if (this.#registeredRefs.has(internalRef.id)) {\n return;\n }\n this.#registeredRefs.add(internalRef.id);\n const defaultMessages = internalRef.getDefaultMessages();\n this.#i18n.addResourceBundle(\n DEFAULT_LANGUAGE,\n internalRef.id,\n defaultMessages,\n true,\n // merge with existing translations\n false\n // do not overwrite translations\n );\n const defaultResource = internalRef.getDefaultResource();\n if (defaultResource) {\n this.#loader.addTranslationResource(defaultResource);\n }\n }\n}\n\nexport { I18nextTranslationApi, JsxInterpolator };\n//# sourceMappingURL=I18nextTranslationApi.esm.js.map\n","function toInternalTranslationResource(resource) {\n const r = resource;\n if (r.$$type !== \"@backstage/TranslationResource\") {\n throw new Error(`Invalid translation resource, bad type '${r.$$type}'`);\n }\n if (r.version !== \"v1\") {\n throw new Error(`Invalid translation resource, bad version '${r.version}'`);\n }\n return r;\n}\n\nexport { toInternalTranslationResource };\n//# sourceMappingURL=TranslationResource.esm.js.map\n","import { ConfigReader } from '@backstage/config';\n\nfunction createLocalBaseUrl(fullUrl) {\n const url = new URL(fullUrl);\n url.protocol = document.location.protocol;\n url.hostname = document.location.hostname;\n url.port = document.location.port;\n return url.toString().replace(/\\/$/, \"\");\n}\nfunction overrideBaseUrlConfigs(inputConfigs) {\n const urlConfigReader = ConfigReader.fromConfigs(inputConfigs);\n const appBaseUrl = urlConfigReader.getOptionalString(\"app.baseUrl\");\n const backendBaseUrl = urlConfigReader.getOptionalString(\"backend.baseUrl\");\n let configs = inputConfigs;\n let newBackendBaseUrl = void 0;\n let newAppBaseUrl = void 0;\n if (appBaseUrl && backendBaseUrl) {\n const appOrigin = new URL(appBaseUrl).origin;\n const backendOrigin = new URL(backendBaseUrl).origin;\n if (appOrigin === backendOrigin) {\n const maybeNewBackendBaseUrl = createLocalBaseUrl(backendBaseUrl);\n if (backendBaseUrl !== maybeNewBackendBaseUrl) {\n newBackendBaseUrl = maybeNewBackendBaseUrl;\n }\n }\n }\n if (appBaseUrl) {\n const maybeNewAppBaseUrl = createLocalBaseUrl(appBaseUrl);\n if (appBaseUrl !== maybeNewAppBaseUrl) {\n newAppBaseUrl = maybeNewAppBaseUrl;\n }\n }\n if (newAppBaseUrl || newBackendBaseUrl) {\n configs = configs.concat({\n data: {\n app: newAppBaseUrl && {\n baseUrl: newAppBaseUrl\n },\n backend: newBackendBaseUrl && {\n baseUrl: newBackendBaseUrl\n }\n },\n context: \"relative-resolver\"\n });\n }\n return configs;\n}\n\nexport { overrideBaseUrlConfigs };\n//# sourceMappingURL=overrideBaseUrlConfigs.esm.js.map\n","import { jsx } from 'react/jsx-runtime';\nimport { useRef, useMemo, Suspense } from 'react';\nimport useAsync from 'react-use/esm/useAsync';\nimport { ApiProvider } from '../apis/system/ApiProvider.esm.js';\nimport { ApiResolver } from '../apis/system/ApiResolver.esm.js';\nimport { ApiFactoryRegistry } from '../apis/system/ApiFactoryRegistry.esm.js';\nimport 'zen-observable';\nimport { appThemeApiRef, configApiRef, identityApiRef, featureFlagsApiRef, errorApiRef, fetchApiRef, discoveryApiRef } from '@backstage/core-plugin-api';\nimport '../apis/implementations/auth/saml/types.esm.js';\nimport { AppThemeSelector } from '../apis/implementations/AppThemeApi/AppThemeSelector.esm.js';\nimport { ConfigReader } from '@backstage/config';\nimport { LocalStorageFeatureFlags } from '../apis/implementations/FeatureFlagsApi/LocalStorageFeatureFlags.esm.js';\nimport { appLanguageApiRef, translationApiRef } from '@backstage/core-plugin-api/alpha';\nimport { traverseElementTree, childDiscoverer, routeElementDiscoverer } from '../extensions/traversal.esm.js';\nimport { pluginCollector } from '../plugins/collectors.esm.js';\nimport { routingV1Collector, routingV2Collector, featureFlagCollector } from '../routing/collectors.esm.js';\nimport { RoutingProvider } from '../routing/RoutingProvider.esm.js';\nimport { validateRouteParameters, validateRouteBindings } from '../routing/validation.esm.js';\nimport { AppContextProvider } from './AppContext.esm.js';\nimport { AppIdentityProxy } from '../apis/implementations/IdentityApi/AppIdentityProxy.esm.js';\nimport { AppThemeProvider } from './AppThemeProvider.esm.js';\nimport { defaultConfigLoader } from './defaultConfigLoader.esm.js';\nimport { ApiRegistry } from '../apis/system/ApiRegistry.esm.js';\nimport { resolveRouteBindings } from './resolveRouteBindings.esm.js';\nimport { isReactRouterBeta } from './isReactRouterBeta.esm.js';\nimport { InternalAppContext } from './InternalAppContext.esm.js';\nimport { AppRouter, getBasePath } from './AppRouter.esm.js';\nimport { AppLanguageSelector } from '../apis/implementations/AppLanguageApi/AppLanguageSelector.esm.js';\nimport { I18nextTranslationApi } from '../apis/implementations/TranslationApi/I18nextTranslationApi.esm.js';\nimport { overrideBaseUrlConfigs } from './overrideBaseUrlConfigs.esm.js';\nimport { isProtectedApp } from './isProtectedApp.esm.js';\n\nfunction useConfigLoader(configLoader, components, appThemeApi) {\n const hasConfig = Boolean(configLoader);\n const config = useAsync(configLoader || (() => Promise.resolve([])));\n let noConfigNode = void 0;\n if (hasConfig && config.loading) {\n const { Progress } = components;\n noConfigNode = /* @__PURE__ */ jsx(Progress, {});\n } else if (config.error) {\n const { BootErrorPage } = components;\n noConfigNode = /* @__PURE__ */ jsx(BootErrorPage, { step: \"load-config\", error: config.error });\n }\n const { ThemeProvider = AppThemeProvider } = components;\n if (noConfigNode) {\n return {\n node: /* @__PURE__ */ jsx(ApiProvider, { apis: ApiRegistry.with(appThemeApiRef, appThemeApi), children: /* @__PURE__ */ jsx(ThemeProvider, { children: noConfigNode }) })\n };\n }\n const configReader = ConfigReader.fromConfigs(\n config.value?.length ? overrideBaseUrlConfigs(config.value) : []\n );\n return { api: configReader };\n}\nclass AppContextImpl {\n constructor(app) {\n this.app = app;\n }\n getPlugins() {\n return this.app.getPlugins();\n }\n getSystemIcon(key) {\n return this.app.getSystemIcon(key);\n }\n getSystemIcons() {\n return this.app.getSystemIcons();\n }\n getComponents() {\n return this.app.getComponents();\n }\n}\nclass AppManager {\n apiHolder;\n configApi;\n apis;\n icons;\n plugins;\n featureFlags;\n components;\n themes;\n configLoader;\n defaultApis;\n bindRoutes;\n appLanguageApi;\n translationResources;\n appIdentityProxy = new AppIdentityProxy();\n apiFactoryRegistry;\n constructor(options) {\n this.apis = options.apis ?? [];\n this.icons = options.icons;\n this.plugins = new Set(options.plugins ?? []);\n this.featureFlags = options.featureFlags ?? [];\n this.components = options.components;\n this.themes = options.themes;\n this.configLoader = options.configLoader ?? defaultConfigLoader;\n this.defaultApis = options.defaultApis ?? [];\n this.bindRoutes = options.bindRoutes;\n this.apiFactoryRegistry = new ApiFactoryRegistry();\n this.appLanguageApi = AppLanguageSelector.createWithStorage({\n defaultLanguage: options.__experimentalTranslations?.defaultLanguage,\n availableLanguages: options.__experimentalTranslations?.availableLanguages\n });\n this.translationResources = options.__experimentalTranslations?.resources ?? [];\n }\n getPlugins() {\n return Array.from(this.plugins);\n }\n getSystemIcon(key) {\n return this.icons[key];\n }\n getSystemIcons() {\n return this.icons;\n }\n getComponents() {\n return this.components;\n }\n createRoot(element) {\n const AppProvider = this.getProvider();\n const AppRoot = () => {\n return /* @__PURE__ */ jsx(AppProvider, { children: element });\n };\n return AppRoot;\n }\n #getProviderCalled = false;\n getProvider() {\n if (this.#getProviderCalled) {\n throw new Error(\n \"app.getProvider() or app.createRoot() has already been called, and can only be called once\"\n );\n }\n this.#getProviderCalled = true;\n const appContext = new AppContextImpl(this);\n let routeBindings;\n let routeValidationError = void 0;\n const Provider = ({ children }) => {\n const needsFeatureFlagRegistrationRef = useRef(true);\n const appThemeApi = useMemo(\n () => AppThemeSelector.createWithStorage(this.themes),\n []\n );\n const { routing, featureFlags } = useMemo(() => {\n const usesReactRouterBeta = isReactRouterBeta();\n if (usesReactRouterBeta) {\n console.warn(`\nDEPRECATION WARNING: React Router Beta is deprecated and support for it will be removed in a future release.\n Please migrate to use React Router v6 stable.\n See https://backstage.io/docs/tutorials/react-router-stable-migration\n`);\n }\n const result = traverseElementTree({\n root: children,\n discoverers: [childDiscoverer, routeElementDiscoverer],\n collectors: {\n routing: usesReactRouterBeta ? routingV1Collector : routingV2Collector,\n collectedPlugins: pluginCollector,\n featureFlags: featureFlagCollector\n }\n });\n result.collectedPlugins.forEach((plugin) => this.plugins.add(plugin));\n this.verifyPlugins(this.plugins);\n this.getApiHolder();\n return result;\n }, [children]);\n const loadedConfig = useConfigLoader(\n this.configLoader,\n this.components,\n appThemeApi\n );\n const hasConfigApi = \"api\" in loadedConfig;\n if (hasConfigApi) {\n const { api } = loadedConfig;\n this.configApi = api;\n }\n if (\"node\" in loadedConfig) {\n return loadedConfig.node;\n }\n if (routeValidationError) {\n throw routeValidationError;\n } else if (!routeBindings) {\n try {\n routeBindings = resolveRouteBindings(\n this.bindRoutes,\n loadedConfig.api,\n this.plugins\n );\n validateRouteParameters(routing.paths, routing.parents);\n validateRouteBindings(routeBindings, this.plugins);\n } catch (error) {\n routeValidationError = error;\n throw error;\n }\n }\n if (hasConfigApi && needsFeatureFlagRegistrationRef.current) {\n needsFeatureFlagRegistrationRef.current = false;\n const featureFlagsApi = this.getApiHolder().get(featureFlagsApiRef);\n if (featureFlagsApi) {\n for (const flag of this.featureFlags) {\n featureFlagsApi.registerFlag({\n ...flag,\n pluginId: \"\"\n });\n }\n for (const plugin of this.plugins.values()) {\n if (\"getFeatureFlags\" in plugin) {\n for (const flag of plugin.getFeatureFlags()) {\n featureFlagsApi.registerFlag({\n name: flag.name,\n pluginId: plugin.getId()\n });\n }\n } else {\n for (const output of plugin.output()) {\n if (output.type === \"feature-flag\") {\n featureFlagsApi.registerFlag({\n name: output.name,\n pluginId: plugin.getId()\n });\n }\n }\n }\n }\n const registeredFlags = featureFlagsApi.getRegisteredFlags();\n const flagNames = new Set(registeredFlags.map((f) => f.name));\n for (const name of featureFlags) {\n if (!flagNames.has(name)) {\n featureFlagsApi.registerFlag({ name, pluginId: \"\" });\n }\n }\n }\n }\n const { ThemeProvider = AppThemeProvider, Progress } = this.components;\n const apis = this.getApiHolder();\n if (isProtectedApp()) {\n const errorApi = apis.get(errorApiRef);\n const fetchApi = apis.get(fetchApiRef);\n const discoveryApi = apis.get(discoveryApiRef);\n if (!errorApi || !fetchApi || !discoveryApi) {\n throw new Error(\n \"App is running in protected mode but missing required APIs\"\n );\n }\n this.appIdentityProxy.enableCookieAuth({\n errorApi,\n fetchApi,\n discoveryApi\n });\n }\n return /* @__PURE__ */ jsx(ApiProvider, { apis, children: /* @__PURE__ */ jsx(AppContextProvider, { appContext, children: /* @__PURE__ */ jsx(ThemeProvider, { children: /* @__PURE__ */ jsx(\n RoutingProvider,\n {\n routePaths: routing.paths,\n routeParents: routing.parents,\n routeObjects: routing.objects,\n routeBindings,\n basePath: getBasePath(loadedConfig.api),\n children: /* @__PURE__ */ jsx(\n InternalAppContext.Provider,\n {\n value: {\n routeObjects: routing.objects,\n appIdentityProxy: this.appIdentityProxy\n },\n children: /* @__PURE__ */ jsx(Suspense, { fallback: /* @__PURE__ */ jsx(Progress, {}), children })\n }\n )\n }\n ) }) }) });\n };\n return Provider;\n }\n getRouter() {\n return AppRouter;\n }\n getApiHolder() {\n if (this.apiHolder) {\n for (const plugin of this.plugins) {\n for (const factory of plugin.getApis()) {\n if (!this.apiFactoryRegistry.get(factory.api)) {\n this.apiFactoryRegistry.register(\"default\", factory);\n }\n }\n }\n ApiResolver.validateFactories(\n this.apiFactoryRegistry,\n this.apiFactoryRegistry.getAllApis()\n );\n return this.apiHolder;\n }\n this.apiFactoryRegistry.register(\"static\", {\n api: appThemeApiRef,\n deps: {},\n factory: () => AppThemeSelector.createWithStorage(this.themes)\n });\n this.apiFactoryRegistry.register(\"static\", {\n api: configApiRef,\n deps: {},\n factory: () => {\n if (!this.configApi) {\n throw new Error(\n \"Tried to access config API before config was loaded\"\n );\n }\n return this.configApi;\n }\n });\n this.apiFactoryRegistry.register(\"static\", {\n api: identityApiRef,\n deps: {},\n factory: () => this.appIdentityProxy\n });\n this.apiFactoryRegistry.register(\"static\", {\n api: appLanguageApiRef,\n deps: {},\n factory: () => this.appLanguageApi\n });\n this.apiFactoryRegistry.register(\"default\", {\n api: translationApiRef,\n deps: { languageApi: appLanguageApiRef },\n factory: ({ languageApi }) => I18nextTranslationApi.create({\n languageApi,\n resources: this.translationResources\n })\n });\n this.apiFactoryRegistry.register(\"default\", {\n api: featureFlagsApiRef,\n deps: {},\n factory: () => new LocalStorageFeatureFlags()\n });\n for (const factory of this.defaultApis) {\n this.apiFactoryRegistry.register(\"default\", factory);\n }\n for (const plugin of this.plugins) {\n for (const factory of plugin.getApis()) {\n if (!this.apiFactoryRegistry.register(\"default\", factory)) {\n throw new Error(\n `Plugin ${plugin.getId()} tried to register duplicate or forbidden API factory for ${factory.api}`\n );\n }\n }\n }\n for (const factory of this.apis) {\n if (!this.apiFactoryRegistry.register(\"app\", factory)) {\n throw new Error(\n `Duplicate or forbidden API factory for ${factory.api} in app`\n );\n }\n }\n ApiResolver.validateFactories(\n this.apiFactoryRegistry,\n this.apiFactoryRegistry.getAllApis()\n );\n this.apiHolder = new ApiResolver(this.apiFactoryRegistry);\n return this.apiHolder;\n }\n verifyPlugins(plugins) {\n const pluginIds = /* @__PURE__ */ new Set();\n for (const plugin of plugins) {\n const id = plugin.getId();\n if (pluginIds.has(id)) {\n throw new Error(`Duplicate plugin found '${id}'`);\n }\n pluginIds.add(id);\n }\n }\n}\n\nexport { AppManager };\n//# sourceMappingURL=AppManager.esm.js.map\n","function collectRouteIds(plugins) {\n const routesById = /* @__PURE__ */ new Map();\n const externalRoutesById = /* @__PURE__ */ new Map();\n for (const plugin of plugins) {\n for (const [name, ref] of Object.entries(plugin.routes ?? {})) {\n const refId = `${plugin.getId()}.${name}`;\n if (routesById.has(refId)) {\n throw new Error(`Unexpected duplicate route '${refId}'`);\n }\n routesById.set(refId, ref);\n }\n for (const [name, ref] of Object.entries(plugin.externalRoutes ?? {})) {\n const refId = `${plugin.getId()}.${name}`;\n if (externalRoutesById.has(refId)) {\n throw new Error(`Unexpected duplicate external route '${refId}'`);\n }\n externalRoutesById.set(refId, ref);\n }\n }\n return { routes: routesById, externalRoutes: externalRoutesById };\n}\nfunction resolveRouteBindings(bindRoutes, config, plugins) {\n const routesById = collectRouteIds(plugins);\n const result = /* @__PURE__ */ new Map();\n const disabledExternalRefs = /* @__PURE__ */ new Set();\n if (bindRoutes) {\n const bind = (externalRoutes, targetRoutes) => {\n for (const [key, value] of Object.entries(targetRoutes)) {\n const externalRoute = externalRoutes[key];\n if (!externalRoute) {\n throw new Error(`Key ${key} is not an existing external route`);\n }\n if (!value && !externalRoute.optional) {\n throw new Error(\n `External route ${key} is required but was ${value === false ? \"disabled\" : \"not provided\"}`\n );\n }\n if (value) {\n result.set(externalRoute, value);\n } else if (value === false) {\n disabledExternalRefs.add(externalRoute);\n }\n }\n };\n bindRoutes({ bind });\n }\n const bindings = config.getOptionalConfig(\"app.routes.bindings\")?.get();\n if (bindings) {\n for (const [externalRefId, targetRefId] of Object.entries(bindings)) {\n if (!isValidTargetRefId(targetRefId)) {\n throw new Error(\n `Invalid config at app.routes.bindings['${externalRefId}'], value must be a non-empty string or false`\n );\n }\n const externalRef = routesById.externalRoutes.get(externalRefId);\n if (!externalRef) {\n throw new Error(\n `Invalid config at app.routes.bindings, '${externalRefId}' is not a valid external route`\n );\n }\n if (result.has(externalRef) || disabledExternalRefs.has(externalRef)) {\n continue;\n }\n if (targetRefId === false) {\n disabledExternalRefs.add(externalRef);\n } else {\n const targetRef = routesById.routes.get(targetRefId);\n if (!targetRef) {\n throw new Error(\n `Invalid config at app.routes.bindings['${externalRefId}'], '${targetRefId}' is not a valid route`\n );\n }\n result.set(externalRef, targetRef);\n }\n }\n }\n for (const externalRef of routesById.externalRoutes.values()) {\n if (!result.has(externalRef) && !disabledExternalRefs.has(externalRef)) {\n const defaultRefId = \"getDefaultTarget\" in externalRef ? externalRef.getDefaultTarget() : void 0;\n if (defaultRefId) {\n const defaultRef = routesById.routes.get(defaultRefId);\n if (defaultRef) {\n result.set(externalRef, defaultRef);\n }\n }\n }\n }\n return result;\n}\nfunction isValidTargetRefId(value) {\n if (value === false) {\n return true;\n }\n if (typeof value === \"string\" && value) {\n return true;\n }\n return false;\n}\n\nexport { collectRouteIds, resolveRouteBindings };\n//# sourceMappingURL=resolveRouteBindings.esm.js.map\n","import { joinPaths } from './helpers.esm.js';\n\nfunction validateRouteParameters(routePaths, routeParents) {\n const notLeafRoutes = new Set(routeParents.values());\n notLeafRoutes.delete(void 0);\n for (const route of routeParents.keys()) {\n if (notLeafRoutes.has(route)) {\n continue;\n }\n let currentRouteRef = route;\n let fullPath = \"\";\n while (currentRouteRef) {\n const path = routePaths.get(currentRouteRef);\n if (path === void 0) {\n throw new Error(`No path for ${currentRouteRef}`);\n }\n fullPath = joinPaths(path, fullPath);\n currentRouteRef = routeParents.get(currentRouteRef);\n }\n const params = fullPath.match(/:(\\w+)/g);\n if (params) {\n for (let j = 0; j < params.length; j++) {\n for (let i = j + 1; i < params.length; i++) {\n if (params[i] === params[j]) {\n throw new Error(\n `Parameter ${params[i]} is duplicated in path ${fullPath}`\n );\n }\n }\n }\n }\n }\n}\nfunction validateRouteBindings(routeBindings, plugins) {\n for (const plugin of plugins) {\n if (!plugin.externalRoutes) {\n continue;\n }\n for (const [name, externalRouteRef] of Object.entries(\n plugin.externalRoutes\n )) {\n if (externalRouteRef.optional) {\n continue;\n }\n if (!routeBindings.has(externalRouteRef)) {\n throw new Error(\n `External route '${name}' of the '${plugin.getId()}' plugin must be bound to a target route. See https://backstage.io/link?bind-routes for details.`\n );\n }\n }\n }\n}\n\nexport { validateRouteBindings, validateRouteParameters };\n//# sourceMappingURL=validation.esm.js.map\n","function isProtectedApp() {\n const element = document.querySelector('meta[name=\"backstage-app-mode\"]');\n const appMode = element?.getAttribute(\"content\") ?? \"public\";\n return appMode === \"protected\";\n}\n\nexport { isProtectedApp };\n//# sourceMappingURL=isProtectedApp.esm.js.map\n","import { AppManager } from './AppManager.esm.js';\n\nfunction createSpecializedApp(options) {\n return new AppManager(options);\n}\n\nexport { createSpecializedApp };\n//# sourceMappingURL=createSpecializedApp.esm.js.map\n","import { jsx } from 'react/jsx-runtime';\nimport { useMemo } from 'react';\nimport { useRoutes } from 'react-router-dom';\nimport { attachComponentData, useApp, useElementFilter } from '@backstage/core-plugin-api';\nimport { isReactRouterBeta } from '../app/isReactRouterBeta.esm.js';\n\nlet warned = false;\nconst FlatRoutes = (props) => {\n const app = useApp();\n const { NotFoundErrorPage } = app.getComponents();\n const isBeta = useMemo(() => isReactRouterBeta(), []);\n const routes = useElementFilter(\n props.children,\n (elements) => elements.getElements().flatMap((child) => {\n let path = child.props.path;\n if (path === \"\") {\n return [];\n }\n path = path?.replace(/\\/\\*$/, \"\") ?? \"/\";\n let element = isBeta ? child : child.props.element;\n if (!isBeta && !element) {\n element = child;\n if (!warned && process.env.NODE_ENV !== \"test\") {\n console.warn(\n \"DEPRECATION WARNING: All elements within <FlatRoutes> must be of type <Route> with an element prop. Existing usages of <Navigate key=[path] to=[to] /> should be replaced with <Route path=[path] element={<Navigate to=[to] />} />.\"\n );\n warned = true;\n }\n }\n return [\n {\n // Each route matches any sub route, except for the explicit root path\n path,\n element,\n children: child.props.children ? [\n // These are the children of each route, which we all add in under a catch-all\n // subroute in order to make them available to `useOutlet`\n {\n path: path === \"/\" ? \"/\" : \"*\",\n // The root path must require an exact match\n element: child.props.children\n }\n ] : void 0\n }\n ];\n }).sort((a, b) => b.path.localeCompare(a.path)).map((obj) => ({ ...obj, path: obj.path === \"/\" ? \"/\" : `${obj.path}/*` }))\n );\n const withNotFound = [\n ...routes,\n {\n path: \"*\",\n element: /* @__PURE__ */ jsx(NotFoundErrorPage, {})\n }\n ];\n return useRoutes(withNotFound);\n};\nattachComponentData(FlatRoutes, \"core.type\", \"FlatRoutes\");\n\nexport { FlatRoutes };\n//# sourceMappingURL=FlatRoutes.esm.js.map\n","/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n"],"names":["module","exports","ApiAggregator","holders","constructor","this","get","apiRef","holder","api","ApiContext","createVersionedContext","ApiProvider","props","apis","children","parentHolder","useContext","atVersion","jsx","Provider","value","createVersionedValueMap","propTypes","isRequired","ApiResolver","factories","validateFactories","heap","allDeps","Set","length","shift","factory","dep","Object","values","deps","id","Error","has","add","push","Map","ref","load","loading","impl","includes","loadDeps","set","dependent","impls","key","hasOwnProperty","ScopePriority","ScopePriority2","ApiFactoryRegistry","register","scope","priority","existing","tuple","getAllApis","refs","openLoginPopup","options","Promise","resolve","reject","width","height","left","window","screen","top","origin","URL","url","popup","open","name","targetOrigin","closed","error","messageListener","event","source","data","type","authResult","message","response","done","intervalId","setInterval","errMessage","location","removeEventListener","clearInterval","addEventListener","warned","defaultJoinScopes","scopes","join","DefaultAuthConnector","discoveryApi","environment","provider","joinScopesFunc","authRequester","sessionTransform","enableExperimentalRedirectFlow","popupOptions","configApi","joinScopes","oauthRequestApi","console","warn","getOptionalBoolean","createAuthRequester","onAuthRequest","async","executeRedirect","showPopup","createSession","instantPopup","refreshSession","res","fetch","buildUrl","optional","headers","credentials","catch","ok","statusText","status","authInfo","json","removeSession","method","popupUrl","flow","size","fullscreen","payload","title","href","redirectUrl","path","query","baseUrl","getBaseUrl","queryString","buildQueryString","env","entries","map","encodeURIComponent","filter","Boolean","hasScopes","searched","searchFor","SessionScopeHelper","sessionExistsAndHasScope","session","sessionScopes","getExtendedScope","newScope","defaultScopes","PublishSubject","isClosed","terminatingError","observable","subscriber","complete","subscribers","delete","Symbol","next","forEach","subscribe","onNext","onError","onComplete","observer","BehaviorSubject","currentValue","SessionStateTracker","subject","SessionState","SignedOut","signedIn","setIsSignedIn","isSignedIn","SignedIn","sessionState$","RefreshingAuthSessionManager","connector","helper","sessionScopesFunc","sessionShouldRefreshFunc","stateTracker","refreshPromise","currentSession","sessionShouldRefresh","getSession","refreshedSession","collapsedSessionRefresh","currentScopes","newSession","DEFAULT_PROVIDER","icon","OAuth2","createAuthConnector","authConnector","scopeTransform","x","backstageIdentity","providerInfo","idToken","accessToken","normalizeScopes","expiresAt","expiresInSeconds","Date","now","token","identity","create","sessionManager","min","Infinity","Math","getTime","signIn","getAccessToken","signOut","normalizedScopes","getIdToken","getBackstageIdentity","getProfile","profile","scopeList","Array","isArray","split","transformedScopes","GithubAuth","GitlabAuth","SCOPE_PREFIX","GoogleAuth","startsWith","OKTA_OIDC_SCOPES","OKTA_SCOPE_PREFIX","OktaAuth","DirectAuthConnector","email","StaticAuthSessionManager","setSession","AuthSessionStore","manager","storageKey","schema","saveSession","loadSession","localStorage","removeItem","sessionJson","getItem","JSON","parse","_key","__type","__value","e","log","setItem","stringify","from","samlSessionSchema","z","displayName","picture","userEntityRef","ownershipEntityRefs","SamlAuth","authSessionStore","MicrosoftAuth","oauth2","static","concat","MicrosoftGraphID","microsoftGraph","resourceForScopes","audiences","resourceForScope","aud","audience","groups","match","resourceURI","replace","OIDC_SCOPES","OneLoginAuth","BitbucketAuth","BitbucketServerAuth","AtlassianAuth","VMwareCloudAuth","AlertApiForwarder","post","alert","alert$","MultipleAnalyticsApi","actualApis","fromApis","captureEvent","analyticsApi","NoOpAnalyticsApi","_event","STORAGE_KEY","AppThemeSelector","themes","createWithStorage","selector","initialThemeId","setActiveThemeId","activeThemeId$","themeId","activeThemeId","getInstalledThemes","slice","getActiveThemeId","ERROR_PREFIX","UrlPatternDiscovery","parts","compile","pattern","urlStr","hash","search","endsWith","pluginId","FrontendHostDiscovery","endpoints","defaultEndpoint","fromConfig","config","pathPattern","getString","getOptionalConfigArray","flatMap","target","getOptionalString","discovery","getStringArray","endpoint","ErrorAlerter","alertApi","errorApi","context","hidden","severity","error$","ErrorApiForwarder","UnhandledErrorForwarder","forward","errorContext","reason","validateFlagName","LocalStorageFeatureFlags","registeredFeatureFlags","flags","registerFlag","flag","getRegisteredFlags","isActive","FeatureFlagState","Active","save","merge","clear","state","states","enabled","fromEntries","jsonStr","createFetchApi","result","baseImplementation","g","middleware","flat","reverse","m","apply","IdentityAuthInjectorFetchMiddleware","identityApi","allowUrl","headerName","headerValue","matcher","urlPrefixAllowlist","buildPrefixMatcher","getDiscoveryUrlPrefixes","buildMatcher","header","c","input","init","request","Request","getCredentials","prefixes","trimmedPrefixes","prefix","some","PluginProtocolResolverFetchMiddleware","hostname","pathname","username","password","substring","base","authority","protocol","host","right","a","FetchMiddlewares","resolvePluginProtocol","injectIdentityAuth","OAuthPendingRequests","requests","getCurrentPending","pending","reduce","acc","current","moreScopess","moreScopes","OAuthRequestManager","currentRequests","handlerCount","handler","index","scopeRequest","newRequests","makeAuthRequest","trigger","authRequest$","buckets","WebStorage","namespace","addStorageEventListener","bucketPath","webStorage","handleStorageChange","snapshot","presence","item","getKeyName","val","freeze","forBucket","notifyChanges","remove","observe$","hasSubscribed","messageKey","eventKey","trimmedKey","decodeURIComponent","subscription","InternalAppContext","createContext","isReactRouterBeta","obj","createRoutesFromChildren","Route","element","TrackNavigation","attributes","analytics","useAnalytics","useEffect","RouteTracker","routeObjects","useLocation","params","routes","matches","matchRoutes","routeMatch","route","routeRefs","pop","routeObject","routeRef","plugin","plugins","extension","getId","_routeNodeType","getExtensionContext","AnalyticsContext","readBasePath","SignInPageWrapper","component","Component","appIdentityProxy","setIdentityApi","useState","basePath","useApi","configApiRef","setTarget","signOutTargetUrl","Fragment","onSignInSuccess","AppRouter","Router","RouterComponent","SignInPage","SignInPageComponent","useApp","getComponents","mountPath","internalAppContext","jsxs","Routes","basename","getUserId","getProfileInfo","attachComponentData","appLanguageApiRef","createApiRef","createCollector","accumulatorFactory","visit","accumulator","childDiscoverer","routeElementDiscoverer","pluginCollector","node","getComponentData","FeatureFlagged","featureFlagApi","featureFlagsApiRef","isEnabled","with","without","MATCH_ALL_ROUTE","caseSensitive","stringifyNode","anyNode","String","pluginSet","collectSubTree","Children","isValidElement","routingV2Collector","paths","parents","objects","parent","ctx","isElementAncestor","pathProp","mountPoint","parentChildren","elementProp","newObj","gatherPath","gatherRouteRef","others","mountPointPlugin","routingV1Collector","currentObj","currentParentRouteRef","sticky","currentCtxPath","routePath","featureFlagCollector","routeRefType","getOrCreateGlobalSingleton","isRouteRef","isSubRouteRef","joinPaths","normalized","RouteResolver","routePaths","routeParents","routeBindings","appBasePath","anyRouteRef","sourceLocation","targetRef","targetPath","subRoutePath","resolvedRoute","resolvedPath","resolveTargetRef","relativeSourceLocation","trimPath","refDiffList","matchIndex","targetSearchRef","findIndex","unshift","resolveBasePath","encodedParams","replaceAll","generatePath","RoutingContext","RoutingProvider","resolver","versionedValue","AppContext","AppContextProvider","appContext","mkError","thing","logDeprecation","AppIdentityProxy","waitForTarget","resolveTarget","targetOptions","then","enableCookieAuth","stopRefresh","fetchApi","timeout","stopped","firstError","errorBackoff","channel","BroadcastChannel","getDelay","margin","random","max","refresh","requestUrl","Number","isNaN","postMessage","action","toISOString","scheduleRefresh","onMessage","delayMs","clearTimeout","setTimeout","close","startCookieAuthRefresh","appBaseUrl","AppThemeProvider","appThemeApi","appThemeApiRef","appTheme","shouldPreferDark","selectedTheme","find","theme","darkTheme","variant","resolveTheme","useObservable","matchMedia","mediaQuery","useMemo","setPrefersDark","listener","addListener","removeListener","useShouldPreferDarkTheme","defaultConfigLoader","runtimeConfigJson","configs","staticConfig","process","APP_CONFIG","configScripts","document","querySelectorAll","el","content","textContent","toLocaleUpperCase","windowAppConfig","__APP_CONFIG__","defaultConfigLoaderSync","ApiRegistryBuilder","build","ApiRegistry","builder","DEFAULT_LANGUAGE","AppLanguageSelector","languages","availableLanguages","initialLanguage","defaultLanguage","storedLanguage","getAvailableLanguages","setLanguage","language$","language","lng","getLanguage","toInternalTranslationRef","r","$$type","version","removeNulls","messages","ResourceLoader","onLoad","addTranslationResource","resource","internalResource","toInternalTranslationResource","entry","resources","loader","needsLoading","JsxInterpolator","fromI18n","i18n","interpolator","services","originalFormat","format","formatHook","formatOpts","toString","hook","marker","setFormatHook","RegExp","wrapT","originalT","elementsMap","elementKey","createElement","part","I18nextTranslationApi","languageApi","fallbackLng","supportedLngs","interpolation","escapeValue","alwaysFormat","ns","defaultNS","fallbackNS","initImmediate","isInitialized","changeLanguage","loaded","addResourceBundle","i","instance","jsxInterpolator","getTranslation","translationRef","internalRef","translation$","loadTicket","loadResource","ticket","ready","onChange","unwrappedT","getFixedT","t","defaultMessages","getDefaultMessages","defaultResource","getDefaultResource","createLocalBaseUrl","fullUrl","port","AppContextImpl","app","getPlugins","getSystemIcon","getSystemIcons","AppManager","apiHolder","icons","featureFlags","components","configLoader","defaultApis","bindRoutes","appLanguageApi","translationResources","apiFactoryRegistry","__experimentalTranslations","createRoot","AppProvider","getProvider","routeValidationError","needsFeatureFlagRegistrationRef","useRef","routing","usesReactRouterBeta","collectors","queue","toArray","root","contexts","nextContexts","collector","discoverer","discoverers","traverseElementTree","collectedPlugins","verifyPlugins","getApiHolder","loadedConfig","hasConfig","useAsync","noConfigNode","Progress","BootErrorPage","step","ThemeProvider","fromConfigs","inputConfigs","urlConfigReader","backendBaseUrl","newBackendBaseUrl","newAppBaseUrl","maybeNewBackendBaseUrl","maybeNewAppBaseUrl","backend","overrideBaseUrlConfigs","useConfigLoader","hasConfigApi","routesById","externalRoutesById","refId","externalRoutes","collectRouteIds","disabledExternalRefs","bind","targetRoutes","externalRoute","bindings","getOptionalConfig","externalRefId","targetRefId","externalRef","defaultRefId","getDefaultTarget","defaultRef","resolveRouteBindings","notLeafRoutes","keys","currentRouteRef","fullPath","j","validateRouteParameters","externalRouteRef","validateRouteBindings","featureFlagsApi","getFeatureFlags","output","registeredFlags","flagNames","f","querySelector","getAttribute","isProtectedApp","errorApiRef","fetchApiRef","discoveryApiRef","Suspense","fallback","getRouter","getApis","identityApiRef","pluginIds","createSpecializedApp","FlatRoutes","NotFoundErrorPage","isBeta","withNotFound","useElementFilter","elements","getElements","child","sort","b","localeCompare","useRoutes","k","for","l","prototype","n","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","p","__self","__source","q","d","h","call","defaultProps","$$typeof","_owner"],"sourceRoot":""}
|
1
|
+
{"version":3,"file":"static/9286.e13da971.chunk.js","mappings":"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","sources":["webpack://veecode-platform.plugin-veecode-homepage/../../node_modules/react/jsx-runtime.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/system/ApiAggregator.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/system/ApiProvider.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/system/ApiResolver.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/system/ApiFactoryRegistry.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/lib/loginPopup.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/lib/AuthConnector/DefaultAuthConnector.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/lib/AuthSessionManager/common.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/lib/subjects.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/lib/AuthSessionManager/SessionStateTracker.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/lib/AuthSessionManager/RefreshingAuthSessionManager.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/auth/oauth2/OAuth2.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/auth/github/GithubAuth.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/auth/gitlab/GitlabAuth.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/auth/google/GoogleAuth.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/auth/okta/OktaAuth.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/lib/AuthConnector/DirectAuthConnector.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/lib/AuthSessionManager/StaticAuthSessionManager.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/lib/AuthSessionManager/AuthSessionStore.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/auth/saml/types.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/auth/saml/SamlAuth.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/auth/microsoft/MicrosoftAuth.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/auth/onelogin/OneLoginAuth.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/auth/bitbucket/BitbucketAuth.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/auth/bitbucketServer/BitbucketServerAuth.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/auth/atlassian/AtlassianAuth.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/auth/vmwareCloud/VMwareCloudAuth.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/AlertApi/AlertApiForwarder.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/AnalyticsApi/MultipleAnalyticsApi.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/AnalyticsApi/NoOpAnalyticsApi.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/AppThemeApi/AppThemeSelector.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/DiscoveryApi/UrlPatternDiscovery.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/DiscoveryApi/FrontendHostDiscovery.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/ErrorApi/ErrorAlerter.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/ErrorApi/ErrorApiForwarder.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/ErrorApi/UnhandledErrorForwarder.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/FeatureFlagsApi/LocalStorageFeatureFlags.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/FetchApi/createFetchApi.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/FetchApi/IdentityAuthInjectorFetchMiddleware.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/FetchApi/PluginProtocolResolverFetchMiddleware.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/FetchApi/FetchMiddlewares.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/OAuthRequestApi/OAuthPendingRequests.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/OAuthRequestApi/OAuthRequestManager.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/StorageApi/WebStorage.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/app/InternalAppContext.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/app/isReactRouterBeta.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/routing/RouteTracker.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/app/AppRouter.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/core-plugin-api/dist/apis/definitions/AppLanguageApi.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/extensions/traversal.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/plugins/collectors.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/routing/FeatureFlagged.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/routing/collectors.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/routing/types.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/routing/helpers.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/routing/RouteResolver.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/routing/RoutingProvider.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/app/AppContext.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/IdentityApi/AppIdentityProxy.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/IdentityApi/startCookieAuthRefresh.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/app/AppThemeProvider.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/app/defaultConfigLoader.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/system/ApiRegistry.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/AppLanguageApi/AppLanguageSelector.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/core-plugin-api/src/translation/TranslationRef.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/apis/implementations/TranslationApi/I18nextTranslationApi.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/core-plugin-api/src/translation/TranslationResource.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/app/overrideBaseUrlConfigs.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/app/AppManager.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/app/resolveRouteBindings.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/routing/validation.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/app/isProtectedApp.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/app/createSpecializedApp.esm.js","webpack://veecode-platform.plugin-veecode-homepage/./node_modules/@backstage/plugin-user-settings/node_modules/@backstage/core-app-api/dist/routing/FlatRoutes.esm.js","webpack://veecode-platform.plugin-veecode-homepage/../../node_modules/react/cjs/react-jsx-runtime.production.min.js"],"sourcesContent":["'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","class ApiAggregator {\n holders;\n constructor(...holders) {\n this.holders = holders;\n }\n get(apiRef) {\n for (const holder of this.holders) {\n const api = holder.get(apiRef);\n if (api) {\n return api;\n }\n }\n return void 0;\n }\n}\n\nexport { ApiAggregator };\n//# sourceMappingURL=ApiAggregator.esm.js.map\n","import { jsx } from 'react/jsx-runtime';\nimport { useContext } from 'react';\nimport PropTypes from 'prop-types';\nimport { ApiAggregator } from './ApiAggregator.esm.js';\nimport { createVersionedContext, createVersionedValueMap } from '@backstage/version-bridge';\n\nconst ApiContext = createVersionedContext(\"api-context\");\nconst ApiProvider = (props) => {\n const { apis, children } = props;\n const parentHolder = useContext(ApiContext)?.atVersion(1);\n const holder = parentHolder ? new ApiAggregator(apis, parentHolder) : apis;\n return /* @__PURE__ */ jsx(\n ApiContext.Provider,\n {\n value: createVersionedValueMap({ 1: holder }),\n children\n }\n );\n};\nApiProvider.propTypes = {\n apis: PropTypes.shape({ get: PropTypes.func.isRequired }).isRequired,\n children: PropTypes.node\n};\n\nexport { ApiProvider };\n//# sourceMappingURL=ApiProvider.esm.js.map\n","class ApiResolver {\n constructor(factories) {\n this.factories = factories;\n }\n /**\n * Validate factories by making sure that each of the apis can be created\n * without hitting any circular dependencies.\n */\n static validateFactories(factories, apis) {\n for (const api of apis) {\n const heap = [api];\n const allDeps = /* @__PURE__ */ new Set();\n while (heap.length) {\n const apiRef = heap.shift();\n const factory = factories.get(apiRef);\n if (!factory) {\n continue;\n }\n for (const dep of Object.values(factory.deps)) {\n if (dep.id === api.id) {\n throw new Error(`Circular dependency of api factory for ${api}`);\n }\n if (!allDeps.has(dep)) {\n allDeps.add(dep);\n heap.push(dep);\n }\n }\n }\n }\n }\n apis = /* @__PURE__ */ new Map();\n get(ref) {\n return this.load(ref);\n }\n load(ref, loading = []) {\n const impl = this.apis.get(ref.id);\n if (impl) {\n return impl;\n }\n const factory = this.factories.get(ref);\n if (!factory) {\n return void 0;\n }\n if (loading.includes(factory.api)) {\n throw new Error(`Circular dependency of api factory for ${factory.api}`);\n }\n const deps = this.loadDeps(ref, factory.deps, [...loading, factory.api]);\n const api = factory.factory(deps);\n this.apis.set(ref.id, api);\n return api;\n }\n loadDeps(dependent, apis, loading) {\n const impls = {};\n for (const key in apis) {\n if (apis.hasOwnProperty(key)) {\n const ref = apis[key];\n const api = this.load(ref, loading);\n if (!api) {\n throw new Error(\n `No API factory available for dependency ${ref} of dependent ${dependent}`\n );\n }\n impls[key] = api;\n }\n }\n return impls;\n }\n}\n\nexport { ApiResolver };\n//# sourceMappingURL=ApiResolver.esm.js.map\n","var ScopePriority = /* @__PURE__ */ ((ScopePriority2) => {\n ScopePriority2[ScopePriority2[\"default\"] = 10] = \"default\";\n ScopePriority2[ScopePriority2[\"app\"] = 50] = \"app\";\n ScopePriority2[ScopePriority2[\"static\"] = 100] = \"static\";\n return ScopePriority2;\n})(ScopePriority || {});\nclass ApiFactoryRegistry {\n factories = /* @__PURE__ */ new Map();\n /**\n * Register a new API factory. Returns true if the factory was added\n * to the registry.\n *\n * A factory will not be added to the registry if there is already\n * an existing factory with the same or higher priority.\n */\n register(scope, factory) {\n const priority = ScopePriority[scope];\n const existing = this.factories.get(factory.api.id);\n if (existing && existing.priority >= priority) {\n return false;\n }\n this.factories.set(factory.api.id, { priority, factory });\n return true;\n }\n get(api) {\n const tuple = this.factories.get(api.id);\n if (!tuple) {\n return void 0;\n }\n return tuple.factory;\n }\n getAllApis() {\n const refs = /* @__PURE__ */ new Set();\n for (const { factory } of this.factories.values()) {\n refs.add(factory.api);\n }\n return refs;\n }\n}\n\nexport { ApiFactoryRegistry };\n//# sourceMappingURL=ApiFactoryRegistry.esm.js.map\n","function openLoginPopup(options) {\n return new Promise((resolve, reject) => {\n const width = options.width || 500;\n const height = options.height || 700;\n const left = window.screen.width / 2 - width / 2;\n const top = window.screen.height / 2 - height / 2;\n const origin = new URL(options.url).origin;\n const popup = window.open(\n options.url,\n options.name,\n `menubar=no,location=no,resizable=no,scrollbars=no,status=no,width=${width},height=${height},top=${top},left=${left}`\n );\n let targetOrigin = \"\";\n if (!popup || typeof popup.closed === \"undefined\" || popup.closed) {\n const error = new Error(\"Failed to open auth popup.\");\n error.name = \"PopupRejectedError\";\n reject(error);\n return;\n }\n const messageListener = (event) => {\n if (event.source !== popup) {\n return;\n }\n if (event.origin !== origin) {\n return;\n }\n const { data } = event;\n if (data.type === \"config_info\") {\n targetOrigin = data.targetOrigin;\n return;\n }\n if (data.type !== \"authorization_response\") {\n return;\n }\n const authResult = data;\n if (\"error\" in authResult) {\n const error = new Error(authResult.error.message);\n error.name = authResult.error.name;\n reject(error);\n } else {\n resolve(authResult.response);\n }\n done();\n };\n const intervalId = setInterval(() => {\n if (popup.closed) {\n const errMessage = `Login failed, ${targetOrigin && targetOrigin !== window.location.origin ? `Incorrect app origin, expected ${targetOrigin}` : \"popup was closed\"}`;\n const error = new Error(errMessage);\n error.name = \"PopupClosedError\";\n reject(error);\n done();\n }\n }, 100);\n function done() {\n window.removeEventListener(\"message\", messageListener);\n clearInterval(intervalId);\n }\n window.addEventListener(\"message\", messageListener);\n });\n}\n\nexport { openLoginPopup };\n//# sourceMappingURL=loginPopup.esm.js.map\n","import { openLoginPopup } from '../loginPopup.esm.js';\n\nlet warned = false;\nfunction defaultJoinScopes(scopes) {\n return [...scopes].join(\" \");\n}\nclass DefaultAuthConnector {\n discoveryApi;\n environment;\n provider;\n joinScopesFunc;\n authRequester;\n sessionTransform;\n enableExperimentalRedirectFlow;\n popupOptions;\n constructor(options) {\n const {\n configApi,\n discoveryApi,\n environment,\n provider,\n joinScopes = defaultJoinScopes,\n oauthRequestApi,\n sessionTransform = (id) => id,\n popupOptions\n } = options;\n if (!warned && !configApi) {\n console.warn(\n \"DEPRECATION WARNING: Authentication providers require a configApi instance to configure the authentication flow. Please provide one to the authentication provider constructor.\"\n );\n warned = true;\n }\n this.enableExperimentalRedirectFlow = configApi ? configApi.getOptionalBoolean(\"enableExperimentalRedirectFlow\") ?? false : false;\n this.authRequester = oauthRequestApi.createAuthRequester({\n provider,\n onAuthRequest: async (scopes) => {\n if (!this.enableExperimentalRedirectFlow) {\n return this.showPopup(scopes);\n }\n return this.executeRedirect(scopes);\n }\n });\n this.discoveryApi = discoveryApi;\n this.environment = environment;\n this.provider = provider;\n this.joinScopesFunc = joinScopes;\n this.sessionTransform = sessionTransform;\n this.popupOptions = popupOptions;\n }\n async createSession(options) {\n if (options.instantPopup) {\n if (this.enableExperimentalRedirectFlow) {\n return this.executeRedirect(options.scopes);\n }\n return this.showPopup(options.scopes);\n }\n return this.authRequester(options.scopes);\n }\n async refreshSession(options) {\n const res = await fetch(\n await this.buildUrl(\"/refresh\", {\n optional: true,\n ...options && { scope: this.joinScopesFunc(options.scopes) }\n }),\n {\n headers: {\n \"x-requested-with\": \"XMLHttpRequest\"\n },\n credentials: \"include\"\n }\n ).catch((error) => {\n throw new Error(`Auth refresh request failed, ${error}`);\n });\n if (!res.ok) {\n const error = new Error(\n `Auth refresh request failed, ${res.statusText}`\n );\n error.status = res.status;\n throw error;\n }\n const authInfo = await res.json();\n if (authInfo.error) {\n const error = new Error(authInfo.error.message);\n if (authInfo.error.name) {\n error.name = authInfo.error.name;\n }\n throw error;\n }\n return await this.sessionTransform(authInfo);\n }\n async removeSession() {\n const res = await fetch(await this.buildUrl(\"/logout\"), {\n method: \"POST\",\n headers: {\n \"x-requested-with\": \"XMLHttpRequest\"\n },\n credentials: \"include\"\n }).catch((error) => {\n throw new Error(`Logout request failed, ${error}`);\n });\n if (!res.ok) {\n const error = new Error(`Logout request failed, ${res.statusText}`);\n error.status = res.status;\n throw error;\n }\n }\n async showPopup(scopes) {\n const scope = this.joinScopesFunc(scopes);\n const popupUrl = await this.buildUrl(\"/start\", {\n scope,\n origin: window.location.origin,\n flow: \"popup\"\n });\n const width = this.popupOptions?.size?.fullscreen ? window.screen.width : this.popupOptions?.size?.width || 450;\n const height = this.popupOptions?.size?.fullscreen ? window.screen.height : this.popupOptions?.size?.height || 730;\n const payload = await openLoginPopup({\n url: popupUrl,\n name: `${this.provider.title} Login`,\n width,\n height\n });\n return await this.sessionTransform(payload);\n }\n async executeRedirect(scopes) {\n const scope = this.joinScopesFunc(scopes);\n window.location.href = await this.buildUrl(\"/start\", {\n scope,\n origin: window.location.origin,\n redirectUrl: window.location.href,\n flow: \"redirect\"\n });\n return new Promise(() => {\n });\n }\n async buildUrl(path, query) {\n const baseUrl = await this.discoveryApi.getBaseUrl(\"auth\");\n const queryString = this.buildQueryString({\n ...query,\n env: this.environment\n });\n return `${baseUrl}/${this.provider.id}${path}${queryString}`;\n }\n buildQueryString(query) {\n if (!query) {\n return \"\";\n }\n const queryString = Object.entries(query).map(([key, value]) => {\n if (typeof value === \"string\") {\n return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;\n } else if (value) {\n return encodeURIComponent(key);\n }\n return void 0;\n }).filter(Boolean).join(\"&\");\n if (!queryString) {\n return \"\";\n }\n return `?${queryString}`;\n }\n}\n\nexport { DefaultAuthConnector };\n//# sourceMappingURL=DefaultAuthConnector.esm.js.map\n","function hasScopes(searched, searchFor) {\n for (const scope of searchFor) {\n if (!searched.has(scope)) {\n return false;\n }\n }\n return true;\n}\nclass SessionScopeHelper {\n constructor(options) {\n this.options = options;\n }\n sessionExistsAndHasScope(session, scopes) {\n if (!session) {\n return false;\n }\n if (!scopes) {\n return true;\n }\n if (this.options.sessionScopes === void 0) {\n return true;\n }\n const sessionScopes = this.options.sessionScopes(session);\n return hasScopes(sessionScopes, scopes);\n }\n getExtendedScope(session, scopes) {\n const newScope = new Set(this.options.defaultScopes);\n if (session && this.options.sessionScopes !== void 0) {\n const sessionScopes = this.options.sessionScopes(session);\n for (const scope of sessionScopes) {\n newScope.add(scope);\n }\n }\n if (scopes) {\n for (const scope of scopes) {\n newScope.add(scope);\n }\n }\n return newScope;\n }\n}\n\nexport { SessionScopeHelper, hasScopes };\n//# sourceMappingURL=common.esm.js.map\n","import ObservableImpl from 'zen-observable';\n\nclass PublishSubject {\n isClosed = false;\n terminatingError;\n observable = new ObservableImpl((subscriber) => {\n if (this.isClosed) {\n if (this.terminatingError) {\n subscriber.error(this.terminatingError);\n } else {\n subscriber.complete();\n }\n return () => {\n };\n }\n this.subscribers.add(subscriber);\n return () => {\n this.subscribers.delete(subscriber);\n };\n });\n subscribers = /* @__PURE__ */ new Set();\n [Symbol.observable]() {\n return this;\n }\n get closed() {\n return this.isClosed;\n }\n next(value) {\n if (this.isClosed) {\n throw new Error(\"PublishSubject is closed\");\n }\n this.subscribers.forEach((subscriber) => subscriber.next(value));\n }\n error(error) {\n if (this.isClosed) {\n throw new Error(\"PublishSubject is closed\");\n }\n this.isClosed = true;\n this.terminatingError = error;\n this.subscribers.forEach((subscriber) => subscriber.error(error));\n }\n complete() {\n if (this.isClosed) {\n throw new Error(\"PublishSubject is closed\");\n }\n this.isClosed = true;\n this.subscribers.forEach((subscriber) => subscriber.complete());\n }\n subscribe(onNext, onError, onComplete) {\n const observer = typeof onNext === \"function\" ? {\n next: onNext,\n error: onError,\n complete: onComplete\n } : onNext;\n return this.observable.subscribe(observer);\n }\n}\nclass BehaviorSubject {\n isClosed;\n currentValue;\n terminatingError;\n observable;\n constructor(value) {\n this.isClosed = false;\n this.currentValue = value;\n this.terminatingError = void 0;\n this.observable = new ObservableImpl((subscriber) => {\n if (this.isClosed) {\n if (this.terminatingError) {\n subscriber.error(this.terminatingError);\n } else {\n subscriber.complete();\n }\n return () => {\n };\n }\n subscriber.next(this.currentValue);\n this.subscribers.add(subscriber);\n return () => {\n this.subscribers.delete(subscriber);\n };\n });\n }\n subscribers = /* @__PURE__ */ new Set();\n [Symbol.observable]() {\n return this;\n }\n get closed() {\n return this.isClosed;\n }\n next(value) {\n if (this.isClosed) {\n throw new Error(\"BehaviorSubject is closed\");\n }\n this.currentValue = value;\n this.subscribers.forEach((subscriber) => subscriber.next(value));\n }\n error(error) {\n if (this.isClosed) {\n throw new Error(\"BehaviorSubject is closed\");\n }\n this.isClosed = true;\n this.terminatingError = error;\n this.subscribers.forEach((subscriber) => subscriber.error(error));\n }\n complete() {\n if (this.isClosed) {\n throw new Error(\"BehaviorSubject is closed\");\n }\n this.isClosed = true;\n this.subscribers.forEach((subscriber) => subscriber.complete());\n }\n subscribe(onNext, onError, onComplete) {\n const observer = typeof onNext === \"function\" ? {\n next: onNext,\n error: onError,\n complete: onComplete\n } : onNext;\n return this.observable.subscribe(observer);\n }\n}\n\nexport { BehaviorSubject, PublishSubject };\n//# sourceMappingURL=subjects.esm.js.map\n","import { BehaviorSubject } from '../subjects.esm.js';\nimport { SessionState } from '@backstage/core-plugin-api';\n\nclass SessionStateTracker {\n subject = new BehaviorSubject(\n SessionState.SignedOut\n );\n signedIn = false;\n setIsSignedIn(isSignedIn) {\n if (this.signedIn !== isSignedIn) {\n this.signedIn = isSignedIn;\n this.subject.next(\n this.signedIn ? SessionState.SignedIn : SessionState.SignedOut\n );\n }\n }\n sessionState$() {\n return this.subject;\n }\n}\n\nexport { SessionStateTracker };\n//# sourceMappingURL=SessionStateTracker.esm.js.map\n","import { SessionScopeHelper, hasScopes } from './common.esm.js';\nimport { SessionStateTracker } from './SessionStateTracker.esm.js';\n\nclass RefreshingAuthSessionManager {\n connector;\n helper;\n sessionScopesFunc;\n sessionShouldRefreshFunc;\n stateTracker = new SessionStateTracker();\n refreshPromise;\n currentSession;\n constructor(options) {\n const {\n connector,\n defaultScopes = /* @__PURE__ */ new Set(),\n sessionScopes,\n sessionShouldRefresh\n } = options;\n this.connector = connector;\n this.sessionScopesFunc = sessionScopes;\n this.sessionShouldRefreshFunc = sessionShouldRefresh;\n this.helper = new SessionScopeHelper({ sessionScopes, defaultScopes });\n }\n async getSession(options) {\n if (this.helper.sessionExistsAndHasScope(this.currentSession, options.scopes)) {\n const shouldRefresh = this.sessionShouldRefreshFunc(this.currentSession);\n if (!shouldRefresh) {\n return this.currentSession;\n }\n try {\n const refreshedSession = await this.collapsedSessionRefresh(\n options.scopes\n );\n const currentScopes = this.sessionScopesFunc(this.currentSession);\n const refreshedScopes = this.sessionScopesFunc(refreshedSession);\n if (hasScopes(refreshedScopes, currentScopes)) {\n this.currentSession = refreshedSession;\n }\n return refreshedSession;\n } catch (error) {\n if (options.optional) {\n return void 0;\n }\n throw error;\n }\n }\n if (!options.instantPopup) {\n try {\n const newSession = await this.collapsedSessionRefresh(options.scopes);\n this.currentSession = newSession;\n return this.getSession(options);\n } catch {\n }\n }\n if (options.optional) {\n return void 0;\n }\n this.currentSession = await this.connector.createSession({\n ...options,\n scopes: this.helper.getExtendedScope(this.currentSession, options.scopes)\n });\n this.stateTracker.setIsSignedIn(true);\n return this.currentSession;\n }\n async removeSession() {\n this.currentSession = void 0;\n await this.connector.removeSession();\n this.stateTracker.setIsSignedIn(false);\n }\n sessionState$() {\n return this.stateTracker.sessionState$();\n }\n async collapsedSessionRefresh(scopes) {\n if (this.refreshPromise) {\n return this.refreshPromise;\n }\n this.refreshPromise = this.connector.refreshSession({\n scopes: this.helper.getExtendedScope(this.currentSession, scopes)\n });\n try {\n const session = await this.refreshPromise;\n if (!this.helper.sessionExistsAndHasScope(session, scopes)) {\n throw new Error(\n \"Refreshed session did not receive the required scopes\"\n );\n }\n this.stateTracker.setIsSignedIn(true);\n return session;\n } finally {\n delete this.refreshPromise;\n }\n }\n}\n\nexport { RefreshingAuthSessionManager };\n//# sourceMappingURL=RefreshingAuthSessionManager.esm.js.map\n","import { DefaultAuthConnector } from '../../../../lib/AuthConnector/DefaultAuthConnector.esm.js';\nimport { RefreshingAuthSessionManager } from '../../../../lib/AuthSessionManager/RefreshingAuthSessionManager.esm.js';\nimport 'zen-observable';\nimport '@backstage/core-plugin-api';\n\nconst DEFAULT_PROVIDER = {\n id: \"oauth2\",\n title: \"Your Identity Provider\",\n icon: () => null\n};\nclass OAuth2 {\n static createAuthConnector(options) {\n if (\"authConnector\" in options) {\n return options.authConnector;\n }\n const {\n scopeTransform = (x) => x,\n configApi,\n discoveryApi,\n environment = \"development\",\n provider = DEFAULT_PROVIDER,\n oauthRequestApi,\n popupOptions\n } = options;\n return new DefaultAuthConnector({\n configApi,\n discoveryApi,\n environment,\n provider,\n oauthRequestApi,\n sessionTransform({\n backstageIdentity,\n ...res\n }) {\n const session = {\n ...res,\n providerInfo: {\n idToken: res.providerInfo.idToken,\n accessToken: res.providerInfo.accessToken,\n scopes: OAuth2.normalizeScopes(res.providerInfo.scope, {\n scopeTransform\n }),\n expiresAt: res.providerInfo.expiresInSeconds ? new Date(Date.now() + res.providerInfo.expiresInSeconds * 1e3) : void 0\n }\n };\n if (backstageIdentity) {\n session.backstageIdentity = {\n token: backstageIdentity.token,\n identity: backstageIdentity.identity,\n expiresAt: backstageIdentity.expiresInSeconds ? new Date(Date.now() + backstageIdentity.expiresInSeconds * 1e3) : void 0\n };\n }\n return session;\n },\n popupOptions\n });\n }\n static create(options) {\n const { defaultScopes = [], scopeTransform = (x) => x } = options;\n const connector = OAuth2.createAuthConnector(options);\n const sessionManager = new RefreshingAuthSessionManager({\n connector,\n defaultScopes: new Set(defaultScopes),\n sessionScopes: (session) => session.providerInfo.scopes,\n sessionShouldRefresh: (session) => {\n let min = Infinity;\n if (session.providerInfo?.expiresAt) {\n min = Math.min(\n min,\n (session.providerInfo.expiresAt.getTime() - Date.now()) / 1e3\n );\n }\n if (session.backstageIdentity?.expiresAt) {\n min = Math.min(\n min,\n (session.backstageIdentity.expiresAt.getTime() - Date.now()) / 1e3\n );\n }\n return min < 60 * 3;\n }\n });\n return new OAuth2({ sessionManager, scopeTransform });\n }\n sessionManager;\n scopeTransform;\n constructor(options) {\n this.sessionManager = options.sessionManager;\n this.scopeTransform = options.scopeTransform;\n }\n async signIn() {\n await this.getAccessToken();\n }\n async signOut() {\n await this.sessionManager.removeSession();\n }\n sessionState$() {\n return this.sessionManager.sessionState$();\n }\n async getAccessToken(scope, options) {\n const normalizedScopes = OAuth2.normalizeScopes(scope, {\n scopeTransform: this.scopeTransform\n });\n const session = await this.sessionManager.getSession({\n ...options,\n scopes: normalizedScopes\n });\n return session?.providerInfo.accessToken ?? \"\";\n }\n async getIdToken(options = {}) {\n const session = await this.sessionManager.getSession({\n ...options,\n scopes: /* @__PURE__ */ new Set([\"openid\"])\n });\n return session?.providerInfo.idToken ?? \"\";\n }\n async getBackstageIdentity(options = {}) {\n const session = await this.sessionManager.getSession(options);\n return session?.backstageIdentity;\n }\n async getProfile(options = {}) {\n const session = await this.sessionManager.getSession(options);\n return session?.profile;\n }\n /**\n * @public\n */\n static normalizeScopes(scopes, options) {\n if (!scopes) {\n return /* @__PURE__ */ new Set();\n }\n const scopeList = Array.isArray(scopes) ? scopes : scopes.split(/[\\s|,]/).filter(Boolean);\n const transformedScopes = options ? options.scopeTransform(scopeList) : scopeList;\n return new Set(transformedScopes);\n }\n}\n\nexport { OAuth2 as default };\n//# sourceMappingURL=OAuth2.esm.js.map\n","import OAuth2 from '../oauth2/OAuth2.esm.js';\n\nconst DEFAULT_PROVIDER = {\n id: \"github\",\n title: \"GitHub\",\n icon: () => null\n};\nclass GithubAuth {\n static create(options) {\n const {\n configApi,\n discoveryApi,\n environment = \"development\",\n provider = DEFAULT_PROVIDER,\n oauthRequestApi,\n defaultScopes = [\"read:user\"]\n } = options;\n return OAuth2.create({\n configApi,\n discoveryApi,\n oauthRequestApi,\n provider,\n environment,\n defaultScopes\n });\n }\n}\n\nexport { GithubAuth as default };\n//# sourceMappingURL=GithubAuth.esm.js.map\n","import OAuth2 from '../oauth2/OAuth2.esm.js';\n\nconst DEFAULT_PROVIDER = {\n id: \"gitlab\",\n title: \"GitLab\",\n icon: () => null\n};\nclass GitlabAuth {\n static create(options) {\n const {\n configApi,\n discoveryApi,\n environment = \"development\",\n provider = DEFAULT_PROVIDER,\n oauthRequestApi,\n defaultScopes = [\"read_user\"]\n } = options;\n return OAuth2.create({\n configApi,\n discoveryApi,\n oauthRequestApi,\n provider,\n environment,\n defaultScopes\n });\n }\n}\n\nexport { GitlabAuth as default };\n//# sourceMappingURL=GitlabAuth.esm.js.map\n","import OAuth2 from '../oauth2/OAuth2.esm.js';\n\nconst DEFAULT_PROVIDER = {\n id: \"google\",\n title: \"Google\",\n icon: () => null\n};\nconst SCOPE_PREFIX = \"https://www.googleapis.com/auth/\";\nclass GoogleAuth {\n static create(options) {\n const {\n configApi,\n discoveryApi,\n oauthRequestApi,\n environment = \"development\",\n provider = DEFAULT_PROVIDER,\n defaultScopes = [\n \"openid\",\n `${SCOPE_PREFIX}userinfo.email`,\n `${SCOPE_PREFIX}userinfo.profile`\n ]\n } = options;\n return OAuth2.create({\n configApi,\n discoveryApi,\n oauthRequestApi,\n provider,\n environment,\n defaultScopes,\n scopeTransform(scopes) {\n return scopes.map((scope) => {\n if (scope === \"openid\") {\n return scope;\n }\n if (scope === \"profile\" || scope === \"email\") {\n return `${SCOPE_PREFIX}userinfo.${scope}`;\n }\n if (scope.startsWith(SCOPE_PREFIX)) {\n return scope;\n }\n return `${SCOPE_PREFIX}${scope}`;\n });\n }\n });\n }\n}\n\nexport { GoogleAuth as default };\n//# sourceMappingURL=GoogleAuth.esm.js.map\n","import OAuth2 from '../oauth2/OAuth2.esm.js';\n\nconst DEFAULT_PROVIDER = {\n id: \"okta\",\n title: \"Okta\",\n icon: () => null\n};\nconst OKTA_OIDC_SCOPES = /* @__PURE__ */ new Set([\n \"openid\",\n \"profile\",\n \"email\",\n \"phone\",\n \"address\",\n \"groups\",\n \"offline_access\"\n]);\nconst OKTA_SCOPE_PREFIX = \"okta.\";\nclass OktaAuth {\n static create(options) {\n const {\n configApi,\n discoveryApi,\n environment = \"development\",\n provider = DEFAULT_PROVIDER,\n oauthRequestApi,\n defaultScopes = [\"openid\", \"email\", \"profile\", \"offline_access\"]\n } = options;\n return OAuth2.create({\n configApi,\n discoveryApi,\n oauthRequestApi,\n provider,\n environment,\n defaultScopes,\n scopeTransform(scopes) {\n return scopes.map((scope) => {\n if (OKTA_OIDC_SCOPES.has(scope)) {\n return scope;\n }\n if (scope.startsWith(OKTA_SCOPE_PREFIX)) {\n return scope;\n }\n return `${OKTA_SCOPE_PREFIX}${scope}`;\n });\n }\n });\n }\n}\n\nexport { OktaAuth as default };\n//# sourceMappingURL=OktaAuth.esm.js.map\n","import { openLoginPopup } from '../loginPopup.esm.js';\n\nclass DirectAuthConnector {\n discoveryApi;\n environment;\n provider;\n constructor(options) {\n const { discoveryApi, environment, provider } = options;\n this.discoveryApi = discoveryApi;\n this.environment = environment;\n this.provider = provider;\n }\n async createSession() {\n const popupUrl = await this.buildUrl(\"/start\");\n const payload = await openLoginPopup({\n url: popupUrl,\n name: `${this.provider.title} Login`,\n width: 450,\n height: 730\n });\n return {\n ...payload,\n id: payload.profile.email\n };\n }\n async refreshSession() {\n }\n async removeSession() {\n const res = await fetch(await this.buildUrl(\"/logout\"), {\n method: \"POST\",\n headers: {\n \"x-requested-with\": \"XMLHttpRequest\"\n },\n credentials: \"include\"\n }).catch((error) => {\n throw new Error(`Logout request failed, ${error}`);\n });\n if (!res.ok) {\n const error = new Error(`Logout request failed, ${res.statusText}`);\n error.status = res.status;\n throw error;\n }\n }\n async buildUrl(path) {\n const baseUrl = await this.discoveryApi.getBaseUrl(\"auth\");\n return `${baseUrl}/${this.provider.id}${path}?env=${this.environment}`;\n }\n}\n\nexport { DirectAuthConnector };\n//# sourceMappingURL=DirectAuthConnector.esm.js.map\n","import { SessionScopeHelper } from './common.esm.js';\nimport { SessionStateTracker } from './SessionStateTracker.esm.js';\n\nclass StaticAuthSessionManager {\n connector;\n helper;\n stateTracker = new SessionStateTracker();\n currentSession;\n constructor(options) {\n const { connector, defaultScopes = /* @__PURE__ */ new Set(), sessionScopes } = options;\n this.connector = connector;\n this.helper = new SessionScopeHelper({ sessionScopes, defaultScopes });\n }\n setSession(session) {\n this.currentSession = session;\n this.stateTracker.setIsSignedIn(Boolean(session));\n }\n async getSession(options) {\n if (this.helper.sessionExistsAndHasScope(this.currentSession, options.scopes)) {\n return this.currentSession;\n }\n if (options.optional) {\n return void 0;\n }\n this.currentSession = await this.connector.createSession({\n ...options,\n scopes: this.helper.getExtendedScope(this.currentSession, options.scopes)\n });\n this.stateTracker.setIsSignedIn(true);\n return this.currentSession;\n }\n /**\n * We don't call this.connector.removeSession here, since this session manager\n * is intended to be static. As such there's no need to hit the remote logout\n * endpoint - simply discarding the local session state when signing out is\n * enough.\n */\n async removeSession() {\n this.currentSession = void 0;\n this.stateTracker.setIsSignedIn(false);\n }\n sessionState$() {\n return this.stateTracker.sessionState$();\n }\n}\n\nexport { StaticAuthSessionManager };\n//# sourceMappingURL=StaticAuthSessionManager.esm.js.map\n","import { SessionScopeHelper } from './common.esm.js';\n\nclass AuthSessionStore {\n manager;\n storageKey;\n schema;\n sessionShouldRefreshFunc;\n helper;\n constructor(options) {\n const {\n manager,\n storageKey,\n schema,\n sessionScopes,\n sessionShouldRefresh = () => false\n } = options;\n this.manager = manager;\n this.storageKey = storageKey;\n this.schema = schema;\n this.sessionShouldRefreshFunc = sessionShouldRefresh;\n this.helper = new SessionScopeHelper({\n sessionScopes,\n defaultScopes: /* @__PURE__ */ new Set()\n });\n }\n setSession(session) {\n this.manager.setSession(session);\n this.saveSession(session);\n }\n async getSession(options) {\n const { scopes } = options;\n const session = this.loadSession();\n if (this.helper.sessionExistsAndHasScope(session, scopes)) {\n const shouldRefresh = this.sessionShouldRefreshFunc(session);\n if (!shouldRefresh) {\n this.manager.setSession(session);\n return session;\n }\n }\n const newSession = await this.manager.getSession(options);\n this.saveSession(newSession);\n return newSession;\n }\n async removeSession() {\n localStorage.removeItem(this.storageKey);\n await this.manager.removeSession();\n }\n sessionState$() {\n return this.manager.sessionState$();\n }\n loadSession() {\n try {\n const sessionJson = localStorage.getItem(this.storageKey);\n if (sessionJson) {\n const session = JSON.parse(sessionJson, (_key, value) => {\n if (value?.__type === \"Set\") {\n return new Set(value.__value);\n }\n return value;\n });\n try {\n return this.schema.parse(session);\n } catch (e) {\n console.log(\n `Failed to load session from local storage because it did not conform to the expected schema, ${e}`\n );\n throw e;\n }\n }\n return void 0;\n } catch (error) {\n localStorage.removeItem(this.storageKey);\n return void 0;\n }\n }\n saveSession(session) {\n if (session === void 0) {\n localStorage.removeItem(this.storageKey);\n return;\n }\n try {\n this.schema.parse(session);\n } catch (e) {\n console.warn(\n `Failed to save session to local storage because it did not conform to the expected schema, ${e}`\n );\n return;\n }\n localStorage.setItem(\n this.storageKey,\n JSON.stringify(session, (_key, value) => {\n if (value instanceof Set) {\n return {\n __type: \"Set\",\n __value: Array.from(value)\n };\n }\n return value;\n })\n );\n }\n}\n\nexport { AuthSessionStore };\n//# sourceMappingURL=AuthSessionStore.esm.js.map\n","import { z } from 'zod';\n\nconst samlSessionSchema = z.object({\n profile: z.object({\n email: z.string().optional(),\n displayName: z.string().optional(),\n picture: z.string().optional()\n }),\n backstageIdentity: z.object({\n token: z.string(),\n identity: z.object({\n type: z.literal(\"user\"),\n userEntityRef: z.string(),\n ownershipEntityRefs: z.array(z.string())\n })\n })\n});\n\nexport { samlSessionSchema };\n//# sourceMappingURL=types.esm.js.map\n","import { DirectAuthConnector } from '../../../../lib/AuthConnector/DirectAuthConnector.esm.js';\nimport 'zen-observable';\nimport '@backstage/core-plugin-api';\nimport { StaticAuthSessionManager } from '../../../../lib/AuthSessionManager/StaticAuthSessionManager.esm.js';\nimport { AuthSessionStore } from '../../../../lib/AuthSessionManager/AuthSessionStore.esm.js';\nimport { samlSessionSchema } from './types.esm.js';\n\nconst DEFAULT_PROVIDER = {\n id: \"saml\",\n title: \"SAML\",\n icon: () => null\n};\nclass SamlAuth {\n constructor(sessionManager) {\n this.sessionManager = sessionManager;\n }\n static create(options) {\n const {\n discoveryApi,\n environment = \"development\",\n provider = DEFAULT_PROVIDER\n } = options;\n const connector = new DirectAuthConnector({\n discoveryApi,\n environment,\n provider\n });\n const sessionManager = new StaticAuthSessionManager({\n connector\n });\n const authSessionStore = new AuthSessionStore({\n manager: sessionManager,\n storageKey: `${provider.id}Session`,\n schema: samlSessionSchema\n });\n return new SamlAuth(authSessionStore);\n }\n sessionState$() {\n return this.sessionManager.sessionState$();\n }\n async signIn() {\n await this.getBackstageIdentity({});\n }\n async signOut() {\n await this.sessionManager.removeSession();\n }\n async getBackstageIdentity(options = {}) {\n const session = await this.sessionManager.getSession(options);\n return session?.backstageIdentity;\n }\n async getProfile(options = {}) {\n const session = await this.sessionManager.getSession(options);\n return session?.profile;\n }\n}\n\nexport { SamlAuth as default };\n//# sourceMappingURL=SamlAuth.esm.js.map\n","import OAuth2 from '../oauth2/OAuth2.esm.js';\n\nconst DEFAULT_PROVIDER = {\n id: \"microsoft\",\n title: \"Microsoft\",\n icon: () => null\n};\nclass MicrosoftAuth {\n oauth2;\n configApi;\n environment;\n provider;\n oauthRequestApi;\n discoveryApi;\n scopeTransform;\n static MicrosoftGraphID = \"00000003-0000-0000-c000-000000000000\";\n static create(options) {\n return new MicrosoftAuth(options);\n }\n constructor(options) {\n const {\n configApi,\n environment = \"development\",\n provider = DEFAULT_PROVIDER,\n oauthRequestApi,\n discoveryApi,\n defaultScopes = [\n \"openid\",\n \"offline_access\",\n \"profile\",\n \"email\",\n \"User.Read\"\n ],\n scopeTransform = (scopes) => scopes.concat(\"offline_access\")\n } = options;\n this.configApi = configApi;\n this.environment = environment;\n this.provider = provider;\n this.oauthRequestApi = oauthRequestApi;\n this.discoveryApi = discoveryApi;\n this.scopeTransform = scopeTransform;\n this.oauth2 = {\n [MicrosoftAuth.MicrosoftGraphID]: OAuth2.create({\n configApi: this.configApi,\n discoveryApi: this.discoveryApi,\n oauthRequestApi: this.oauthRequestApi,\n provider: this.provider,\n environment: this.environment,\n scopeTransform: this.scopeTransform,\n defaultScopes\n })\n };\n }\n microsoftGraph() {\n return this.oauth2[MicrosoftAuth.MicrosoftGraphID];\n }\n static resourceForScopes(scope) {\n const audiences = [\n ...new Set(\n scope.split(\" \").map(MicrosoftAuth.resourceForScope).filter((aud) => aud !== \"openid\")\n )\n ];\n if (audiences.length > 1) {\n return Promise.reject(\n new Error(\n `Requested access token with scopes from multiple Azure resources: ${audiences.join(\n \", \"\n )}. Access tokens can only have a single audience.`\n )\n );\n }\n const audience = audiences[0] ?? MicrosoftAuth.MicrosoftGraphID;\n return Promise.resolve(audience);\n }\n static resourceForScope(scope) {\n const groups = scope.match(/^(?<resourceURI>.*)\\/(?<scp>[^\\/]*)$/)?.groups;\n if (groups) {\n const { resourceURI } = groups;\n const aud = resourceURI.replace(/^api:\\/\\//, \"\");\n return aud;\n }\n switch (scope) {\n case \"email\":\n case \"openid\":\n case \"offline_access\":\n case \"profile\": {\n return \"openid\";\n }\n default:\n return MicrosoftAuth.MicrosoftGraphID;\n }\n }\n async getAccessToken(scope, options) {\n const aud = scope === void 0 ? MicrosoftAuth.MicrosoftGraphID : await MicrosoftAuth.resourceForScopes(\n Array.isArray(scope) ? scope.join(\" \") : scope\n );\n if (!(aud in this.oauth2)) {\n this.oauth2[aud] = OAuth2.create({\n configApi: this.configApi,\n discoveryApi: this.discoveryApi,\n oauthRequestApi: this.oauthRequestApi,\n provider: this.provider,\n environment: this.environment,\n scopeTransform: this.scopeTransform\n });\n }\n return this.oauth2[aud].getAccessToken(scope, options);\n }\n getIdToken(options) {\n return this.microsoftGraph().getIdToken(options);\n }\n getProfile(options) {\n return this.microsoftGraph().getProfile(options);\n }\n getBackstageIdentity(options) {\n return this.microsoftGraph().getBackstageIdentity(options);\n }\n signIn() {\n return this.microsoftGraph().signIn();\n }\n signOut() {\n return this.microsoftGraph().signOut();\n }\n sessionState$() {\n return this.microsoftGraph().sessionState$();\n }\n}\n\nexport { MicrosoftAuth as default };\n//# sourceMappingURL=MicrosoftAuth.esm.js.map\n","import OAuth2 from '../oauth2/OAuth2.esm.js';\n\nconst DEFAULT_PROVIDER = {\n id: \"onelogin\",\n title: \"onelogin\",\n icon: () => null\n};\nconst OIDC_SCOPES = /* @__PURE__ */ new Set([\n \"openid\",\n \"profile\",\n \"email\",\n \"phone\",\n \"address\",\n \"groups\",\n \"offline_access\"\n]);\nconst SCOPE_PREFIX = \"onelogin.\";\nclass OneLoginAuth {\n static create(options) {\n const {\n configApi,\n discoveryApi,\n environment = \"development\",\n provider = DEFAULT_PROVIDER,\n oauthRequestApi\n } = options;\n return OAuth2.create({\n configApi,\n discoveryApi,\n oauthRequestApi,\n provider,\n environment,\n defaultScopes: [\"openid\", \"email\", \"profile\", \"offline_access\"],\n scopeTransform(scopes) {\n return scopes.map((scope) => {\n if (OIDC_SCOPES.has(scope)) {\n return scope;\n }\n if (scope.startsWith(SCOPE_PREFIX)) {\n return scope;\n }\n return `${SCOPE_PREFIX}${scope}`;\n });\n }\n });\n }\n}\n\nexport { OneLoginAuth as default };\n//# sourceMappingURL=OneLoginAuth.esm.js.map\n","import OAuth2 from '../oauth2/OAuth2.esm.js';\n\nconst DEFAULT_PROVIDER = {\n id: \"bitbucket\",\n title: \"Bitbucket\",\n icon: () => null\n};\nclass BitbucketAuth {\n static create(options) {\n const {\n configApi,\n discoveryApi,\n environment = \"development\",\n provider = DEFAULT_PROVIDER,\n oauthRequestApi,\n defaultScopes = [\"account\"]\n } = options;\n return OAuth2.create({\n configApi,\n discoveryApi,\n oauthRequestApi,\n provider,\n environment,\n defaultScopes\n });\n }\n}\n\nexport { BitbucketAuth as default };\n//# sourceMappingURL=BitbucketAuth.esm.js.map\n","import OAuth2 from '../oauth2/OAuth2.esm.js';\n\nconst DEFAULT_PROVIDER = {\n id: \"bitbucketServer\",\n title: \"Bitbucket Server\",\n icon: () => null\n};\nclass BitbucketServerAuth {\n static create(options) {\n const {\n configApi,\n discoveryApi,\n environment = \"development\",\n provider = DEFAULT_PROVIDER,\n oauthRequestApi,\n defaultScopes = [\"PROJECT_ADMIN\"]\n } = options;\n return OAuth2.create({\n configApi,\n discoveryApi,\n oauthRequestApi,\n provider,\n environment,\n defaultScopes\n });\n }\n}\n\nexport { BitbucketServerAuth as default };\n//# sourceMappingURL=BitbucketServerAuth.esm.js.map\n","import OAuth2 from '../oauth2/OAuth2.esm.js';\n\nconst DEFAULT_PROVIDER = {\n id: \"atlassian\",\n title: \"Atlassian\",\n icon: () => null\n};\nclass AtlassianAuth {\n static create(options) {\n const {\n configApi,\n discoveryApi,\n environment = \"development\",\n provider = DEFAULT_PROVIDER,\n oauthRequestApi\n } = options;\n return OAuth2.create({\n configApi,\n discoveryApi,\n oauthRequestApi,\n provider,\n environment\n });\n }\n}\n\nexport { AtlassianAuth as default };\n//# sourceMappingURL=AtlassianAuth.esm.js.map\n","import OAuth2 from '../oauth2/OAuth2.esm.js';\n\nconst DEFAULT_PROVIDER = {\n id: \"vmwareCloudServices\",\n title: \"VMware Cloud\",\n icon: () => null\n};\nclass VMwareCloudAuth {\n static create(options) {\n const {\n configApi,\n discoveryApi,\n oauthRequestApi,\n environment = \"development\",\n provider = DEFAULT_PROVIDER,\n defaultScopes = [\"openid\"]\n } = options;\n return OAuth2.create({\n configApi,\n discoveryApi,\n oauthRequestApi,\n provider,\n environment,\n defaultScopes\n });\n }\n}\n\nexport { VMwareCloudAuth as default };\n//# sourceMappingURL=VMwareCloudAuth.esm.js.map\n","import { PublishSubject } from '../../../lib/subjects.esm.js';\n\nclass AlertApiForwarder {\n subject = new PublishSubject();\n post(alert) {\n this.subject.next(alert);\n }\n alert$() {\n return this.subject;\n }\n}\n\nexport { AlertApiForwarder };\n//# sourceMappingURL=AlertApiForwarder.esm.js.map\n","class MultipleAnalyticsApi {\n constructor(actualApis) {\n this.actualApis = actualApis;\n }\n /**\n * Create an AnalyticsApi implementation from an array of concrete\n * implementations.\n *\n * @example\n *\n * ```jsx\n * MultipleAnalyticsApi.fromApis([\n * SomeAnalyticsApi.fromConfig(configApi),\n * new CustomAnalyticsApi(),\n * ]);\n * ```\n */\n static fromApis(actualApis) {\n return new MultipleAnalyticsApi(actualApis);\n }\n /**\n * Forward the event to all configured analytics API implementations.\n */\n captureEvent(event) {\n this.actualApis.forEach((analyticsApi) => {\n try {\n analyticsApi.captureEvent(event);\n } catch {\n }\n });\n }\n}\n\nexport { MultipleAnalyticsApi };\n//# sourceMappingURL=MultipleAnalyticsApi.esm.js.map\n","class NoOpAnalyticsApi {\n captureEvent(_event) {\n }\n}\n\nexport { NoOpAnalyticsApi };\n//# sourceMappingURL=NoOpAnalyticsApi.esm.js.map\n","import { BehaviorSubject } from '../../../lib/subjects.esm.js';\n\nconst STORAGE_KEY = \"theme\";\nclass AppThemeSelector {\n constructor(themes) {\n this.themes = themes;\n }\n static createWithStorage(themes) {\n const selector = new AppThemeSelector(themes);\n if (!window.localStorage) {\n return selector;\n }\n const initialThemeId = window.localStorage.getItem(STORAGE_KEY) ?? void 0;\n selector.setActiveThemeId(initialThemeId);\n selector.activeThemeId$().subscribe((themeId) => {\n if (themeId) {\n window.localStorage.setItem(STORAGE_KEY, themeId);\n } else {\n window.localStorage.removeItem(STORAGE_KEY);\n }\n });\n window.addEventListener(\"storage\", (event) => {\n if (event.key === STORAGE_KEY) {\n const themeId = localStorage.getItem(STORAGE_KEY) ?? void 0;\n selector.setActiveThemeId(themeId);\n }\n });\n return selector;\n }\n activeThemeId;\n subject = new BehaviorSubject(void 0);\n getInstalledThemes() {\n return this.themes.slice();\n }\n activeThemeId$() {\n return this.subject;\n }\n getActiveThemeId() {\n return this.activeThemeId;\n }\n setActiveThemeId(themeId) {\n this.activeThemeId = themeId;\n this.subject.next(themeId);\n }\n}\n\nexport { AppThemeSelector };\n//# sourceMappingURL=AppThemeSelector.esm.js.map\n","const ERROR_PREFIX = \"Invalid discovery URL pattern,\";\nclass UrlPatternDiscovery {\n constructor(parts) {\n this.parts = parts;\n }\n /**\n * Creates a new UrlPatternDiscovery given a template. The only\n * interpolation done for the template is to replace instances of `{{pluginId}}`\n * with the ID of the plugin being requested.\n *\n * Example pattern: `http://localhost:7007/api/{{ pluginId }}`\n */\n static compile(pattern) {\n const parts = pattern.split(/\\{\\{\\s*pluginId\\s*\\}\\}/);\n const urlStr = parts.join(\"pluginId\");\n let url;\n try {\n url = new URL(urlStr);\n } catch {\n throw new Error(`${ERROR_PREFIX} URL '${urlStr}' is invalid`);\n }\n if (url.hash) {\n throw new Error(`${ERROR_PREFIX} URL must not have a hash`);\n }\n if (url.search) {\n throw new Error(`${ERROR_PREFIX} URL must not have a query`);\n }\n if (urlStr.endsWith(\"/\")) {\n throw new Error(`${ERROR_PREFIX} URL must not end with a slash`);\n }\n return new UrlPatternDiscovery(parts);\n }\n async getBaseUrl(pluginId) {\n return this.parts.join(encodeURIComponent(pluginId));\n }\n}\n\nexport { UrlPatternDiscovery };\n//# sourceMappingURL=UrlPatternDiscovery.esm.js.map\n","import { UrlPatternDiscovery } from './UrlPatternDiscovery.esm.js';\n\nclass FrontendHostDiscovery {\n constructor(endpoints, defaultEndpoint) {\n this.endpoints = endpoints;\n this.defaultEndpoint = defaultEndpoint;\n }\n /**\n * Creates a new FrontendHostDiscovery discovery instance by reading\n * the external target URL from the `discovery.endpoints` config section.\n *\n * eg.\n * ```yaml\n * discovery:\n * endpoints:\n * - target: https://internal.example.com/internal-catalog\n * plugins: [catalog]\n * - target: https://internal.example.com/secure/api/{{pluginId}}\n * plugins: [auth, permissions]\n * - target:\n * internal: https://internal.example.com/search\n * external: https://example.com/search\n * plugins: [search]\n * ```\n *\n * If a plugin is not declared in the config, the discovery will fall back to using the baseUrl with\n * the provided `pathPattern` appended. The default path pattern is `\"/api/{{ pluginId }}\"`.\n */\n static fromConfig(config, options) {\n const path = options?.pathPattern ?? \"/api/{{ pluginId }}\";\n const baseUrl = config.getString(\"backend.baseUrl\");\n const endpoints = config.getOptionalConfigArray(\"discovery.endpoints\")?.flatMap((e) => {\n const target = typeof e.get(\"target\") === \"object\" ? e.getOptionalString(\"target.external\") : e.getString(\"target\");\n if (!target) {\n return [];\n }\n const discovery = UrlPatternDiscovery.compile(target);\n return e.getStringArray(\"plugins\").map((pluginId) => [pluginId, discovery]);\n });\n return new FrontendHostDiscovery(\n new Map(endpoints),\n UrlPatternDiscovery.compile(`${baseUrl}${path}`)\n );\n }\n async getBaseUrl(pluginId) {\n const endpoint = this.endpoints.get(pluginId);\n if (endpoint) {\n return endpoint.getBaseUrl(pluginId);\n }\n return this.defaultEndpoint.getBaseUrl(pluginId);\n }\n}\n\nexport { FrontendHostDiscovery };\n//# sourceMappingURL=FrontendHostDiscovery.esm.js.map\n","class ErrorAlerter {\n constructor(alertApi, errorApi) {\n this.alertApi = alertApi;\n this.errorApi = errorApi;\n }\n post(error, context) {\n if (!context?.hidden) {\n this.alertApi.post({ message: error.message, severity: \"error\" });\n }\n return this.errorApi.post(error, context);\n }\n error$() {\n return this.errorApi.error$();\n }\n}\n\nexport { ErrorAlerter };\n//# sourceMappingURL=ErrorAlerter.esm.js.map\n","import { PublishSubject } from '../../../lib/subjects.esm.js';\n\nclass ErrorApiForwarder {\n subject = new PublishSubject();\n post(error, context) {\n this.subject.next({ error, context });\n }\n error$() {\n return this.subject;\n }\n}\n\nexport { ErrorApiForwarder };\n//# sourceMappingURL=ErrorApiForwarder.esm.js.map\n","class UnhandledErrorForwarder {\n /**\n * Add event listener, such that unhandled errors can be forwarded using an given `ErrorApi` instance\n */\n static forward(errorApi, errorContext) {\n window.addEventListener(\n \"unhandledrejection\",\n (e) => {\n errorApi.post(e.reason, errorContext);\n }\n );\n }\n}\n\nexport { UnhandledErrorForwarder };\n//# sourceMappingURL=UnhandledErrorForwarder.esm.js.map\n","import { FeatureFlagState } from '@backstage/core-plugin-api';\n\nfunction validateFlagName(name) {\n if (name.length < 3) {\n throw new Error(\n `The '${name}' feature flag must have a minimum length of three characters.`\n );\n }\n if (name.length > 150) {\n throw new Error(\n `The '${name}' feature flag must not exceed 150 characters.`\n );\n }\n if (!name.match(/^[a-z]+[a-z0-9-]+$/)) {\n throw new Error(\n `The '${name}' feature flag must start with a lowercase letter and only contain lowercase letters, numbers and hyphens. Examples: feature-flag-one, alpha, release-2020`\n );\n }\n}\nclass LocalStorageFeatureFlags {\n registeredFeatureFlags = [];\n flags;\n registerFlag(flag) {\n validateFlagName(flag.name);\n this.registeredFeatureFlags.push(flag);\n }\n getRegisteredFlags() {\n return this.registeredFeatureFlags.slice();\n }\n isActive(name) {\n if (!this.flags) {\n this.flags = this.load();\n }\n return this.flags.get(name) === FeatureFlagState.Active;\n }\n save(options) {\n if (!this.flags) {\n this.flags = this.load();\n }\n if (!options.merge) {\n this.flags.clear();\n }\n for (const [name, state] of Object.entries(options.states)) {\n this.flags.set(name, state);\n }\n const enabled = Array.from(this.flags.entries()).filter(\n ([, state]) => state === FeatureFlagState.Active\n );\n window.localStorage.setItem(\n \"featureFlags\",\n JSON.stringify(Object.fromEntries(enabled))\n );\n }\n load() {\n try {\n const jsonStr = window.localStorage.getItem(\"featureFlags\");\n if (!jsonStr) {\n return /* @__PURE__ */ new Map();\n }\n const json = JSON.parse(jsonStr);\n if (typeof json !== \"object\" || json === null || Array.isArray(json)) {\n return /* @__PURE__ */ new Map();\n }\n const entries = Object.entries(json).filter(([name, value]) => {\n validateFlagName(name);\n return value === FeatureFlagState.Active;\n });\n return new Map(entries);\n } catch {\n return /* @__PURE__ */ new Map();\n }\n }\n}\n\nexport { LocalStorageFeatureFlags, validateFlagName };\n//# sourceMappingURL=LocalStorageFeatureFlags.esm.js.map\n","function createFetchApi(options) {\n let result = options.baseImplementation || global.fetch;\n const middleware = [options.middleware ?? []].flat().reverse();\n for (const m of middleware) {\n result = m.apply(result);\n }\n return {\n fetch: result\n };\n}\n\nexport { createFetchApi };\n//# sourceMappingURL=createFetchApi.esm.js.map\n","class IdentityAuthInjectorFetchMiddleware {\n constructor(identityApi, allowUrl, headerName, headerValue) {\n this.identityApi = identityApi;\n this.allowUrl = allowUrl;\n this.headerName = headerName;\n this.headerValue = headerValue;\n }\n static create(options) {\n const matcher = buildMatcher(options);\n const headerName = options.header?.name || \"authorization\";\n const headerValue = options.header?.value || ((token) => `Bearer ${token}`);\n return new IdentityAuthInjectorFetchMiddleware(\n options.identityApi,\n matcher,\n headerName,\n headerValue\n );\n }\n /**\n * Returns an array of plugin URL prefixes derived from the static `discovery`\n * configuration, to be used as `urlPrefixAllowlist` option of {@link create}.\n */\n static getDiscoveryUrlPrefixes(config) {\n const endpointConfigs = config.getOptionalConfigArray(\"discovery.endpoints\") || [];\n return endpointConfigs.flatMap((c) => {\n const target = typeof c.get(\"target\") === \"object\" ? c.getString(\"target.external\") : c.getString(\"target\");\n const plugins = c.getStringArray(\"plugins\");\n return plugins.map(\n (pluginId) => target.replace(/\\{\\{\\s*pluginId\\s*\\}\\}/g, pluginId)\n );\n });\n }\n apply(next) {\n return async (input, init) => {\n const request = new Request(input, init);\n const { token } = await this.identityApi.getCredentials();\n if (request.headers.get(this.headerName) || typeof token !== \"string\" || !token || !this.allowUrl(request.url)) {\n return next(input, init);\n }\n request.headers.set(this.headerName, this.headerValue(token));\n return next(request);\n };\n }\n}\nfunction buildMatcher(options) {\n if (options.allowUrl) {\n return options.allowUrl;\n } else if (options.urlPrefixAllowlist) {\n return buildPrefixMatcher(options.urlPrefixAllowlist);\n } else if (options.config) {\n return buildPrefixMatcher([\n options.config.getString(\"backend.baseUrl\"),\n ...IdentityAuthInjectorFetchMiddleware.getDiscoveryUrlPrefixes(\n options.config\n )\n ]);\n }\n return () => false;\n}\nfunction buildPrefixMatcher(prefixes) {\n const trimmedPrefixes = prefixes.map((prefix) => prefix.replace(/\\/$/, \"\"));\n return (url) => trimmedPrefixes.some(\n (prefix) => url === prefix || url.startsWith(`${prefix}/`)\n );\n}\n\nexport { IdentityAuthInjectorFetchMiddleware };\n//# sourceMappingURL=IdentityAuthInjectorFetchMiddleware.esm.js.map\n","function join(left, right) {\n if (!right || right === \"/\") {\n return left;\n }\n return `${left.replace(/\\/$/, \"\")}/${right.replace(/^\\//, \"\")}`;\n}\nclass PluginProtocolResolverFetchMiddleware {\n constructor(discoveryApi) {\n this.discoveryApi = discoveryApi;\n }\n apply(next) {\n return async (input, init) => {\n const request = new Request(input, init);\n const prefix = \"plugin://\";\n if (!request.url.startsWith(prefix)) {\n return next(input, init);\n }\n const { hostname, pathname, search, hash, username, password } = new URL(\n `http://${request.url.substring(prefix.length)}`\n );\n let base = await this.discoveryApi.getBaseUrl(hostname);\n if (username || password) {\n const baseUrl = new URL(base);\n const authority = `${username}${password ? `:${password}` : \"\"}@`;\n base = `${baseUrl.protocol}//${authority}${baseUrl.host}${baseUrl.pathname}`;\n }\n const target = `${join(base, pathname)}${search}${hash}`;\n return next(\n target,\n typeof input === \"string\" || isUrl(input) ? init : input\n );\n };\n }\n}\nfunction isUrl(a) {\n return typeof a === \"object\" && a?.constructor === URL;\n}\n\nexport { PluginProtocolResolverFetchMiddleware };\n//# sourceMappingURL=PluginProtocolResolverFetchMiddleware.esm.js.map\n","import { IdentityAuthInjectorFetchMiddleware } from './IdentityAuthInjectorFetchMiddleware.esm.js';\nimport { PluginProtocolResolverFetchMiddleware } from './PluginProtocolResolverFetchMiddleware.esm.js';\n\nclass FetchMiddlewares {\n /**\n * Handles translation from `plugin://` URLs to concrete http(s) URLs based on\n * the discovery API.\n *\n * @remarks\n *\n * If the request is for `plugin://catalog/entities?filter=x=y`, the discovery\n * API will be queried for `'catalog'`. If it returned\n * `https://backstage.example.net/api/catalog`, the resulting query would be\n * `https://backstage.example.net/api/catalog/entities?filter=x=y`.\n *\n * If the incoming URL protocol was not `plugin`, the request is just passed\n * through verbatim to the underlying implementation.\n */\n static resolvePluginProtocol(options) {\n return new PluginProtocolResolverFetchMiddleware(options.discoveryApi);\n }\n /**\n * Injects a Backstage token header when the user is signed in.\n *\n * @remarks\n *\n * Per default, an `Authorization: Bearer <token>` is generated. This can be\n * customized using the `header` option.\n *\n * The header injection only happens on allowlisted URLs. Per default, if the\n * `config` option is passed in, the `backend.baseUrl` is allowlisted, unless\n * the `urlPrefixAllowlist` or `allowUrl` options are passed in, in which case\n * they take precedence. If you pass in neither config nor an\n * allowlist/callback, the middleware will have no effect since effectively no\n * request will match the (nonexistent) rules.\n */\n static injectIdentityAuth(options) {\n return IdentityAuthInjectorFetchMiddleware.create(options);\n }\n constructor() {\n }\n}\n\nexport { FetchMiddlewares };\n//# sourceMappingURL=FetchMiddlewares.esm.js.map\n","import { BehaviorSubject } from '../../../lib/subjects.esm.js';\n\nfunction hasScopes(searched, searchFor) {\n for (const scope of searchFor) {\n if (!searched.has(scope)) {\n return false;\n }\n }\n return true;\n}\nfunction joinScopes(scopes, ...moreScopess) {\n const result = new Set(scopes);\n for (const moreScopes of moreScopess) {\n for (const scope of moreScopes) {\n result.add(scope);\n }\n }\n return result;\n}\nclass OAuthPendingRequests {\n requests = [];\n subject = new BehaviorSubject(\n this.getCurrentPending()\n );\n request(scopes) {\n return new Promise((resolve, reject) => {\n this.requests.push({ scopes, resolve, reject });\n this.subject.next(this.getCurrentPending());\n });\n }\n resolve(scopes, result) {\n this.requests = this.requests.filter((request) => {\n if (hasScopes(scopes, request.scopes)) {\n request.resolve(result);\n return false;\n }\n return true;\n });\n this.subject.next(this.getCurrentPending());\n }\n reject(error) {\n this.requests.forEach((request) => request.reject(error));\n this.requests = [];\n this.subject.next(this.getCurrentPending());\n }\n pending() {\n return this.subject;\n }\n getCurrentPending() {\n const currentScopes = this.requests.length === 0 ? void 0 : this.requests.slice(1).reduce(\n (acc, current) => joinScopes(acc, current.scopes),\n this.requests[0].scopes\n );\n return {\n scopes: currentScopes,\n resolve: (value) => {\n if (currentScopes) {\n this.resolve(currentScopes, value);\n }\n },\n reject: (reason) => {\n if (currentScopes) {\n this.reject(reason);\n }\n }\n };\n }\n}\n\nexport { OAuthPendingRequests, hasScopes, joinScopes };\n//# sourceMappingURL=OAuthPendingRequests.esm.js.map\n","import { OAuthPendingRequests } from './OAuthPendingRequests.esm.js';\nimport { PublishSubject } from '../../../lib/subjects.esm.js';\n\nclass OAuthRequestManager {\n subject = new PublishSubject();\n currentRequests = [];\n handlerCount = 0;\n createAuthRequester(options) {\n const handler = new OAuthPendingRequests();\n const index = this.handlerCount;\n this.handlerCount++;\n handler.pending().subscribe({\n next: (scopeRequest) => {\n const newRequests = this.currentRequests.slice();\n const request = this.makeAuthRequest(scopeRequest, options);\n if (!request) {\n delete newRequests[index];\n } else {\n newRequests[index] = request;\n }\n this.currentRequests = newRequests;\n this.subject.next(newRequests.filter(Boolean));\n }\n });\n return (scopes) => {\n return handler.request(scopes);\n };\n }\n // Converts the pending request and popup options into a popup request that we can forward to subscribers.\n makeAuthRequest(request, options) {\n const { scopes } = request;\n if (!scopes) {\n return void 0;\n }\n return {\n provider: options.provider,\n trigger: async () => {\n const result = await options.onAuthRequest(scopes);\n request.resolve(result);\n },\n reject: () => {\n const error = new Error(\"Login failed, rejected by user\");\n error.name = \"RejectedError\";\n request.reject(error);\n }\n };\n }\n authRequest$() {\n return this.subject;\n }\n}\n\nexport { OAuthRequestManager };\n//# sourceMappingURL=OAuthRequestManager.esm.js.map\n","import ObservableImpl from 'zen-observable';\n\nconst buckets = /* @__PURE__ */ new Map();\nclass WebStorage {\n constructor(namespace, errorApi) {\n this.namespace = namespace;\n this.errorApi = errorApi;\n }\n static hasSubscribed = false;\n static create(options) {\n return new WebStorage(options.namespace ?? \"\", options.errorApi);\n }\n static addStorageEventListener() {\n window.addEventListener(\"storage\", (event) => {\n for (const [bucketPath, webStorage] of buckets.entries()) {\n if (event.key?.startsWith(bucketPath)) {\n webStorage.handleStorageChange(event.key);\n }\n }\n });\n }\n get(key) {\n return this.snapshot(key).value;\n }\n snapshot(key) {\n let value = void 0;\n let presence = \"absent\";\n try {\n const item = localStorage.getItem(this.getKeyName(key));\n if (item) {\n value = JSON.parse(item, (_key, val) => {\n if (typeof val === \"object\" && val !== null) {\n Object.freeze(val);\n }\n return val;\n });\n presence = \"present\";\n }\n } catch (e) {\n this.errorApi.post(\n new Error(`Error when parsing JSON config from storage for: ${key}`)\n );\n }\n return { key, value, presence };\n }\n forBucket(name) {\n const bucketPath = `${this.namespace}/${name}`;\n if (!buckets.has(bucketPath)) {\n buckets.set(bucketPath, new WebStorage(bucketPath, this.errorApi));\n }\n return buckets.get(bucketPath);\n }\n async set(key, data) {\n localStorage.setItem(this.getKeyName(key), JSON.stringify(data));\n this.notifyChanges(key);\n }\n async remove(key) {\n localStorage.removeItem(this.getKeyName(key));\n this.notifyChanges(key);\n }\n observe$(key) {\n if (!WebStorage.hasSubscribed) {\n WebStorage.addStorageEventListener();\n WebStorage.hasSubscribed = true;\n }\n return this.observable.filter(({ key: messageKey }) => messageKey === key);\n }\n handleStorageChange(eventKey) {\n if (!eventKey?.startsWith(this.namespace)) {\n return;\n }\n const trimmedKey = eventKey?.slice(`${this.namespace}/`.length);\n if (!trimmedKey.includes(\"/\")) {\n this.notifyChanges(decodeURIComponent(trimmedKey));\n }\n }\n getKeyName(key) {\n return `${this.namespace}/${encodeURIComponent(key)}`;\n }\n notifyChanges(key) {\n const snapshot = this.snapshot(key);\n for (const subscription of this.subscribers) {\n subscription.next(snapshot);\n }\n }\n subscribers = /* @__PURE__ */ new Set();\n observable = new ObservableImpl((subscriber) => {\n this.subscribers.add(subscriber);\n return () => {\n this.subscribers.delete(subscriber);\n };\n });\n}\n\nexport { WebStorage, buckets };\n//# sourceMappingURL=WebStorage.esm.js.map\n","import { createContext } from 'react';\n\nconst InternalAppContext = createContext(void 0);\n\nexport { InternalAppContext };\n//# sourceMappingURL=InternalAppContext.esm.js.map\n","import { jsx } from 'react/jsx-runtime';\nimport { createRoutesFromChildren, Route } from 'react-router-dom';\n\nfunction isReactRouterBeta() {\n const [obj] = createRoutesFromChildren(/* @__PURE__ */ jsx(Route, { index: true, element: /* @__PURE__ */ jsx(\"div\", {}) }));\n return !obj.index;\n}\n\nexport { isReactRouterBeta };\n//# sourceMappingURL=isReactRouterBeta.esm.js.map\n","import { jsx } from 'react/jsx-runtime';\nimport { useEffect } from 'react';\nimport { useLocation, matchRoutes } from 'react-router-dom';\nimport { AnalyticsContext, useAnalytics } from '@backstage/core-plugin-api';\n\nconst getExtensionContext = (pathname, routes) => {\n try {\n const matches = matchRoutes(routes, { pathname });\n const routeMatch = matches?.filter((match) => match?.route.routeRefs?.size > 0).pop();\n const routeObject = routeMatch?.route;\n if (!routeObject) {\n return void 0;\n }\n if (routeObject.path === \"\" && pathname !== \"/\") {\n return void 0;\n }\n let routeRef;\n if (routeObject.routeRefs.size === 1) {\n routeRef = routeObject.routeRefs.values().next().value;\n }\n let plugin;\n if (routeObject.plugins.size === 1) {\n plugin = routeObject.plugins.values().next().value;\n }\n const params = Object.entries(\n routeMatch?.params || {}\n ).reduce((acc, [key, value]) => {\n if (value !== void 0 && key !== \"*\") {\n acc[key] = value;\n }\n return acc;\n }, {});\n return {\n extension: \"App\",\n pluginId: plugin?.getId() || \"root\",\n ...routeRef ? { routeRef: routeRef.id } : {},\n _routeNodeType: routeObject.element,\n params\n };\n } catch {\n return void 0;\n }\n};\nconst TrackNavigation = ({\n pathname,\n search,\n hash,\n attributes\n}) => {\n const analytics = useAnalytics();\n useEffect(() => {\n analytics.captureEvent(\"navigate\", `${pathname}${search}${hash}`, {\n attributes\n });\n }, [analytics, pathname, search, hash, attributes]);\n return null;\n};\nconst RouteTracker = ({\n routeObjects\n}) => {\n const { pathname, search, hash } = useLocation();\n const { params, ...attributes } = getExtensionContext(\n pathname,\n routeObjects\n ) || { params: {} };\n return /* @__PURE__ */ jsx(AnalyticsContext, { attributes, children: /* @__PURE__ */ jsx(\n TrackNavigation,\n {\n pathname,\n search,\n hash,\n attributes: params\n }\n ) });\n};\n\nexport { RouteTracker };\n//# sourceMappingURL=RouteTracker.esm.js.map\n","import { jsxs, jsx, Fragment } from 'react/jsx-runtime';\nimport { useContext, useState } from 'react';\nimport { attachComponentData, useApp, useApi, configApiRef } from '@backstage/core-plugin-api';\nimport { InternalAppContext } from './InternalAppContext.esm.js';\nimport { isReactRouterBeta } from './isReactRouterBeta.esm.js';\nimport { RouteTracker } from '../routing/RouteTracker.esm.js';\nimport { Routes, Route } from 'react-router-dom';\n\nfunction getBasePath(configApi) {\n if (!isReactRouterBeta()) {\n return \"\";\n }\n return readBasePath(configApi);\n}\nfunction readBasePath(configApi) {\n let { pathname } = new URL(\n configApi.getOptionalString(\"app.baseUrl\") ?? \"/\",\n \"http://sample.dev\"\n // baseUrl can be specified as just a path\n );\n pathname = pathname.replace(/\\/*$/, \"\");\n return pathname;\n}\nfunction SignInPageWrapper({\n component: Component,\n appIdentityProxy,\n children\n}) {\n const [identityApi, setIdentityApi] = useState();\n const configApi = useApi(configApiRef);\n const basePath = readBasePath(configApi);\n if (!identityApi) {\n return /* @__PURE__ */ jsx(Component, { onSignInSuccess: setIdentityApi });\n }\n appIdentityProxy.setTarget(identityApi, {\n signOutTargetUrl: basePath || \"/\"\n });\n return /* @__PURE__ */ jsx(Fragment, { children });\n}\nfunction AppRouter(props) {\n const { Router: RouterComponent, SignInPage: SignInPageComponent } = useApp().getComponents();\n const configApi = useApi(configApiRef);\n const basePath = readBasePath(configApi);\n const mountPath = `${basePath}/*`;\n const internalAppContext = useContext(InternalAppContext);\n if (!internalAppContext) {\n throw new Error(\"AppRouter must be rendered within the AppProvider\");\n }\n const { routeObjects, appIdentityProxy } = internalAppContext;\n if (!SignInPageComponent) {\n appIdentityProxy.setTarget(\n {\n getUserId: () => \"guest\",\n getIdToken: async () => void 0,\n getProfile: () => ({\n email: \"guest@example.com\",\n displayName: \"Guest\"\n }),\n getProfileInfo: async () => ({\n email: \"guest@example.com\",\n displayName: \"Guest\"\n }),\n getBackstageIdentity: async () => ({\n type: \"user\",\n userEntityRef: \"user:default/guest\",\n ownershipEntityRefs: [\"user:default/guest\"]\n }),\n getCredentials: async () => ({}),\n signOut: async () => {\n }\n },\n { signOutTargetUrl: basePath || \"/\" }\n );\n if (isReactRouterBeta()) {\n return /* @__PURE__ */ jsxs(RouterComponent, { children: [\n /* @__PURE__ */ jsx(RouteTracker, { routeObjects }),\n /* @__PURE__ */ jsx(Routes, { children: /* @__PURE__ */ jsx(Route, { path: mountPath, element: /* @__PURE__ */ jsx(Fragment, { children: props.children }) }) })\n ] });\n }\n return /* @__PURE__ */ jsxs(RouterComponent, { basename: basePath, children: [\n /* @__PURE__ */ jsx(RouteTracker, { routeObjects }),\n props.children\n ] });\n }\n if (isReactRouterBeta()) {\n return /* @__PURE__ */ jsxs(RouterComponent, { children: [\n /* @__PURE__ */ jsx(RouteTracker, { routeObjects }),\n /* @__PURE__ */ jsx(\n SignInPageWrapper,\n {\n component: SignInPageComponent,\n appIdentityProxy,\n children: /* @__PURE__ */ jsx(Routes, { children: /* @__PURE__ */ jsx(Route, { path: mountPath, element: /* @__PURE__ */ jsx(Fragment, { children: props.children }) }) })\n }\n )\n ] });\n }\n return /* @__PURE__ */ jsxs(RouterComponent, { basename: basePath, children: [\n /* @__PURE__ */ jsx(RouteTracker, { routeObjects }),\n /* @__PURE__ */ jsx(\n SignInPageWrapper,\n {\n component: SignInPageComponent,\n appIdentityProxy,\n children: props.children\n }\n )\n ] });\n}\nattachComponentData(AppRouter, \"core.type\", \"AppRouter\");\n\nexport { AppRouter, getBasePath };\n//# sourceMappingURL=AppRouter.esm.js.map\n","import { createApiRef } from '@backstage/core-plugin-api';\n\nconst appLanguageApiRef = createApiRef({\n id: \"core.applanguage\"\n});\n\nexport { appLanguageApiRef };\n//# sourceMappingURL=AppLanguageApi.esm.js.map\n","import { Children, isValidElement } from 'react';\n\nfunction traverseElementTree(options) {\n const collectors = {};\n for (const name in options.collectors) {\n if (options.collectors.hasOwnProperty(name)) {\n collectors[name] = options.collectors[name]();\n }\n }\n const queue = [\n {\n node: Children.toArray(options.root),\n parent: void 0,\n contexts: {}\n }\n ];\n while (queue.length !== 0) {\n const { node, parent, contexts } = queue.shift();\n Children.forEach(node, (element) => {\n if (!isValidElement(element)) {\n return;\n }\n const nextContexts = {};\n for (const name in collectors) {\n if (collectors.hasOwnProperty(name)) {\n const collector = collectors[name];\n nextContexts[name] = collector.visit(\n collector.accumulator,\n element,\n parent,\n contexts[name]\n );\n }\n }\n for (const discoverer of options.discoverers) {\n const children = discoverer(element);\n if (children) {\n queue.push({\n node: children,\n parent: element,\n contexts: nextContexts\n });\n }\n }\n });\n }\n return Object.fromEntries(\n Object.entries(collectors).map(([name, c]) => [name, c.accumulator])\n );\n}\nfunction createCollector(accumulatorFactory, visit) {\n return () => ({ accumulator: accumulatorFactory(), visit });\n}\nfunction childDiscoverer(element) {\n return element.props?.children;\n}\nfunction routeElementDiscoverer(element) {\n if (element.props?.path && element.props?.element) {\n return element.props?.element;\n }\n return void 0;\n}\n\nexport { childDiscoverer, createCollector, routeElementDiscoverer, traverseElementTree };\n//# sourceMappingURL=traversal.esm.js.map\n","import { getComponentData } from '@backstage/core-plugin-api';\nimport { createCollector } from '../extensions/traversal.esm.js';\n\nconst pluginCollector = createCollector(\n () => /* @__PURE__ */ new Set(),\n (acc, node) => {\n const plugin = getComponentData(node, \"core.plugin\");\n if (plugin) {\n acc.add(plugin);\n }\n }\n);\n\nexport { pluginCollector };\n//# sourceMappingURL=collectors.esm.js.map\n","import { jsx, Fragment } from 'react/jsx-runtime';\nimport { attachComponentData, useApi, featureFlagsApiRef } from '@backstage/core-plugin-api';\n\nconst FeatureFlagged = (props) => {\n const { children } = props;\n const featureFlagApi = useApi(featureFlagsApiRef);\n const isEnabled = \"with\" in props ? featureFlagApi.isActive(props.with) : !featureFlagApi.isActive(props.without);\n return /* @__PURE__ */ jsx(Fragment, { children: isEnabled ? children : null });\n};\nattachComponentData(FeatureFlagged, \"core.featureFlagged\", true);\n\nexport { FeatureFlagged };\n//# sourceMappingURL=FeatureFlagged.esm.js.map\n","import { getComponentData } from '@backstage/core-plugin-api';\nimport { isValidElement, Children } from 'react';\nimport { createCollector } from '../extensions/traversal.esm.js';\nimport { FeatureFlagged } from './FeatureFlagged.esm.js';\n\nconst MATCH_ALL_ROUTE = {\n caseSensitive: false,\n path: \"*\",\n element: \"match-all\",\n // These elements aren't used, so we add in a bit of debug information\n routeRefs: /* @__PURE__ */ new Set(),\n plugins: /* @__PURE__ */ new Set()\n};\nfunction stringifyNode(node) {\n const anyNode = node;\n if (anyNode?.type) {\n return anyNode.type.displayName ?? anyNode.type.name ?? String(anyNode.type);\n }\n return String(anyNode);\n}\nconst pluginSet = (plugin) => {\n const set = /* @__PURE__ */ new Set();\n if (plugin) {\n set.add(plugin);\n }\n return set;\n};\nfunction collectSubTree(node, entries = new Array()) {\n Children.forEach(node, (element) => {\n if (!isValidElement(element)) {\n return;\n }\n const routeRef = getComponentData(element, \"core.mountPoint\");\n if (routeRef) {\n const plugin = getComponentData(element, \"core.plugin\");\n entries.push({ routeRef, plugin });\n }\n collectSubTree(element.props.children, entries);\n });\n return entries;\n}\nconst routingV2Collector = createCollector(\n () => ({\n paths: /* @__PURE__ */ new Map(),\n parents: /* @__PURE__ */ new Map(),\n objects: new Array()\n }),\n (acc, node, parent, ctx) => {\n if (ctx?.isElementAncestor) {\n return ctx;\n }\n if (parent?.props.element === node) {\n return { ...ctx, isElementAncestor: true };\n }\n const pathProp = node.props?.path;\n const mountPoint = getComponentData(node, \"core.mountPoint\");\n if (mountPoint && pathProp) {\n throw new Error(\n `Path property may not be set directly on a routable extension \"${stringifyNode(\n node\n )}\"`\n );\n }\n const parentChildren = ctx?.obj?.children ?? acc.objects;\n if (pathProp !== void 0) {\n if (typeof pathProp !== \"string\") {\n throw new Error(\n `Element path must be a string at \"${stringifyNode(node)}\"`\n );\n }\n const path = pathProp.startsWith(\"/\") ? pathProp.slice(1) : pathProp;\n const elementProp = node.props.element;\n if (getComponentData(node, \"core.gatherMountPoints\")) {\n if (elementProp) {\n throw new Error(\n `Mount point gatherers may not have an element prop \"${stringifyNode(\n node\n )}\"`\n );\n }\n const newObj = {\n path,\n element: \"gathered\",\n routeRefs: /* @__PURE__ */ new Set(),\n caseSensitive: Boolean(node.props?.caseSensitive),\n children: [MATCH_ALL_ROUTE],\n plugins: /* @__PURE__ */ new Set()\n };\n parentChildren.push(newObj);\n return {\n obj: newObj,\n gatherPath: path,\n routeRef: ctx?.routeRef,\n gatherRouteRef: ctx?.routeRef\n };\n }\n if (elementProp) {\n const [extension, ...others] = collectSubTree(elementProp);\n if (others.length > 0) {\n throw new Error(\n `Route element with path \"${pathProp}\" may not contain multiple routable extensions`\n );\n }\n if (!extension) {\n return ctx;\n }\n const { routeRef, plugin } = extension;\n const newObj = {\n path,\n element: \"mounted\",\n routeRefs: /* @__PURE__ */ new Set([routeRef]),\n caseSensitive: Boolean(node.props?.caseSensitive),\n children: [MATCH_ALL_ROUTE],\n plugins: pluginSet(plugin)\n };\n parentChildren.push(newObj);\n acc.paths.set(routeRef, path);\n acc.parents.set(routeRef, ctx?.routeRef);\n return {\n obj: newObj,\n routeRef: routeRef ?? ctx?.routeRef,\n gatherPath: path,\n gatherRouteRef: ctx?.gatherRouteRef\n };\n }\n }\n if (mountPoint) {\n if (ctx?.gatherPath === void 0) {\n throw new Error(\n `Routable extension \"${stringifyNode(\n node\n )}\" with mount point \"${mountPoint}\" must be assigned a path`\n );\n }\n ctx?.obj?.routeRefs.add(mountPoint);\n const mountPointPlugin = getComponentData(\n node,\n \"core.plugin\"\n );\n if (mountPointPlugin) {\n ctx?.obj?.plugins.add(mountPointPlugin);\n }\n acc.paths.set(mountPoint, ctx.gatherPath);\n acc.parents.set(mountPoint, ctx?.gatherRouteRef);\n return {\n ...ctx,\n routeRef: mountPoint\n };\n }\n return ctx;\n }\n);\nconst routingV1Collector = createCollector(\n () => ({\n paths: /* @__PURE__ */ new Map(),\n parents: /* @__PURE__ */ new Map(),\n objects: new Array()\n }),\n (acc, node, parent, ctx) => {\n if (parent?.props.element === node) {\n return ctx;\n }\n let currentObj = ctx?.obj;\n let currentParentRouteRef = ctx?.routeRef;\n let sticky = ctx?.sticky;\n const path = node.props?.path;\n const parentChildren = currentObj?.children ?? acc.objects;\n const caseSensitive = Boolean(node.props?.caseSensitive);\n let currentCtxPath = ctx?.path;\n if (getComponentData(node, \"core.gatherMountPoints\")) {\n if (!path) {\n throw new Error(\"Mount point gatherer must have a path\");\n }\n currentCtxPath = path;\n }\n const element = node.props?.element;\n let routeRef = getComponentData(node, \"core.mountPoint\");\n if (!routeRef && isValidElement(element)) {\n routeRef = getComponentData(element, \"core.mountPoint\");\n }\n if (routeRef) {\n let routePath = path;\n if (currentCtxPath) {\n if (routePath) {\n currentCtxPath = void 0;\n } else {\n routePath = currentCtxPath;\n }\n }\n if (!routePath) {\n throw new Error(\"Mounted routable extension must have a path\");\n }\n acc.paths.set(routeRef, routePath);\n if (currentParentRouteRef && sticky) {\n acc.parents.set(routeRef, currentParentRouteRef);\n if (path) {\n currentParentRouteRef = routeRef;\n sticky = false;\n }\n } else {\n acc.parents.set(routeRef, currentParentRouteRef);\n currentParentRouteRef = routeRef;\n }\n if (path) {\n currentObj = {\n caseSensitive,\n path,\n element: \"mounted\",\n routeRefs: /* @__PURE__ */ new Set([routeRef]),\n children: [MATCH_ALL_ROUTE],\n plugins: pluginSet(\n getComponentData(\n node.props.element,\n \"core.plugin\"\n )\n )\n };\n parentChildren.push(currentObj);\n } else {\n currentObj?.routeRefs.add(routeRef);\n }\n }\n if (getComponentData(node, \"core.gatherMountPoints\")) {\n sticky = true;\n }\n const isGatherer = getComponentData(\n node,\n \"core.gatherMountPoints\"\n );\n if (isGatherer) {\n if (!path) {\n throw new Error(\"Mount point gatherer must have a path\");\n }\n if (!routeRef) {\n currentObj = {\n caseSensitive,\n path,\n element: \"gathered\",\n routeRefs: /* @__PURE__ */ new Set(),\n children: [MATCH_ALL_ROUTE],\n plugins: ctx?.obj?.plugins || /* @__PURE__ */ new Set()\n };\n parentChildren.push(currentObj);\n }\n }\n return {\n obj: currentObj,\n path: currentCtxPath,\n routeRef: currentParentRouteRef,\n sticky\n };\n }\n);\nconst featureFlagCollector = createCollector(\n () => /* @__PURE__ */ new Set(),\n (acc, node) => {\n if (node.type === FeatureFlagged) {\n const props = node.props;\n acc.add(\"with\" in props ? props.with : props.without);\n }\n }\n);\n\nexport { MATCH_ALL_ROUTE, featureFlagCollector, routingV1Collector, routingV2Collector };\n//# sourceMappingURL=collectors.esm.js.map\n","import { getOrCreateGlobalSingleton } from '@backstage/version-bridge';\n\nconst routeRefType = getOrCreateGlobalSingleton(\n \"route-ref-type\",\n () => Symbol(\"route-ref-type\")\n);\nfunction isRouteRef(routeRef) {\n return routeRef[routeRefType] === \"absolute\";\n}\nfunction isSubRouteRef(routeRef) {\n return routeRef[routeRefType] === \"sub\";\n}\nfunction isExternalRouteRef(routeRef) {\n return routeRef[routeRefType] === \"external\";\n}\n\nexport { isExternalRouteRef, isRouteRef, isSubRouteRef, routeRefType };\n//# sourceMappingURL=types.esm.js.map\n","function joinPaths(...paths) {\n const normalized = paths.join(\"/\").replace(/\\/\\/+/g, \"/\");\n if (normalized !== \"/\" && normalized.endsWith(\"/\")) {\n return normalized.slice(0, -1);\n }\n return normalized;\n}\n\nexport { joinPaths };\n//# sourceMappingURL=helpers.esm.js.map\n","import { matchRoutes, generatePath } from 'react-router-dom';\nimport { isRouteRef, isSubRouteRef, isExternalRouteRef, routeRefType } from './types.esm.js';\nimport { joinPaths } from './helpers.esm.js';\nimport mapValues from 'lodash/mapValues';\n\nfunction resolveTargetRef(anyRouteRef, routePaths, routeBindings) {\n let targetRef;\n let subRoutePath = \"\";\n if (isRouteRef(anyRouteRef)) {\n targetRef = anyRouteRef;\n } else if (isSubRouteRef(anyRouteRef)) {\n targetRef = anyRouteRef.parent;\n subRoutePath = anyRouteRef.path;\n } else if (isExternalRouteRef(anyRouteRef)) {\n const resolvedRoute = routeBindings.get(anyRouteRef);\n if (!resolvedRoute) {\n return [void 0, \"\"];\n }\n if (isRouteRef(resolvedRoute)) {\n targetRef = resolvedRoute;\n } else if (isSubRouteRef(resolvedRoute)) {\n targetRef = resolvedRoute.parent;\n subRoutePath = resolvedRoute.path;\n } else {\n throw new Error(\n `ExternalRouteRef was bound to invalid target, ${resolvedRoute}`\n );\n }\n } else if (anyRouteRef[routeRefType]) {\n throw new Error(\n `Unknown or invalid route ref type, ${anyRouteRef[routeRefType]}`\n );\n } else {\n throw new Error(`Unknown object passed to useRouteRef, got ${anyRouteRef}`);\n }\n if (!targetRef) {\n return [void 0, \"\"];\n }\n const resolvedPath = routePaths.get(targetRef);\n if (resolvedPath === void 0) {\n return [void 0, \"\"];\n }\n const targetPath = joinPaths(resolvedPath, subRoutePath);\n return [targetRef, targetPath];\n}\nfunction resolveBasePath(targetRef, sourceLocation, routePaths, routeParents, routeObjects) {\n const match = matchRoutes(routeObjects, sourceLocation) ?? [];\n const refDiffList = Array();\n let matchIndex = -1;\n for (let targetSearchRef = targetRef; targetSearchRef; targetSearchRef = routeParents.get(targetSearchRef)) {\n matchIndex = match.findIndex(\n (m) => m.route.routeRefs.has(targetSearchRef)\n );\n if (matchIndex !== -1) {\n break;\n }\n refDiffList.unshift(targetSearchRef);\n }\n if (refDiffList.length === 0) {\n matchIndex -= 1;\n }\n const parentPath = matchIndex === -1 ? \"\" : match[matchIndex].pathname;\n const diffPaths = refDiffList.slice(0, -1).map((ref) => {\n const path = routePaths.get(ref);\n if (path === void 0) {\n throw new Error(`No path for ${ref}`);\n }\n if (path.includes(\":\")) {\n throw new Error(\n `Cannot route to ${targetRef} with parent ${ref} as it has parameters`\n );\n }\n return path;\n });\n return `${joinPaths(parentPath, ...diffPaths)}/`;\n}\nclass RouteResolver {\n constructor(routePaths, routeParents, routeObjects, routeBindings, appBasePath) {\n this.routePaths = routePaths;\n this.routeParents = routeParents;\n this.routeObjects = routeObjects;\n this.routeBindings = routeBindings;\n this.appBasePath = appBasePath;\n }\n resolve(anyRouteRef, sourceLocation) {\n const [targetRef, targetPath] = resolveTargetRef(\n anyRouteRef,\n this.routePaths,\n this.routeBindings\n );\n if (!targetRef) {\n return void 0;\n }\n let relativeSourceLocation;\n if (typeof sourceLocation === \"string\") {\n relativeSourceLocation = this.trimPath(sourceLocation);\n } else if (sourceLocation.pathname) {\n relativeSourceLocation = {\n ...sourceLocation,\n pathname: this.trimPath(sourceLocation.pathname)\n };\n } else {\n relativeSourceLocation = sourceLocation;\n }\n const basePath = this.appBasePath + resolveBasePath(\n targetRef,\n relativeSourceLocation,\n this.routePaths,\n this.routeParents,\n this.routeObjects\n );\n const routeFunc = (...[params]) => {\n const encodedParams = params && mapValues(params, (value) => {\n if (typeof value === \"string\") {\n return value.replaceAll(/[&?#;\\/]/g, (c) => encodeURIComponent(c));\n }\n return value;\n });\n return joinPaths(basePath, generatePath(targetPath, encodedParams));\n };\n return routeFunc;\n }\n trimPath(targetPath) {\n if (!targetPath) {\n return targetPath;\n }\n if (targetPath.startsWith(this.appBasePath)) {\n return targetPath.slice(this.appBasePath.length);\n }\n return targetPath;\n }\n}\n\nexport { RouteResolver };\n//# sourceMappingURL=RouteResolver.esm.js.map\n","import { jsx } from 'react/jsx-runtime';\nimport { createVersionedContext, createVersionedValueMap } from '@backstage/version-bridge';\nimport { RouteResolver } from './RouteResolver.esm.js';\n\nconst RoutingContext = createVersionedContext(\n \"routing-context\"\n);\nconst RoutingProvider = ({\n routePaths,\n routeParents,\n routeObjects,\n routeBindings,\n basePath = \"\",\n children\n}) => {\n const resolver = new RouteResolver(\n routePaths,\n routeParents,\n routeObjects,\n routeBindings,\n basePath\n );\n const versionedValue = createVersionedValueMap({ 1: resolver });\n return /* @__PURE__ */ jsx(RoutingContext.Provider, { value: versionedValue, children });\n};\n\nexport { RoutingProvider };\n//# sourceMappingURL=RoutingProvider.esm.js.map\n","import { jsx } from 'react/jsx-runtime';\nimport { createVersionedContext, createVersionedValueMap } from '@backstage/version-bridge';\n\nconst AppContext = createVersionedContext(\"app-context\");\nconst AppContextProvider = ({\n appContext,\n children\n}) => {\n const versionedValue = createVersionedValueMap({ 1: appContext });\n return /* @__PURE__ */ jsx(AppContext.Provider, { value: versionedValue, children });\n};\n\nexport { AppContextProvider };\n//# sourceMappingURL=AppContext.esm.js.map\n","import { startCookieAuthRefresh } from './startCookieAuthRefresh.esm.js';\n\nfunction mkError(thing) {\n return new Error(\n `Tried to access IdentityApi ${thing} before app was loaded`\n );\n}\nfunction logDeprecation(thing) {\n console.warn(\n `WARNING: Call to ${thing} is deprecated and will break in the future`\n );\n}\nclass AppIdentityProxy {\n target;\n waitForTarget;\n resolveTarget = () => {\n };\n signOutTargetUrl = \"/\";\n #cookieAuthSignOut;\n constructor() {\n this.waitForTarget = new Promise((resolve) => {\n this.resolveTarget = resolve;\n });\n }\n // This is called by the app manager once the sign-in page provides us with an implementation\n setTarget(identityApi, targetOptions) {\n this.target = identityApi;\n this.signOutTargetUrl = targetOptions.signOutTargetUrl;\n this.resolveTarget(identityApi);\n }\n getUserId() {\n if (!this.target) {\n throw mkError(\"getUserId\");\n }\n if (!this.target.getUserId) {\n throw new Error(\"IdentityApi does not implement getUserId\");\n }\n logDeprecation(\"getUserId\");\n return this.target.getUserId();\n }\n getProfile() {\n if (!this.target) {\n throw mkError(\"getProfile\");\n }\n if (!this.target.getProfile) {\n throw new Error(\"IdentityApi does not implement getProfile\");\n }\n logDeprecation(\"getProfile\");\n return this.target.getProfile();\n }\n async getProfileInfo() {\n return this.waitForTarget.then((target) => target.getProfileInfo());\n }\n async getBackstageIdentity() {\n const identity = await this.waitForTarget.then(\n (target) => target.getBackstageIdentity()\n );\n if (!identity.userEntityRef.match(/^.*:.*\\/.*$/)) {\n console.warn(\n `WARNING: The App IdentityApi provided an invalid userEntityRef, '${identity.userEntityRef}'. It must be a full Entity Reference of the form '<kind>:<namespace>/<name>'.`\n );\n }\n return identity;\n }\n async getCredentials() {\n return this.waitForTarget.then((target) => target.getCredentials());\n }\n async getIdToken() {\n return this.waitForTarget.then((target) => {\n if (!target.getIdToken) {\n throw new Error(\"IdentityApi does not implement getIdToken\");\n }\n logDeprecation(\"getIdToken\");\n return target.getIdToken();\n });\n }\n async signOut() {\n await this.waitForTarget.then((target) => target.signOut());\n await this.#cookieAuthSignOut?.();\n window.location.href = this.signOutTargetUrl;\n }\n enableCookieAuth(ctx) {\n if (this.#cookieAuthSignOut) {\n return;\n }\n const stopRefresh = startCookieAuthRefresh(ctx);\n this.#cookieAuthSignOut = async () => {\n stopRefresh();\n const appBaseUrl = await ctx.discoveryApi.getBaseUrl(\"app\");\n try {\n await fetch(`${appBaseUrl}/.backstage/auth/v1/cookie`, {\n method: \"DELETE\",\n credentials: \"include\"\n });\n } catch {\n }\n };\n }\n}\n\nexport { AppIdentityProxy };\n//# sourceMappingURL=AppIdentityProxy.esm.js.map\n","const PLUGIN_ID = \"app\";\nconst CHANNEL_ID = `${PLUGIN_ID}-auth-cookie-expires-at`;\nconst MIN_BASE_DELAY_MS = 5 * 6e4;\nconst ERROR_BACKOFF_START = 5e3;\nconst ERROR_BACKOFF_FACTOR = 2;\nconst ERROR_BACKOFF_MAX = 5 * 6e4;\nfunction startCookieAuthRefresh({\n discoveryApi,\n fetchApi,\n errorApi\n}) {\n let stopped = false;\n let timeout;\n let firstError = true;\n let errorBackoff = ERROR_BACKOFF_START;\n const channel = \"BroadcastChannel\" in window ? new BroadcastChannel(CHANNEL_ID) : void 0;\n const getDelay = (expiresAt) => {\n const margin = (1 + 3 * Math.random()) * 6e4;\n const delay = Math.max(expiresAt - Date.now(), MIN_BASE_DELAY_MS) - margin;\n return delay;\n };\n const refresh = async () => {\n try {\n const baseUrl = await discoveryApi.getBaseUrl(PLUGIN_ID);\n const requestUrl = `${baseUrl}/.backstage/auth/v1/cookie`;\n const res = await fetchApi.fetch(requestUrl, {\n credentials: \"include\"\n });\n if (!res.ok) {\n throw new Error(\n `Request failed with status ${res.status} ${res.statusText}, see request towards ${requestUrl} for more details`\n );\n }\n const data = await res.json();\n if (!data.expiresAt) {\n throw new Error(\"No expiration date in response\");\n }\n const expiresAt = Date.parse(data.expiresAt);\n if (Number.isNaN(expiresAt)) {\n throw new Error(\"Invalid expiration date in response\");\n }\n firstError = true;\n channel?.postMessage({\n action: \"COOKIE_REFRESH_SUCCESS\",\n payload: { expiresAt: new Date(expiresAt).toISOString() }\n });\n scheduleRefresh(getDelay(expiresAt));\n } catch (error) {\n if (firstError) {\n firstError = false;\n errorBackoff = ERROR_BACKOFF_START;\n } else {\n errorBackoff = Math.min(\n ERROR_BACKOFF_MAX,\n errorBackoff * ERROR_BACKOFF_FACTOR\n );\n console.error(\"Session cookie refresh failed\", error);\n errorApi.post(\n new Error(\n `Session refresh failed, see developer console for details`\n )\n );\n }\n scheduleRefresh(errorBackoff);\n }\n };\n const onMessage = (event) => {\n const { data } = event;\n if (data === null || typeof data !== \"object\") {\n return;\n }\n if (\"action\" in data && data.action === \"COOKIE_REFRESH_SUCCESS\") {\n const expiresAt = Date.parse(data.payload.expiresAt);\n if (Number.isNaN(expiresAt)) {\n console.warn(\n \"Received invalid expiration from session refresh channel\"\n );\n return;\n }\n scheduleRefresh(getDelay(expiresAt));\n }\n };\n function scheduleRefresh(delayMs) {\n if (stopped) {\n return;\n }\n if (timeout) {\n clearTimeout(timeout);\n }\n timeout = setTimeout(refresh, delayMs);\n }\n channel?.addEventListener(\"message\", onMessage);\n refresh();\n return () => {\n stopped = true;\n if (timeout) {\n clearTimeout(timeout);\n }\n channel?.removeEventListener(\"message\", onMessage);\n channel?.close();\n };\n}\n\nexport { startCookieAuthRefresh };\n//# sourceMappingURL=startCookieAuthRefresh.esm.js.map\n","import { jsx } from 'react/jsx-runtime';\nimport { useMemo, useState, useEffect } from 'react';\nimport { useApi, appThemeApiRef } from '@backstage/core-plugin-api';\nimport useObservable from 'react-use/esm/useObservable';\n\nfunction resolveTheme(themeId, shouldPreferDark, themes) {\n if (themeId !== void 0) {\n const selectedTheme = themes.find((theme) => theme.id === themeId);\n if (selectedTheme) {\n return selectedTheme;\n }\n }\n if (shouldPreferDark) {\n const darkTheme = themes.find((theme) => theme.variant === \"dark\");\n if (darkTheme) {\n return darkTheme;\n }\n }\n const lightTheme = themes.find((theme) => theme.variant === \"light\");\n if (lightTheme) {\n return lightTheme;\n }\n return themes[0];\n}\nconst useShouldPreferDarkTheme = () => {\n const mediaQuery = useMemo(\n () => window.matchMedia(\"(prefers-color-scheme: dark)\"),\n []\n );\n const [shouldPreferDark, setPrefersDark] = useState(mediaQuery.matches);\n useEffect(() => {\n const listener = (event) => {\n setPrefersDark(event.matches);\n };\n mediaQuery.addListener(listener);\n return () => {\n mediaQuery.removeListener(listener);\n };\n }, [mediaQuery]);\n return shouldPreferDark;\n};\nfunction AppThemeProvider({ children }) {\n const appThemeApi = useApi(appThemeApiRef);\n const themeId = useObservable(\n appThemeApi.activeThemeId$(),\n appThemeApi.getActiveThemeId()\n );\n const shouldPreferDark = Boolean(window.matchMedia) ? useShouldPreferDarkTheme() : false;\n const appTheme = resolveTheme(\n themeId,\n shouldPreferDark,\n appThemeApi.getInstalledThemes()\n );\n if (!appTheme) {\n throw new Error(\"App has no themes\");\n }\n return /* @__PURE__ */ jsx(appTheme.Provider, { children });\n}\n\nexport { AppThemeProvider };\n//# sourceMappingURL=AppThemeProvider.esm.js.map\n","const defaultConfigLoader = async () => defaultConfigLoaderSync();\nfunction defaultConfigLoaderSync(runtimeConfigJson = \"__APP_INJECTED_RUNTIME_CONFIG__\") {\n const configs = new Array();\n const staticConfig = process.env.APP_CONFIG;\n if (staticConfig) {\n if (!Array.isArray(staticConfig)) {\n throw new Error(\"Static configuration has invalid format\");\n }\n configs.push(...staticConfig);\n }\n const configScripts = document.querySelectorAll(\n 'script[type=\"backstage.io/config\"]'\n );\n if (configScripts.length > 0) {\n for (const el of configScripts) {\n try {\n const content = el.textContent;\n if (!content) {\n throw new Error(\"tag is empty\");\n }\n let data;\n try {\n data = JSON.parse(content);\n } catch (error) {\n throw new Error(`failed to parse config; ${error}`);\n }\n if (!Array.isArray(data)) {\n throw new Error(\"data is not an array\");\n }\n configs.push(...data);\n } catch (error) {\n throw new Error(\n `Failed to load config from script tag, ${error.message}`\n );\n }\n }\n } else if (runtimeConfigJson !== // Avoiding this string also being replaced at runtime\n \"__app_injected_runtime_config__\".toLocaleUpperCase(\"en-US\")) {\n try {\n const data = JSON.parse(runtimeConfigJson);\n if (Array.isArray(data)) {\n configs.push(...data);\n } else {\n configs.push({ data, context: \"env\" });\n }\n } catch (error) {\n throw new Error(`Failed to load runtime configuration, ${error}`);\n }\n }\n const windowAppConfig = window.__APP_CONFIG__;\n if (windowAppConfig) {\n configs.push({\n context: \"window\",\n data: windowAppConfig\n });\n }\n return configs;\n}\n\nexport { defaultConfigLoader, defaultConfigLoaderSync };\n//# sourceMappingURL=defaultConfigLoader.esm.js.map\n","class ApiRegistryBuilder {\n apis = [];\n add(api, impl) {\n this.apis.push([api.id, impl]);\n return impl;\n }\n build() {\n return new ApiRegistry(new Map(this.apis));\n }\n}\nclass ApiRegistry {\n constructor(apis) {\n this.apis = apis;\n }\n static builder() {\n return new ApiRegistryBuilder();\n }\n /**\n * Creates a new ApiRegistry with a list of API implementations.\n *\n * @param apis - A list of pairs mapping an ApiRef to its respective implementation\n */\n static from(apis) {\n return new ApiRegistry(new Map(apis.map(([api, impl]) => [api.id, impl])));\n }\n /**\n * Creates a new ApiRegistry with a single API implementation.\n *\n * @param api - ApiRef for the API to add\n * @param impl - Implementation of the API to add\n */\n static with(api, impl) {\n return new ApiRegistry(/* @__PURE__ */ new Map([[api.id, impl]]));\n }\n /**\n * Returns a new ApiRegistry with the provided API added to the existing ones.\n *\n * @param api - ApiRef for the API to add\n * @param impl - Implementation of the API to add\n */\n with(api, impl) {\n return new ApiRegistry(new Map([...this.apis, [api.id, impl]]));\n }\n get(api) {\n return this.apis.get(api.id);\n }\n}\n\nexport { ApiRegistry };\n//# sourceMappingURL=ApiRegistry.esm.js.map\n","import { BehaviorSubject } from '../../../lib/subjects.esm.js';\nimport '@backstage/core-plugin-api';\n\nconst STORAGE_KEY = \"language\";\nconst DEFAULT_LANGUAGE = \"en\";\nclass AppLanguageSelector {\n static create(options) {\n const languages = options?.availableLanguages ?? [DEFAULT_LANGUAGE];\n if (languages.length !== new Set(languages).size) {\n throw new Error(\n `Supported languages may not contain duplicates, got '${languages.join(\n \"', '\"\n )}'`\n );\n }\n if (!languages.includes(DEFAULT_LANGUAGE)) {\n throw new Error(`Supported languages must include '${DEFAULT_LANGUAGE}'`);\n }\n const initialLanguage = options?.defaultLanguage ?? DEFAULT_LANGUAGE;\n if (!languages.includes(initialLanguage)) {\n throw new Error(\n `Initial language must be one of the supported languages, got '${initialLanguage}'`\n );\n }\n return new AppLanguageSelector(languages, initialLanguage);\n }\n static createWithStorage(options) {\n const selector = AppLanguageSelector.create(options);\n if (!window.localStorage) {\n return selector;\n }\n const storedLanguage = window.localStorage.getItem(STORAGE_KEY);\n const { languages } = selector.getAvailableLanguages();\n if (storedLanguage && languages.includes(storedLanguage)) {\n selector.setLanguage(storedLanguage);\n }\n selector.language$().subscribe(({ language }) => {\n if (language !== window.localStorage.getItem(STORAGE_KEY)) {\n window.localStorage.setItem(STORAGE_KEY, language);\n }\n });\n window.addEventListener(\"storage\", (event) => {\n if (event.key === STORAGE_KEY) {\n const language = localStorage.getItem(STORAGE_KEY) ?? void 0;\n if (language) {\n selector.setLanguage(language);\n }\n }\n });\n return selector;\n }\n #languages;\n #language;\n #subject;\n constructor(languages, initialLanguage) {\n this.#languages = languages;\n this.#language = initialLanguage;\n this.#subject = new BehaviorSubject({\n language: this.#language\n });\n }\n getAvailableLanguages() {\n return { languages: this.#languages.slice() };\n }\n setLanguage(language) {\n const lng = language ?? DEFAULT_LANGUAGE;\n if (lng === this.#language) {\n return;\n }\n if (lng && !this.#languages.includes(lng)) {\n throw new Error(\n `Failed to change language to '${lng}', available languages are '${this.#languages.join(\n \"', '\"\n )}'`\n );\n }\n this.#language = lng;\n this.#subject.next({ language: lng });\n }\n getLanguage() {\n return { language: this.#language };\n }\n language$() {\n return this.#subject;\n }\n}\n\nexport { AppLanguageSelector, DEFAULT_LANGUAGE };\n//# sourceMappingURL=AppLanguageSelector.esm.js.map\n","function toInternalTranslationRef(ref) {\n const r = ref;\n if (r.$$type !== \"@backstage/TranslationRef\") {\n throw new Error(`Invalid translation ref, bad type '${r.$$type}'`);\n }\n if (r.version !== \"v1\") {\n throw new Error(`Invalid translation ref, bad version '${r.version}'`);\n }\n return r;\n}\n\nexport { toInternalTranslationRef };\n//# sourceMappingURL=TranslationRef.esm.js.map\n","import { createInstance } from 'i18next';\nimport ObservableImpl from 'zen-observable';\nimport { toInternalTranslationResource } from '../../../core-plugin-api/src/translation/TranslationResource.esm.js';\nimport { toInternalTranslationRef } from '../../../core-plugin-api/src/translation/TranslationRef.esm.js';\nimport { DEFAULT_LANGUAGE } from '../AppLanguageApi/AppLanguageSelector.esm.js';\nimport { isValidElement, createElement, Fragment } from 'react';\n\nfunction removeNulls(messages) {\n return Object.fromEntries(\n Object.entries(messages).filter(\n (e) => e[1] !== null\n )\n );\n}\nclass ResourceLoader {\n constructor(onLoad) {\n this.onLoad = onLoad;\n }\n /** Loaded resources by loader key */\n #loaded = /* @__PURE__ */ new Set();\n /** Resource loading promises by loader key */\n #loading = /* @__PURE__ */ new Map();\n /** Loaders for each resource language */\n #loaders = /* @__PURE__ */ new Map();\n addTranslationResource(resource) {\n const internalResource = toInternalTranslationResource(resource);\n for (const entry of internalResource.resources) {\n const key = this.#getLoaderKey(entry.language, internalResource.id);\n if (!this.#loaders.has(key)) {\n this.#loaders.set(key, entry.loader);\n }\n }\n }\n #getLoaderKey(language, namespace) {\n return `${language}/${namespace}`;\n }\n needsLoading(language, namespace) {\n const key = this.#getLoaderKey(language, namespace);\n const loader = this.#loaders.get(key);\n if (!loader) {\n return false;\n }\n return !this.#loaded.has(key);\n }\n async load(language, namespace) {\n const key = this.#getLoaderKey(language, namespace);\n const loader = this.#loaders.get(key);\n if (!loader) {\n return;\n }\n if (this.#loaded.has(key)) {\n return;\n }\n const loading = this.#loading.get(key);\n if (loading) {\n await loading;\n return;\n }\n const load = loader().then(\n (result) => {\n this.onLoad({ language, namespace, messages: result.messages });\n this.#loaded.add(key);\n },\n (error) => {\n this.#loaded.add(key);\n throw error;\n }\n );\n this.#loading.set(key, load);\n await load;\n }\n}\nclass JsxInterpolator {\n #setFormatHook;\n #marker;\n #pattern;\n static fromI18n(i18n) {\n const interpolator = i18n.services.interpolator;\n const originalFormat = interpolator.format;\n let formatHook;\n interpolator.format = (value, format, lng, formatOpts) => {\n if (format) {\n return originalFormat(value, format, lng, formatOpts);\n }\n return formatHook?.(value, format, lng, formatOpts) ?? value;\n };\n return new JsxInterpolator(\n // Using a random marker to ensure it can't be misused\n Math.random().toString(36).substring(2, 8),\n (hook) => {\n formatHook = hook;\n }\n );\n }\n constructor(marker, setFormatHook) {\n this.#setFormatHook = setFormatHook;\n this.#marker = marker;\n this.#pattern = new RegExp(`\\\\$${marker}\\\\(([^)]+)\\\\)`);\n }\n wrapT(originalT) {\n return (key, options) => {\n let elementsMap = void 0;\n this.#setFormatHook((value) => {\n if (isValidElement(value)) {\n if (!elementsMap) {\n elementsMap = /* @__PURE__ */ new Map();\n }\n const elementKey = elementsMap.size.toString();\n elementsMap.set(elementKey, value);\n return `$${this.#marker}(${elementKey})`;\n }\n return value;\n });\n const result = originalT(key, options);\n if (!elementsMap) {\n return result;\n }\n const split = result.split(this.#pattern);\n return createElement(\n Fragment,\n null,\n ...split.map((part, index) => {\n if (index % 2 === 0) {\n return part;\n }\n return elementsMap?.get(part);\n }).filter(Boolean)\n );\n };\n }\n}\nclass I18nextTranslationApi {\n static create(options) {\n const { languages } = options.languageApi.getAvailableLanguages();\n const i18n = createInstance({\n fallbackLng: DEFAULT_LANGUAGE,\n supportedLngs: languages,\n interpolation: {\n escapeValue: false,\n // Used for the JsxInterpolator format hook\n alwaysFormat: true\n },\n ns: [],\n defaultNS: false,\n fallbackNS: false,\n // Disable resource loading on init, meaning i18n will be ready to use immediately\n initImmediate: false\n });\n i18n.init();\n if (!i18n.isInitialized) {\n throw new Error(\"i18next was unexpectedly not initialized\");\n }\n const interpolator = JsxInterpolator.fromI18n(i18n);\n const { language: initialLanguage } = options.languageApi.getLanguage();\n if (initialLanguage !== DEFAULT_LANGUAGE) {\n i18n.changeLanguage(initialLanguage);\n }\n const loader = new ResourceLoader((loaded) => {\n i18n.addResourceBundle(\n loaded.language,\n loaded.namespace,\n removeNulls(loaded.messages),\n false,\n // do not merge with existing translations\n true\n // overwrite translations\n );\n });\n const resources = options?.resources || [];\n for (let i = resources.length - 1; i >= 0; i--) {\n const resource = resources[i];\n if (resource.$$type === \"@backstage/TranslationResource\") {\n loader.addTranslationResource(resource);\n } else if (resource.$$type === \"@backstage/TranslationMessages\") {\n i18n.addResourceBundle(\n DEFAULT_LANGUAGE,\n resource.id,\n removeNulls(resource.messages),\n true,\n // merge with existing translations\n false\n // do not overwrite translations\n );\n }\n }\n const instance = new I18nextTranslationApi(\n i18n,\n loader,\n options.languageApi.getLanguage().language,\n interpolator\n );\n options.languageApi.language$().subscribe(({ language }) => {\n instance.#changeLanguage(language);\n });\n return instance;\n }\n #i18n;\n #loader;\n #language;\n #jsxInterpolator;\n /** Keep track of which refs we have registered default resources for */\n #registeredRefs = /* @__PURE__ */ new Set();\n /** Notify observers when language changes */\n #languageChangeListeners = /* @__PURE__ */ new Set();\n constructor(i18n, loader, language, jsxInterpolator) {\n this.#i18n = i18n;\n this.#loader = loader;\n this.#language = language;\n this.#jsxInterpolator = jsxInterpolator;\n }\n getTranslation(translationRef) {\n const internalRef = toInternalTranslationRef(translationRef);\n this.#registerDefaults(internalRef);\n return this.#createSnapshot(internalRef);\n }\n translation$(translationRef) {\n const internalRef = toInternalTranslationRef(translationRef);\n this.#registerDefaults(internalRef);\n return new ObservableImpl((subscriber) => {\n let loadTicket = {};\n const loadResource = () => {\n loadTicket = {};\n const ticket = loadTicket;\n this.#loader.load(this.#language, internalRef.id).then(\n () => {\n if (ticket === loadTicket) {\n const snapshot = this.#createSnapshot(internalRef);\n if (snapshot.ready) {\n subscriber.next(snapshot);\n }\n }\n },\n (error) => {\n if (ticket === loadTicket) {\n subscriber.error(Array.isArray(error) ? error[0] : error);\n }\n }\n );\n };\n const onChange = () => {\n const snapshot = this.#createSnapshot(internalRef);\n if (snapshot.ready) {\n subscriber.next(snapshot);\n } else {\n loadResource();\n }\n };\n if (this.#loader.needsLoading(this.#language, internalRef.id)) {\n loadResource();\n }\n this.#languageChangeListeners.add(onChange);\n return () => {\n this.#languageChangeListeners.delete(onChange);\n };\n });\n }\n #changeLanguage(language) {\n if (this.#language !== language) {\n this.#language = language;\n this.#i18n.changeLanguage(language);\n this.#languageChangeListeners.forEach((listener) => listener());\n }\n }\n #createSnapshot(internalRef) {\n if (this.#loader.needsLoading(this.#language, internalRef.id)) {\n return { ready: false };\n }\n const unwrappedT = this.#i18n.getFixedT(null, internalRef.id);\n const t = this.#jsxInterpolator.wrapT(unwrappedT);\n return {\n ready: true,\n t\n };\n }\n #registerDefaults(internalRef) {\n if (this.#registeredRefs.has(internalRef.id)) {\n return;\n }\n this.#registeredRefs.add(internalRef.id);\n const defaultMessages = internalRef.getDefaultMessages();\n this.#i18n.addResourceBundle(\n DEFAULT_LANGUAGE,\n internalRef.id,\n defaultMessages,\n true,\n // merge with existing translations\n false\n // do not overwrite translations\n );\n const defaultResource = internalRef.getDefaultResource();\n if (defaultResource) {\n this.#loader.addTranslationResource(defaultResource);\n }\n }\n}\n\nexport { I18nextTranslationApi, JsxInterpolator };\n//# sourceMappingURL=I18nextTranslationApi.esm.js.map\n","function toInternalTranslationResource(resource) {\n const r = resource;\n if (r.$$type !== \"@backstage/TranslationResource\") {\n throw new Error(`Invalid translation resource, bad type '${r.$$type}'`);\n }\n if (r.version !== \"v1\") {\n throw new Error(`Invalid translation resource, bad version '${r.version}'`);\n }\n return r;\n}\n\nexport { toInternalTranslationResource };\n//# sourceMappingURL=TranslationResource.esm.js.map\n","import { ConfigReader } from '@backstage/config';\n\nfunction createLocalBaseUrl(fullUrl) {\n const url = new URL(fullUrl);\n url.protocol = document.location.protocol;\n url.hostname = document.location.hostname;\n url.port = document.location.port;\n return url.toString().replace(/\\/$/, \"\");\n}\nfunction overrideBaseUrlConfigs(inputConfigs) {\n const urlConfigReader = ConfigReader.fromConfigs(inputConfigs);\n const appBaseUrl = urlConfigReader.getOptionalString(\"app.baseUrl\");\n const backendBaseUrl = urlConfigReader.getOptionalString(\"backend.baseUrl\");\n let configs = inputConfigs;\n let newBackendBaseUrl = void 0;\n let newAppBaseUrl = void 0;\n if (appBaseUrl && backendBaseUrl) {\n const appOrigin = new URL(appBaseUrl).origin;\n const backendOrigin = new URL(backendBaseUrl).origin;\n if (appOrigin === backendOrigin) {\n const maybeNewBackendBaseUrl = createLocalBaseUrl(backendBaseUrl);\n if (backendBaseUrl !== maybeNewBackendBaseUrl) {\n newBackendBaseUrl = maybeNewBackendBaseUrl;\n }\n }\n }\n if (appBaseUrl) {\n const maybeNewAppBaseUrl = createLocalBaseUrl(appBaseUrl);\n if (appBaseUrl !== maybeNewAppBaseUrl) {\n newAppBaseUrl = maybeNewAppBaseUrl;\n }\n }\n if (newAppBaseUrl || newBackendBaseUrl) {\n configs = configs.concat({\n data: {\n app: newAppBaseUrl && {\n baseUrl: newAppBaseUrl\n },\n backend: newBackendBaseUrl && {\n baseUrl: newBackendBaseUrl\n }\n },\n context: \"relative-resolver\"\n });\n }\n return configs;\n}\n\nexport { overrideBaseUrlConfigs };\n//# sourceMappingURL=overrideBaseUrlConfigs.esm.js.map\n","import { jsx } from 'react/jsx-runtime';\nimport { useRef, useMemo, Suspense } from 'react';\nimport useAsync from 'react-use/esm/useAsync';\nimport { ApiProvider } from '../apis/system/ApiProvider.esm.js';\nimport { ApiResolver } from '../apis/system/ApiResolver.esm.js';\nimport { ApiFactoryRegistry } from '../apis/system/ApiFactoryRegistry.esm.js';\nimport 'zen-observable';\nimport { appThemeApiRef, configApiRef, identityApiRef, featureFlagsApiRef, errorApiRef, fetchApiRef, discoveryApiRef } from '@backstage/core-plugin-api';\nimport '../apis/implementations/auth/saml/types.esm.js';\nimport { AppThemeSelector } from '../apis/implementations/AppThemeApi/AppThemeSelector.esm.js';\nimport { ConfigReader } from '@backstage/config';\nimport { LocalStorageFeatureFlags } from '../apis/implementations/FeatureFlagsApi/LocalStorageFeatureFlags.esm.js';\nimport { appLanguageApiRef, translationApiRef } from '@backstage/core-plugin-api/alpha';\nimport { traverseElementTree, childDiscoverer, routeElementDiscoverer } from '../extensions/traversal.esm.js';\nimport { pluginCollector } from '../plugins/collectors.esm.js';\nimport { routingV1Collector, routingV2Collector, featureFlagCollector } from '../routing/collectors.esm.js';\nimport { RoutingProvider } from '../routing/RoutingProvider.esm.js';\nimport { validateRouteParameters, validateRouteBindings } from '../routing/validation.esm.js';\nimport { AppContextProvider } from './AppContext.esm.js';\nimport { AppIdentityProxy } from '../apis/implementations/IdentityApi/AppIdentityProxy.esm.js';\nimport { AppThemeProvider } from './AppThemeProvider.esm.js';\nimport { defaultConfigLoader } from './defaultConfigLoader.esm.js';\nimport { ApiRegistry } from '../apis/system/ApiRegistry.esm.js';\nimport { resolveRouteBindings } from './resolveRouteBindings.esm.js';\nimport { isReactRouterBeta } from './isReactRouterBeta.esm.js';\nimport { InternalAppContext } from './InternalAppContext.esm.js';\nimport { AppRouter, getBasePath } from './AppRouter.esm.js';\nimport { AppLanguageSelector } from '../apis/implementations/AppLanguageApi/AppLanguageSelector.esm.js';\nimport { I18nextTranslationApi } from '../apis/implementations/TranslationApi/I18nextTranslationApi.esm.js';\nimport { overrideBaseUrlConfigs } from './overrideBaseUrlConfigs.esm.js';\nimport { isProtectedApp } from './isProtectedApp.esm.js';\n\nfunction useConfigLoader(configLoader, components, appThemeApi) {\n const hasConfig = Boolean(configLoader);\n const config = useAsync(configLoader || (() => Promise.resolve([])));\n let noConfigNode = void 0;\n if (hasConfig && config.loading) {\n const { Progress } = components;\n noConfigNode = /* @__PURE__ */ jsx(Progress, {});\n } else if (config.error) {\n const { BootErrorPage } = components;\n noConfigNode = /* @__PURE__ */ jsx(BootErrorPage, { step: \"load-config\", error: config.error });\n }\n const { ThemeProvider = AppThemeProvider } = components;\n if (noConfigNode) {\n return {\n node: /* @__PURE__ */ jsx(ApiProvider, { apis: ApiRegistry.with(appThemeApiRef, appThemeApi), children: /* @__PURE__ */ jsx(ThemeProvider, { children: noConfigNode }) })\n };\n }\n const configReader = ConfigReader.fromConfigs(\n config.value?.length ? overrideBaseUrlConfigs(config.value) : []\n );\n return { api: configReader };\n}\nclass AppContextImpl {\n constructor(app) {\n this.app = app;\n }\n getPlugins() {\n return this.app.getPlugins();\n }\n getSystemIcon(key) {\n return this.app.getSystemIcon(key);\n }\n getSystemIcons() {\n return this.app.getSystemIcons();\n }\n getComponents() {\n return this.app.getComponents();\n }\n}\nclass AppManager {\n apiHolder;\n configApi;\n apis;\n icons;\n plugins;\n featureFlags;\n components;\n themes;\n configLoader;\n defaultApis;\n bindRoutes;\n appLanguageApi;\n translationResources;\n appIdentityProxy = new AppIdentityProxy();\n apiFactoryRegistry;\n constructor(options) {\n this.apis = options.apis ?? [];\n this.icons = options.icons;\n this.plugins = new Set(options.plugins ?? []);\n this.featureFlags = options.featureFlags ?? [];\n this.components = options.components;\n this.themes = options.themes;\n this.configLoader = options.configLoader ?? defaultConfigLoader;\n this.defaultApis = options.defaultApis ?? [];\n this.bindRoutes = options.bindRoutes;\n this.apiFactoryRegistry = new ApiFactoryRegistry();\n this.appLanguageApi = AppLanguageSelector.createWithStorage({\n defaultLanguage: options.__experimentalTranslations?.defaultLanguage,\n availableLanguages: options.__experimentalTranslations?.availableLanguages\n });\n this.translationResources = options.__experimentalTranslations?.resources ?? [];\n }\n getPlugins() {\n return Array.from(this.plugins);\n }\n getSystemIcon(key) {\n return this.icons[key];\n }\n getSystemIcons() {\n return this.icons;\n }\n getComponents() {\n return this.components;\n }\n createRoot(element) {\n const AppProvider = this.getProvider();\n const AppRoot = () => {\n return /* @__PURE__ */ jsx(AppProvider, { children: element });\n };\n return AppRoot;\n }\n #getProviderCalled = false;\n getProvider() {\n if (this.#getProviderCalled) {\n throw new Error(\n \"app.getProvider() or app.createRoot() has already been called, and can only be called once\"\n );\n }\n this.#getProviderCalled = true;\n const appContext = new AppContextImpl(this);\n let routeBindings;\n let routeValidationError = void 0;\n const Provider = ({ children }) => {\n const needsFeatureFlagRegistrationRef = useRef(true);\n const appThemeApi = useMemo(\n () => AppThemeSelector.createWithStorage(this.themes),\n []\n );\n const { routing, featureFlags } = useMemo(() => {\n const usesReactRouterBeta = isReactRouterBeta();\n if (usesReactRouterBeta) {\n console.warn(`\nDEPRECATION WARNING: React Router Beta is deprecated and support for it will be removed in a future release.\n Please migrate to use React Router v6 stable.\n See https://backstage.io/docs/tutorials/react-router-stable-migration\n`);\n }\n const result = traverseElementTree({\n root: children,\n discoverers: [childDiscoverer, routeElementDiscoverer],\n collectors: {\n routing: usesReactRouterBeta ? routingV1Collector : routingV2Collector,\n collectedPlugins: pluginCollector,\n featureFlags: featureFlagCollector\n }\n });\n result.collectedPlugins.forEach((plugin) => this.plugins.add(plugin));\n this.verifyPlugins(this.plugins);\n this.getApiHolder();\n return result;\n }, [children]);\n const loadedConfig = useConfigLoader(\n this.configLoader,\n this.components,\n appThemeApi\n );\n const hasConfigApi = \"api\" in loadedConfig;\n if (hasConfigApi) {\n const { api } = loadedConfig;\n this.configApi = api;\n }\n if (\"node\" in loadedConfig) {\n return loadedConfig.node;\n }\n if (routeValidationError) {\n throw routeValidationError;\n } else if (!routeBindings) {\n try {\n routeBindings = resolveRouteBindings(\n this.bindRoutes,\n loadedConfig.api,\n this.plugins\n );\n validateRouteParameters(routing.paths, routing.parents);\n validateRouteBindings(routeBindings, this.plugins);\n } catch (error) {\n routeValidationError = error;\n throw error;\n }\n }\n if (hasConfigApi && needsFeatureFlagRegistrationRef.current) {\n needsFeatureFlagRegistrationRef.current = false;\n const featureFlagsApi = this.getApiHolder().get(featureFlagsApiRef);\n if (featureFlagsApi) {\n for (const flag of this.featureFlags) {\n featureFlagsApi.registerFlag({\n ...flag,\n pluginId: \"\"\n });\n }\n for (const plugin of this.plugins.values()) {\n if (\"getFeatureFlags\" in plugin) {\n for (const flag of plugin.getFeatureFlags()) {\n featureFlagsApi.registerFlag({\n name: flag.name,\n pluginId: plugin.getId()\n });\n }\n } else {\n for (const output of plugin.output()) {\n if (output.type === \"feature-flag\") {\n featureFlagsApi.registerFlag({\n name: output.name,\n pluginId: plugin.getId()\n });\n }\n }\n }\n }\n const registeredFlags = featureFlagsApi.getRegisteredFlags();\n const flagNames = new Set(registeredFlags.map((f) => f.name));\n for (const name of featureFlags) {\n if (!flagNames.has(name)) {\n featureFlagsApi.registerFlag({ name, pluginId: \"\" });\n }\n }\n }\n }\n const { ThemeProvider = AppThemeProvider, Progress } = this.components;\n const apis = this.getApiHolder();\n if (isProtectedApp()) {\n const errorApi = apis.get(errorApiRef);\n const fetchApi = apis.get(fetchApiRef);\n const discoveryApi = apis.get(discoveryApiRef);\n if (!errorApi || !fetchApi || !discoveryApi) {\n throw new Error(\n \"App is running in protected mode but missing required APIs\"\n );\n }\n this.appIdentityProxy.enableCookieAuth({\n errorApi,\n fetchApi,\n discoveryApi\n });\n }\n return /* @__PURE__ */ jsx(ApiProvider, { apis, children: /* @__PURE__ */ jsx(AppContextProvider, { appContext, children: /* @__PURE__ */ jsx(ThemeProvider, { children: /* @__PURE__ */ jsx(\n RoutingProvider,\n {\n routePaths: routing.paths,\n routeParents: routing.parents,\n routeObjects: routing.objects,\n routeBindings,\n basePath: getBasePath(loadedConfig.api),\n children: /* @__PURE__ */ jsx(\n InternalAppContext.Provider,\n {\n value: {\n routeObjects: routing.objects,\n appIdentityProxy: this.appIdentityProxy\n },\n children: /* @__PURE__ */ jsx(Suspense, { fallback: /* @__PURE__ */ jsx(Progress, {}), children })\n }\n )\n }\n ) }) }) });\n };\n return Provider;\n }\n getRouter() {\n return AppRouter;\n }\n getApiHolder() {\n if (this.apiHolder) {\n for (const plugin of this.plugins) {\n for (const factory of plugin.getApis()) {\n if (!this.apiFactoryRegistry.get(factory.api)) {\n this.apiFactoryRegistry.register(\"default\", factory);\n }\n }\n }\n ApiResolver.validateFactories(\n this.apiFactoryRegistry,\n this.apiFactoryRegistry.getAllApis()\n );\n return this.apiHolder;\n }\n this.apiFactoryRegistry.register(\"static\", {\n api: appThemeApiRef,\n deps: {},\n factory: () => AppThemeSelector.createWithStorage(this.themes)\n });\n this.apiFactoryRegistry.register(\"static\", {\n api: configApiRef,\n deps: {},\n factory: () => {\n if (!this.configApi) {\n throw new Error(\n \"Tried to access config API before config was loaded\"\n );\n }\n return this.configApi;\n }\n });\n this.apiFactoryRegistry.register(\"static\", {\n api: identityApiRef,\n deps: {},\n factory: () => this.appIdentityProxy\n });\n this.apiFactoryRegistry.register(\"static\", {\n api: appLanguageApiRef,\n deps: {},\n factory: () => this.appLanguageApi\n });\n this.apiFactoryRegistry.register(\"default\", {\n api: translationApiRef,\n deps: { languageApi: appLanguageApiRef },\n factory: ({ languageApi }) => I18nextTranslationApi.create({\n languageApi,\n resources: this.translationResources\n })\n });\n this.apiFactoryRegistry.register(\"default\", {\n api: featureFlagsApiRef,\n deps: {},\n factory: () => new LocalStorageFeatureFlags()\n });\n for (const factory of this.defaultApis) {\n this.apiFactoryRegistry.register(\"default\", factory);\n }\n for (const plugin of this.plugins) {\n for (const factory of plugin.getApis()) {\n if (!this.apiFactoryRegistry.register(\"default\", factory)) {\n throw new Error(\n `Plugin ${plugin.getId()} tried to register duplicate or forbidden API factory for ${factory.api}`\n );\n }\n }\n }\n for (const factory of this.apis) {\n if (!this.apiFactoryRegistry.register(\"app\", factory)) {\n throw new Error(\n `Duplicate or forbidden API factory for ${factory.api} in app`\n );\n }\n }\n ApiResolver.validateFactories(\n this.apiFactoryRegistry,\n this.apiFactoryRegistry.getAllApis()\n );\n this.apiHolder = new ApiResolver(this.apiFactoryRegistry);\n return this.apiHolder;\n }\n verifyPlugins(plugins) {\n const pluginIds = /* @__PURE__ */ new Set();\n for (const plugin of plugins) {\n const id = plugin.getId();\n if (pluginIds.has(id)) {\n throw new Error(`Duplicate plugin found '${id}'`);\n }\n pluginIds.add(id);\n }\n }\n}\n\nexport { AppManager };\n//# sourceMappingURL=AppManager.esm.js.map\n","function collectRouteIds(plugins) {\n const routesById = /* @__PURE__ */ new Map();\n const externalRoutesById = /* @__PURE__ */ new Map();\n for (const plugin of plugins) {\n for (const [name, ref] of Object.entries(plugin.routes ?? {})) {\n const refId = `${plugin.getId()}.${name}`;\n if (routesById.has(refId)) {\n throw new Error(`Unexpected duplicate route '${refId}'`);\n }\n routesById.set(refId, ref);\n }\n for (const [name, ref] of Object.entries(plugin.externalRoutes ?? {})) {\n const refId = `${plugin.getId()}.${name}`;\n if (externalRoutesById.has(refId)) {\n throw new Error(`Unexpected duplicate external route '${refId}'`);\n }\n externalRoutesById.set(refId, ref);\n }\n }\n return { routes: routesById, externalRoutes: externalRoutesById };\n}\nfunction resolveRouteBindings(bindRoutes, config, plugins) {\n const routesById = collectRouteIds(plugins);\n const result = /* @__PURE__ */ new Map();\n const disabledExternalRefs = /* @__PURE__ */ new Set();\n if (bindRoutes) {\n const bind = (externalRoutes, targetRoutes) => {\n for (const [key, value] of Object.entries(targetRoutes)) {\n const externalRoute = externalRoutes[key];\n if (!externalRoute) {\n throw new Error(`Key ${key} is not an existing external route`);\n }\n if (!value && !externalRoute.optional) {\n throw new Error(\n `External route ${key} is required but was ${value === false ? \"disabled\" : \"not provided\"}`\n );\n }\n if (value) {\n result.set(externalRoute, value);\n } else if (value === false) {\n disabledExternalRefs.add(externalRoute);\n }\n }\n };\n bindRoutes({ bind });\n }\n const bindings = config.getOptionalConfig(\"app.routes.bindings\")?.get();\n if (bindings) {\n for (const [externalRefId, targetRefId] of Object.entries(bindings)) {\n if (!isValidTargetRefId(targetRefId)) {\n throw new Error(\n `Invalid config at app.routes.bindings['${externalRefId}'], value must be a non-empty string or false`\n );\n }\n const externalRef = routesById.externalRoutes.get(externalRefId);\n if (!externalRef) {\n throw new Error(\n `Invalid config at app.routes.bindings, '${externalRefId}' is not a valid external route`\n );\n }\n if (result.has(externalRef) || disabledExternalRefs.has(externalRef)) {\n continue;\n }\n if (targetRefId === false) {\n disabledExternalRefs.add(externalRef);\n } else {\n const targetRef = routesById.routes.get(targetRefId);\n if (!targetRef) {\n throw new Error(\n `Invalid config at app.routes.bindings['${externalRefId}'], '${targetRefId}' is not a valid route`\n );\n }\n result.set(externalRef, targetRef);\n }\n }\n }\n for (const externalRef of routesById.externalRoutes.values()) {\n if (!result.has(externalRef) && !disabledExternalRefs.has(externalRef)) {\n const defaultRefId = \"getDefaultTarget\" in externalRef ? externalRef.getDefaultTarget() : void 0;\n if (defaultRefId) {\n const defaultRef = routesById.routes.get(defaultRefId);\n if (defaultRef) {\n result.set(externalRef, defaultRef);\n }\n }\n }\n }\n return result;\n}\nfunction isValidTargetRefId(value) {\n if (value === false) {\n return true;\n }\n if (typeof value === \"string\" && value) {\n return true;\n }\n return false;\n}\n\nexport { collectRouteIds, resolveRouteBindings };\n//# sourceMappingURL=resolveRouteBindings.esm.js.map\n","import { joinPaths } from './helpers.esm.js';\n\nfunction validateRouteParameters(routePaths, routeParents) {\n const notLeafRoutes = new Set(routeParents.values());\n notLeafRoutes.delete(void 0);\n for (const route of routeParents.keys()) {\n if (notLeafRoutes.has(route)) {\n continue;\n }\n let currentRouteRef = route;\n let fullPath = \"\";\n while (currentRouteRef) {\n const path = routePaths.get(currentRouteRef);\n if (path === void 0) {\n throw new Error(`No path for ${currentRouteRef}`);\n }\n fullPath = joinPaths(path, fullPath);\n currentRouteRef = routeParents.get(currentRouteRef);\n }\n const params = fullPath.match(/:(\\w+)/g);\n if (params) {\n for (let j = 0; j < params.length; j++) {\n for (let i = j + 1; i < params.length; i++) {\n if (params[i] === params[j]) {\n throw new Error(\n `Parameter ${params[i]} is duplicated in path ${fullPath}`\n );\n }\n }\n }\n }\n }\n}\nfunction validateRouteBindings(routeBindings, plugins) {\n for (const plugin of plugins) {\n if (!plugin.externalRoutes) {\n continue;\n }\n for (const [name, externalRouteRef] of Object.entries(\n plugin.externalRoutes\n )) {\n if (externalRouteRef.optional) {\n continue;\n }\n if (!routeBindings.has(externalRouteRef)) {\n throw new Error(\n `External route '${name}' of the '${plugin.getId()}' plugin must be bound to a target route. See https://backstage.io/link?bind-routes for details.`\n );\n }\n }\n }\n}\n\nexport { validateRouteBindings, validateRouteParameters };\n//# sourceMappingURL=validation.esm.js.map\n","function isProtectedApp() {\n const element = document.querySelector('meta[name=\"backstage-app-mode\"]');\n const appMode = element?.getAttribute(\"content\") ?? \"public\";\n return appMode === \"protected\";\n}\n\nexport { isProtectedApp };\n//# sourceMappingURL=isProtectedApp.esm.js.map\n","import { AppManager } from './AppManager.esm.js';\n\nfunction createSpecializedApp(options) {\n return new AppManager(options);\n}\n\nexport { createSpecializedApp };\n//# sourceMappingURL=createSpecializedApp.esm.js.map\n","import { jsx } from 'react/jsx-runtime';\nimport { useMemo } from 'react';\nimport { useRoutes } from 'react-router-dom';\nimport { attachComponentData, useApp, useElementFilter } from '@backstage/core-plugin-api';\nimport { isReactRouterBeta } from '../app/isReactRouterBeta.esm.js';\n\nlet warned = false;\nconst FlatRoutes = (props) => {\n const app = useApp();\n const { NotFoundErrorPage } = app.getComponents();\n const isBeta = useMemo(() => isReactRouterBeta(), []);\n const routes = useElementFilter(\n props.children,\n (elements) => elements.getElements().flatMap((child) => {\n let path = child.props.path;\n if (path === \"\") {\n return [];\n }\n path = path?.replace(/\\/\\*$/, \"\") ?? \"/\";\n let element = isBeta ? child : child.props.element;\n if (!isBeta && !element) {\n element = child;\n if (!warned && process.env.NODE_ENV !== \"test\") {\n console.warn(\n \"DEPRECATION WARNING: All elements within <FlatRoutes> must be of type <Route> with an element prop. Existing usages of <Navigate key=[path] to=[to] /> should be replaced with <Route path=[path] element={<Navigate to=[to] />} />.\"\n );\n warned = true;\n }\n }\n return [\n {\n // Each route matches any sub route, except for the explicit root path\n path,\n element,\n children: child.props.children ? [\n // These are the children of each route, which we all add in under a catch-all\n // subroute in order to make them available to `useOutlet`\n {\n path: path === \"/\" ? \"/\" : \"*\",\n // The root path must require an exact match\n element: child.props.children\n }\n ] : void 0\n }\n ];\n }).sort((a, b) => b.path.localeCompare(a.path)).map((obj) => ({ ...obj, path: obj.path === \"/\" ? \"/\" : `${obj.path}/*` }))\n );\n const withNotFound = [\n ...routes,\n {\n path: \"*\",\n element: /* @__PURE__ */ jsx(NotFoundErrorPage, {})\n }\n ];\n return useRoutes(withNotFound);\n};\nattachComponentData(FlatRoutes, \"core.type\", \"FlatRoutes\");\n\nexport { FlatRoutes };\n//# sourceMappingURL=FlatRoutes.esm.js.map\n","/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n"],"names":["module","exports","ApiAggregator","holders","constructor","this","get","apiRef","holder","api","ApiContext","createVersionedContext","ApiProvider","props","apis","children","parentHolder","useContext","atVersion","jsx","Provider","value","createVersionedValueMap","propTypes","isRequired","ApiResolver","factories","validateFactories","heap","allDeps","Set","length","shift","factory","dep","Object","values","deps","id","Error","has","add","push","Map","ref","load","loading","impl","includes","loadDeps","set","dependent","impls","key","hasOwnProperty","ScopePriority","ScopePriority2","ApiFactoryRegistry","register","scope","priority","existing","tuple","getAllApis","refs","openLoginPopup","options","Promise","resolve","reject","width","height","left","window","screen","top","origin","URL","url","popup","open","name","targetOrigin","closed","error","messageListener","event","source","data","type","authResult","message","response","done","intervalId","setInterval","errMessage","location","removeEventListener","clearInterval","addEventListener","warned","defaultJoinScopes","scopes","join","DefaultAuthConnector","discoveryApi","environment","provider","joinScopesFunc","authRequester","sessionTransform","enableExperimentalRedirectFlow","popupOptions","configApi","joinScopes","oauthRequestApi","console","warn","getOptionalBoolean","createAuthRequester","onAuthRequest","async","executeRedirect","showPopup","createSession","instantPopup","refreshSession","res","fetch","buildUrl","optional","headers","credentials","catch","ok","statusText","status","authInfo","json","removeSession","method","popupUrl","flow","size","fullscreen","payload","title","href","redirectUrl","path","query","baseUrl","getBaseUrl","queryString","buildQueryString","env","entries","map","encodeURIComponent","filter","Boolean","hasScopes","searched","searchFor","SessionScopeHelper","sessionExistsAndHasScope","session","sessionScopes","getExtendedScope","newScope","defaultScopes","PublishSubject","isClosed","terminatingError","observable","subscriber","complete","subscribers","delete","Symbol","next","forEach","subscribe","onNext","onError","onComplete","observer","BehaviorSubject","currentValue","SessionStateTracker","subject","SessionState","SignedOut","signedIn","setIsSignedIn","isSignedIn","SignedIn","sessionState$","RefreshingAuthSessionManager","connector","helper","sessionScopesFunc","sessionShouldRefreshFunc","stateTracker","refreshPromise","currentSession","sessionShouldRefresh","getSession","refreshedSession","collapsedSessionRefresh","currentScopes","newSession","DEFAULT_PROVIDER","icon","OAuth2","createAuthConnector","authConnector","scopeTransform","x","backstageIdentity","providerInfo","idToken","accessToken","normalizeScopes","expiresAt","expiresInSeconds","Date","now","token","identity","create","sessionManager","min","Infinity","Math","getTime","signIn","getAccessToken","signOut","normalizedScopes","getIdToken","getBackstageIdentity","getProfile","profile","scopeList","Array","isArray","split","transformedScopes","GithubAuth","GitlabAuth","SCOPE_PREFIX","GoogleAuth","startsWith","OKTA_OIDC_SCOPES","OKTA_SCOPE_PREFIX","OktaAuth","DirectAuthConnector","email","StaticAuthSessionManager","setSession","AuthSessionStore","manager","storageKey","schema","saveSession","loadSession","localStorage","removeItem","sessionJson","getItem","JSON","parse","_key","__type","__value","e","log","setItem","stringify","from","samlSessionSchema","z","displayName","picture","userEntityRef","ownershipEntityRefs","SamlAuth","authSessionStore","MicrosoftAuth","oauth2","static","concat","MicrosoftGraphID","microsoftGraph","resourceForScopes","audiences","resourceForScope","aud","audience","groups","match","resourceURI","replace","OIDC_SCOPES","OneLoginAuth","BitbucketAuth","BitbucketServerAuth","AtlassianAuth","VMwareCloudAuth","AlertApiForwarder","post","alert","alert$","MultipleAnalyticsApi","actualApis","fromApis","captureEvent","analyticsApi","NoOpAnalyticsApi","_event","STORAGE_KEY","AppThemeSelector","themes","createWithStorage","selector","initialThemeId","setActiveThemeId","activeThemeId$","themeId","activeThemeId","getInstalledThemes","slice","getActiveThemeId","ERROR_PREFIX","UrlPatternDiscovery","parts","compile","pattern","urlStr","hash","search","endsWith","pluginId","FrontendHostDiscovery","endpoints","defaultEndpoint","fromConfig","config","pathPattern","getString","getOptionalConfigArray","flatMap","target","getOptionalString","discovery","getStringArray","endpoint","ErrorAlerter","alertApi","errorApi","context","hidden","severity","error$","ErrorApiForwarder","UnhandledErrorForwarder","forward","errorContext","reason","validateFlagName","LocalStorageFeatureFlags","registeredFeatureFlags","flags","registerFlag","flag","getRegisteredFlags","isActive","FeatureFlagState","Active","save","merge","clear","state","states","enabled","fromEntries","jsonStr","createFetchApi","result","baseImplementation","g","middleware","flat","reverse","m","apply","IdentityAuthInjectorFetchMiddleware","identityApi","allowUrl","headerName","headerValue","matcher","urlPrefixAllowlist","buildPrefixMatcher","getDiscoveryUrlPrefixes","buildMatcher","header","c","input","init","request","Request","getCredentials","prefixes","trimmedPrefixes","prefix","some","PluginProtocolResolverFetchMiddleware","hostname","pathname","username","password","substring","base","authority","protocol","host","right","a","FetchMiddlewares","resolvePluginProtocol","injectIdentityAuth","OAuthPendingRequests","requests","getCurrentPending","pending","reduce","acc","current","moreScopess","moreScopes","OAuthRequestManager","currentRequests","handlerCount","handler","index","scopeRequest","newRequests","makeAuthRequest","trigger","authRequest$","buckets","WebStorage","namespace","addStorageEventListener","bucketPath","webStorage","handleStorageChange","snapshot","presence","item","getKeyName","val","freeze","forBucket","notifyChanges","remove","observe$","hasSubscribed","messageKey","eventKey","trimmedKey","decodeURIComponent","subscription","InternalAppContext","createContext","isReactRouterBeta","obj","createRoutesFromChildren","Route","element","TrackNavigation","attributes","analytics","useAnalytics","useEffect","RouteTracker","routeObjects","useLocation","params","routes","matches","matchRoutes","routeMatch","route","routeRefs","pop","routeObject","routeRef","plugin","plugins","extension","getId","_routeNodeType","getExtensionContext","AnalyticsContext","readBasePath","SignInPageWrapper","component","Component","appIdentityProxy","setIdentityApi","useState","basePath","useApi","configApiRef","setTarget","signOutTargetUrl","Fragment","onSignInSuccess","AppRouter","Router","RouterComponent","SignInPage","SignInPageComponent","useApp","getComponents","mountPath","internalAppContext","jsxs","Routes","basename","getUserId","getProfileInfo","attachComponentData","appLanguageApiRef","createApiRef","createCollector","accumulatorFactory","visit","accumulator","childDiscoverer","routeElementDiscoverer","pluginCollector","node","getComponentData","FeatureFlagged","featureFlagApi","featureFlagsApiRef","isEnabled","with","without","MATCH_ALL_ROUTE","caseSensitive","stringifyNode","anyNode","String","pluginSet","collectSubTree","Children","isValidElement","routingV2Collector","paths","parents","objects","parent","ctx","isElementAncestor","pathProp","mountPoint","parentChildren","elementProp","newObj","gatherPath","gatherRouteRef","others","mountPointPlugin","routingV1Collector","currentObj","currentParentRouteRef","sticky","currentCtxPath","routePath","featureFlagCollector","routeRefType","getOrCreateGlobalSingleton","isRouteRef","isSubRouteRef","joinPaths","normalized","RouteResolver","routePaths","routeParents","routeBindings","appBasePath","anyRouteRef","sourceLocation","targetRef","targetPath","subRoutePath","resolvedRoute","resolvedPath","resolveTargetRef","relativeSourceLocation","trimPath","refDiffList","matchIndex","targetSearchRef","findIndex","unshift","resolveBasePath","encodedParams","replaceAll","generatePath","RoutingContext","RoutingProvider","resolver","versionedValue","AppContext","AppContextProvider","appContext","mkError","thing","logDeprecation","AppIdentityProxy","waitForTarget","resolveTarget","targetOptions","then","enableCookieAuth","stopRefresh","fetchApi","timeout","stopped","firstError","errorBackoff","channel","BroadcastChannel","getDelay","margin","random","max","refresh","requestUrl","Number","isNaN","postMessage","action","toISOString","scheduleRefresh","onMessage","delayMs","clearTimeout","setTimeout","close","startCookieAuthRefresh","appBaseUrl","AppThemeProvider","appThemeApi","appThemeApiRef","appTheme","shouldPreferDark","selectedTheme","find","theme","darkTheme","variant","resolveTheme","useObservable","matchMedia","mediaQuery","useMemo","setPrefersDark","listener","addListener","removeListener","useShouldPreferDarkTheme","defaultConfigLoader","runtimeConfigJson","configs","staticConfig","process","APP_CONFIG","configScripts","document","querySelectorAll","el","content","textContent","toLocaleUpperCase","windowAppConfig","__APP_CONFIG__","defaultConfigLoaderSync","ApiRegistryBuilder","build","ApiRegistry","builder","DEFAULT_LANGUAGE","AppLanguageSelector","languages","availableLanguages","initialLanguage","defaultLanguage","storedLanguage","getAvailableLanguages","setLanguage","language$","language","lng","getLanguage","toInternalTranslationRef","r","$$type","version","removeNulls","messages","ResourceLoader","onLoad","addTranslationResource","resource","internalResource","toInternalTranslationResource","entry","resources","loader","needsLoading","JsxInterpolator","fromI18n","i18n","interpolator","services","originalFormat","format","formatHook","formatOpts","toString","hook","marker","setFormatHook","RegExp","wrapT","originalT","elementsMap","elementKey","createElement","part","I18nextTranslationApi","languageApi","fallbackLng","supportedLngs","interpolation","escapeValue","alwaysFormat","ns","defaultNS","fallbackNS","initImmediate","isInitialized","changeLanguage","loaded","addResourceBundle","i","instance","jsxInterpolator","getTranslation","translationRef","internalRef","translation$","loadTicket","loadResource","ticket","ready","onChange","unwrappedT","getFixedT","t","defaultMessages","getDefaultMessages","defaultResource","getDefaultResource","createLocalBaseUrl","fullUrl","port","AppContextImpl","app","getPlugins","getSystemIcon","getSystemIcons","AppManager","apiHolder","icons","featureFlags","components","configLoader","defaultApis","bindRoutes","appLanguageApi","translationResources","apiFactoryRegistry","__experimentalTranslations","createRoot","AppProvider","getProvider","routeValidationError","needsFeatureFlagRegistrationRef","useRef","routing","usesReactRouterBeta","collectors","queue","toArray","root","contexts","nextContexts","collector","discoverer","discoverers","traverseElementTree","collectedPlugins","verifyPlugins","getApiHolder","loadedConfig","hasConfig","useAsync","noConfigNode","Progress","BootErrorPage","step","ThemeProvider","fromConfigs","inputConfigs","urlConfigReader","backendBaseUrl","newBackendBaseUrl","newAppBaseUrl","maybeNewBackendBaseUrl","maybeNewAppBaseUrl","backend","overrideBaseUrlConfigs","useConfigLoader","hasConfigApi","routesById","externalRoutesById","refId","externalRoutes","collectRouteIds","disabledExternalRefs","bind","targetRoutes","externalRoute","bindings","getOptionalConfig","externalRefId","targetRefId","externalRef","defaultRefId","getDefaultTarget","defaultRef","resolveRouteBindings","notLeafRoutes","keys","currentRouteRef","fullPath","j","validateRouteParameters","externalRouteRef","validateRouteBindings","featureFlagsApi","getFeatureFlags","output","registeredFlags","flagNames","f","querySelector","getAttribute","isProtectedApp","errorApiRef","fetchApiRef","discoveryApiRef","Suspense","fallback","getRouter","getApis","identityApiRef","pluginIds","createSpecializedApp","FlatRoutes","NotFoundErrorPage","isBeta","withNotFound","useElementFilter","elements","getElements","child","sort","b","localeCompare","useRoutes","k","for","l","prototype","n","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","p","__self","__source","q","d","h","call","defaultProps","$$typeof","_owner"],"sourceRoot":""}
|