backstage icon indicating copy to clipboard operation
backstage copied to clipboard

Key for the ES256 algorithm must be one of type KeyObject or CryptoKey. Received an instance of Uint8Array

Open IlyaSavich opened this issue 9 months ago • 7 comments

📜 Description

I'm trying to log in using okta provider and get 401 error. After some debugging I found out that Key for the ES256 algorithm must be one of type KeyObject or CryptoKey. Received an instance of Uint8Array is the original error. Error appeared after upgrade backstage from 1.25.2 to 1.26.3

Am I missing some migration step ?

👍 Expected behavior

Authentication works well

👎 Actual Behavior with Screenshots

Fails on log in attempt with 401 code.

👟 Reproduction steps

Hard to provide exact steps. Just migrating from 1.25.2 to 1.26.3

📃 Provide the context for the Bug.

No response

🖥️ Your Environment

OS: Darwin 23.4.0 - darwin/arm64 node: v18.19.0 yarn: 4.1.0 cli: 0.26.4 (installed) backstage: 1.26.3

Dependencies: @backstage/app-defaults 1.5.4 @backstage/backend-app-api 0.7.0 @backstage/backend-common 0.21.7 @backstage/backend-defaults 0.2.17 @backstage/backend-dev-utils 0.1.4 @backstage/backend-openapi-utils 0.1.10 @backstage/backend-plugin-api 0.6.17 @backstage/backend-tasks 0.5.22 @backstage/backend-test-utils 0.3.7 @backstage/catalog-client 1.6.4 @backstage/catalog-model 1.4.5 @backstage/cli-common 0.1.13 @backstage/cli-node 0.2.5 @backstage/cli 0.26.4 @backstage/config-loader 1.8.0 @backstage/config 1.2.0 @backstage/core-app-api 1.12.4 @backstage/core-compat-api 0.2.4 @backstage/core-components 0.14.4 @backstage/core-plugin-api 1.9.2 @backstage/dev-utils 1.0.31 @backstage/errors 1.2.4 @backstage/eslint-plugin 0.1.7 @backstage/frontend-plugin-api 0.6.4 @backstage/integration-aws-node 0.1.12 @backstage/integration-react 1.1.26 @backstage/integration 1.10.0 @backstage/plugin-app-backend 0.3.65 @backstage/plugin-app-node 0.1.17 @backstage/plugin-auth-backend-module-atlassian-provider 0.1.9 @backstage/plugin-auth-backend-module-aws-alb-provider 0.1.9 @backstage/plugin-auth-backend-module-azure-easyauth-provider 0.1.0 @backstage/plugin-auth-backend-module-bitbucket-provider 0.1.0 @backstage/plugin-auth-backend-module-cloudflare-access-provider 0.1.0 @backstage/plugin-auth-backend-module-gcp-iap-provider 0.2.12 @backstage/plugin-auth-backend-module-github-provider 0.1.14 @backstage/plugin-auth-backend-module-gitlab-provider 0.1.14 @backstage/plugin-auth-backend-module-google-provider 0.1.14 @backstage/plugin-auth-backend-module-microsoft-provider 0.1.12 @backstage/plugin-auth-backend-module-oauth2-provider 0.1.14 @backstage/plugin-auth-backend-module-oauth2-proxy-provider 0.1.10 @backstage/plugin-auth-backend-module-oidc-provider 0.1.8 @backstage/plugin-auth-backend-module-okta-provider 0.0.10 @backstage/plugin-auth-backend 0.22.4 @backstage/plugin-auth-node 0.4.12 @backstage/plugin-catalog-backend-module-gcp 0.1.18 @backstage/plugin-catalog-backend-module-ldap 0.5.33 @backstage/plugin-catalog-backend-module-scaffolder-entity-model 0.1.15 @backstage/plugin-catalog-backend 1.21.1 @backstage/plugin-catalog-common 1.0.22 @backstage/plugin-catalog-graph 0.4.4 @backstage/plugin-catalog-node 1.11.1 @backstage/plugin-catalog-react 1.11.3 @backstage/plugin-catalog 1.19.0 @backstage/plugin-events-node 0.3.3 @backstage/plugin-gcalendar 0.3.28 @backstage/plugin-home-react 0.1.12 @backstage/plugin-home 0.7.3 @backstage/plugin-kubernetes-backend 0.17.0 @backstage/plugin-kubernetes-common 0.7.5 @backstage/plugin-kubernetes-node 0.1.11 @backstage/plugin-kubernetes-react 0.3.4 @backstage/plugin-kubernetes 0.11.9 @backstage/plugin-org 0.6.24 @backstage/plugin-permission-backend 0.5.41 @backstage/plugin-permission-common 0.7.13 @backstage/plugin-permission-node 0.7.28 @backstage/plugin-permission-react 0.4.22 @backstage/plugin-proxy-backend 0.4.15 @backstage/plugin-scaffolder-backend-module-azure 0.1.9 @backstage/plugin-scaffolder-backend-module-bitbucket-cloud 0.1.7 @backstage/plugin-scaffolder-backend-module-bitbucket-server 0.1.7 @backstage/plugin-scaffolder-backend-module-bitbucket 0.2.7 @backstage/plugin-scaffolder-backend-module-gerrit 0.1.9 @backstage/plugin-scaffolder-backend-module-gitea 0.1.7 @backstage/plugin-scaffolder-backend-module-github 0.2.7 @backstage/plugin-scaffolder-backend-module-gitlab 0.3.3 @backstage/plugin-scaffolder-backend 1.22.4 @backstage/plugin-scaffolder-common 1.5.1 @backstage/plugin-scaffolder-node 0.4.3 @backstage/plugin-scaffolder-react 1.8.4 @backstage/plugin-scaffolder 1.19.3 @backstage/plugin-search-backend-module-catalog 0.1.22 @backstage/plugin-search-backend-node 1.2.21 @backstage/plugin-search-backend 1.5.7 @backstage/plugin-search-common 1.2.11 @backstage/plugin-search-react 1.7.10 @backstage/plugin-search 1.4.10 @backstage/plugin-tech-insights-backend 0.5.32 @backstage/plugin-tech-insights-common 0.2.13 @backstage/plugin-tech-insights-node 0.6.1 @backstage/plugin-tech-insights 0.3.27 @backstage/plugin-user-settings-backend 0.2.16 @backstage/plugin-user-settings 0.8.5 @backstage/release-manifests 0.0.11 @backstage/repo-tools 0.8.0 @backstage/test-utils 1.5.4 @backstage/theme 0.5.3 @backstage/types 1.1.1 @backstage/version-bridge 1.0.8

👀 Have you spent some time to check if this bug has been raised before?

  • [X] I checked and didn't find similar issue

🏢 Have you read the Code of Conduct?

Are you willing to submit PR?

None

IlyaSavich avatar Apr 29 '24 15:04 IlyaSavich

Are you deployed behind a reverse proxy like for example oauth2proxy? Could it be configured to inject authorization headers of its own? We've seen some cases like that, where an intermediary proxy was ruining the Backstage token passing, so that the backend receiving the calls could not recognize the auth it received. Reconfiguring the proxy made the problem go away in those instances

freben avatar Apr 29 '24 16:04 freben

the problem is it fails not on external call, but when tries to get catalog entity after successful auth in okta, so it fails on inter-module communication

IlyaSavich avatar Apr 30 '24 00:04 IlyaSavich

"It" is the browser here, making a request to a backend plugin (catalog), am I understanding that correctly?

freben avatar Apr 30 '24 05:04 freben

nope, auth plugin makes request to catalog plugin

IlyaSavich avatar Apr 30 '24 08:04 IlyaSavich

I see it fails on CatalogAuthResolverContext.ts when tries to get catalog entities await this.catalogApi.getEntityByRef(entityRef, { token });

IlyaSavich avatar Apr 30 '24 08:04 IlyaSavich

When you did this upgrade to the new Backstage release, did you update both the auth plugin and the catalog plugin to the newest versions?

Is your backend instance migrated to the new backend system?

Did you have a custom TokenManager in place in your backend?

freben avatar Apr 30 '24 08:04 freben

What do you mean by upgrading plugin to the newest version ? if backstage deps then yes

I migrated backend to the new backend system, but some internal plugins are still not migrated

I don't have custom TokenManager

IlyaSavich avatar Apr 30 '24 09:04 IlyaSavich

Can you run yarn why jose and paste the output here also, and what database are you using?

benjdlambert avatar May 02 '24 09:05 benjdlambert

@benjdlambert

├─ @backstage/backend-app-api@npm:0.7.0
│  └─ jose@npm:5.2.3 (via npm:^5.0.0)
│
├─ @backstage/backend-common@npm:0.21.7
│  └─ jose@npm:5.2.3 (via npm:^5.0.0)
│
├─ @backstage/backend-common@npm:0.21.7 [bd11c]
│  └─ jose@npm:5.2.3 (via npm:^5.0.0)
│
├─ @backstage/plugin-auth-backend-module-aws-alb-provider@npm:0.1.9
│  └─ jose@npm:5.2.3 (via npm:^5.0.0)
│
├─ @backstage/plugin-auth-backend-module-azure-easyauth-provider@npm:0.1.0
│  └─ jose@npm:5.2.3 (via npm:^5.0.0)
│
├─ @backstage/plugin-auth-backend-module-cloudflare-access-provider@npm:0.1.0
│  └─ jose@npm:5.2.3 (via npm:^5.0.0)
│
├─ @backstage/plugin-auth-backend-module-microsoft-provider@npm:0.1.12
│  └─ jose@npm:5.2.3 (via npm:^5.0.0)
│
├─ @backstage/plugin-auth-backend-module-oauth2-proxy-provider@npm:0.1.10
│  └─ jose@npm:5.2.3 (via npm:^5.0.0)
│
├─ @backstage/plugin-auth-backend@npm:0.22.4
│  └─ jose@npm:5.2.3 (via npm:^5.0.0)
│
├─ @backstage/plugin-auth-node@npm:0.4.12
│  └─ jose@npm:5.2.3 (via npm:^5.0.0)
│
└─ openid-client@npm:5.6.4
   └─ jose@npm:4.15.5 (via npm:^4.15.4)

I'm using Postgres

IlyaSavich avatar May 06 '24 08:05 IlyaSavich

Do you do anything special with configuring the auth.identityTokenAlgorithm in app-config.yaml?

benjdlambert avatar May 06 '24 11:05 benjdlambert

nope, nothing

IlyaSavich avatar May 06 '24 11:05 IlyaSavich

@benjdlambert do you have any idea what could be wrong ?

IlyaSavich avatar May 06 '24 16:05 IlyaSavich

btw, I needed to override okta provider, so it looks like this

authProviders.registerProvider({
          providerId: 'okta',
          factory: createOAuthProviderFactory({
            authenticator: oktaAuthenticator,
            signInResolverFactories: {
              emailLocalPartMatchingUserEntityName:
                catalogNotFoundFallbackResolverFactory(
                  commonSignInResolvers.emailLocalPartMatchingUserEntityName(),
                ),
            },
          }),
        });

IlyaSavich avatar May 06 '24 16:05 IlyaSavich

@benjdlambert I see that PluginTokenHandler during initialization sets up ES256 algorithm and no possibility to change that, not sure what was supposed, I see previously HS256 was used.

IlyaSavich avatar May 07 '24 12:05 IlyaSavich

@IlyaSavich would it be possible to dig around and see if you can get a stack trace for the "Key for the ES256 algorithm must be one of type KeyObject or CryptoKey. Received an instance of Uint8Array" error? That'd help narrow things down quite a lot because there are a couple of different places it could be happening.

The switch from HS256 to ES256 is intentional, although it could be related

Rugvip avatar May 07 '24 13:05 Rugvip

@Rugvip

TypeError: Key for the ES256 algorithm must be one of type KeyObject or CryptoKey. Received an instance of Uint8Array
    at asymmetricTypeCheck (/Users/isavich/projects/productivity/backstage/node_modules/jose/dist/node/cjs/lib/check_key_type.js:17:15)
    at checkKeyType (/Users/isavich/projects/productivity/backstage/node_modules/jose/dist/node/cjs/lib/check_key_type.js:44:9)
    at flattenedVerify (/Users/isavich/projects/productivity/backstage/node_modules/jose/dist/node/cjs/jws/flattened/verify.js:78:37)
    at compactVerify (/Users/isavich/projects/productivity/backstage/node_modules/jose/dist/node/cjs/jws/compact/verify.js:18:60)
    at Object.jwtVerify (/Users/isavich/projects/productivity/backstage/node_modules/jose/dist/node/cjs/jwt/verify.js:8:58)
    at ServerTokenManager.authenticate (/Users/isavich/projects/productivity/backstage/node_modules/@backstage/backend-common/src/tokens/ServerTokenManager.ts:190:19)
    at AuthCompat.authenticate (/Users/isavich/projects/productivity/backstage/node_modules/@backstage/backend-common/src/auth/createLegacyAuthAdapters.ts:107:30)
    at HttpAuthCompat.extractCredentialsFromRequest_fn (/Users/isavich/projects/productivity/backstage/node_modules/@backstage/backend-common/src/auth/createLegacyAuthAdapters.ts:208:23)
    at HttpAuthCompat.getCredentials_fn (/Users/isavich/projects/productivity/backstage/node_modules/@backstage/backend-common/src/auth/createLegacyAuthAdapters.ts:213:7)
    at HttpAuthCompat.credentials (/Users/isavich/projects/productivity/backstage/node_modules/@backstage/backend-common/src/auth/createLegacyAuthAdapters.ts:223:31)
    at <anonymous> (/Users/isavich/projects/productivity/backstage/node_modules/@backstage/plugin-catalog-backend/src/service/createRouter.ts:201:39)
    at handleReturn (/Users/isavich/projects/productivity/backstage/node_modules/express-promise-router/lib/express-promise-router.js:24:23)
    at /Users/isavich/projects/productivity/backstage/node_modules/express-promise-router/lib/express-promise-router.js:64:7
    at handleReturn (/Users/isavich/projects/productivity/backstage/node_modules/express-promise-router/lib/express-promise-router.js:24:23)
    at /Users/isavich/projects/productivity/backstage/node_modules/express-promise-router/lib/express-promise-router.js:64:7
    at Layer.handle [as handle_request] (/Users/isavich/projects/productivity/backstage/node_modules/express/lib/router/layer.js:95:5)

IlyaSavich avatar May 07 '24 13:05 IlyaSavich

@Rugvip @benjdlambert something wrong happens on ServerTokenManager:190, it looks like it's written the way it expects to work with symmetrical algorithms, while PluginTokenHandler is configured with default ES256 which leads to constant fail.

Not sure if I miss some configuration, but I didn't find any customizable place

IlyaSavich avatar May 07 '24 14:05 IlyaSavich

@Rugvip @benjdlambert maybe this place is something where something strange happens DefaultAuthService:140

    const targetSupportsNewAuth =
      await this.pluginTokenHandler.isTargetPluginSupported(targetPluginId);

Inside I see it checks for keys in response

const res = await fetch(
          `${await this.discovery.getBaseUrl(
            targetPluginId,
          )}/.backstage/auth/v1/jwks.json`,
        );

but it doesn't check for empty array. I guess there is the issue

IlyaSavich avatar May 07 '24 15:05 IlyaSavich

@IlyaSavich ServerTokenManager:190 is a red herring, it's actually :223 where the error happens, don't know why the sourcemaps are off :/

So yep this is clearly a token from the new auth service being validated by the old token manager. Do you happen to be using a mix of migrated backend plugins and some installed via the legacyPlugin helper? I suspect that might trigger this issue.

Rugvip avatar May 07 '24 15:05 Rugvip

@IlyaSavich about the isTargetPluginSupported, it needs to consider an empty array valid since the array will be empty if the plugin hasn't made any requests yet, because it hasn't generated any keys. It's for sure a potential solution though. Gonna have a think on how best to solve this, but I think we've figured out the issue.

Rugvip avatar May 07 '24 15:05 Rugvip

oh, yeah, I have some plugins not migrated yet and catalog is one of them. Ok, I will try to migrate it, hope it will help :)

IlyaSavich avatar May 07 '24 15:05 IlyaSavich

Suggested a fix in https://github.com/backstage/backstage/pull/24676

Rugvip avatar May 07 '24 16:05 Rugvip

Hello, I'm also running into this issue. When I launch the app with yarn dev and visit http://localhost:3000/docs/default/component/reverb-backstage I get a "Whoops" page and the backend terminal scrolls infinitely with 401 errors. Similarly the browser console is also reporting the client-side 401s.

Invalid server token; caused by TypeError: Key for the ES256 algorithm must be one of type KeyObject or CryptoKey. Received an instance of Uint8Array

This happens when I use the new backend, and has been a persistent stumbling block since at least 1.25. I am presently on 1.27 and still stumbling to use the new backend system.

OS: Sonoma 14.5 node: v20.14.0 yarn: 1.22.2 ?? cli: 0.26.6 backstage: 1.27.7

Packages at depth 0

yarn list v1.22.22
├─ @aashutoshrathi/[email protected]
├─ @adobe/[email protected]
├─ @ampproject/[email protected]
├─ @apidevtools/[email protected]
├─ @apidevtools/[email protected]
├─ @apidevtools/[email protected]
├─ @apidevtools/[email protected]
├─ @apisyouwonthate/[email protected]
├─ @apollo/[email protected]
├─ @apollo/[email protected]
├─ @apollo/[email protected]
├─ @apollo/[email protected]
├─ @apollo/[email protected]
├─ @apollo/[email protected]
├─ @apollo/[email protected]
├─ @apollo/[email protected]
├─ @apollo/[email protected]
├─ @apollo/[email protected]
├─ @apollo/[email protected]
├─ @apollo/[email protected]
├─ @apollo/[email protected]
├─ @apollo/[email protected]
├─ @apollo/[email protected]
├─ @apollo/[email protected]
├─ @apollo/[email protected]
├─ @apollo/[email protected]
├─ @ardatan/[email protected]
├─ @asyncapi/[email protected]
├─ @asyncapi/[email protected]
├─ @asyncapi/[email protected]
├─ @asyncapi/[email protected]
├─ @asyncapi/[email protected]
├─ @asyncapi/[email protected]
├─ @aws-crypto/[email protected]
├─ @aws-crypto/[email protected]
├─ @aws-crypto/[email protected]
├─ @aws-crypto/[email protected]
├─ @aws-crypto/[email protected]
├─ @aws-crypto/[email protected]
├─ @aws-crypto/[email protected]
├─ @aws-sdk/[email protected]
├─ @aws-sdk/[email protected]
├─ @aws-sdk/[email protected]
├─ @aws-sdk/[email protected]
├─ @aws-sdk/[email protected]
├─ @aws-sdk/[email protected]
├─ @aws-sdk/[email protected]
├─ @aws-sdk/[email protected]
├─ @aws-sdk/[email protected]
├─ @aws-sdk/[email protected]
├─ @aws-sdk/[email protected]
├─ @aws-sdk/[email protected]
├─ @aws-sdk/[email protected]
├─ @aws-sdk/[email protected]
├─ @aws-sdk/[email protected]
├─ @aws-sdk/[email protected]
├─ @aws-sdk/[email protected]
├─ @aws-sdk/[email protected]
├─ @aws-sdk/[email protected]
├─ @aws-sdk/[email protected]
├─ @aws-sdk/[email protected]
├─ @aws-sdk/[email protected]
├─ @aws-sdk/[email protected]
├─ @aws-sdk/[email protected]
├─ @aws-sdk/[email protected]
├─ @aws-sdk/[email protected]
├─ @aws-sdk/[email protected]
├─ @aws-sdk/[email protected]
├─ @aws-sdk/[email protected]
├─ @aws-sdk/[email protected]
├─ @aws-sdk/[email protected]
├─ @aws-sdk/[email protected]
├─ @aws-sdk/[email protected]
├─ @aws-sdk/[email protected]
├─ @aws-sdk/[email protected]
├─ @aws-sdk/[email protected]
├─ @aws-sdk/[email protected]
├─ @aws-sdk/[email protected]
├─ @aws-sdk/[email protected]
├─ @aws-sdk/[email protected]
├─ @azure/[email protected]
├─ @azure/[email protected]
├─ @azure/[email protected]
├─ @azure/[email protected]
├─ @azure/[email protected]
├─ @azure/[email protected]
├─ @azure/[email protected]
├─ @azure/[email protected]
├─ @azure/[email protected]
├─ @azure/[email protected]
├─ @azure/[email protected]
├─ @azure/[email protected]
├─ @azure/[email protected]
├─ @azure/[email protected]
├─ @azure/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.5
├─ @babel/[email protected]
├─ @babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @babel/[email protected]
├─ @backstage-community/[email protected]
├─ @backstage-community/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @backstage/[email protected]
├─ @balena/[email protected]
├─ @bcoe/[email protected]
├─ @braintree/[email protected]
├─ @changesets/[email protected]
├─ @codemirror/[email protected]
├─ @codemirror/[email protected]
├─ @codemirror/[email protected]
├─ @codemirror/[email protected]
├─ @codemirror/[email protected]
├─ @codemirror/[email protected]
├─ @codemirror/[email protected]
├─ @codemirror/[email protected]
├─ @codemirror/[email protected]
├─ @colors/[email protected]
├─ @cspotcode/[email protected]
├─ @dabh/[email protected]
├─ @datadog/[email protected]
├─ @datadog/[email protected]
├─ @datadog/[email protected]
├─ @datadog/[email protected]
├─ @datadog/[email protected]
├─ @datadog/[email protected]
├─ @datadog/[email protected]
├─ @datadog/[email protected]
├─ @datadog/[email protected]
├─ @date-io/[email protected]
├─ @date-io/[email protected]
├─ @date-io/[email protected]
├─ @davidzemon/[email protected]
├─ @emotion/[email protected]
├─ @emotion/[email protected]
├─ @emotion/[email protected]
├─ @emotion/[email protected]
├─ @emotion/[email protected]
├─ @emotion/[email protected]
├─ @emotion/[email protected]
├─ @emotion/[email protected]
├─ @emotion/[email protected]
├─ @emotion/[email protected]
├─ @emotion/[email protected]
├─ @emotion/[email protected]
├─ @emotion/[email protected]
├─ @esbuild/[email protected]
├─ @esbuild/[email protected]
├─ @esbuild/[email protected]
├─ @esbuild/[email protected]
├─ @esbuild/[email protected]
├─ @esbuild/[email protected]
├─ @esbuild/[email protected]
├─ @esbuild/[email protected]
├─ @esbuild/[email protected]
├─ @esbuild/[email protected]
├─ @esbuild/[email protected]
├─ @esbuild/[email protected]
├─ @esbuild/[email protected]
├─ @esbuild/[email protected]
├─ @esbuild/[email protected]
├─ @esbuild/[email protected]
├─ @esbuild/[email protected]
├─ @esbuild/[email protected]
├─ @esbuild/[email protected]
├─ @esbuild/[email protected]
├─ @esbuild/[email protected]
├─ @esbuild/[email protected]
├─ @esbuild/[email protected]
├─ @eslint-community/[email protected]
├─ @eslint-community/[email protected]
├─ @eslint/[email protected]
├─ @eslint/[email protected]
├─ @fast-csv/[email protected]
├─ @fast-csv/[email protected]
├─ @floating-ui/[email protected]
├─ @floating-ui/[email protected]
├─ @floating-ui/[email protected]
├─ @floating-ui/[email protected]
├─ @floating-ui/[email protected]
├─ @gitbeaker/[email protected]
├─ @gitbeaker/[email protected]
├─ @gitbeaker/[email protected]
├─ @gitbeaker/[email protected]
├─ @google-cloud/[email protected]
├─ @google-cloud/[email protected]
├─ @google-cloud/[email protected]
├─ @google-cloud/[email protected]
├─ @google-cloud/[email protected]
├─ @graphiql/[email protected]
├─ @graphiql/[email protected]
├─ @graphql-tools/[email protected]
├─ @graphql-tools/[email protected]
├─ @graphql-tools/[email protected]
├─ @graphql-tools/[email protected]
├─ @graphql-tools/[email protected]
├─ @graphql-tools/[email protected]
├─ @graphql-tools/[email protected]
├─ @graphql-tools/[email protected]
├─ @graphql-tools/[email protected]
├─ @graphql-tools/[email protected]
├─ @graphql-tools/[email protected]
├─ @graphql-tools/[email protected]
├─ @graphql-tools/[email protected]
├─ @graphql-tools/[email protected]
├─ @graphql-tools/[email protected]
├─ @graphql-typed-document-node/[email protected]
├─ @grpc/[email protected]
├─ @grpc/[email protected]
├─ @headlessui/[email protected]
├─ @hookform/[email protected]
├─ @humanwhocodes/[email protected]
├─ @humanwhocodes/[email protected]
├─ @humanwhocodes/[email protected]
├─ @hutson/[email protected]
├─ @internal/[email protected]
├─ @ioredis/[email protected]
├─ @isaacs/[email protected]
├─ @istanbuljs/[email protected]
├─ @istanbuljs/[email protected]
├─ @jest/[email protected]
├─ @jest/[email protected]
├─ @jest/[email protected]
├─ @jest/[email protected]
├─ @jest/[email protected]
├─ @jest/[email protected]
├─ @jest/[email protected]
├─ @jest/[email protected]
├─ @jest/[email protected]
├─ @jest/[email protected]
├─ @jest/[email protected]
├─ @jest/[email protected]
├─ @jest/[email protected]
├─ @jest/[email protected]
├─ @jest/[email protected]
├─ @josephg/[email protected]
├─ @jridgewell/[email protected]
├─ @jridgewell/[email protected]
├─ @jridgewell/[email protected]
├─ @jridgewell/[email protected]
├─ @jridgewell/[email protected]
├─ @jridgewell/[email protected]
├─ @jsdevtools/[email protected]
├─ @jsep-plugin/[email protected]
├─ @jsep-plugin/[email protected]
├─ @jsep-plugin/[email protected]
├─ @juggle/[email protected]
├─ @k-phoen/[email protected]
├─ @k-phoen/[email protected]
├─ @k-phoen/[email protected]
├─ @kamilkisiela/[email protected]
├─ @keyv/[email protected]
├─ @keyv/[email protected]
├─ @kubernetes/[email protected]
├─ @leichtgewicht/[email protected]
├─ @lerna/[email protected]
├─ @lerna/[email protected]
├─ @lezer/[email protected]
├─ @lezer/[email protected]
├─ @lezer/[email protected]
├─ @loomhq/[email protected]
├─ @lukeed/[email protected]
├─ @manypkg/[email protected]
├─ @manypkg/[email protected]
├─ @material-table/[email protected]
├─ @material-ui/[email protected]
├─ @material-ui/[email protected]
├─ @material-ui/[email protected]
├─ @material-ui/[email protected]
├─ @material-ui/[email protected]
├─ @material-ui/[email protected]
├─ @material-ui/[email protected]
├─ @material-ui/[email protected]
├─ @microsoft/[email protected]
├─ @microsoft/[email protected]
├─ @microsoft/[email protected]
├─ @microsoft/[email protected]
├─ @microsoft/[email protected]
├─ @motionone/[email protected]
├─ @motionone/[email protected]
├─ @motionone/[email protected]
├─ @motionone/[email protected]
├─ @motionone/[email protected]
├─ @motionone/[email protected]
├─ @msgpackr-extract/[email protected]
├─ @msgpackr-extract/[email protected]
├─ @msgpackr-extract/[email protected]
├─ @msgpackr-extract/[email protected]
├─ @msgpackr-extract/[email protected]
├─ @msgpackr-extract/[email protected]
├─ @mswjs/[email protected]
├─ @mswjs/[email protected]
├─ @mui/[email protected]
├─ @mui/[email protected]
├─ @mui/[email protected]
├─ @mui/[email protected]
├─ @mui/[email protected]
├─ @mui/[email protected]
├─ @mui/[email protected]
├─ @mui/[email protected]
├─ @n1ru4l/[email protected]
├─ @nestjs/[email protected]
├─ @nestjs/[email protected]
├─ @nestjs/[email protected]
├─ @node-saml/[email protected]
├─ @node-saml/[email protected]
├─ @nodelib/[email protected]
├─ @nodelib/[email protected]
├─ @nodelib/[email protected]
├─ @npmcli/[email protected]
├─ @npmcli/[email protected]
├─ @npmcli/[email protected]
├─ @npmcli/[email protected]
├─ @npmcli/[email protected]
├─ @npmcli/[email protected]
├─ @nrwl/[email protected]
├─ @nrwl/[email protected]
├─ @nuxtjs/[email protected]
├─ @nx/[email protected]
├─ @nx/[email protected]
├─ @nx/[email protected]
├─ @nx/[email protected]
├─ @nx/[email protected]
├─ @nx/[email protected]
├─ @nx/[email protected]
├─ @nx/[email protected]
├─ @nx/[email protected]
├─ @nx/[email protected]
├─ @nx/[email protected]
├─ @octokit/[email protected]
├─ @octokit/[email protected]
├─ @octokit/[email protected]
├─ @octokit/[email protected]
├─ @octokit/[email protected]
├─ @octokit/[email protected]
├─ @octokit/[email protected]
├─ @octokit/[email protected]
├─ @octokit/[email protected]
├─ @octokit/[email protected]
├─ @octokit/[email protected]
├─ @octokit/[email protected]
├─ @octokit/[email protected]
├─ @octokit/[email protected]
├─ @octokit/[email protected]
├─ @octokit/[email protected]
├─ @octokit/[email protected]
├─ @octokit/[email protected]
├─ @octokit/[email protected]
├─ @octokit/[email protected]
├─ @octokit/[email protected]
├─ @octokit/[email protected]
├─ @octokit/[email protected]
├─ @octokit/[email protected]
├─ @octokit/[email protected]
├─ @octokit/[email protected]
├─ @octokit/[email protected]
├─ @octokit/[email protected]
├─ @octokit/[email protected]
├─ @octokit/[email protected]
├─ @okta/[email protected]
├─ @open-draft/[email protected]
├─ @openapi-contrib/[email protected]
├─ @openapitools/[email protected]
├─ @opentelemetry/[email protected]
├─ @opentelemetry/[email protected]
├─ @opentelemetry/[email protected]
├─ @parcel/[email protected]
├─ @pkgjs/[email protected]
├─ @playwright/[email protected]
├─ @pmmmwh/[email protected]
├─ @popperjs/[email protected]
├─ @protobufjs/[email protected]
├─ @protobufjs/[email protected]
├─ @protobufjs/[email protected]
├─ @protobufjs/[email protected]
├─ @protobufjs/[email protected]
├─ @protobufjs/[email protected]
├─ @protobufjs/[email protected]
├─ @protobufjs/[email protected]
├─ @protobufjs/[email protected]
├─ @protobufjs/[email protected]
├─ @radix-ui/[email protected]
├─ @radix-ui/[email protected]
├─ @radix-ui/[email protected]
├─ @radix-ui/[email protected]
├─ @radix-ui/[email protected]
├─ @radix-ui/[email protected]
├─ @radix-ui/[email protected]
├─ @radix-ui/[email protected]
├─ @radix-ui/[email protected]
├─ @radix-ui/[email protected]
├─ @radix-ui/[email protected]
├─ @radix-ui/[email protected]
├─ @radix-ui/[email protected]
├─ @radix-ui/[email protected]
├─ @radix-ui/[email protected]
├─ @radix-ui/[email protected]
├─ @radix-ui/[email protected]
├─ @radix-ui/[email protected]
├─ @radix-ui/[email protected]
├─ @radix-ui/[email protected]
├─ @radix-ui/[email protected]
├─ @radix-ui/[email protected]
├─ @radix-ui/[email protected]
├─ @radix-ui/[email protected]
├─ @radix-ui/[email protected]
├─ @radix-ui/[email protected]
├─ @radix-ui/[email protected]
├─ @radix-ui/[email protected]
├─ @react-dnd/[email protected]
├─ @react-dnd/[email protected]
├─ @react-dnd/[email protected]
├─ @react-hookz/[email protected]
├─ @react-hookz/[email protected]
├─ @react-spring/[email protected]
├─ @react-spring/[email protected]
├─ @react-spring/[email protected]
├─ @react-spring/[email protected]
├─ @react-spring/[email protected]
├─ @remix-run/[email protected]
├─ @repeaterjs/[email protected]
├─ @rjsf/[email protected]
├─ @rjsf/[email protected]
├─ @rjsf/[email protected]
├─ @rjsf/[email protected]
├─ @roadiehq/[email protected]
├─ @roadiehq/[email protected]
├─ @rollup/[email protected]
├─ @rollup/[email protected]
├─ @rollup/[email protected]
├─ @rollup/[email protected]
├─ @rollup/[email protected]
├─ @rollup/[email protected]
├─ @rollup/[email protected]
├─ @rollup/[email protected]
├─ @rollup/[email protected]
├─ @rollup/[email protected]
├─ @rollup/[email protected]
├─ @rollup/[email protected]
├─ @rollup/[email protected]
├─ @rollup/[email protected]
├─ @rollup/[email protected]
├─ @rollup/[email protected]
├─ @rollup/[email protected]
├─ @rollup/[email protected]
├─ @rollup/[email protected]
├─ @rollup/[email protected]
├─ @rollup/[email protected]
├─ @rushstack/[email protected]
├─ @rushstack/[email protected]
├─ @rushstack/[email protected]
├─ @rushstack/[email protected]
├─ @sagold/[email protected]
├─ @sagold/[email protected]
├─ @sigstore/[email protected]
├─ @sigstore/[email protected]
├─ @sigstore/[email protected]
├─ @sigstore/[email protected]
├─ @sinclair/[email protected]
├─ @sindresorhus/[email protected]
├─ @sinonjs/[email protected]
├─ @sinonjs/[email protected]
├─ @slack/[email protected]
├─ @slack/[email protected]
├─ @slack/[email protected]
├─ @slack/[email protected]
├─ @slack/[email protected]
├─ @slack/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @smithy/[email protected]
├─ @spotify/[email protected]
├─ @spotify/[email protected]
├─ @spotify/[email protected]
├─ @spotify/[email protected]
├─ @spotify/[email protected]
├─ @spotify/[email protected]
├─ @spotify/[email protected]
├─ @spotify/[email protected]
├─ @spotify/[email protected]
├─ @spotify/[email protected]
├─ @spotify/[email protected]
├─ @spotify/[email protected]
├─ @spotify/[email protected]
├─ @spotify/[email protected]
├─ @spotify/[email protected]
├─ @spotify/[email protected]
├─ @spotify/[email protected]
├─ @spotify/[email protected]
├─ @spotify/[email protected]
├─ @spotify/[email protected]
├─ @spotify/[email protected]
├─ @spotify/[email protected]
├─ @spotify/[email protected]
├─ @spotify/[email protected]
├─ @spotify/[email protected]
├─ @spotify/[email protected]
├─ @spotify/[email protected]
├─ @stoplight/[email protected]
├─ @stoplight/[email protected]
├─ @stoplight/[email protected]
├─ @stoplight/[email protected]
├─ @stoplight/[email protected]
├─ @stoplight/[email protected]
├─ @stoplight/[email protected]
├─ @stoplight/[email protected]
├─ @stoplight/[email protected]
├─ @stoplight/[email protected]
├─ @stoplight/[email protected]
├─ @stoplight/[email protected]
├─ @stoplight/[email protected]
├─ @stoplight/[email protected]
├─ @stoplight/[email protected]
├─ @stoplight/[email protected]
├─ @stoplight/[email protected]
├─ @sucrase/[email protected]
├─ @svgr/[email protected]
├─ @svgr/[email protected]
├─ @svgr/[email protected]
├─ @svgr/[email protected]
├─ @svgr/[email protected]
├─ @svgr/[email protected]
├─ @svgr/[email protected]
├─ @svgr/[email protected]
├─ @svgr/[email protected]
├─ @svgr/[email protected]
├─ @svgr/[email protected]
├─ @svgr/[email protected]
├─ @svgr/[email protected]
├─ @svgr/[email protected]
├─ @svgr/[email protected]
├─ @swagger-api/[email protected]
├─ @swagger-api/[email protected]
├─ @swagger-api/[email protected]
├─ @swagger-api/[email protected]
├─ @swagger-api/[email protected]
├─ @swagger-api/[email protected]
├─ @swagger-api/[email protected]
├─ @swagger-api/[email protected]
├─ @swagger-api/[email protected]
├─ @swagger-api/[email protected]
├─ @swagger-api/[email protected]
├─ @swagger-api/[email protected]
├─ @swagger-api/[email protected]
├─ @swagger-api/[email protected]
├─ @swagger-api/[email protected]
├─ @swagger-api/[email protected]
├─ @swagger-api/[email protected]
├─ @swagger-api/[email protected]
├─ @swagger-api/[email protected]
├─ @swagger-api/[email protected]
├─ @swagger-api/[email protected]
├─ @swc/[email protected]
├─ @swc/[email protected]
├─ @swc/[email protected]
├─ @swc/[email protected]
├─ @swc/[email protected]
├─ @swc/[email protected]
├─ @swc/[email protected]
├─ @swc/[email protected]
├─ @swc/[email protected]
├─ @swc/[email protected]
├─ @swc/[email protected]
├─ @swc/[email protected]
├─ @swc/[email protected]
├─ @szmarczak/[email protected]
├─ @tanstack/[email protected]
├─ @tanstack/[email protected]
├─ @testing-library/[email protected]
├─ @testing-library/[email protected]
├─ @testing-library/[email protected]
├─ @testing-library/[email protected]
├─ @tokenizer/[email protected]
├─ @tootallnate/[email protected]
├─ @trendyol-js/[email protected]
├─ @trysound/[email protected]
├─ @tsconfig/[email protected]
├─ @tsconfig/[email protected]
├─ @tsconfig/[email protected]
├─ @tsconfig/[email protected]
├─ @tufjs/[email protected]
├─ @tufjs/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @types/[email protected]
├─ @typescript-eslint/[email protected]
├─ @typescript-eslint/[email protected]
├─ @typescript-eslint/[email protected]
├─ @typescript-eslint/[email protected]
├─ @typescript-eslint/[email protected]
├─ @typescript-eslint/[email protected]
├─ @typescript-eslint/[email protected]
├─ @typescript-eslint/[email protected]
├─ @uiw/[email protected]
├─ @uiw/[email protected]
├─ @uiw/[email protected]
├─ @uiw/[email protected]
├─ @uiw/[email protected]
├─ @ungap/[email protected]
├─ @useoptic/[email protected]
├─ @useoptic/[email protected]
├─ @visx/[email protected]
├─ @visx/[email protected]
├─ @visx/[email protected]
├─ @visx/[email protected]
├─ @visx/[email protected]
├─ @visx/[email protected]
├─ @visx/[email protected]
├─ @visx/[email protected]
├─ @visx/[email protected]
├─ @visx/[email protected]
├─ @visx/[email protected]
├─ @visx/[email protected]
├─ @visx/[email protected]
├─ @visx/[email protected]
├─ @visx/[email protected]
├─ @visx/[email protected]
├─ @visx/[email protected]
├─ @visx/[email protected]
├─ @visx/[email protected]
├─ @visx/[email protected]
├─ @webassemblyjs/[email protected]
├─ @webassemblyjs/[email protected]
├─ @webassemblyjs/[email protected]
├─ @webassemblyjs/[email protected]
├─ @webassemblyjs/[email protected]
├─ @webassemblyjs/[email protected]
├─ @webassemblyjs/[email protected]
├─ @webassemblyjs/[email protected]
├─ @webassemblyjs/[email protected]
├─ @webassemblyjs/[email protected]
├─ @webassemblyjs/[email protected]
├─ @webassemblyjs/[email protected]
├─ @webassemblyjs/[email protected]
├─ @webassemblyjs/[email protected]
├─ @webassemblyjs/[email protected]
├─ @whatwg-node/[email protected]
├─ @whatwg-node/[email protected]
├─ @whatwg-node/[email protected]
├─ @wry/[email protected]
├─ @wry/[email protected]
├─ @wry/[email protected]
├─ @xmldom/[email protected]
├─ @xobotyi/[email protected]
├─ @xtuc/[email protected]
├─ @xtuc/[email protected]
├─ @yarnpkg/[email protected]
├─ @yarnpkg/[email protected]
├─ @zkochan/[email protected]
├─ @zxing/[email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
├─ [email protected]
└─ [email protected]
Done in 1.18s.

carl-reverb avatar Jun 14 '24 13:06 carl-reverb

@carl-reverb I'd expect this to be related to @backstage/backend-common but it does look like your root version is alright. Could you run and show the output of yarn why @backstage/backend-common? I want to make sure there's nothing unexpected there that might be causing this before digging deeper.

Rugvip avatar Jun 14 '24 14:06 Rugvip

Certainly

`yarn why @backstage/backend-common`
yarn why v1.22.22
[1/4] Why do we have the module "@backstage/backend-common"...?
[2/4] Initialising dependency graph...
[3/4] Finding dependency...
[4/4] Calculating file sizes...
info 
=> Found "@backstage/[email protected]"
info Has been hoisted to "@backstage/backend-common"
info Reasons this module exists
   - "workspace-aggregator-b79c3f5d-9e6b-4e62-8005-3175be100254" depends on it
   - Hoisted from "_project_#@backstage#backend-app-api#@backstage#backend-common"
   - Hoisted from "_project_#backend#@backstage#backend-common"
   - Hoisted from "_project_#@internal#backstage-plugin-healthcheck-backend#@backstage#backend-common"
   - Hoisted from "_project_#backend#@backstage#backend-defaults#@backstage#backend-common"
   - Hoisted from "_project_#@backstage#backend-app-api#@backstage#backend-tasks#@backstage#backend-common"
   - Hoisted from "_project_#backend#@backstage#plugin-auth-backend-module-guest-provider#@backstage#backend-common"
   - Hoisted from "_project_#backend#@backstage#plugin-auth-backend#@backstage#backend-common"
   - Hoisted from "_project_#@backstage#backend-app-api#@backstage#plugin-auth-node#@backstage#backend-common"
   - Hoisted from "_project_#backend#@backstage#plugin-catalog-backend-module-github#@backstage#backend-common"
   - Hoisted from "_project_#backend#@backstage#plugin-catalog-backend-module-unprocessed#@backstage#backend-common"
   - Hoisted from "_project_#backend#@backstage#plugin-catalog-backend#@backstage#backend-common"
   - Hoisted from "_project_#backend#@backstage#plugin-permission-backend#@backstage#backend-common"
   - Hoisted from "_project_#@backstage#backend-app-api#@backstage#plugin-permission-node#@backstage#backend-common"
   - Hoisted from "_project_#backend#@backstage#plugin-proxy-backend#@backstage#backend-common"
   - Hoisted from "_project_#backend#@backstage#plugin-scaffolder-backend#@backstage#backend-common"
   - Hoisted from "_project_#backend#@backstage#plugin-search-backend-module-catalog#@backstage#backend-common"
   - Hoisted from "_project_#backend#@backstage#plugin-search-backend-module-pg#@backstage#backend-common"
   - Hoisted from "_project_#backend#@backstage#plugin-search-backend-module-techdocs#@backstage#backend-common"
   - Hoisted from "_project_#backend#@backstage#plugin-search-backend-node#@backstage#backend-common"
   - Hoisted from "_project_#backend#@backstage#plugin-search-backend#@backstage#backend-common"
   - Hoisted from "_project_#backend#@backstage#plugin-techdocs-backend#@backstage#backend-common"
   - Hoisted from "_project_#backend#@spotify#backstage-plugin-insights-backend#@backstage#backend-common"
   - Hoisted from "_project_#backend#@spotify#backstage-plugin-rbac-backend#@backstage#backend-common"
   - Hoisted from "_project_#backend#@spotify#backstage-plugin-skill-exchange-backend#@backstage#backend-common"
   - Hoisted from "_project_#backend#@spotify#backstage-plugin-soundcheck-backend-module-github#@backstage#backend-common"
   - Hoisted from "_project_#backend#@spotify#backstage-plugin-soundcheck-backend-module-scm#@backstage#backend-common"
   - Hoisted from "_project_#backend#@spotify#backstage-plugin-soundcheck-backend#@backstage#backend-common"
   - Hoisted from "_project_#backend#@backstage#plugin-auth-backend#@backstage#plugin-auth-backend-module-aws-alb-provider#@backstage#backend-common"
   - Hoisted from "_project_#backend#@backstage#plugin-auth-backend#@backstage#plugin-auth-backend-module-oidc-provider#@backstage#backend-common"
   - Hoisted from "_project_#backend#@backstage#plugin-scaffolder-backend#@backstage#plugin-scaffolder-backend-module-github#@backstage#backend-common"
   - Hoisted from "_project_#backend#@backstage#plugin-scaffolder-backend#@backstage#plugin-scaffolder-backend-module-gitlab#@backstage#backend-common"
   - Hoisted from "_project_#backend#@backstage#plugin-scaffolder-backend#@backstage#plugin-scaffolder-node#@backstage#backend-common"
   - Hoisted from "_project_#backend#@backstage#plugin-search-backend-module-techdocs#@backstage#plugin-techdocs-node#@backstage#backend-common"
   - Hoisted from "_project_#backend#@spotify#backstage-plugin-insights-backend#@spotify#backstage-plugin-core-node#@backstage#backend-common"
   - Hoisted from "_project_#backend#@spotify#backstage-plugin-rbac-backend#@spotify#backstage-plugin-permission-backend-module-rbac#@backstage#backend-common"
   - Hoisted from "_project_#backend#@spotify#backstage-plugin-skill-exchange-backend#@spotify#backstage-plugin-skill-exchange-node#@backstage#backend-common"
   - Hoisted from "_project_#backend#@spotify#backstage-plugin-skill-exchange-backend#@spotify#backstage-plugin-slack-node#@backstage#backend-common"
   - Hoisted from "_project_#backend#@spotify#backstage-plugin-soundcheck-backend-module-github#@spotify#backstage-plugin-soundcheck-node#@backstage#backend-common"
info Disk size without dependencies: "1.55MB"
info Disk size with unique dependencies: "63.76MB"
info Disk size with transitive dependencies: "1.55MB"
info Number of shared dependencies: 393
info 
=> Found "@k-phoen/backstage-plugin-announcements-backend#@backstage/[email protected]"
info This module exists because "_project_#backend#@k-phoen#backstage-plugin-announcements-backend" depends on it.
info Disk size without dependencies: "1.13MB"
info Disk size with unique dependencies: "54.5MB"
info Disk size with transitive dependencies: "1.13MB"
info Number of shared dependencies: 393
info 
=> Found "@roadiehq/catalog-backend-module-okta#@backstage/[email protected]"
info This module exists because "_project_#backend#@roadiehq#catalog-backend-module-okta" depends on it.
info Disk size without dependencies: "912KB"
info Disk size with unique dependencies: "63.1MB"
info Disk size with transitive dependencies: "912KB"
info Number of shared dependencies: 393
info 
=> Found "@k-phoen/backstage-plugin-announcements-backend#@backstage/backend-app-api#@backstage/[email protected]"
info This module exists because "_project_#backend#@k-phoen#backstage-plugin-announcements-backend#@backstage#backend-common#@backstage#backend-app-api" depends on it.
info Disk size without dependencies: "1.46MB"
info Disk size with unique dependencies: "63.68MB"
info Disk size with transitive dependencies: "1.46MB"
info Number of shared dependencies: 393
info 
=> Found "@k-phoen/backstage-plugin-announcements-backend#@backstage/backend-app-api#@backstage/backend-app-api#@backstage/[email protected]"
info This module exists because "_project_#backend#@k-phoen#backstage-plugin-announcements-backend#@backstage#backend-common#@backstage#backend-app-api#@backstage#backend-common#@backstage#backend-app-api" depends on it.
info Disk size without dependencies: "960KB"
info Disk size with unique dependencies: "63.15MB"
info Disk size with transitive dependencies: "960KB"
info Number of shared dependencies: 393
Done in 3.14s.

carl-reverb avatar Jun 14 '24 14:06 carl-reverb

@carl-reverb hmm, yeah I don't think that's gonna be it. What if you migrate the permissions backend first? It could be that we're not handling the chained calls correctly.

Rugvip avatar Jun 14 '24 16:06 Rugvip

This is where my backend index.ts is at right now:

import 'dd-trace/init';

import { createBackend } from '@backstage/backend-defaults';
import { legacyPlugin } from '@backstage/backend-common';

const backend = createBackend();
// New Backend
backend.add(import('@backstage/plugin-auth-backend'));
backend.add(import('@backstage/plugin-auth-backend-module-okta-provider'));
backend.add(import('@backstage/plugin-auth-backend-module-guest-provider'));
backend.add(import('@internal/backstage-plugin-healthcheck-backend'));
backend.add(import('@spotify/backstage-plugin-soundcheck-backend'));
backend.add(import('@spotify/backstage-plugin-soundcheck-backend-module-scm'));
backend.add(import('@spotify/backstage-plugin-soundcheck-backend-module-github'));
backend.add(import('@backstage/plugin-techdocs-backend/alpha'));

// TODO: convert all legacy plugins to new backend
backend.add(legacyPlugin('announcements', import('./plugins/announcements')));
backend.add(legacyPlugin('backstageInsights', import('./plugins/backstageInsights')));
backend.add(legacyPlugin('catalog', import('./plugins/catalog')));
backend.add(legacyPlugin('permission', import('./plugins/permission')));
backend.add(legacyPlugin('proxy', import('./plugins/proxy')));
backend.add(legacyPlugin('rbac', import('./plugins/rbac')));
backend.add(legacyPlugin('scaffolder', import('./plugins/scaffolder')));
backend.add(legacyPlugin('search', import('./plugins/search')));
backend.add(legacyPlugin('skillexchange', import('./plugins/skillexchange')));
// backend.add(legacyPlugin('techdocs', import('./plugins/techdocs')));

backend.start();

carl-reverb avatar Jun 14 '24 16:06 carl-reverb

@carl-reverb yep, so try moving the permissions plugin to be using the new system cleanly without legacyPlugin. Afaik you should be able to install @backstage/plugin-permission-backend/alpha and the permission backend module for RBAC.

My hunch is that there could be an issue where auth with multiple hops across legacyPlugins might not work as expected, which we'd then want to fix on our side. Either way it would help you move forward in the migration to fully using the new backend system without legacyPlugin, regardless of whether that turns out to be the issue or not.

Rugvip avatar Jun 14 '24 16:06 Rugvip

Following this advice, I updated my index.ts, removing the legacy permission backend, and adding:

backend.add(import('@backstage/plugin-permission-backend/alpha'));
backend.add(
  import('@backstage/plugin-permission-backend-module-allow-all-policy'),
);

After restarting, I'm still having the same issue when visiting techdocs, 401, with the error: Invalid server token; caused by TypeError: Key for the ES256 algorithm must be one of type KeyObject or CryptoKey. Received an instance of Uint8Array

Edit: It occurred to me that maybe the issue persists with legacy plugins generally. I commented all but catalog, which will take a bit more work to migrate with the few custom catalog providers.

The whole file now reads:

Collapsed for readability: Edit: Removed extraneous plugins/spotify plugins
import 'dd-trace/init';

import { createBackend } from '@backstage/backend-defaults';
import { legacyPlugin } from '@backstage/backend-common';

const backend = createBackend();
// New Backend
backend.add(import('@backstage/plugin-auth-backend'));
backend.add(import('@backstage/plugin-auth-backend-module-guest-provider'));
backend.add(import('@backstage/plugin-auth-backend-module-okta-provider'));
backend.add(import('@backstage/plugin-permission-backend/alpha'));
backend.add(
  import('@backstage/plugin-permission-backend-module-allow-all-policy'),
);
backend.add(import('@backstage/plugin-techdocs-backend/alpha'));
backend.add(import('@internal/backstage-plugin-healthcheck-backend'));
// backend.add(import('@spotify/backstage-plugin-permission-backend-module-rbac'));
// backend.add(import('@spotify/backstage-plugin-soundcheck-backend'));
// backend.add(import('@spotify/backstage-plugin-soundcheck-backend-module-github'));
// backend.add(import('@spotify/backstage-plugin-soundcheck-backend-module-scm'));

// TODO: convert all legacy plugins to new backend
// backend.add(legacyPlugin('announcements', import('./plugins/announcements')));
// backend.add(legacyPlugin('backstageInsights', import('./plugins/backstageInsights')));
backend.add(legacyPlugin('catalog', import('./plugins/catalog')));
// backend.add(legacyPlugin('proxy', import('./plugins/proxy')));
// backend.add(legacyPlugin('rbac', import('./plugins/rbac')));
// backend.add(legacyPlugin('scaffolder', import('./plugins/scaffolder')));
// backend.add(legacyPlugin('search', import('./plugins/search')));
// backend.add(legacyPlugin('skillexchange', import('./plugins/skillexchange')));
// backend.add(legacyPlugin('techdocs', import('./plugins/techdocs')));

backend.start();

carl-reverb avatar Jun 14 '24 18:06 carl-reverb

I put in some extra work and migrated the catalog plugin from legacyPlugin and that cleared the issue up. It seems that while Techdocs requires the catalog plugin to look up entities, it trips over the legacyplugin version.

I hope this debugging sequence is helpful to future implementers. My advice is: Don't use legacyPlugin for any core plugins, and only for 3rd-party plugins with caution. My legacy-first approach to migrating was a bad strategy.

carl-reverb avatar Jun 14 '24 19:06 carl-reverb