Merge branch 'backstage:master' into plugin-azure-functions

This commit is contained in:
Wesley
2022-10-01 09:32:22 +02:00
committed by GitHub
17 changed files with 803 additions and 274 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog-react': patch
---
Added two new `EntityRefLinks` props, the first being `getTitle` that allows for customization of the title used for each link. The second one is `fetchEntities`, which triggers a fetching of all entities so that the full entity definition is available in the `getTitle` callback.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-scaffolder': patch
---
Support custom layouts in dry run editor
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/plugin-github-issues': patch
---
Updated the `luxon` dependency to 3.x
+1 -1
View File
@@ -39,7 +39,7 @@ jobs:
run: yarn build
- name: Install mkdocs & techdocs-core
run: python -m pip install mkdocs-techdocs-core==1.1.6 mkdocs==1.3.1
run: python -m pip install mkdocs-techdocs-core==1.1.7 mkdocs==1.4.0
- name: techdocs-cli e2e test
working-directory: packages/techdocs-cli
+6 -6
View File
@@ -1415,22 +1415,22 @@ __metadata:
linkType: hard
"typescript@npm:^4.1.3":
version: 4.8.2
resolution: "typescript@npm:4.8.2"
version: 4.8.4
resolution: "typescript@npm:4.8.4"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
checksum: 7f5b81d0d558c9067f952c7af52ab7f19c2e70a916817929e4a5b256c93990bf3178eccb1ac8a850bc75df35f6781b6f4cb3370ce20d8b1ded92ed462348f628
checksum: 3e4f061658e0c8f36c820802fa809e0fd812b85687a9a2f5430bc3d0368e37d1c9605c3ce9b39df9a05af2ece67b1d844f9f6ea8ff42819f13bcb80f85629af0
languageName: node
linkType: hard
"typescript@patch:typescript@^4.1.3#~builtin<compat/typescript>":
version: 4.8.2
resolution: "typescript@patch:typescript@npm%3A4.8.2#~builtin<compat/typescript>::version=4.8.2&hash=a1c5e5"
version: 4.8.4
resolution: "typescript@patch:typescript@npm%3A4.8.4#~builtin<compat/typescript>::version=4.8.4&hash=a1c5e5"
bin:
tsc: bin/tsc
tsserver: bin/tsserver
checksum: 5cb0f02f414f5405f4b0e7ee1fd7fa9177b6a8783c9017b6cad85f56ce4c4f93e0e6f2ce37e863cb597d44227cd009474c9fbd85bf7a50004e5557426cb58079
checksum: 563a0ef47abae6df27a9a3ab38f75fc681f633ccf1a3502b1108e252e187787893de689220f4544aaf95a371a4eb3141e4a337deb9895de5ac3c1ca76430e5f0
languageName: node
linkType: hard
+164
View File
@@ -0,0 +1,164 @@
---
id: service-to-service-auth
title: Service to Service Auth
# prettier-ignore
description: This section describes how to use service to service authentication, both internally within Backstage plugins and towards external services.
---
This article describes the steps needed to introduce _backend-to-backend auth_.
This allows plugin backends to determine whether a given request originates from
a legitimate Backstage plugin (or other external caller), by requiring a special
type of service-to-service token which is signed with a shared secret.
When enabling this protection on your Backstage backend plugins, for example the
catalog, other callers in the ecosystem such as the search indexer and
scaffolder would need to present a valid token to the catalog to be able to
request its contents.
## Setup
In a newly created Backstage app, the backend is setup up to not require any
auth at all. This means that generated service-to-service tokens are empty, and
that incoming requests are not validated. If you want to enable
service-to-service auth, the first step is to switch out the following line in
your backend setup at `packages/backend/src/index.ts`:
```diff
- const tokenManager = ServerTokenManager.noop();
+ const tokenManager = ServerTokenManager.fromConfig(config, { logger: root });
```
By switching from the no-op `ServiceTokenManager` to one created from config,
you enable service-to-service auth for any plugin that implements it. The local
development setup will generally not be impacted by this, as temporary keys are
generated under the hood. But for the production setup, this means you must now
provide a shared secret that enables your backend plugins to communicate with
each other.
Backstage service-to-service tokens are currently always signed with a single
secret key. It needs to be shared across all backend plugins and services that
ones wishes to communicate across. The key can be any base64 encoded secret.
The following command can be used to generate such a key in a terminal:
```bash
node -p 'require("crypto").randomBytes(24).toString("base64")'
```
Then place it in the backend configuration, either as a direct value or
injected as an env variable.
```yaml
# commonly in your app-config.production.yaml
backend:
auth:
keys:
- secret: <the string returned by the above crypto command>
# - secret: ${BACKEND_SECRET} - if you want to use an env variable instead
```
**NOTE**: For ease of development, we auto-generate a key for you if you haven't
configured a secret in dev mode. You _must set your own secret_ in order for
backend-to-backend auth to work in production; the `ServiceTokenManager` will
throw an exception in production if it has no keys to work with, which will lead
to the backend failing to start up.
## Usage in Backend Plugins
There are a few steps if you want to make use of the service-to-service auth in
your own backend plugin. First you need to add the `TokenManager` dependency to
the `createRouter` options. Typically as `tokenManager: TokenManager`. Along
with this you'll need to ask users to start providing this new dependency in
their backend setup code.
Once the `TokenManager` is available, you use the `.getToken()` method to generate
a new token for any outgoing requests towards other Backstage backend plugins.
This method should be called for every request that you make; do not store the
token for later use. The `TokenManager` implementations should already cache
tokens as needed. The returned token should then be added as a `Bearer` token
for the upstream request, for example:
```ts
const { token } = await this.tokenManager.getToken();
const response = await fetch(pluginBackendApiUrl, {
method: 'GET',
headers: {
...headers,
Authorization: `Bearer ${token}`,
},
});
```
To authenticate an incoming request you use the `.authenticate(token)` method.
At the time of writing this method doesn't return anything, it will simply
throw if the token is invalid.
```ts
await tokenManager.authenticate(token); // throws if token is invalid
```
## Usage in External Callers
If you have enabled server-to-server auth, you may be interested in generating
tokens in code that is external to Backstage itself. External callers may even
be written in other languages than Node.js. This section explains how to generate
a valid token yourself.
The token must be a JWT with a `HS256` signature, using the raw base64 decoded
value of the configured key as the secret. It must also have the following payload:
- `sub`: "backstage-server" (only this value supported currently)
- `exp`: one hour from the time it was generated, in epoch seconds
## Granular Access Control
We plan to build out the service-to-service auth to be much more powerful in the
future, but before that is done there are a few tricks you can use with the
current system to harden your deployments. This section assumes that you have
already split your backend plugins into more than one backend deployment, in
order to scale or isolate them.
The backend auth configuration has support for providing multiple keys, for
example:
```yaml
backend:
auth:
keys:
- secret: my-secret-key-1
- secret: my-secret-key-2
- secret: my-secret-key-3
```
The first key will be used for signing requests, while all of the keys will be
used for validation. This means that you can set up an asymmetric configuration
where some backend deployments do not have access to each other.
For example, consider the case where we have split up the catalog, scaffolder,
and search plugin into three separate backend deployments. We can use the
following configurations to allow both the scaffolder and search plugin to speak
to the
catalog, but not the other way around, and to not allow any communication between
the scaffolder and search plugins.
```yaml
# catalog config
backend:
auth:
keys:
- secret: my-secret-key-catalog
- secret: my-secret-key-scaffolder
- secret: my-secret-key-search
# scaffolder config
backend:
auth:
keys:
- secret: my-secret-key-scaffolder
# search config
backend:
auth:
keys:
- secret: my-secret-key-search
```
+1 -65
View File
@@ -4,68 +4,4 @@ title: Backend-to-Backend Authentication
description: Guide for authenticating API requests between Backstage plugin backends
---
This tutorial describes the steps needed to handle _backend-to-backend
authentication_, which allows plugin backends to determine whether a given
request originates from a legitimate Backstage backend by verifying a token
signed with a shared secret. This system has limited use for now, but will be
needed to support the upcoming framework for permissions and authorization (see
[the PRFC on the topic](https://github.com/backstage/backstage/pull/7761) for
more details).
Backends have no concept of a Backstage identity, so instead they use a token
generated using a shared key stored in config. You can generate a unique key for
your app in a terminal, and set the `BACKEND_SECRET` environment variable to the
resulting value.
```bash
node -p 'require("crypto").randomBytes(24).toString("base64")'
```
**NOTE**: For ease of development, we auto-generate a key for you if you haven't
configured a secret in dev mode. You _must set your own secret_ in order for
backend-to-backend authentication to work in production.
Requests originating from a backend plugin can be authenticated by decorating
them with a backend token. Backend tokens can be generated using a
`TokenManager`, which can be passed to plugin backends via the
`PluginEnvironment`. The `TokenManager` provided in new Backstage instances
generated by `create-app` is a stub, which returns empty tokens and accepts any
input string as valid. To enable backend-to-backend authentication, you'll need
to instantiate a new one using the secret from your config instead:
```diff
// packages/backend/src/index.ts
function makeCreateEnv(config: Config) {
const root = getRootLogger();
const reader = UrlReaders.default({ logger: root, config });
const discovery = SingleHostDiscovery.fromConfig(config);
root.info(`Created UrlReader ${reader}`);
const cacheManager = CacheManager.fromConfig(config);
const databaseManager = DatabaseManager.fromConfig(config);
- const tokenManager = ServerTokenManager.noop();
+ const tokenManager = ServerTokenManager.fromConfig(config, { logger: root });
```
With this `tokenManager`, you can then generate a server token for requests:
```typescript
const { token } = await this.tokenManager.getToken();
const response = await fetch(pluginBackendApiUrl, {
method: 'GET',
headers: {
...headers,
Authorization: `Bearer ${token}`,
},
});
```
You can use the same `tokenManager` to authenticate tokens supplied on incoming
requests:
```typescript
await tokenManager.authenticate(token); // throws if token is invalid
```
See [new docs](../auth/service-to-service-auth.md)
+1 -1
View File
@@ -279,6 +279,7 @@
"auth/identity-resolver",
"auth/oauth",
"auth/add-auth-provider",
"auth/service-to-service-auth",
"auth/troubleshooting",
"auth/glossary"
],
@@ -335,7 +336,6 @@
"tutorials/configuring-plugin-databases",
"tutorials/switching-sqlite-postgres",
"tutorials/using-backstage-proxy-within-plugin",
"tutorials/backend-to-backend-auth",
"tutorials/yarn-migration"
],
"Architecture Decision Records (ADRs)": [
+1
View File
@@ -164,6 +164,7 @@ nav:
- Sign in resolvers: 'auth/identity-resolver.md'
- OAuth and OpenID Connect: 'auth/oauth.md'
- Contributing New Providers: 'auth/add-auth-provider.md'
- Service to Service Auth: 'auth/service-to-service-auth.md'
- Troubleshooting Auth: 'auth/troubleshooting.md'
- Glossary: 'auth/glossary.md'
- Deployment:
+20 -5
View File
@@ -279,13 +279,28 @@ export type EntityRefLinkProps = {
} & Omit<LinkProps, 'to'>;
// @public
export function EntityRefLinks(props: EntityRefLinksProps): JSX.Element;
export function EntityRefLinks<
TRef extends string | CompoundEntityRef | Entity,
>(props: EntityRefLinksProps<TRef>): JSX.Element;
// @public
export type EntityRefLinksProps = {
entityRefs: (string | Entity | CompoundEntityRef)[];
defaultKind?: string;
} & Omit<LinkProps, 'to'>;
export type EntityRefLinksProps<
TRef extends string | CompoundEntityRef | Entity,
> = (
| {
defaultKind?: string;
entityRefs: TRef[];
fetchEntities?: false;
getTitle?(entity: TRef): string | undefined;
}
| {
defaultKind?: string;
entityRefs: TRef[];
fetchEntities: true;
getTitle(entity: Entity): string | undefined;
}
) &
Omit<LinkProps, 'to'>;
// @public
export function entityRouteParams(entity: Entity): {
@@ -1,5 +1,5 @@
/*
* Copyright 2020 The Backstage Authors
* Copyright 2022 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -13,41 +13,72 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { Entity, CompoundEntityRef } from '@backstage/catalog-model';
import React from 'react';
import { EntityRefLink } from './EntityRefLink';
import { LinkProps } from '@backstage/core-components';
import { FetchedEntityRefLinks } from './FetchedEntityRefLinks';
/**
* Props for {@link EntityRefLink}.
*
* @public
*/
export type EntityRefLinksProps = {
entityRefs: (string | Entity | CompoundEntityRef)[];
defaultKind?: string;
} & Omit<LinkProps, 'to'>;
export type EntityRefLinksProps<
TRef extends string | CompoundEntityRef | Entity,
> = (
| {
defaultKind?: string;
entityRefs: TRef[];
fetchEntities?: false;
getTitle?(entity: TRef): string | undefined;
}
| {
defaultKind?: string;
entityRefs: TRef[];
fetchEntities: true;
getTitle(entity: Entity): string | undefined;
}
) &
Omit<LinkProps, 'to'>;
/**
* Shows a list of clickable links to entities.
*
* @public
*/
export function EntityRefLinks(props: EntityRefLinksProps) {
const { entityRefs, defaultKind, ...linkProps } = props;
export function EntityRefLinks<
TRef extends string | CompoundEntityRef | Entity,
>(props: EntityRefLinksProps<TRef>) {
const { entityRefs, defaultKind, fetchEntities, getTitle, ...linkProps } =
props;
if (fetchEntities) {
return (
<FetchedEntityRefLinks
{...linkProps}
defaultKind={defaultKind}
entityRefs={entityRefs}
getTitle={getTitle}
/>
);
}
return (
<>
{entityRefs.map((r, i) => (
<React.Fragment key={i}>
{i > 0 && ', '}
<EntityRefLink
{...linkProps}
entityRef={r}
defaultKind={defaultKind}
/>
</React.Fragment>
))}
{entityRefs.map((r: TRef, i: number) => {
return (
<React.Fragment key={i}>
{i > 0 && ', '}
<EntityRefLink
{...linkProps}
defaultKind={defaultKind}
entityRef={r}
title={getTitle ? getTitle(r) : undefined}
/>
</React.Fragment>
);
})}
</>
);
}
@@ -0,0 +1,218 @@
/*
* Copyright 2022 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { FetchedEntityRefLinks } from './FetchedEntityRefLinks';
import { entityRouteRef } from '../../routes';
import { renderInTestApp, TestApiProvider } from '@backstage/test-utils';
import { Entity } from '@backstage/catalog-model';
import React from 'react';
import { JsonObject } from '@backstage/types';
import { catalogApiRef } from '../../api';
import { CatalogApi } from '@backstage/catalog-client';
describe('<FetchedEntityRefLinks />', () => {
const getTitle = (e: Entity): string =>
(e.spec?.profile!! as JsonObject).displayName!!.toString()!!;
it('should fetch entities and render the custom display text', async () => {
const entityRefs = [
{
kind: 'Component',
namespace: 'default',
name: 'software',
},
{
kind: 'API',
namespace: 'default',
name: 'interface',
},
];
const catalogApi: Partial<CatalogApi> = {
getEntities: () =>
Promise.resolve({
items: entityRefs.map(ref => ({
apiVersion: 'backstage.io/v1alpha1',
kind: ref.kind,
metadata: {
name: ref.name,
namespace: ref.namespace,
},
spec: {
profile: {
displayName: ref.name.toLocaleUpperCase('en-US'),
},
type: 'organization',
},
})),
}),
};
const rendered = await renderInTestApp(
<TestApiProvider apis={[[catalogApiRef, catalogApi]]}>
<FetchedEntityRefLinks entityRefs={entityRefs} getTitle={getTitle} />
</TestApiProvider>,
{
mountedRoutes: {
'/catalog/:namespace/:kind/:name/*': entityRouteRef,
},
},
);
expect(rendered.getByText('SOFTWARE')).toHaveAttribute(
'href',
'/catalog/default/component/software',
);
expect(rendered.getByText('INTERFACE')).toHaveAttribute(
'href',
'/catalog/default/api/interface',
);
});
it('should use entities as they are provided and render the custom display text', async () => {
const entityRefs = [
{
kind: 'Component',
namespace: 'default',
name: 'tool',
},
{
kind: 'API',
namespace: 'default',
name: 'implementation',
},
].map(ref => ({
apiVersion: 'backstage.io/v1alpha1',
kind: ref.kind,
metadata: {
name: ref.name,
namespace: ref.namespace,
},
spec: {
profile: {
displayName: ref.name.toLocaleUpperCase('en-US'),
},
type: 'organization',
},
}));
const catalogApi: Partial<CatalogApi> = {};
const rendered = await renderInTestApp(
<TestApiProvider apis={[[catalogApiRef, catalogApi]]}>
<FetchedEntityRefLinks entityRefs={entityRefs} getTitle={getTitle} />
</TestApiProvider>,
{
mountedRoutes: {
'/catalog/:namespace/:kind/:name/*': entityRouteRef,
},
},
);
expect(rendered.getByText('TOOL')).toHaveAttribute(
'href',
'/catalog/default/component/tool',
);
expect(rendered.getByText('IMPLEMENTATION')).toHaveAttribute(
'href',
'/catalog/default/api/implementation',
);
});
it('should handle heterogeneous array of values to render the custom display text', async () => {
const entityRefs = [
...[
{
kind: 'Component',
namespace: 'default',
name: 'tool',
},
{
kind: 'API',
namespace: 'default',
name: 'implementation',
},
].map(ref => ({
apiVersion: 'backstage.io/v1alpha1',
kind: ref.kind,
metadata: {
name: ref.name,
namespace: ref.namespace,
},
spec: {
profile: {
displayName: ref.name.toLocaleUpperCase('en-US'),
},
type: 'organization',
},
})),
{
kind: 'Component',
namespace: 'default',
name: 'interface',
},
];
const catalogApi: Partial<CatalogApi> = {
getEntities: () =>
Promise.resolve({
items: [
{
apiVersion: 'backstage.io/v1alpha1',
kind: 'Component',
metadata: {
name: 'interface',
namespace: 'default',
},
spec: {
profile: {
displayName: 'INTERFACE',
},
type: 'organization',
},
},
],
}),
};
const rendered = await renderInTestApp(
<TestApiProvider apis={[[catalogApiRef, catalogApi]]}>
<FetchedEntityRefLinks entityRefs={entityRefs} getTitle={getTitle} />
</TestApiProvider>,
{
mountedRoutes: {
'/catalog/:namespace/:kind/:name/*': entityRouteRef,
},
},
);
expect(rendered.getByText('TOOL')).toHaveAttribute(
'href',
'/catalog/default/component/tool',
);
expect(rendered.getByText('IMPLEMENTATION')).toHaveAttribute(
'href',
'/catalog/default/api/implementation',
);
expect(rendered.getByText('INTERFACE')).toHaveAttribute(
'href',
'/catalog/default/component/interface',
);
});
});
@@ -0,0 +1,108 @@
/*
* Copyright 2022 The Backstage Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import {
Entity,
CompoundEntityRef,
parseEntityRef,
} from '@backstage/catalog-model';
import React from 'react';
import { EntityRefLink } from './EntityRefLink';
import { ErrorPanel, LinkProps, Progress } from '@backstage/core-components';
import useAsync from 'react-use/lib/useAsync';
import { catalogApiRef } from '../../api';
import { useApi } from '@backstage/core-plugin-api';
/**
* Props for {@link FetchedEntityRefLinks}.
*
* @public
*/
export type FetchedEntityRefLinksProps<
TRef extends string | CompoundEntityRef | Entity,
> = {
defaultKind?: string;
entityRefs: TRef[];
getTitle(entity: Entity): string | undefined;
} & Omit<LinkProps, 'to'>;
/**
* Shows a list of clickable links to entities with auto-fetching of entities
* for customising a displayed text via title attribute.
*
* @public
*/
export function FetchedEntityRefLinks<
TRef extends string | CompoundEntityRef | Entity,
>(props: FetchedEntityRefLinksProps<TRef>) {
const { entityRefs, defaultKind, getTitle, ...linkProps } = props;
const catalogApi = useApi(catalogApiRef);
const {
value: entities = new Array<Entity>(),
loading,
error,
} = useAsync(async () => {
const refs = entityRefs.reduce((acc, current) => {
return 'metadata' in current ? acc : [...acc, parseEntityRef(current)];
}, new Array<CompoundEntityRef>());
const pureEntities = entityRefs.filter(
ref => 'metadata' in ref,
) as Array<Entity>;
return refs.length > 0
? [
...(
await catalogApi.getEntities({
filter: refs.map(ref => ({
kind: ref.kind,
'metadata.namespace': ref.namespace,
'metadata.name': ref.name,
})),
})
).items,
...pureEntities,
]
: pureEntities;
}, [entityRefs]);
if (loading) {
return <Progress />;
}
if (error) {
return <ErrorPanel error={error} />;
}
return (
<>
{entities.map((r: Entity, i) => {
return (
<React.Fragment key={i}>
{i > 0 && ', '}
<EntityRefLink
{...linkProps}
defaultKind={defaultKind}
entityRef={r}
title={getTitle(r as Entity)}
/>
</React.Fragment>
);
})}
</>
);
}
+1 -1
View File
@@ -32,7 +32,7 @@
"@material-ui/core": "^4.12.4",
"@material-ui/icons": "^4.9.1",
"@material-ui/lab": "^4.0.0-alpha.61",
"luxon": "^2.4.0",
"luxon": "^3.0.0",
"octokit": "^2.0.4",
"react-use": "^17.4.0"
},
@@ -207,7 +207,7 @@ export function TemplateEditorFormDirectoryEditorDryRun(
'setErrorText' | 'fieldExtensions' | 'layouts'
>,
) {
const { setErrorText, fieldExtensions = [] } = props;
const { setErrorText, fieldExtensions = [], layouts } = props;
const dryRun = useDryRun();
const directoryEditor = useDirectoryEditor();
@@ -246,6 +246,7 @@ export function TemplateEditorFormDirectoryEditorDryRun(
content={content}
data={data}
onUpdate={setData}
layouts={layouts}
/>
);
}
+55 -55
View File
@@ -2977,126 +2977,126 @@ __metadata:
languageName: node
linkType: hard
"@swc/core-android-arm-eabi@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-android-arm-eabi@npm:1.3.3"
"@swc/core-android-arm-eabi@npm:1.3.4":
version: 1.3.4
resolution: "@swc/core-android-arm-eabi@npm:1.3.4"
dependencies:
"@swc/wasm": 1.2.122
conditions: os=android & cpu=arm
languageName: node
linkType: hard
"@swc/core-android-arm64@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-android-arm64@npm:1.3.3"
"@swc/core-android-arm64@npm:1.3.4":
version: 1.3.4
resolution: "@swc/core-android-arm64@npm:1.3.4"
dependencies:
"@swc/wasm": 1.2.130
conditions: os=android & cpu=arm64
languageName: node
linkType: hard
"@swc/core-darwin-arm64@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-darwin-arm64@npm:1.3.3"
"@swc/core-darwin-arm64@npm:1.3.4":
version: 1.3.4
resolution: "@swc/core-darwin-arm64@npm:1.3.4"
conditions: os=darwin & cpu=arm64
languageName: node
linkType: hard
"@swc/core-darwin-x64@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-darwin-x64@npm:1.3.3"
"@swc/core-darwin-x64@npm:1.3.4":
version: 1.3.4
resolution: "@swc/core-darwin-x64@npm:1.3.4"
conditions: os=darwin & cpu=x64
languageName: node
linkType: hard
"@swc/core-freebsd-x64@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-freebsd-x64@npm:1.3.3"
"@swc/core-freebsd-x64@npm:1.3.4":
version: 1.3.4
resolution: "@swc/core-freebsd-x64@npm:1.3.4"
dependencies:
"@swc/wasm": 1.2.130
conditions: os=freebsd & cpu=x64
languageName: node
linkType: hard
"@swc/core-linux-arm-gnueabihf@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.3"
"@swc/core-linux-arm-gnueabihf@npm:1.3.4":
version: 1.3.4
resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.4"
dependencies:
"@swc/wasm": 1.2.130
conditions: os=linux & cpu=arm
languageName: node
linkType: hard
"@swc/core-linux-arm64-gnu@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-linux-arm64-gnu@npm:1.3.3"
"@swc/core-linux-arm64-gnu@npm:1.3.4":
version: 1.3.4
resolution: "@swc/core-linux-arm64-gnu@npm:1.3.4"
conditions: os=linux & cpu=arm64 & libc=glibc
languageName: node
linkType: hard
"@swc/core-linux-arm64-musl@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-linux-arm64-musl@npm:1.3.3"
"@swc/core-linux-arm64-musl@npm:1.3.4":
version: 1.3.4
resolution: "@swc/core-linux-arm64-musl@npm:1.3.4"
conditions: os=linux & cpu=arm64 & libc=musl
languageName: node
linkType: hard
"@swc/core-linux-x64-gnu@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-linux-x64-gnu@npm:1.3.3"
"@swc/core-linux-x64-gnu@npm:1.3.4":
version: 1.3.4
resolution: "@swc/core-linux-x64-gnu@npm:1.3.4"
conditions: os=linux & cpu=x64 & libc=glibc
languageName: node
linkType: hard
"@swc/core-linux-x64-musl@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-linux-x64-musl@npm:1.3.3"
"@swc/core-linux-x64-musl@npm:1.3.4":
version: 1.3.4
resolution: "@swc/core-linux-x64-musl@npm:1.3.4"
conditions: os=linux & cpu=x64 & libc=musl
languageName: node
linkType: hard
"@swc/core-win32-arm64-msvc@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-win32-arm64-msvc@npm:1.3.3"
"@swc/core-win32-arm64-msvc@npm:1.3.4":
version: 1.3.4
resolution: "@swc/core-win32-arm64-msvc@npm:1.3.4"
dependencies:
"@swc/wasm": 1.2.130
conditions: os=win32 & cpu=arm64
languageName: node
linkType: hard
"@swc/core-win32-ia32-msvc@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-win32-ia32-msvc@npm:1.3.3"
"@swc/core-win32-ia32-msvc@npm:1.3.4":
version: 1.3.4
resolution: "@swc/core-win32-ia32-msvc@npm:1.3.4"
dependencies:
"@swc/wasm": 1.2.130
conditions: os=win32 & cpu=ia32
languageName: node
linkType: hard
"@swc/core-win32-x64-msvc@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-win32-x64-msvc@npm:1.3.3"
"@swc/core-win32-x64-msvc@npm:1.3.4":
version: 1.3.4
resolution: "@swc/core-win32-x64-msvc@npm:1.3.4"
conditions: os=win32 & cpu=x64
languageName: node
linkType: hard
"@swc/core@npm:^1.2.239":
version: 1.3.3
resolution: "@swc/core@npm:1.3.3"
version: 1.3.4
resolution: "@swc/core@npm:1.3.4"
dependencies:
"@swc/core-android-arm-eabi": 1.3.3
"@swc/core-android-arm64": 1.3.3
"@swc/core-darwin-arm64": 1.3.3
"@swc/core-darwin-x64": 1.3.3
"@swc/core-freebsd-x64": 1.3.3
"@swc/core-linux-arm-gnueabihf": 1.3.3
"@swc/core-linux-arm64-gnu": 1.3.3
"@swc/core-linux-arm64-musl": 1.3.3
"@swc/core-linux-x64-gnu": 1.3.3
"@swc/core-linux-x64-musl": 1.3.3
"@swc/core-win32-arm64-msvc": 1.3.3
"@swc/core-win32-ia32-msvc": 1.3.3
"@swc/core-win32-x64-msvc": 1.3.3
"@swc/core-android-arm-eabi": 1.3.4
"@swc/core-android-arm64": 1.3.4
"@swc/core-darwin-arm64": 1.3.4
"@swc/core-darwin-x64": 1.3.4
"@swc/core-freebsd-x64": 1.3.4
"@swc/core-linux-arm-gnueabihf": 1.3.4
"@swc/core-linux-arm64-gnu": 1.3.4
"@swc/core-linux-arm64-musl": 1.3.4
"@swc/core-linux-x64-gnu": 1.3.4
"@swc/core-linux-x64-musl": 1.3.4
"@swc/core-win32-arm64-msvc": 1.3.4
"@swc/core-win32-ia32-msvc": 1.3.4
"@swc/core-win32-x64-msvc": 1.3.4
dependenciesMeta:
"@swc/core-android-arm-eabi":
optional: true
@@ -3126,7 +3126,7 @@ __metadata:
optional: true
bin:
swcx: run_swcx.js
checksum: bead8463cd7c11e2cd87d3835045e4a245e755409e912a40c575026a0475cc0010fa6ef48936ea5f7e62c84cdc63c21a83d61755813f2ba9b565d397fad7c5f5
checksum: 24b4ca4a096fea53056ed227a8aa09aa38cfe5eef344451397e66a2d183ded119872cf4fc8c671c0a6eb34985537cbf8d8a7e742b9e27dad0735426693d11dc8
languageName: node
linkType: hard
+161 -121
View File
@@ -755,6 +755,17 @@ __metadata:
languageName: node
linkType: hard
"@babel/generator@npm:^7.18.13":
version: 7.19.3
resolution: "@babel/generator@npm:7.19.3"
dependencies:
"@babel/types": ^7.19.3
"@jridgewell/gen-mapping": ^0.3.2
jsesc: ^2.5.1
checksum: b1585e398f6c37f442a2fdac964a326b348fbc8fb99a6aaf4f72bbe993adb0ca792bc0a9c65e59930b2a2e55eb5aa3aab360ceb678d3d40692eb0cda2b7b6aa6
languageName: node
linkType: hard
"@babel/generator@npm:^7.18.9":
version: 7.18.9
resolution: "@babel/generator@npm:7.18.9"
@@ -1269,6 +1280,13 @@ __metadata:
languageName: node
linkType: hard
"@babel/helper-validator-identifier@npm:^7.19.1":
version: 7.19.1
resolution: "@babel/helper-validator-identifier@npm:7.19.1"
checksum: 0eca5e86a729162af569b46c6c41a63e18b43dbe09fda1d2a3c8924f7d617116af39cac5e4cd5d431bb760b4dca3c0970e0c444789b1db42bcf1fa41fbad0a3a
languageName: node
linkType: hard
"@babel/helper-validator-option@npm:^7.16.7":
version: 7.16.7
resolution: "@babel/helper-validator-option@npm:7.16.7"
@@ -2986,6 +3004,17 @@ __metadata:
languageName: node
linkType: hard
"@babel/types@npm:^7.18.13, @babel/types@npm:^7.19.3":
version: 7.19.3
resolution: "@babel/types@npm:7.19.3"
dependencies:
"@babel/helper-string-parser": ^7.18.10
"@babel/helper-validator-identifier": ^7.19.1
to-fast-properties: ^2.0.0
checksum: 34a5b3db3b99a1a80ec2a784c2bb0e48769a38f1526dc377a5753a3ac5e5704663c405a393117ecc7a9df9da07b01625be7c4c3fee43ae46aba23b0c40928d77
languageName: node
linkType: hard
"@babel/types@npm:^7.18.4, @babel/types@npm:^7.18.6, @babel/types@npm:^7.18.9":
version: 7.18.9
resolution: "@babel/types@npm:7.18.9"
@@ -5709,7 +5738,7 @@ __metadata:
"@types/node": "*"
"@types/react": ^16.13.1 || ^17.0.0
cross-fetch: ^3.1.5
luxon: ^2.4.0
luxon: ^3.0.0
msw: ^0.47.0
octokit: ^2.0.4
react-use: ^17.4.0
@@ -8520,14 +8549,14 @@ __metadata:
linkType: hard
"@google-cloud/firestore@npm:^6.0.0":
version: 6.2.0
resolution: "@google-cloud/firestore@npm:6.2.0"
version: 6.3.0
resolution: "@google-cloud/firestore@npm:6.3.0"
dependencies:
fast-deep-equal: ^3.1.1
functional-red-black-tree: ^1.0.1
google-gax: ^3.5.1
protobufjs: ^7.0.0
checksum: fce0d729d63b5722df0dcedb78c8b494b2876de128128de8c8dc7d9add1ff7e00a8df1d04e7e2210a71331e623877e67149593341f714d2b0f92b6fef73dfcbd
checksum: 50f52dc06746fe3af1e9abb1063244015f968b71387104f65bd752ce6522406fe987291791c40fd40e84a11033c993e7847e5b8619173b7202c70382e55e853b
languageName: node
linkType: hard
@@ -8615,11 +8644,14 @@ __metadata:
linkType: hard
"@graphql-codegen/cli@npm:^2.3.1":
version: 2.12.2
resolution: "@graphql-codegen/cli@npm:2.12.2"
version: 2.13.1
resolution: "@graphql-codegen/cli@npm:2.13.1"
dependencies:
"@babel/generator": ^7.18.13
"@babel/template": ^7.18.10
"@babel/types": ^7.18.13
"@graphql-codegen/core": 2.6.2
"@graphql-codegen/plugin-helpers": ^2.7.1
"@graphql-codegen/plugin-helpers": ^2.6.2
"@graphql-tools/apollo-engine-loader": ^7.3.6
"@graphql-tools/code-file-loader": ^7.3.1
"@graphql-tools/git-loader": ^7.2.1
@@ -8630,12 +8662,12 @@ __metadata:
"@graphql-tools/prisma-loader": ^7.2.7
"@graphql-tools/url-loader": ^7.13.2
"@graphql-tools/utils": ^8.9.0
"@whatwg-node/fetch": ^0.4.0
"@whatwg-node/fetch": ^0.3.0
ansi-escapes: ^4.3.1
chalk: ^4.1.0
chokidar: ^3.5.2
cosmiconfig: ^7.0.0
cosmiconfig-typescript-loader: ^4.0.0
cosmiconfig-typescript-loader: 4.0.0
debounce: ^1.2.0
detect-indent: ^6.0.0
graphql-config: ^4.3.5
@@ -8657,7 +8689,7 @@ __metadata:
graphql-code-generator: cjs/bin.js
graphql-codegen: cjs/bin.js
graphql-codegen-esm: esm/bin.js
checksum: 38262533b4bfcdacab25a3ce874082895ca3da164313466c531ac012d868f748c2f764f50dd4e98f03d3d5a5253c397488dde7c164b59677659eb8838459e518
checksum: 750c2a5f598def903842b8b91bbc4a4493703c1f0a2a2300af88b35cffce21128ccb4896e10a789dcdc9ed8076b89144a463da4772ccecf72d44645fc0ab67fe
languageName: node
linkType: hard
@@ -8707,22 +8739,6 @@ __metadata:
languageName: node
linkType: hard
"@graphql-codegen/plugin-helpers@npm:^2.7.1":
version: 2.7.1
resolution: "@graphql-codegen/plugin-helpers@npm:2.7.1"
dependencies:
"@graphql-tools/utils": ^8.8.0
change-case-all: 1.0.14
common-tags: 1.8.2
import-from: 4.0.0
lodash: ~4.17.0
tslib: ~2.4.0
peerDependencies:
graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0
checksum: fffb801ccccee36d729c134caa79cc5eb6a1b3717253646cd1759e2dd0e754bccb6b0b6b5341a649fd18794f8b0b970776b71907d5a7b15048521ea9eb283180
languageName: node
linkType: hard
"@graphql-codegen/schema-ast@npm:^2.5.1":
version: 2.5.1
resolution: "@graphql-codegen/schema-ast@npm:2.5.1"
@@ -10856,9 +10872,9 @@ __metadata:
linkType: hard
"@microsoft/microsoft-graph-types@npm:^2.6.0":
version: 2.24.0
resolution: "@microsoft/microsoft-graph-types@npm:2.24.0"
checksum: 94dfcf83905d4e416b8ddc52a338d583cbdc15bdc4bad0aff2212a0692d81870c55f9a01165dd3878442d2de512de57f02c575ebb77f1d393ac87449fb8e5c51
version: 2.25.0
resolution: "@microsoft/microsoft-graph-types@npm:2.25.0"
checksum: b311385e0a51f827082af5a016f35b1d6cd4d861121e8767b3279ab1a17475977cddbbdcc208abdddf0f953fd6ce4634d3c302e317cf50af4cb6111385347b4f
languageName: node
linkType: hard
@@ -12580,126 +12596,126 @@ __metadata:
languageName: node
linkType: hard
"@swc/core-android-arm-eabi@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-android-arm-eabi@npm:1.3.3"
"@swc/core-android-arm-eabi@npm:1.3.4":
version: 1.3.4
resolution: "@swc/core-android-arm-eabi@npm:1.3.4"
dependencies:
"@swc/wasm": 1.2.122
conditions: os=android & cpu=arm
languageName: node
linkType: hard
"@swc/core-android-arm64@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-android-arm64@npm:1.3.3"
"@swc/core-android-arm64@npm:1.3.4":
version: 1.3.4
resolution: "@swc/core-android-arm64@npm:1.3.4"
dependencies:
"@swc/wasm": 1.2.130
conditions: os=android & cpu=arm64
languageName: node
linkType: hard
"@swc/core-darwin-arm64@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-darwin-arm64@npm:1.3.3"
"@swc/core-darwin-arm64@npm:1.3.4":
version: 1.3.4
resolution: "@swc/core-darwin-arm64@npm:1.3.4"
conditions: os=darwin & cpu=arm64
languageName: node
linkType: hard
"@swc/core-darwin-x64@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-darwin-x64@npm:1.3.3"
"@swc/core-darwin-x64@npm:1.3.4":
version: 1.3.4
resolution: "@swc/core-darwin-x64@npm:1.3.4"
conditions: os=darwin & cpu=x64
languageName: node
linkType: hard
"@swc/core-freebsd-x64@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-freebsd-x64@npm:1.3.3"
"@swc/core-freebsd-x64@npm:1.3.4":
version: 1.3.4
resolution: "@swc/core-freebsd-x64@npm:1.3.4"
dependencies:
"@swc/wasm": 1.2.130
conditions: os=freebsd & cpu=x64
languageName: node
linkType: hard
"@swc/core-linux-arm-gnueabihf@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.3"
"@swc/core-linux-arm-gnueabihf@npm:1.3.4":
version: 1.3.4
resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.4"
dependencies:
"@swc/wasm": 1.2.130
conditions: os=linux & cpu=arm
languageName: node
linkType: hard
"@swc/core-linux-arm64-gnu@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-linux-arm64-gnu@npm:1.3.3"
"@swc/core-linux-arm64-gnu@npm:1.3.4":
version: 1.3.4
resolution: "@swc/core-linux-arm64-gnu@npm:1.3.4"
conditions: os=linux & cpu=arm64 & libc=glibc
languageName: node
linkType: hard
"@swc/core-linux-arm64-musl@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-linux-arm64-musl@npm:1.3.3"
"@swc/core-linux-arm64-musl@npm:1.3.4":
version: 1.3.4
resolution: "@swc/core-linux-arm64-musl@npm:1.3.4"
conditions: os=linux & cpu=arm64 & libc=musl
languageName: node
linkType: hard
"@swc/core-linux-x64-gnu@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-linux-x64-gnu@npm:1.3.3"
"@swc/core-linux-x64-gnu@npm:1.3.4":
version: 1.3.4
resolution: "@swc/core-linux-x64-gnu@npm:1.3.4"
conditions: os=linux & cpu=x64 & libc=glibc
languageName: node
linkType: hard
"@swc/core-linux-x64-musl@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-linux-x64-musl@npm:1.3.3"
"@swc/core-linux-x64-musl@npm:1.3.4":
version: 1.3.4
resolution: "@swc/core-linux-x64-musl@npm:1.3.4"
conditions: os=linux & cpu=x64 & libc=musl
languageName: node
linkType: hard
"@swc/core-win32-arm64-msvc@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-win32-arm64-msvc@npm:1.3.3"
"@swc/core-win32-arm64-msvc@npm:1.3.4":
version: 1.3.4
resolution: "@swc/core-win32-arm64-msvc@npm:1.3.4"
dependencies:
"@swc/wasm": 1.2.130
conditions: os=win32 & cpu=arm64
languageName: node
linkType: hard
"@swc/core-win32-ia32-msvc@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-win32-ia32-msvc@npm:1.3.3"
"@swc/core-win32-ia32-msvc@npm:1.3.4":
version: 1.3.4
resolution: "@swc/core-win32-ia32-msvc@npm:1.3.4"
dependencies:
"@swc/wasm": 1.2.130
conditions: os=win32 & cpu=ia32
languageName: node
linkType: hard
"@swc/core-win32-x64-msvc@npm:1.3.3":
version: 1.3.3
resolution: "@swc/core-win32-x64-msvc@npm:1.3.3"
"@swc/core-win32-x64-msvc@npm:1.3.4":
version: 1.3.4
resolution: "@swc/core-win32-x64-msvc@npm:1.3.4"
conditions: os=win32 & cpu=x64
languageName: node
linkType: hard
"@swc/core@npm:^1.2.239":
version: 1.3.3
resolution: "@swc/core@npm:1.3.3"
version: 1.3.4
resolution: "@swc/core@npm:1.3.4"
dependencies:
"@swc/core-android-arm-eabi": 1.3.3
"@swc/core-android-arm64": 1.3.3
"@swc/core-darwin-arm64": 1.3.3
"@swc/core-darwin-x64": 1.3.3
"@swc/core-freebsd-x64": 1.3.3
"@swc/core-linux-arm-gnueabihf": 1.3.3
"@swc/core-linux-arm64-gnu": 1.3.3
"@swc/core-linux-arm64-musl": 1.3.3
"@swc/core-linux-x64-gnu": 1.3.3
"@swc/core-linux-x64-musl": 1.3.3
"@swc/core-win32-arm64-msvc": 1.3.3
"@swc/core-win32-ia32-msvc": 1.3.3
"@swc/core-win32-x64-msvc": 1.3.3
"@swc/core-android-arm-eabi": 1.3.4
"@swc/core-android-arm64": 1.3.4
"@swc/core-darwin-arm64": 1.3.4
"@swc/core-darwin-x64": 1.3.4
"@swc/core-freebsd-x64": 1.3.4
"@swc/core-linux-arm-gnueabihf": 1.3.4
"@swc/core-linux-arm64-gnu": 1.3.4
"@swc/core-linux-arm64-musl": 1.3.4
"@swc/core-linux-x64-gnu": 1.3.4
"@swc/core-linux-x64-musl": 1.3.4
"@swc/core-win32-arm64-msvc": 1.3.4
"@swc/core-win32-ia32-msvc": 1.3.4
"@swc/core-win32-x64-msvc": 1.3.4
dependenciesMeta:
"@swc/core-android-arm-eabi":
optional: true
@@ -12729,7 +12745,7 @@ __metadata:
optional: true
bin:
swcx: run_swcx.js
checksum: bead8463cd7c11e2cd87d3835045e4a245e755409e912a40c575026a0475cc0010fa6ef48936ea5f7e62c84cdc63c21a83d61755813f2ba9b565d397fad7c5f5
checksum: 24b4ca4a096fea53056ed227a8aa09aa38cfe5eef344451397e66a2d183ded119872cf4fc8c671c0a6eb34985537cbf8d8a7e742b9e27dad0735426693d11dc8
languageName: node
linkType: hard
@@ -12743,13 +12759,14 @@ __metadata:
linkType: hard
"@swc/jest@npm:^0.2.22":
version: 0.2.22
resolution: "@swc/jest@npm:0.2.22"
version: 0.2.23
resolution: "@swc/jest@npm:0.2.23"
dependencies:
"@jest/create-cache-key-function": ^27.4.2
jsonc-parser: ^3.2.0
peerDependencies:
"@swc/core": "*"
checksum: c624cfcc9325a719fc7d811536011c4bde0c63c808827b47d7bbcc57621323146cb3891d8702fd01c1bebfc54a9148692f772af4db8e839eb2c6ccd7850fa5f5
checksum: 1c7db1f6995916ad77369311be078e9d33f2c6a586be9c87927f6a36d124dcd49c29d8c596758cd9dbf4e388ec30f41989e70e574eb59bef3fb41d3131629763
languageName: node
linkType: hard
@@ -12776,18 +12793,18 @@ __metadata:
languageName: node
linkType: hard
"@tanstack/query-core@npm:4.3.8":
version: 4.3.8
resolution: "@tanstack/query-core@npm:4.3.8"
checksum: 25ea16db7632f5acc7c80e60b9f1410cf9df430240ec5077a1607c3ffea14db2c78db800f7bc70efafd7ce26f7216cda767824fa279049cc9c7e40ac1818f38e
"@tanstack/query-core@npm:4.7.2":
version: 4.7.2
resolution: "@tanstack/query-core@npm:4.7.2"
checksum: 5be625bf27505acded2c5add69c54a48be8c6cacdf4ea821ef499ca449a3a5694bda995bdc2439a83039563f91cb3424b765c597fd28861c6a867efda039e6d1
languageName: node
linkType: hard
"@tanstack/react-query@npm:^4.1.3":
version: 4.3.9
resolution: "@tanstack/react-query@npm:4.3.9"
version: 4.7.2
resolution: "@tanstack/react-query@npm:4.7.2"
dependencies:
"@tanstack/query-core": 4.3.8
"@tanstack/query-core": 4.7.2
use-sync-external-store: ^1.2.0
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -12798,7 +12815,7 @@ __metadata:
optional: true
react-native:
optional: true
checksum: 1f77aadda55722519458185b4db5378d05d95bcbe9f7c4fda0ef82121a975223ede1a56729db6030984b336e533c04b1c7aa8fed344e5c52ec73a0486b65f8e7
checksum: 07f6ec6c44c6826986167d772d78051414f15f08c874fe38187e1175a527ec71f77025d1466651802b8cde991618acece668fc17d7dc62af837ad7fb02882fa3
languageName: node
linkType: hard
@@ -13455,7 +13472,17 @@ __metadata:
languageName: node
linkType: hard
"@types/dockerode@npm:^3.3.0, @types/dockerode@npm:^3.3.8":
"@types/dockerode@npm:^3.3.0":
version: 3.3.10
resolution: "@types/dockerode@npm:3.3.10"
dependencies:
"@types/docker-modem": "*"
"@types/node": "*"
checksum: ef2231adebbdc1876a00fd16a51963ed2ea05a2305031467420c753f77a27a6f2a47617e2f4a42702be84c88046a5a5f6dfd471e3579f11f21166f539a3d2373
languageName: node
linkType: hard
"@types/dockerode@npm:^3.3.8":
version: 3.3.9
resolution: "@types/dockerode@npm:3.3.9"
dependencies:
@@ -13575,14 +13602,14 @@ __metadata:
linkType: hard
"@types/express@npm:*, @types/express@npm:4.17.13, @types/express@npm:^4.17.13, @types/express@npm:^4.17.6":
version: 4.17.13
resolution: "@types/express@npm:4.17.13"
version: 4.17.14
resolution: "@types/express@npm:4.17.14"
dependencies:
"@types/body-parser": "*"
"@types/express-serve-static-core": ^4.17.18
"@types/qs": "*"
"@types/serve-static": "*"
checksum: 12a2a0e6c4b993fc0854bec665906788aea0d8ee4392389d7a98a5de1eefdd33c9e1e40a91f3afd274011119c506f7b4126acb97fae62ae20b654974d44cba12
checksum: 15c1af46d02de834e4a225eccaa9d85c0370fdbb3ed4e1bc2d323d24872309961542b993ae236335aeb3e278630224a6ea002078d39e651d78a3b0356b1eaa79
languageName: node
linkType: hard
@@ -13952,9 +13979,9 @@ __metadata:
linkType: hard
"@types/luxon@npm:*, @types/luxon@npm:^3.0.0":
version: 3.0.0
resolution: "@types/luxon@npm:3.0.0"
checksum: 7738d3f4b91097a8139eca966ab53c6b40bb417b2cc2014c3bbd0aee033d6ff54af14c62046c2eb042434923b6bf796874f24b2af90e07ef422e6d841463d4b2
version: 3.0.1
resolution: "@types/luxon@npm:3.0.1"
checksum: a81444f9b474ea9b3063ab4cc68b917a2634e38b4e229f86c78c35023a32bf5e8d1044d7c229c011291662c976cb6c4cf109dc3d2077c571790a31779a554178
languageName: node
linkType: hard
@@ -15378,19 +15405,20 @@ __metadata:
languageName: node
linkType: hard
"@whatwg-node/fetch@npm:^0.4.0":
version: 0.4.4
resolution: "@whatwg-node/fetch@npm:0.4.4"
"@whatwg-node/fetch@npm:^0.3.0":
version: 0.3.2
resolution: "@whatwg-node/fetch@npm:0.3.2"
dependencies:
"@peculiar/webcrypto": ^1.4.0
abort-controller: ^3.0.0
busboy: ^1.6.0
event-target-polyfill: ^0.0.3
form-data-encoder: ^1.7.1
formdata-node: ^4.3.1
node-fetch: ^2.6.7
undici: ^5.8.0
web-streams-polyfill: ^3.2.0
checksum: f91ebad3c07f1244dec0c57b1bdc4d70e8e2b0eccd237407f649439eb091e1e8a23dfb8e13159468c727537c5ebf6f66f20f5659ca682495cd1a0752de2c2fad
checksum: d9cb1b1293694edf0d61889512e5b5a0b8b69db2cf8c4cca4acdbbe652f899742456d10954312ef96a8f7257a898d6275b50df03cc481e5a97740cb301930892
languageName: node
linkType: hard
@@ -18896,7 +18924,7 @@ __metadata:
languageName: node
linkType: hard
"cosmiconfig-typescript-loader@npm:^4.0.0":
"cosmiconfig-typescript-loader@npm:4.0.0, cosmiconfig-typescript-loader@npm:^4.0.0":
version: 4.0.0
resolution: "cosmiconfig-typescript-loader@npm:4.0.0"
peerDependencies:
@@ -27351,6 +27379,13 @@ __metadata:
languageName: node
linkType: hard
"jsonc-parser@npm:^3.2.0":
version: 3.2.0
resolution: "jsonc-parser@npm:3.2.0"
checksum: 946dd9a5f326b745aa326d48a7257e3f4a4b62c5e98ec8e49fa2bdd8d96cef7e6febf1399f5c7016114fd1f68a1c62c6138826d5d90bc650448e3cf0951c53c7
languageName: node
linkType: hard
"jsonfile@npm:^4.0.0":
version: 4.0.0
resolution: "jsonfile@npm:4.0.0"
@@ -28552,17 +28587,10 @@ __metadata:
languageName: node
linkType: hard
"luxon@npm:^2.4.0":
version: 2.5.0
resolution: "luxon@npm:2.5.0"
checksum: 2fccce6bbdfc8f13c5a8c148ff045ab3b10f4f80cac28dd92575588fffce9b2d7197096d7fedcc61a6245b59f4233507797f530e63f22b9ae4c425dff2909ae3
languageName: node
linkType: hard
"luxon@npm:^3.0.0":
version: 3.0.1
resolution: "luxon@npm:3.0.1"
checksum: aa966eb919bf95b1bd819cda784d1f6f66e3fb65bd9ec7bf68b6a978eeb4e3e14f7e2275021b473f93b15b6b7ba2e5a30471e53add3929a7e695fcfd6dd40ec8
version: 3.0.4
resolution: "luxon@npm:3.0.4"
checksum: d0908c3951da2a10ccf23040210ead23b0da5366a9d0954e7d5db3560189a7bd703d8af1e00084f197effc9cd7158d1bddf32886d98a70d59ce9bc3fe88bbce0
languageName: node
linkType: hard
@@ -30943,7 +30971,19 @@ __metadata:
languageName: node
linkType: hard
"openid-client@npm:^5.1.3, openid-client@npm:^5.1.6":
"openid-client@npm:^5.1.3":
version: 5.1.10
resolution: "openid-client@npm:5.1.10"
dependencies:
jose: ^4.1.4
lru-cache: ^6.0.0
object-hash: ^2.0.1
oidc-token-hash: ^5.0.1
checksum: 38a4bf08ea4ee4576043968307cf53f0369df224bd025c1bc348b295152df36c47d2a836dfe1505d15c6b79c05f86aadefad798bd3ea3ccbe90834be01f2245c
languageName: node
linkType: hard
"openid-client@npm:^5.1.6":
version: 5.1.9
resolution: "openid-client@npm:5.1.9"
dependencies:
@@ -37067,8 +37107,8 @@ __metadata:
linkType: hard
"swagger-ui-react@npm:^4.11.1":
version: 4.14.0
resolution: "swagger-ui-react@npm:4.14.0"
version: 4.14.2
resolution: "swagger-ui-react@npm:4.14.2"
dependencies:
"@babel/runtime-corejs3": ^7.18.9
"@braintree/sanitize-url": =6.0.0
@@ -37106,7 +37146,7 @@ __metadata:
peerDependencies:
react: ">=17.0.0"
react-dom: ">=17.0.0"
checksum: dbd6ce54bd8d2665aa8cd8b983c7cfd4407a710a6fc662ef61e611d54383abc082f15e55730f70ae214481d8e0c0ddeba100091747315edd5d455657c9fdf346
checksum: ee8d19bdfd32032926d86a1c547b5fd423f658e0e4c29bd2b96808143f7ef5c1e094fb6c2a0a6e3f20b8a5d7e0a7732f81a31fc10f8e6e6702b8b1333a40164c
languageName: node
linkType: hard