diff --git a/workspaces/quay/.changeset/polite-cobras-share.md b/workspaces/quay/.changeset/polite-cobras-share.md new file mode 100644 index 00000000000..579135fa8f9 --- /dev/null +++ b/workspaces/quay/.changeset/polite-cobras-share.md @@ -0,0 +1,8 @@ +--- +'@backstage-community/plugin-scaffolder-backend-module-quay': patch +'@backstage-community/plugin-quay-backend': patch +'@backstage-community/plugin-quay-common': patch +'@backstage-community/plugin-quay': patch +--- + +Add CI bump-trust test coverage and contributor guides for Quay plugins. diff --git a/workspaces/quay/README.md b/workspaces/quay/README.md index 919ea101e59..632ae09b833 100644 --- a/workspaces/quay/README.md +++ b/workspaces/quay/README.md @@ -6,10 +6,12 @@ This workspace contains plugins for viewing and managing [Quay](https://docs.qua This workspace is composed of several packages: -- [quay](./plugins/quay/README.md) - The frontend plugin that displays information about your container images from the Quay registry on entity pages. -- [quay-backend](./plugins/quay-backend/README.md) - The backend plugin that queries the Quay API, with support for permissions and OAuth2 access token authentication. -- [quay-actions](./plugins/quay-actions/README.md) - A scaffolder backend module providing software template actions for Quay, such as creating a Quay repository. -- [quay-common](./plugins/quay-common/README.md) - A common library containing shared types and utilities used by the other Quay plugins. +- [quay](./plugins/quay/) — The frontend plugin that displays information about your container images from the Quay registry on entity pages. Operator docs: [README](./plugins/quay/README.md); contributors: [CONTRIBUTING](./plugins/quay/CONTRIBUTING.md) +- [quay-backend](./plugins/quay-backend/) — The backend plugin that queries the Quay API, with support for permissions and OAuth2 access token authentication. Operator docs: [README](./plugins/quay-backend/README.md); contributors: [CONTRIBUTING](./plugins/quay-backend/CONTRIBUTING.md) +- [quay-actions](./plugins/quay-actions/) — A scaffolder backend module providing software template actions for Quay, such as creating a Quay repository. Operator docs: [README](./plugins/quay-actions/README.md); contributors: [CONTRIBUTING](./plugins/quay-actions/CONTRIBUTING.md) +- [quay-common](./plugins/quay-common/) — A common library containing shared types and utilities used by the other Quay plugins. Operator docs: [README](./plugins/quay-common/README.md); contributors: [CONTRIBUTING](./plugins/quay-common/CONTRIBUTING.md) + +The `packages/app` and `packages/backend` directories are leftover stubs and are **not** used for day-to-day development. Prefer each package's `dev/` harness — see the contributor guides above. ## Quick start diff --git a/workspaces/quay/plugins/quay-actions/CONTRIBUTING.md b/workspaces/quay/plugins/quay-actions/CONTRIBUTING.md index 2265d3335aa..a2a66947bf3 100644 --- a/workspaces/quay/plugins/quay-actions/CONTRIBUTING.md +++ b/workspaces/quay/plugins/quay-actions/CONTRIBUTING.md @@ -1,24 +1,69 @@ -# Setting up the development environment for Quay actions - -1. Add the local package dependency to the Backstage instance - - ```shell - yarn workspace backend add file:./plugins/quay-actions - ``` - -2. [Register](./README.md#configuration) the Quay actions in your Backstage project -3. **Optional**: You can use the sample template from this repository and add it as `locations` in your `app-config.yaml` file - - ```yaml - --- - catalog: - locations: - - type: file - target: ../../plugins/quay-actions/examples/templates/01-quay-template.yaml - rules: - - allow: [Template] - ``` - -4. Run `yarn start` -5. If you don't have a Quay account created yet you can create one for free on the [quay](https://quay.io) website -6. Start using the Quay actions in your templates +# Contributing — Quay scaffolder backend module + +Developer guide for `@backstage-community/plugin-scaffolder-backend-module-quay`. For operator install and configuration, see [README.md](./README.md). + +## Prerequisites + +- Node.js **22 or 24** (see workspace `engines` in the workspace root `package.json`) +- Yarn (workspace uses its own `yarn.lock`; run commands from `workspaces/quay`) + +## Development harness + +Start this module in isolation: + +```bash +yarn workspace @backstage-community/plugin-scaffolder-backend-module-quay start +``` + +This runs a minimal backend with `@backstage/plugin-scaffolder-backend` and the Quay scaffolder module (`dev/index.ts`). Use it for action registration and local scaffolder smoke. + +Only one plugin `dev/` harness should run on port **7007** at a time. + +### Environment setup + +The `quay:create-repository` action takes Quay credentials and URLs as **template inputs** (see the [example template](./examples/templates/01-quay-template.yaml)). Use local-only placeholder values for development — do not commit secrets. + +To exercise that sample template from a consumer Backstage app (or a fuller local app that loads catalog templates), add it as a catalog location in an untracked `app-config.local.yaml` (or your app's `app-config.yaml`): + +```yaml +catalog: + locations: + - type: file + target: ../../plugins/quay-actions/examples/templates/01-quay-template.yaml + rules: + - allow: [Template] +``` + +Adjust `target` to the path from that app's config file. You need a Quay account and an OAuth token to run the create-repository step for real. + +## Validation commands + +From the workspace root (`workspaces/quay`): + +```bash +yarn workspace @backstage-community/plugin-scaffolder-backend-module-quay test +yarn workspace @backstage-community/plugin-scaffolder-backend-module-quay lint +yarn tsc +``` + +## What automated tests cover + +CI exercises: + +- **Module wiring** — `startTestBackend` asserts `scaffolder.addActions` registers `quay:create-repository` +- **Action handler** — create-repository request/response and error paths (unit tests) + +CI does **not** replace reading [Backstage release notes](https://github.com/backstage/backstage/releases) for the `@backstage/*` packages this module depends on. After a dependency bump, review those notes and decide whether additional validation is warranted. + +## Optional manual smoke checklist + +Use when you change scaffolder integration code or are reviewing a Backstage version bump: + +1. Start this harness and confirm the backend starts without errors. In the logs, look for scaffolder listing enabled actions and verify `quay:create-repository` is present (alongside built-in actions such as `fetch:template` and `debug:log`). +2. To run the [sample template](./examples/templates/01-quay-template.yaml) end-to-end (create a real Quay repository), use a consumer Backstage app or overlays with the catalog location from [Environment setup](#environment-setup) and a Quay OAuth token — not covered by this harness alone. + +## Related packages + +- [Quay backend](../quay-backend/CONTRIBUTING.md) — registry API plugin +- [Quay frontend](../quay/CONTRIBUTING.md) — entity page UI +- [Quay common](../quay-common/CONTRIBUTING.md) — shared types/permissions diff --git a/workspaces/quay/plugins/quay-actions/README.md b/workspaces/quay/plugins/quay-actions/README.md index fff00501819..2cae2ee65cd 100644 --- a/workspaces/quay/plugins/quay-actions/README.md +++ b/workspaces/quay/plugins/quay-actions/README.md @@ -6,6 +6,8 @@ The following actions are currently supported in this module: - Create a Quay repository +**Contributors:** see [CONTRIBUTING.md](./CONTRIBUTING.md) for development harnesses, tests, and bump-review guidance. + ## Installation Run the following command to install the action package in your Backstage project diff --git a/workspaces/quay/plugins/quay-actions/dev/index.ts b/workspaces/quay/plugins/quay-actions/dev/index.ts new file mode 100644 index 00000000000..684ba71c253 --- /dev/null +++ b/workspaces/quay/plugins/quay-actions/dev/index.ts @@ -0,0 +1,24 @@ +/* + * Copyright 2026 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 { createBackend } from '@backstage/backend-defaults'; + +const backend = createBackend(); + +backend.add(import('@backstage/plugin-scaffolder-backend')); +backend.add(import('../src')); + +backend.start(); diff --git a/workspaces/quay/plugins/quay-actions/package.json b/workspaces/quay/plugins/quay-actions/package.json index 945748afd75..6a8476b286a 100644 --- a/workspaces/quay/plugins/quay-actions/package.json +++ b/workspaces/quay/plugins/quay-actions/package.json @@ -43,7 +43,10 @@ "yaml": "^2.6.0" }, "devDependencies": { + "@backstage/backend-defaults": "^0.17.3", + "@backstage/backend-test-utils": "^1.11.4", "@backstage/cli": "^0.36.3", + "@backstage/plugin-scaffolder-backend": "^4.0.1", "@backstage/plugin-scaffolder-node-test-utils": "^0.3.12" }, "files": [ diff --git a/workspaces/quay/plugins/quay-actions/src/module.test.ts b/workspaces/quay/plugins/quay-actions/src/module.test.ts new file mode 100644 index 00000000000..9f97be289f0 --- /dev/null +++ b/workspaces/quay/plugins/quay-actions/src/module.test.ts @@ -0,0 +1,40 @@ +/* + * Copyright 2026 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 { mockServices, startTestBackend } from '@backstage/backend-test-utils'; +import { scaffolderActionsExtensionPoint } from '@backstage/plugin-scaffolder-node'; + +import { scaffolderModuleQuayAction } from './module'; + +describe('scaffolderModuleQuayAction', () => { + it('registers createQuayRepository via the scaffolder extension point', async () => { + const registeredIds: string[] = []; + const extensionPoint = { + addActions: (...actions: { id: string }[]) => { + registeredIds.push(...actions.map(action => action.id)); + }, + }; + + await startTestBackend({ + extensionPoints: [[scaffolderActionsExtensionPoint, extensionPoint]], + features: [ + scaffolderModuleQuayAction, + mockServices.rootConfig.factory({ data: {} }), + ], + }); + + expect(registeredIds).toEqual(['quay:create-repository']); + }); +}); diff --git a/workspaces/quay/plugins/quay-backend/CONTRIBUTING.md b/workspaces/quay/plugins/quay-backend/CONTRIBUTING.md new file mode 100644 index 00000000000..a8f79667345 --- /dev/null +++ b/workspaces/quay/plugins/quay-backend/CONTRIBUTING.md @@ -0,0 +1,92 @@ +# Contributing — Quay backend plugin + +Developer guide for `@backstage-community/plugin-quay-backend`. For operator install and configuration, see [README.md](./README.md). + +## Prerequisites + +- Node.js **22 or 24** (see workspace `engines` in the workspace root `package.json`) +- Yarn (workspace uses its own `yarn.lock`; run commands from `workspaces/quay`) + +## Development harness + +Start this plugin in isolation: + +```bash +yarn workspace @backstage-community/plugin-quay-backend start +``` + +This runs a minimal backend with the Quay backend plugin (`dev/index.ts`). Use it for router, permissions, and Quay API client work. + +Only one plugin `dev/` harness should run on port **7007** at a time. For UI smoke against a live entity page, also start the [frontend plugin harness](../quay/CONTRIBUTING.md) (separate process / port) after the backend is up. + +### Environment setup + +Configure Quay via the workspace [`app-config.yaml`](../../app-config.yaml) or an untracked `app-config.local.yaml`. Use local-only placeholder values for development — do not commit secrets. + +| Config key / variable | Purpose | +| ---------------------------- | ------------------------------------------------------------------------------------------ | +| `quay.apiUrl` | Quay API base URL (single-instance) | +| `quay.apiKey` | OAuth access token / API key (placeholder locally) | +| `quay.uiUrl` | Quay UI base URL (optional, single-instance) | +| `quay.instances` | Multi-instance list (`name`, `apiUrl`, `apiKey`, …) — do not mix with single-instance keys | +| `BACKSTAGE_DEV_STATIC_TOKEN` | Optional static bearer token if you enable `backend.auth.externalAccess` for `curl` | + +Optional overrides can go in an untracked `app-config.local.yaml` at the workspace root. + +### API authentication for `curl` + +When the default backend auth policy applies, authenticated requests need a Bearer token. You can register a **static** backend access token (see [service-to-service auth](https://backstage.io/docs/auth/service-to-service-auth)): + +```yaml +backend: + auth: + externalAccess: + - type: static + options: + token: ${BACKSTAGE_DEV_STATIC_TOKEN} + subject: user:default/guest +``` + +Example (adjust instance / org / repo): + +```bash +curl -H "Authorization: Bearer ${BACKSTAGE_DEV_STATIC_TOKEN}" \ + "http://localhost:7007/api/quay/default/repository/my-org/my-repo/tag" +``` + +Requests without a valid `Authorization: Bearer …` header are rejected when the default auth policy applies. Viewing Quay data also requires the `quay.view.read` permission (`quayViewPermission`). + +## Validation commands + +From the workspace root (`workspaces/quay`): + +```bash +yarn workspace @backstage-community/plugin-quay-backend test +yarn workspace @backstage-community/plugin-quay-backend lint +yarn tsc +``` + +## What automated tests cover + +CI exercises: + +- **Plugin wiring** — `startTestBackend` mount (`httpRouter.use`) +- **Permission middleware** — DENY returns 403 +- **Router validation** — 400 when `instanceName` / `org` / `repo` are missing or whitespace +- **QuayService** — config parsing and HTTP client behavior (unit tests) + +CI does **not** replace reading [Backstage release notes](https://github.com/backstage/backstage/releases) for the `@backstage/*` packages this plugin depends on. After a dependency bump, review those notes and decide whether additional validation is warranted. + +## Optional manual smoke checklist + +Use when you change backend integration code or are reviewing a Backstage version bump: + +1. Configure Quay placeholders and start this harness. +2. Call a tag list endpoint with Bearer token (see above). Expect `200` with tag JSON when config and permissions allow, or a clear `403` / `404` for deny / unknown instance. +3. Full entity-page UI smoke needs the [frontend harness](../quay/CONTRIBUTING.md) as well. + +## Related packages + +- [Quay frontend](../quay/CONTRIBUTING.md) — entity page UI +- [Quay common](../quay-common/CONTRIBUTING.md) — shared permission contracts +- [Quay scaffolder actions](../quay-actions/CONTRIBUTING.md) — `quay:create-repository` diff --git a/workspaces/quay/plugins/quay-backend/README.md b/workspaces/quay/plugins/quay-backend/README.md index f78663c1319..84ef6ac649b 100644 --- a/workspaces/quay/plugins/quay-backend/README.md +++ b/workspaces/quay/plugins/quay-backend/README.md @@ -5,6 +5,8 @@ A simple plugin that queries the quay.io api, but provides additional features l - setting permissions - using OAuth2 access tokens for authentication +**Contributors:** see [CONTRIBUTING.md](./CONTRIBUTING.md) for development harnesses, tests, and bump-review guidance. + ## Setup ### Installation diff --git a/workspaces/quay/plugins/quay-backend/package.json b/workspaces/quay/plugins/quay-backend/package.json index 50aa8c3f68b..7502c4c7615 100644 --- a/workspaces/quay/plugins/quay-backend/package.json +++ b/workspaces/quay/plugins/quay-backend/package.json @@ -42,6 +42,7 @@ "express-promise-router": "^4.1.0" }, "devDependencies": { + "@backstage/backend-test-utils": "^1.11.4", "@backstage/cli": "^0.36.3", "@types/express": "^4.17.6", "@types/supertest": "^7.0.0", diff --git a/workspaces/quay/plugins/quay-backend/src/plugin.test.ts b/workspaces/quay/plugins/quay-backend/src/plugin.test.ts index 311431a7006..9fccaaef66e 100644 --- a/workspaces/quay/plugins/quay-backend/src/plugin.test.ts +++ b/workspaces/quay/plugins/quay-backend/src/plugin.test.ts @@ -14,10 +14,30 @@ * limitations under the License. */ +import { mockServices, startTestBackend } from '@backstage/backend-test-utils'; + import { quayPlugin } from './plugin'; -describe('quay-backend', () => { - it('should export the quay backend plugin', () => { - expect(quayPlugin).toBeDefined(); +describe('quayPlugin', () => { + it('registers the quay backend plugin router', async () => { + const httpRouterMock = mockServices.httpRouter.mock(); + + await startTestBackend({ + extensionPoints: [], + features: [ + quayPlugin, + httpRouterMock.factory, + mockServices.rootConfig.factory({ + data: { + quay: { + apiUrl: 'https://quay.example.com', + apiKey: 'test-token', + }, + }, + }), + ], + }); + + expect(httpRouterMock.use).toHaveBeenCalled(); }); }); diff --git a/workspaces/quay/plugins/quay-backend/src/services/router.test.ts b/workspaces/quay/plugins/quay-backend/src/services/router.test.ts index 4536c28fe62..6492d44efaf 100644 --- a/workspaces/quay/plugins/quay-backend/src/services/router.test.ts +++ b/workspaces/quay/plugins/quay-backend/src/services/router.test.ts @@ -297,6 +297,36 @@ describe('createRouter', () => { const response = await request(app).get(endpoint); expect(response.status).toEqual(403); + expect(response.body.error).toEqual( + 'Unauthorized, please ensure you have the correct permissions.', + ); + }, + ); + + it.each([ + { + endpoint: '/default/repository/%20/repo/tag', + description: 'whitespace org', + }, + { + endpoint: '/default/repository/org/%20/tag', + description: 'whitespace repo', + }, + { + endpoint: '/default/repository/%20/%20/manifest/sha256:123', + description: 'whitespace org and repo on manifest', + }, + ])( + 'should return 400 for missing required parameters ($description)', + async ({ endpoint }) => { + const response = await request(app).get(endpoint); + expect(response.status).toEqual(400); + expect(response.body.error).toEqual('Missing required parameters'); + expect(mockQuayService.getQuayInstance).not.toHaveBeenCalled(); + expect(mockQuayService.getTags).not.toHaveBeenCalled(); + expect(mockQuayService.getLabels).not.toHaveBeenCalled(); + expect(mockQuayService.getManifestByDigest).not.toHaveBeenCalled(); + expect(mockQuayService.getSecurityDetails).not.toHaveBeenCalled(); }, ); }); diff --git a/workspaces/quay/plugins/quay-common/CONTRIBUTING.md b/workspaces/quay/plugins/quay-common/CONTRIBUTING.md new file mode 100644 index 00000000000..5a283e57e8d --- /dev/null +++ b/workspaces/quay/plugins/quay-common/CONTRIBUTING.md @@ -0,0 +1,53 @@ +# Contributing — Quay common library + +Developer guide for `@backstage-community/plugin-quay-common`. For package overview, see [README.md](./README.md). + +## Prerequisites + +- Node.js **22 or 24** (see workspace `engines` in the workspace root `package.json`) +- Yarn (workspace uses its own `yarn.lock`; run commands from `workspaces/quay`) + +## Development harness + +This is a **common library** (permissions and shared constants). It has no standalone `dev/` server. + +Validate changes through: + +- Package unit tests (permission contract) +- Dependent plugin harnesses: [quay-backend](../quay-backend/CONTRIBUTING.md) and [quay](../quay/CONTRIBUTING.md) + +## Validation commands + +From the workspace root (`workspaces/quay`): + +```bash +yarn workspace @backstage-community/plugin-quay-common test +yarn workspace @backstage-community/plugin-quay-common lint +yarn tsc +``` + +## What automated tests cover + +CI exercises: + +- **Permission contract** — `quayViewPermission` name/attributes and membership in `quayPermissions` + +CI does **not** replace reading [Backstage release notes](https://github.com/backstage/backstage/releases) for shared `@backstage/*` permission packages. After a dependency bump, review those notes and decide whether additional validation is warranted. + +## Optional manual smoke checklist + +Use when you change permission exports or are reviewing a Backstage version bump that touches permission APIs: + +1. Run the package tests above. +2. Start the [backend harness](../quay-backend/CONTRIBUTING.md) and confirm DENY/ALLOW behavior still matches `quay.view.read` policy expectations. + +## When a consumer app or overlays are needed + +- Day-to-day and bump PRs: unit tests + dependent plugin `dev/` harnesses. +- Workspace `packages/app` / `packages/backend` are leftover stubs and are **not** the default path; do not expand them for bump trust. + +## Related packages + +- [Quay backend](../quay-backend/CONTRIBUTING.md) — registers `quayPermissions` and enforces `quayViewPermission` +- [Quay frontend](../quay/CONTRIBUTING.md) — UI consumers of shared constants +- [Quay scaffolder actions](../quay-actions/CONTRIBUTING.md) — template actions diff --git a/workspaces/quay/plugins/quay-common/README.md b/workspaces/quay/plugins/quay-common/README.md index 40fbd9de40b..6caf31fea0f 100644 --- a/workspaces/quay/plugins/quay-common/README.md +++ b/workspaces/quay/plugins/quay-common/README.md @@ -4,6 +4,8 @@ Welcome to the quay-common plugin! This plugin contains common utilities for the quay plugin. +**Contributors:** see [CONTRIBUTING.md](./CONTRIBUTING.md) for development harnesses, tests, and bump-review guidance. + # Quay plugin for Backstage The Quay plugin displays the information about your container images within the Quay registry in your Backstage application. diff --git a/workspaces/quay/plugins/quay-common/src/permissions.test.ts b/workspaces/quay/plugins/quay-common/src/permissions.test.ts new file mode 100644 index 00000000000..82e91e9375f --- /dev/null +++ b/workspaces/quay/plugins/quay-common/src/permissions.test.ts @@ -0,0 +1,27 @@ +/* + * Copyright 2026 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 { quayPermissions, quayViewPermission } from './permissions'; + +describe('quay permissions', () => { + it('defines quayViewPermission with the expected contract', () => { + expect(quayViewPermission.name).toEqual('quay.view.read'); + expect(quayViewPermission.attributes).toEqual({ action: 'read' }); + }); + + it('includes quayViewPermission in quayPermissions', () => { + expect(quayPermissions).toEqual([quayViewPermission]); + }); +}); diff --git a/workspaces/quay/plugins/quay/CONTRIBUTING.md b/workspaces/quay/plugins/quay/CONTRIBUTING.md index af9697ac667..b888d3bdb42 100644 --- a/workspaces/quay/plugins/quay/CONTRIBUTING.md +++ b/workspaces/quay/plugins/quay/CONTRIBUTING.md @@ -1,13 +1,72 @@ -# Setting up the development environment for Quay plugin +# Contributing — Quay frontend plugin -In [Backstage plugin terminology](https://backstage.io/docs/local-dev/cli-build-system#package-roles), the Quay plugin is a front-end plugin. However, it requires a backend proxy to be available at all times. Therefore, you need to run a backend instance in the development environment as well. +Developer guide for `@backstage-community/plugin-quay`. For operator install and configuration, see [README.md](./README.md). -You can run the following commands concurrently from the root repository to start a live development session: +## Prerequisites -```console -yarn start-backend +- Node.js **22 or 24** (see workspace `engines` in the workspace root `package.json`) +- Yarn (workspace uses its own `yarn.lock`; run commands from `workspaces/quay`) + +## Development harness + +Start the frontend plugin harness: + +```bash +yarn workspace @backstage-community/plugin-quay start ``` -```console -yarn workspace @backstage-community/plugin-quay run start +This uses `dev/index.tsx` (new frontend system). For the legacy frontend entry, see `dev/legacy.tsx`. + +The default harness registers a `MockQuayApiClient` and catalog fixtures under `dev/__data__/`, so you can smoke the entity page and tag UI **without** starting the backend plugin. That is enough for a quick local check of layout, navigation, and mocked tag/security/label data. + +For live Quay API smoke through the real backend (or proxy), also start the [backend harness](../quay-backend/CONTRIBUTING.md) (port **7007**) and use a client wired to that backend instead of the mock. Only one backend `dev/` harness should run on **7007** at a time. + +### Environment setup + +Configure Quay via the workspace [`app-config.yaml`](../../app-config.yaml) or an untracked `app-config.local.yaml`. Use local-only placeholder values — do not commit secrets. + +| Config key | Purpose | +| ----------------------------------------------- | ---------------------------------------------------------- | +| `quay.apiUrl` / `quay.proxyPath` / `quay.uiUrl` | Single-instance frontend client config | +| `quay.instances` | Multi-instance list — do not mix with single-instance keys | +| Entity annotation (see operator README) | Org/repo (and optional instance) on the catalog entity | + +## Validation commands + +From the workspace root (`workspaces/quay`): + +```bash +yarn workspace @backstage-community/plugin-quay test +yarn workspace @backstage-community/plugin-quay lint +yarn tsc ``` + +## What automated tests cover + +CI exercises: + +- **API factory / config contract** — including mixed single- and multi-instance config throw +- **Hooks** — `useTags` / related hooks with realistic API response shapes +- **Components** — repository and tag page unit coverage + +CI does **not** replace reading [Backstage release notes](https://github.com/backstage/backstage/releases) for the `@backstage/*` packages this plugin depends on. After a dependency bump, review those notes and decide whether additional validation is warranted. + +## Optional manual smoke checklist + +Use when you change frontend integration code or are reviewing a Backstage version bump: + +1. Start this frontend harness alone and open a mock Quay entity (for example `quay-instance` / `quay-instance-devel`). Confirm the tag list and related views render from the fixtures in `dev/__data__/`. +2. For live API / permissions smoke, start the [backend harness](../quay-backend/CONTRIBUTING.md) as well and confirm the tag list loads against a real Quay config (or a clear error when config/permissions fail). +3. Exhaustive entity-page matrices and credential-backed e2e belong in a consumer app or overlays — not required for bump PR merge gates. + +## When a consumer app or overlays are needed + +- Day-to-day and bump PRs: plugin `dev/` harnesses + automated tests. +- Workspace `packages/app` / `packages/backend` are leftover stubs and are **not** the default path; do not expand them for bump trust. +- Live Quay tenant / overlay Playwright: consumer RHDH deployment or `rhdh-plugin-export-overlays`. + +## Related packages + +- [Quay backend](../quay-backend/CONTRIBUTING.md) — API + permissions +- [Quay common](../quay-common/CONTRIBUTING.md) — shared permission contracts +- [Quay scaffolder actions](../quay-actions/CONTRIBUTING.md) — template actions diff --git a/workspaces/quay/plugins/quay/README.md b/workspaces/quay/plugins/quay/README.md index 78bf174c20f..8999a0cd2c3 100644 --- a/workspaces/quay/plugins/quay/README.md +++ b/workspaces/quay/plugins/quay/README.md @@ -2,6 +2,8 @@ The Quay plugin displays the information about your container images within the Quay registry in your Backstage application. +**Contributors:** see [CONTRIBUTING.md](./CONTRIBUTING.md) for development harnesses, tests, and bump-review guidance. + ## For administrators ### Installation diff --git a/workspaces/quay/plugins/quay/src/hooks/useTags.test.ts b/workspaces/quay/plugins/quay/src/hooks/useTags.test.ts index 92217467981..134b660efd3 100644 --- a/workspaces/quay/plugins/quay/src/hooks/useTags.test.ts +++ b/workspaces/quay/plugins/quay/src/hooks/useTags.test.ts @@ -23,12 +23,9 @@ import { useTags } from './quay'; jest.mock('@backstage/core-plugin-api', () => ({ ...jest.requireActual('@backstage/core-plugin-api'), useApi: jest.fn().mockReturnValue({ - getSecurityDetails: ( - _instance: string | undefined, - org: string, - _repo: string, - _digest: string, - ) => org, + getSecurityDetails: jest + .fn() + .mockReturnValue({ data: null, status: 'unsupported' }), getTags: jest.fn().mockReturnValue({ tags: [{ name: 'tag1', manifest_digest: 'manifestDigest' }], }), @@ -41,6 +38,7 @@ describe('useTags', () => { await waitFor(() => { expect(result.current.loading).toBeFalsy(); expect(result.current.data).toHaveLength(1); + expect(result.current.data[0].securityStatus).toBe('unsupported'); }); }); diff --git a/workspaces/quay/yarn.lock b/workspaces/quay/yarn.lock index b0d68298f9f..4c5ef5a8c65 100644 --- a/workspaces/quay/yarn.lock +++ b/workspaces/quay/yarn.lock @@ -23,6 +23,17 @@ __metadata: languageName: node linkType: hard +"@apidevtools/json-schema-ref-parser@npm:^14.2.1": + version: 14.2.1 + resolution: "@apidevtools/json-schema-ref-parser@npm:14.2.1" + dependencies: + js-yaml: "npm:^4.1.0" + peerDependencies: + "@types/json-schema": ^7.0.15 + checksum: 10/c3f6d97c0e885f9543b0654258ee16b2dd75463c8496499563c278089043317f89010e89eb51699c7fb38dfb83cc8592f0b0c4983b764b56789dc3329b25ebfd + languageName: node + linkType: hard + "@apidevtools/openapi-schemas@npm:^2.1.0": version: 2.1.0 resolution: "@apidevtools/openapi-schemas@npm:2.1.0" @@ -1451,6 +1462,7 @@ __metadata: "@backstage-community/plugin-quay-common": "workspace:^" "@backstage/backend-defaults": "npm:^0.17.3" "@backstage/backend-plugin-api": "npm:^1.9.2" + "@backstage/backend-test-utils": "npm:^1.11.4" "@backstage/cli": "npm:^0.36.3" "@backstage/config": "npm:^1.3.8" "@backstage/plugin-permission-common": "npm:^0.9.9" @@ -1522,8 +1534,11 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage-community/plugin-scaffolder-backend-module-quay@workspace:plugins/quay-actions" dependencies: + "@backstage/backend-defaults": "npm:^0.17.3" "@backstage/backend-plugin-api": "npm:^1.9.2" + "@backstage/backend-test-utils": "npm:^1.11.4" "@backstage/cli": "npm:^0.36.3" + "@backstage/plugin-scaffolder-backend": "npm:^4.0.1" "@backstage/plugin-scaffolder-node": "npm:^0.13.4" "@backstage/plugin-scaffolder-node-test-utils": "npm:^0.3.12" yaml: "npm:^2.6.0" @@ -1662,16 +1677,40 @@ __metadata: languageName: node linkType: hard -"@backstage/backend-plugin-api@npm:^1.9.2": - version: 1.9.2 - resolution: "@backstage/backend-plugin-api@npm:1.9.2" +"@backstage/backend-openapi-utils@npm:^0.7.0": + version: 0.7.0 + resolution: "@backstage/backend-openapi-utils@npm:0.7.0" dependencies: - "@backstage/cli-common": "npm:^0.2.2" + "@apidevtools/swagger-parser": "npm:^10.1.0" + "@backstage/backend-plugin-api": "npm:^1.9.3" + "@backstage/errors": "npm:^1.3.1" + "@backstage/types": "npm:^1.2.2" + "@types/express": "npm:^4.17.6" + "@types/express-serve-static-core": "npm:^4.17.5" + ajv: "npm:^8.16.0" + express: "npm:^4.22.0" + express-openapi-validator: "npm:^5.5.8" + express-promise-router: "npm:^4.1.0" + get-port: "npm:^5.1.1" + json-schema-to-ts: "npm:^3.0.0" + lodash: "npm:^4.17.21" + mockttp: "npm:^3.13.0" + openapi-merge: "npm:^1.3.2" + openapi3-ts: "npm:^3.1.2" + checksum: 10/4adc8b3b0d068d7d624d7dd5b1e2a38a850d410dfdeb105a3fdc62811ade22cf4d8a6759c13ae552e05ab8315d9767d98e7b806910c9ae62194db4d94e744ebf + languageName: node + linkType: hard + +"@backstage/backend-plugin-api@npm:^1.9.2, @backstage/backend-plugin-api@npm:^1.9.3": + version: 1.9.3 + resolution: "@backstage/backend-plugin-api@npm:1.9.3" + dependencies: + "@backstage/cli-common": "npm:^0.3.0" "@backstage/config": "npm:^1.3.8" "@backstage/errors": "npm:^1.3.1" - "@backstage/plugin-auth-node": "npm:^0.7.2" + "@backstage/plugin-auth-node": "npm:^0.7.3" "@backstage/plugin-permission-common": "npm:^0.9.9" - "@backstage/plugin-permission-node": "npm:^0.11.1" + "@backstage/plugin-permission-node": "npm:^0.11.2" "@backstage/types": "npm:^1.2.2" "@types/express": "npm:^4.17.6" "@types/json-schema": "npm:^7.0.6" @@ -1679,7 +1718,7 @@ __metadata: knex: "npm:^3.0.0" luxon: "npm:^3.0.0" zod: "npm:^3.25.76 || ^4.0.0" - checksum: 10/6592ae8fd1c4f23708b64506a90995a561347751fae4240bd6f1d2607ee8175163d3b03182297a647563875b7e3165466c043e930c9818805f7aa291a4b8c1b8 + checksum: 10/578530991f9ec6c35bc34ba5cb8037fe986d991717c2f62e18de2e17afc24e8355dbf370be18c8756e8067ca57b8a88849d6348e302bbccc749d594f451e777b languageName: node linkType: hard @@ -1727,18 +1766,18 @@ __metadata: languageName: node linkType: hard -"@backstage/catalog-client@npm:^1.15.1, @backstage/catalog-client@npm:^1.16.0": - version: 1.16.0 - resolution: "@backstage/catalog-client@npm:1.16.0" +"@backstage/catalog-client@npm:^1.15.1, @backstage/catalog-client@npm:^1.16.0, @backstage/catalog-client@npm:^1.16.1": + version: 1.16.1 + resolution: "@backstage/catalog-client@npm:1.16.1" dependencies: "@backstage/catalog-model": "npm:^1.9.0" "@backstage/errors": "npm:^1.3.1" - "@backstage/filter-predicates": "npm:^0.1.3" + "@backstage/filter-predicates": "npm:^0.1.4" "@backstage/plugin-catalog-common": "npm:^1.1.10" cross-fetch: "npm:^4.0.0" lodash: "npm:^4.17.21" uri-template: "npm:^2.0.0" - checksum: 10/2348646d6cdad5ff4c3df9dd909aa0e0f886fb652d35b4f78987c551a0c95a882b2641c3b823c5635c66a03d53690ba16675495eba67f7ec3cdbb0a9cc64133c + checksum: 10/7ecd7b38e71db7afbcde34ce7397a7e58681f28df78a1012a0200b73a381d99881f9a9a561f971b3fe4dc1a2e1075918ae3f292314e3ce94f3b3fe4afcf67d6a languageName: node linkType: hard @@ -1768,6 +1807,16 @@ __metadata: languageName: node linkType: hard +"@backstage/cli-common@npm:^0.3.0": + version: 0.3.0 + resolution: "@backstage/cli-common@npm:0.3.0" + dependencies: + "@backstage/errors": "npm:^1.3.1" + cross-spawn: "npm:^7.0.3" + checksum: 10/323c455d4e842f045bd2e29149897c2fe004156d28f933dc7019d8789eb6fea82eeb82863d5b0471bb0b14b09e5863c3ab281e8e33f91651f08d0eb1c131bddb + languageName: node + linkType: hard + "@backstage/cli-defaults@npm:^0.1.3": version: 0.1.3 resolution: "@backstage/cli-defaults@npm:0.1.3" @@ -2419,16 +2468,16 @@ __metadata: languageName: node linkType: hard -"@backstage/filter-predicates@npm:^0.1.3": - version: 0.1.3 - resolution: "@backstage/filter-predicates@npm:0.1.3" +"@backstage/filter-predicates@npm:^0.1.3, @backstage/filter-predicates@npm:^0.1.4": + version: 0.1.4 + resolution: "@backstage/filter-predicates@npm:0.1.4" dependencies: "@backstage/config": "npm:^1.3.8" "@backstage/errors": "npm:^1.3.1" "@backstage/types": "npm:^1.2.2" zod: "npm:^3.25.76 || ^4.0.0" - zod-validation-error: "npm:^4.0.2" - checksum: 10/b84c43e86efef80baececb0391efdb000284de66c0454109e30f5f70af01d5c3421783e9fb75ab237eae47644860fa23d663420462cb806c732ec8ca319144a8 + zod-validation-error: "npm:^5.0.0" + checksum: 10/42445bd8cfdf8e329c34019d159058d6d0c38b5a58ba010287499f87aac3fd84c4fd43e7afd29b0fcfd6822cf8a7dbf6fc307a42e99057bb350a1d2b9b3db1d3 languageName: node linkType: hard @@ -2679,12 +2728,12 @@ __metadata: languageName: node linkType: hard -"@backstage/plugin-auth-node@npm:^0.7.2": - version: 0.7.2 - resolution: "@backstage/plugin-auth-node@npm:0.7.2" +"@backstage/plugin-auth-node@npm:^0.7.2, @backstage/plugin-auth-node@npm:^0.7.3": + version: 0.7.3 + resolution: "@backstage/plugin-auth-node@npm:0.7.3" dependencies: - "@backstage/backend-plugin-api": "npm:^1.9.2" - "@backstage/catalog-client": "npm:^1.16.0" + "@backstage/backend-plugin-api": "npm:^1.9.3" + "@backstage/catalog-client": "npm:^1.16.1" "@backstage/catalog-model": "npm:^1.9.0" "@backstage/config": "npm:^1.3.8" "@backstage/errors": "npm:^1.3.1" @@ -2697,8 +2746,8 @@ __metadata: passport: "npm:^0.7.0" zod: "npm:^3.25.76 || ^4.0.0" zod-to-json-schema: "npm:^3.25.1" - zod-validation-error: "npm:^4.0.2" - checksum: 10/063c1b934a4f91c17b30f148a77d3b11f19d83273843b083cc8a8c272533fd33f6c6964a61d254ea3cba29e0200b505398d9595f3fb6ff5eb1e54dcdb4b0fdc0 + zod-validation-error: "npm:^5.0.0" + checksum: 10/729d71af478d2da5e8254ee2cb2116df19f58be316776505b37707b7a490faff83f3fd4792779c1422ed59ccf159cb0ebb32f307d1064d0bd09d8d1d8e033474 languageName: node linkType: hard @@ -2713,6 +2762,30 @@ __metadata: languageName: node linkType: hard +"@backstage/plugin-catalog-node@npm:^2.2.3": + version: 2.2.3 + resolution: "@backstage/plugin-catalog-node@npm:2.2.3" + dependencies: + "@backstage/backend-plugin-api": "npm:^1.9.3" + "@backstage/catalog-client": "npm:^1.16.1" + "@backstage/catalog-model": "npm:^1.9.0" + "@backstage/errors": "npm:^1.3.1" + "@backstage/plugin-catalog-common": "npm:^1.1.10" + "@backstage/plugin-permission-common": "npm:^0.9.9" + "@backstage/plugin-permission-node": "npm:^0.11.2" + "@backstage/types": "npm:^1.2.2" + "@opentelemetry/api": "npm:^1.9.0" + lodash: "npm:^4.17.21" + yaml: "npm:^2.0.0" + peerDependencies: + "@backstage/backend-test-utils": ^1.11.5 + peerDependenciesMeta: + "@backstage/backend-test-utils": + optional: true + checksum: 10/e213a3a9c190cdd0f10b4abec7cebe3bc9dbf45c3e2ad3fd7c0379b07c92039dc56a377defc37a3a39720df23eed7c22f6e10d7e6b82e17d17c22df11ea47c76 + languageName: node + linkType: hard + "@backstage/plugin-catalog-react@npm:^3.0.0, @backstage/plugin-catalog-react@npm:^3.1.0": version: 3.1.0 resolution: "@backstage/plugin-catalog-react@npm:3.1.0" @@ -2806,11 +2879,11 @@ __metadata: languageName: node linkType: hard -"@backstage/plugin-events-node@npm:^0.4.23": - version: 0.4.23 - resolution: "@backstage/plugin-events-node@npm:0.4.23" +"@backstage/plugin-events-node@npm:^0.4.23, @backstage/plugin-events-node@npm:^0.4.24": + version: 0.4.24 + resolution: "@backstage/plugin-events-node@npm:0.4.24" dependencies: - "@backstage/backend-plugin-api": "npm:^1.9.2" + "@backstage/backend-plugin-api": "npm:^1.9.3" "@backstage/errors": "npm:^1.3.1" "@backstage/types": "npm:^1.2.2" "@types/content-type": "npm:^1.1.8" @@ -2819,7 +2892,7 @@ __metadata: cross-fetch: "npm:^4.0.0" express: "npm:^4.22.0" uri-template: "npm:^2.0.0" - checksum: 10/3eef8215b0c51df85c3773bc39eb87bccb28b7e2b1dd4245e64eb7499a7648b2d9a93a76518e7cd416d017e01ab5147948e888993a050aaa13097e80b2280397 + checksum: 10/e36fb85c8d3cdb0781d9ed92050432f139925e3828912ac6ce1202be65540552db2b569b693015d54c26c635318a32a5ed550954aef2b4d3c5450e240e0208fe languageName: node linkType: hard @@ -2837,11 +2910,11 @@ __metadata: languageName: node linkType: hard -"@backstage/plugin-permission-node@npm:^0.11.1": - version: 0.11.1 - resolution: "@backstage/plugin-permission-node@npm:0.11.1" +"@backstage/plugin-permission-node@npm:^0.11.1, @backstage/plugin-permission-node@npm:^0.11.2": + version: 0.11.2 + resolution: "@backstage/plugin-permission-node@npm:0.11.2" dependencies: - "@backstage/backend-plugin-api": "npm:^1.9.2" + "@backstage/backend-plugin-api": "npm:^1.9.3" "@backstage/config": "npm:^1.3.8" "@backstage/errors": "npm:^1.3.1" "@backstage/plugin-permission-common": "npm:^0.9.9" @@ -2850,7 +2923,7 @@ __metadata: express-promise-router: "npm:^4.1.0" zod: "npm:^3.25.76 || ^4.0.0" zod-to-json-schema: "npm:^3.25.1" - checksum: 10/2b8c3e280aef147e0df147c7cd5508983462501f8fd9472a7ca82afe6b7dc6e2432e7e48e64e2446f190368a07e13d05000414836cf5aeb68e3aa813ecb1c715 + checksum: 10/976668176dd9df5e423c4f9f24450b7e7e36ccea548aac7199788869e773adf06eb9974263df231410da9f91d9f276888bd8c54c1bfb50edb8912fa1ccec6769 languageName: node linkType: hard @@ -2874,6 +2947,48 @@ __metadata: languageName: node linkType: hard +"@backstage/plugin-scaffolder-backend@npm:^4.0.1": + version: 4.0.2 + resolution: "@backstage/plugin-scaffolder-backend@npm:4.0.2" + dependencies: + "@backstage/backend-openapi-utils": "npm:^0.7.0" + "@backstage/backend-plugin-api": "npm:^1.9.3" + "@backstage/catalog-model": "npm:^1.9.0" + "@backstage/config": "npm:^1.3.8" + "@backstage/errors": "npm:^1.3.1" + "@backstage/integration": "npm:^2.0.3" + "@backstage/plugin-catalog-node": "npm:^2.2.3" + "@backstage/plugin-events-node": "npm:^0.4.24" + "@backstage/plugin-permission-common": "npm:^0.9.9" + "@backstage/plugin-permission-node": "npm:^0.11.2" + "@backstage/plugin-scaffolder-common": "npm:^2.2.1" + "@backstage/plugin-scaffolder-node": "npm:^0.13.5" + "@backstage/types": "npm:^1.2.2" + "@types/luxon": "npm:^3.0.0" + express: "npm:^4.22.0" + fs-extra: "npm:^11.2.0" + globby: "npm:^11.0.0" + isbinaryfile: "npm:^5.0.0" + isolated-vm: "npm:^6.0.1" + jsonschema: "npm:^1.5.0" + knex: "npm:^3.0.0" + lodash: "npm:^4.17.21" + logform: "npm:^2.3.2" + luxon: "npm:^3.0.0" + nunjucks: "npm:^3.2.3" + p-queue: "npm:^6.6.2" + prom-client: "npm:^15.0.0" + triple-beam: "npm:^1.4.1" + winston: "npm:^3.2.1" + winston-transport: "npm:^4.7.0" + yaml: "npm:^2.0.0" + zen-observable: "npm:^0.10.0" + zod: "npm:^3.25.76 || ^4.0.0" + zod-to-json-schema: "npm:^3.25.1" + checksum: 10/995e529b9d458733561925022497c26cdaea997dd339f517c7929d4c481b4b4a7ea4b5f31f2074c8483d2a09188445e901a65b8b414e9b9b0689b535bbe207b2 + languageName: node + linkType: hard + "@backstage/plugin-scaffolder-common@npm:^2.2.0, @backstage/plugin-scaffolder-common@npm:^2.2.1": version: 2.2.1 resolution: "@backstage/plugin-scaffolder-common@npm:2.2.1" @@ -2914,16 +3029,16 @@ __metadata: languageName: node linkType: hard -"@backstage/plugin-scaffolder-node@npm:^0.13.4": - version: 0.13.4 - resolution: "@backstage/plugin-scaffolder-node@npm:0.13.4" +"@backstage/plugin-scaffolder-node@npm:^0.13.4, @backstage/plugin-scaffolder-node@npm:^0.13.5": + version: 0.13.5 + resolution: "@backstage/plugin-scaffolder-node@npm:0.13.5" dependencies: - "@backstage/backend-plugin-api": "npm:^1.9.2" + "@backstage/backend-plugin-api": "npm:^1.9.3" "@backstage/catalog-model": "npm:^1.9.0" "@backstage/errors": "npm:^1.3.1" "@backstage/integration": "npm:^2.0.3" "@backstage/plugin-permission-common": "npm:^0.9.9" - "@backstage/plugin-permission-node": "npm:^0.11.1" + "@backstage/plugin-permission-node": "npm:^0.11.2" "@backstage/plugin-scaffolder-common": "npm:^2.2.1" "@backstage/types": "npm:^1.2.2" "@isomorphic-git/pgp-plugin": "npm:^0.0.7" @@ -2940,11 +3055,11 @@ __metadata: zod: "npm:^3.25.76 || ^4.0.0" zod-to-json-schema: "npm:^3.25.1" peerDependencies: - "@backstage/backend-test-utils": ^1.11.4 + "@backstage/backend-test-utils": ^1.11.5 peerDependenciesMeta: "@backstage/backend-test-utils": optional: true - checksum: 10/667a71b90af9c2f9f0972fc0ff52ec42e610eb6402ca9b576c89923a57a57e8a1569a3b08a306f759e9ee679a2f1d8b09a295a72699faecb215c1f2306922dc4 + checksum: 10/56dbd9411bf1f40b9e47ff24aac25f57a0b74c76b37177269d2a163ab3cdc9b6c9569d56f5454162bac25a2c86f756b440c0027bae81bee06690b9eb05f23d2f languageName: node linkType: hard @@ -4076,6 +4191,54 @@ __metadata: languageName: node linkType: hard +"@graphql-tools/merge@npm:8.3.1": + version: 8.3.1 + resolution: "@graphql-tools/merge@npm:8.3.1" + dependencies: + "@graphql-tools/utils": "npm:8.9.0" + tslib: "npm:^2.4.0" + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 10/9354a68aa1b851ee72d2d727a3a264279f1e5ed95100f6c6e7e0a2ad7449943d2ebe6fce43b4873a15e5c3e9df52ea9d23ff51ffc1f73c417c4ccf368f8486ab + languageName: node + linkType: hard + +"@graphql-tools/schema@npm:^8.5.0": + version: 8.5.1 + resolution: "@graphql-tools/schema@npm:8.5.1" + dependencies: + "@graphql-tools/merge": "npm:8.3.1" + "@graphql-tools/utils": "npm:8.9.0" + tslib: "npm:^2.4.0" + value-or-promise: "npm:1.0.11" + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 10/98f57502cc67ee48157bcf6f26c334e27b0673ec6f5a35c1a5bc1901772063c8bfdca435f81664ab1a41f9274b43dc78aa12791feee83546640d0a034b38c836 + languageName: node + linkType: hard + +"@graphql-tools/utils@npm:8.9.0": + version: 8.9.0 + resolution: "@graphql-tools/utils@npm:8.9.0" + dependencies: + tslib: "npm:^2.4.0" + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 10/de5930b33664c53f0d22781bb16b4e029afaad165539faf80bd520adfad969c024891db672a2ff96195d8d1185bac66b284ebde67938e554d04c0798453da002 + languageName: node + linkType: hard + +"@graphql-tools/utils@npm:^8.8.0": + version: 8.13.1 + resolution: "@graphql-tools/utils@npm:8.13.1" + dependencies: + tslib: "npm:^2.4.0" + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 10/b3679e43f6cbde26924dc6eabc5b45fe1481aac5793487284750167749c2b46f5e44ab0344f8264f8cfa657901348d8cf566c54c3c9eca2c403cb69039edf766 + languageName: node + linkType: hard + "@grpc/grpc-js@npm:^1.11.1": version: 1.12.6 resolution: "@grpc/grpc-js@npm:1.12.6" @@ -4146,6 +4309,46 @@ __metadata: languageName: node linkType: hard +"@httptoolkit/httpolyglot@npm:^2.2.1": + version: 2.2.2 + resolution: "@httptoolkit/httpolyglot@npm:2.2.2" + dependencies: + "@types/node": "npm:*" + checksum: 10/d586e9f66f520eea6be18b6a5027c772a0d35a149e8513bdac7e3612013a10d5fd8034c1aa8dc0ace895da3a59185f3df032b9ff9f6c0e2e25c148607316167b + languageName: node + linkType: hard + +"@httptoolkit/subscriptions-transport-ws@npm:^0.11.2": + version: 0.11.2 + resolution: "@httptoolkit/subscriptions-transport-ws@npm:0.11.2" + dependencies: + backo2: "npm:^1.0.2" + eventemitter3: "npm:^3.1.0" + iterall: "npm:^1.2.1" + symbol-observable: "npm:^1.0.4" + ws: "npm:^8.8.0" + peerDependencies: + graphql: ^15.7.2 || ^16.0.0 + checksum: 10/cc3500e5c752fa96c76de176d144b8479704fbdc9c6ad1817feead28157b14e31954a767d66c89fd6ec74db6fbafeaad1406fae22cf9afe30b56e22425720a77 + languageName: node + linkType: hard + +"@httptoolkit/websocket-stream@npm:^6.0.1": + version: 6.0.1 + resolution: "@httptoolkit/websocket-stream@npm:6.0.1" + dependencies: + "@types/ws": "npm:*" + duplexify: "npm:^3.5.1" + inherits: "npm:^2.0.1" + isomorphic-ws: "npm:^4.0.1" + readable-stream: "npm:^2.3.3" + safe-buffer: "npm:^5.1.2" + ws: "npm:*" + xtend: "npm:^4.0.0" + checksum: 10/0f01af78c94357d1313621a8ddc3907af2b161cdd3964305fd916d0447e3647ec2484d46772fa435aeb736a657ac9ad1007aaba3ba9d147b5ef6c43b2cb04350 + languageName: node + linkType: hard + "@humanwhocodes/config-array@npm:^0.13.0": version: 0.13.0 resolution: "@humanwhocodes/config-array@npm:0.13.0" @@ -4453,7 +4656,7 @@ __metadata: languageName: node linkType: hard -"@jsdevtools/ono@npm:^7.1.3": +"@jsdevtools/ono@npm:7.1.3, @jsdevtools/ono@npm:^7.1.3": version: 7.1.3 resolution: "@jsdevtools/ono@npm:7.1.3" checksum: 10/d4a036ccb9d2b21b7e4cec077c59a5a83fad58adacbce89e7e6b77a703050481ff5b6d813aef7f5ff0a8347a85a0eedf599e2e6bb5784a971a93e53e43b10157 @@ -5856,10 +6059,10 @@ __metadata: languageName: node linkType: hard -"@opentelemetry/api@npm:^1.9.0": - version: 1.9.0 - resolution: "@opentelemetry/api@npm:1.9.0" - checksum: 10/a607f0eef971893c4f2ee2a4c2069aade6ec3e84e2a1f5c2aac19f65c5d9eeea41aa72db917c1029faafdd71789a1a040bdc18f40d63690e22ccae5d7070f194 +"@opentelemetry/api@npm:^1.4.0, @opentelemetry/api@npm:^1.9.0": + version: 1.9.1 + resolution: "@opentelemetry/api@npm:1.9.1" + checksum: 10/b26032739d3c54ca99b5a2920844a1fbd4c3ee383cacbb0915e8c706a2626fe91e96feaa6e893397abe0545dc8d0a765b220aa18a31b1773176eeaf3a225e10e languageName: node linkType: hard @@ -8426,6 +8629,15 @@ __metadata: languageName: node linkType: hard +"@types/multer@npm:^2.0.0": + version: 2.2.0 + resolution: "@types/multer@npm:2.2.0" + dependencies: + "@types/express": "npm:*" + checksum: 10/b12d8c3a77eeb81a2513e7db1404cb89d12b06eab5e92ba82f6f02b775e23e89bb4fcdc9724aa70a025c458aca9e8feb66f27c7062d1db683fd8c5664e14bec8 + languageName: node + linkType: hard + "@types/node-forge@npm:^1.3.0": version: 1.3.11 resolution: "@types/node-forge@npm:1.3.11" @@ -8742,12 +8954,12 @@ __metadata: languageName: node linkType: hard -"@types/ws@npm:^8.5.10": - version: 8.5.14 - resolution: "@types/ws@npm:8.5.14" +"@types/ws@npm:*, @types/ws@npm:^8.5.10": + version: 8.18.1 + resolution: "@types/ws@npm:8.18.1" dependencies: "@types/node": "npm:*" - checksum: 10/956692dd47d5fe042780f61a6310d47203d07622aa185ef2eee7e849f9e7d1e5c190b0d8db8c3ab204a8829e3603b6c6bcab9024cd11dffdd5ffc0df9fd83f2d + checksum: 10/1ce05e3174dcacf28dae0e9b854ef1c9a12da44c7ed73617ab6897c5cbe4fccbb155a20be5508ae9a7dde2f83bd80f5cf3baa386b934fc4b40889ec963e94f3a languageName: node linkType: hard @@ -9191,6 +9403,13 @@ __metadata: languageName: node linkType: hard +"a-sync-waterfall@npm:^1.0.0": + version: 1.0.1 + resolution: "a-sync-waterfall@npm:1.0.1" + checksum: 10/6069080aff936c88fc32f798cc172a8b541e35b993dc5d2e43b74b6f37c522744eec107e1d475d2c624825c6cb7d2ec9ec020dbe4520578afcae74f11902daa2 + languageName: node + linkType: hard + "abbrev@npm:^1.0.0": version: 1.1.1 resolution: "abbrev@npm:1.1.1" @@ -9344,7 +9563,7 @@ __metadata: languageName: node linkType: hard -"ajv-formats@npm:~3.0.1": +"ajv-formats@npm:^3.0.1, ajv-formats@npm:~3.0.1": version: 3.0.1 resolution: "ajv-formats@npm:3.0.1" dependencies: @@ -9390,15 +9609,15 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^8.0.0, ajv@npm:^8.10.0, ajv@npm:^8.17.1, ajv@npm:^8.6.0, ajv@npm:^8.9.0, ajv@npm:~8.18.0": - version: 8.18.0 - resolution: "ajv@npm:8.18.0" +"ajv@npm:^8.0.0, ajv@npm:^8.10.0, ajv@npm:^8.16.0, ajv@npm:^8.17.1, ajv@npm:^8.6.0, ajv@npm:^8.9.0": + version: 8.20.0 + resolution: "ajv@npm:8.20.0" dependencies: fast-deep-equal: "npm:^3.1.3" fast-uri: "npm:^3.0.1" json-schema-traverse: "npm:^1.0.0" require-from-string: "npm:^2.0.2" - checksum: 10/bfed9de827a2b27c6d4084324eda76a4e32bdde27410b3e9b81d06e6f8f5c78370fc6b93fe1d869f1939ff1d7c4ae8896960995acb8425e3e9288c8884247c48 + checksum: 10/5ce59c0537f4c2aca9a758b412659ec70acb4d5dde971c10ecf21d2e3d799f99acdb4a08e1f5fb2e067c8542930398aae793bb996bb07d3feb81dae22fe2ada9 languageName: node linkType: hard @@ -9414,6 +9633,18 @@ __metadata: languageName: node linkType: hard +"ajv@npm:~8.18.0": + version: 8.18.0 + resolution: "ajv@npm:8.18.0" + dependencies: + fast-deep-equal: "npm:^3.1.3" + fast-uri: "npm:^3.0.1" + json-schema-traverse: "npm:^1.0.0" + require-from-string: "npm:^2.0.2" + checksum: 10/bfed9de827a2b27c6d4084324eda76a4e32bdde27410b3e9b81d06e6f8f5c78370fc6b93fe1d869f1939ff1d7c4ae8896960995acb8425e3e9288c8884247c48 + languageName: node + linkType: hard + "anser@npm:^2.1.1": version: 2.3.5 resolution: "anser@npm:2.3.5" @@ -9525,6 +9756,13 @@ __metadata: languageName: node linkType: hard +"append-field@npm:^1.0.0": + version: 1.0.0 + resolution: "append-field@npm:1.0.0" + checksum: 10/afb50f5ff668af1cb66bc5cfebb55ed9a1d99e24901782ee83d00aed1a499835f9375a149cf27b17f79595ecfcc3d1de0cd5b020b210a5359c43eaf607c217de + languageName: node + linkType: hard + "aproba@npm:^1.0.3 || ^2.0.0": version: 2.0.0 resolution: "aproba@npm:2.0.0" @@ -9759,7 +9997,7 @@ __metadata: languageName: node linkType: hard -"asap@npm:^2.0.0": +"asap@npm:^2.0.0, asap@npm:^2.0.3": version: 2.0.6 resolution: "asap@npm:2.0.6" checksum: 10/b244c0458c571945e4b3be0b14eb001bea5596f9868cc50cc711dc03d58a7e953517d3f0dad81ccde3ff37d1f074701fa76a6f07d41aaa992d7204a37b915dda @@ -9849,6 +10087,15 @@ __metadata: languageName: node linkType: hard +"async-mutex@npm:^0.5.0": + version: 0.5.0 + resolution: "async-mutex@npm:0.5.0" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10/4c6bfce1cc9cd43f723c4d96403ac5f4757f885c953b839cde6956ec8817ff39623b82d67614de10c7933e21626925882fb9bac367db7d15d7cb4f84228722c9 + languageName: node + linkType: hard + "async-retry@npm:^1.3.3": version: 1.3.3 resolution: "async-retry@npm:1.3.3" @@ -9888,6 +10135,16 @@ __metadata: languageName: node linkType: hard +"atlassian-openapi@npm:^1.0.8": + version: 1.0.21 + resolution: "atlassian-openapi@npm:1.0.21" + dependencies: + jsonpointer: "npm:^5.0.0" + urijs: "npm:^1.19.10" + checksum: 10/ade4634a358ef25cac3d083f57d002089f10edfc45448b5869424acf8ea58371c0437058b20a5d81bbcf29bf833459d5bc39fee8cbca6c5f97238381caf5fc5c + languageName: node + linkType: hard + "available-typed-arrays@npm:^1.0.7": version: 1.0.7 resolution: "available-typed-arrays@npm:1.0.7" @@ -9959,6 +10216,13 @@ __metadata: languageName: node linkType: hard +"backo2@npm:^1.0.2": + version: 1.0.2 + resolution: "backo2@npm:1.0.2" + checksum: 10/fda8d0a0f4810068d23715f2f45153146d6ee8f62dd827ce1e0b6cc3c8328e84ad61e11399a83931705cef702fe7cbb457856bf99b9bd10c4ed57b0786252385 + languageName: node + linkType: hard + "bail@npm:^2.0.0": version: 2.0.2 resolution: "bail@npm:2.0.2" @@ -10031,6 +10295,13 @@ __metadata: languageName: node linkType: hard +"base64-arraybuffer@npm:^0.1.5": + version: 0.1.5 + resolution: "base64-arraybuffer@npm:0.1.5" + checksum: 10/fea6fb059b5f043c0c1d291591bf48a5901ddb0b193800d39ab30afc2809ecadeecfaec6b3089c50a8956eeedec6fe6d8cbf6c0f90e3f484e74f0c9a9bb872ea + languageName: node + linkType: hard + "base64-js@npm:^1.3.0, base64-js@npm:^1.3.1": version: 1.5.1 resolution: "base64-js@npm:1.5.1" @@ -10145,6 +10416,13 @@ __metadata: languageName: node linkType: hard +"bintrees@npm:1.0.2": + version: 1.0.2 + resolution: "bintrees@npm:1.0.2" + checksum: 10/071896cea5ea5413316c8436e95799444c208630d5c539edd8a7089fc272fc5d3634aa4a2e4847b28350dda1796162e14a34a0eda53108cc5b3c2ff6a036c1fa + languageName: node + linkType: hard + "bl@npm:^4.0.3, bl@npm:^4.1.0": version: 4.1.0 resolution: "bl@npm:4.1.0" @@ -10177,9 +10455,9 @@ __metadata: languageName: node linkType: hard -"body-parser@npm:~1.20.3": - version: 1.20.4 - resolution: "body-parser@npm:1.20.4" +"body-parser@npm:^1.15.2, body-parser@npm:~1.20.5": + version: 1.20.6 + resolution: "body-parser@npm:1.20.6" dependencies: bytes: "npm:~3.1.2" content-type: "npm:~1.0.5" @@ -10189,11 +10467,11 @@ __metadata: http-errors: "npm:~2.0.1" iconv-lite: "npm:~0.4.24" on-finished: "npm:~2.4.1" - qs: "npm:~6.14.0" + qs: "npm:~6.15.1" raw-body: "npm:~2.5.3" type-is: "npm:~1.6.18" unpipe: "npm:~1.0.0" - checksum: 10/ff67e28d3f426707be8697a75fdf8d564dc50c341b41f054264d8ab6e2924e519c7ce8acc9d0de05328fdc41e1d9f3f200aec9c1cfb1867d6b676a410d97c689 + checksum: 10/cf3730f79d8d773a1a6f34fdec4bd40cf41b2cf25c17a3b9dfeb81e83b7e62e309285a92ba6bf5d99eee44144083d3122f332757215da37eb4740544432c2766 languageName: node linkType: hard @@ -10272,6 +10550,13 @@ __metadata: languageName: node linkType: hard +"brotli-wasm@npm:^3.0.0": + version: 3.0.1 + resolution: "brotli-wasm@npm:3.0.1" + checksum: 10/8d400459eea945cd66008ced3298efb24f65490d9cfd4953bfed088f4212aae0ff52bb3bd53970728b2cb29953ba25de02a2862d76f4fe74ba37befe265c5402 + languageName: node + linkType: hard + "browser-resolve@npm:^2.0.0": version: 2.0.0 resolution: "browser-resolve@npm:2.0.0" @@ -10465,6 +10750,15 @@ __metadata: languageName: node linkType: hard +"busboy@npm:^1.6.0": + version: 1.6.0 + resolution: "busboy@npm:1.6.0" + dependencies: + streamsearch: "npm:^1.1.0" + checksum: 10/bee10fa10ea58e7e3e7489ffe4bda6eacd540a17de9f9cd21cc37e297b2dd9fe52b2715a5841afaec82900750d810d01d7edb4b2d456427f449b92b417579763 + languageName: node + linkType: hard + "byline@npm:^5.0.0": version: 5.0.0 resolution: "byline@npm:5.0.0" @@ -10532,6 +10826,13 @@ __metadata: languageName: node linkType: hard +"cacheable-lookup@npm:^6.0.0": + version: 6.1.0 + resolution: "cacheable-lookup@npm:6.1.0" + checksum: 10/9b37d31fba27ff244254294814dfdad69e3d257cb283932f58823141de5043a46d35339fa81ec40fdbb5d76d1578324258995f41a4fd37ed05d4e9b54823802e + languageName: node + linkType: hard + "call-bind-apply-helpers@npm:^1.0.0, call-bind-apply-helpers@npm:^1.0.1": version: 1.0.1 resolution: "call-bind-apply-helpers@npm:1.0.1" @@ -11129,6 +11430,13 @@ __metadata: languageName: node linkType: hard +"commander@npm:^5.1.0": + version: 5.1.0 + resolution: "commander@npm:5.1.0" + checksum: 10/3e2ef5c003c5179250161e42ce6d48e0e69a54af970c65b7f985c70095240c260fd647453efd4c2c5a31b30ce468f373dc70f769c2f54a2c014abc4792aaca28 + languageName: node + linkType: hard + "commander@npm:^7.2.0": version: 7.2.0 resolution: "commander@npm:7.2.0" @@ -11136,6 +11444,13 @@ __metadata: languageName: node linkType: hard +"common-tags@npm:^1.8.0": + version: 1.8.2 + resolution: "common-tags@npm:1.8.2" + checksum: 10/c665d0f463ee79dda801471ad8da6cb33ff7332ba45609916a508ad3d77ba07ca9deeb452e83f81f24c2b081e2c1315347f23d239210e63d1c5e1a0c7c019fe2 + languageName: node + linkType: hard + "commondir@npm:^1.0.1": version: 1.0.1 resolution: "commondir@npm:1.0.1" @@ -11277,6 +11592,18 @@ __metadata: languageName: node linkType: hard +"connect@npm:^3.7.0": + version: 3.7.0 + resolution: "connect@npm:3.7.0" + dependencies: + debug: "npm:2.6.9" + finalhandler: "npm:1.1.2" + parseurl: "npm:~1.3.3" + utils-merge: "npm:1.0.1" + checksum: 10/f94818b198cc662092276ef6757dd825c59c8469c8064583525e7b81d39a3af86a01c7cb76107dfa0295dfc52b27a7ae1c40ea0e0a10189c3f8776cf08ce3a4e + languageName: node + linkType: hard + "consola@npm:^2.15.0": version: 2.15.3 resolution: "consola@npm:2.15.3" @@ -11388,13 +11715,20 @@ __metadata: languageName: node linkType: hard -"cors@npm:^2.8.5": - version: 2.8.5 - resolution: "cors@npm:2.8.5" +"cors-gate@npm:^1.1.3": + version: 1.1.3 + resolution: "cors-gate@npm:1.1.3" + checksum: 10/161e36480d41ae11c16389267622f58b6bc69b12a28558aa3a972b44d851b92b62e11a8632cea5f0da1d48665a53c4992297e669d881e482837713e375300e1e + languageName: node + linkType: hard + +"cors@npm:^2.8.4, cors@npm:^2.8.5": + version: 2.8.6 + resolution: "cors@npm:2.8.6" dependencies: object-assign: "npm:^4" vary: "npm:^1" - checksum: 10/66e88e08edee7cbce9d92b4d28a2028c88772a4c73e02f143ed8ca76789f9b59444eed6b1c167139e76fa662998c151322720093ba229f9941365ada5a6fc2c6 + checksum: 10/aa7174305b21ceb90f9c84f4eaa32f04432d333addbfdc0d1eb7310393c48902e5364aada5ac2f5d054528d63b3179238444475426fcb74e1e345077de485727 languageName: node linkType: hard @@ -11552,6 +11886,15 @@ __metadata: languageName: node linkType: hard +"cross-fetch@npm:^3.1.5": + version: 3.2.0 + resolution: "cross-fetch@npm:3.2.0" + dependencies: + node-fetch: "npm:^2.7.0" + checksum: 10/e4ab1d390a5b6ca8bb0605f028af2ffc1127d2e407b954654949f506d04873c4863ece264662c074865d7874060e35f938cec74fe7b5736d46d545e2685f6aec + languageName: node + linkType: hard + "cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3, cross-spawn@npm:^7.0.5": version: 7.0.6 resolution: "cross-spawn@npm:7.0.6" @@ -12183,6 +12526,15 @@ __metadata: languageName: node linkType: hard +"destroyable-server@npm:^1.1.1": + version: 1.1.1 + resolution: "destroyable-server@npm:1.1.1" + dependencies: + "@types/node": "npm:*" + checksum: 10/483867c0ee3adb6f265e0163ea5f204135a30cd2b14ef07f58054186f63cc12ca7c591431b30cb664216e1bdc3156d50c74b56c3e17f67a5e75b0d32f0fe84f5 + languageName: node + linkType: hard + "detect-indent@npm:^6.0.0": version: 6.1.0 resolution: "detect-indent@npm:6.1.0" @@ -12444,6 +12796,18 @@ __metadata: languageName: node linkType: hard +"duplexify@npm:^3.5.1": + version: 3.7.1 + resolution: "duplexify@npm:3.7.1" + dependencies: + end-of-stream: "npm:^1.0.0" + inherits: "npm:^2.0.1" + readable-stream: "npm:^2.0.0" + stream-shift: "npm:^1.0.0" + checksum: 10/7799984d178fb57e11c43f5f172a10f795322ec85ff664c2a98d2c2de6deeb9d7a30b810f83923dcd7ebe0f1786724b8aee2b62ca4577522141f93d6d48fb31c + languageName: node + linkType: hard + "duplexify@npm:^4.1.3": version: 4.1.3 resolution: "duplexify@npm:4.1.3" @@ -12561,6 +12925,13 @@ __metadata: languageName: node linkType: hard +"encodeurl@npm:~1.0.2": + version: 1.0.2 + resolution: "encodeurl@npm:1.0.2" + checksum: 10/e50e3d508cdd9c4565ba72d2012e65038e5d71bdc9198cb125beb6237b5b1ade6c0d343998da9e170fb2eae52c1bed37d4d6d98a46ea423a0cddbed5ac3f780c + languageName: node + linkType: hard + "encodeurl@npm:~2.0.0": version: 2.0.0 resolution: "encodeurl@npm:2.0.0" @@ -12577,12 +12948,12 @@ __metadata: languageName: node linkType: hard -"end-of-stream@npm:^1.1.0, end-of-stream@npm:^1.4.1": - version: 1.4.4 - resolution: "end-of-stream@npm:1.4.4" +"end-of-stream@npm:^1.0.0, end-of-stream@npm:^1.1.0, end-of-stream@npm:^1.4.1": + version: 1.4.5 + resolution: "end-of-stream@npm:1.4.5" dependencies: once: "npm:^1.4.0" - checksum: 10/530a5a5a1e517e962854a31693dbb5c0b2fc40b46dad2a56a2deec656ca040631124f4795823acc68238147805f8b021abbe221f4afed5ef3c8e8efc2024908b + checksum: 10/1e0cfa6e7f49887544e03314f9dfc56a8cb6dde910cbb445983ecc2ff426fc05946df9d75d8a21a3a64f2cecfe1bf88f773952029f46756b2ed64a24e95b1fb8 languageName: node linkType: hard @@ -13388,6 +13759,13 @@ __metadata: languageName: node linkType: hard +"eventemitter3@npm:^3.1.0": + version: 3.1.2 + resolution: "eventemitter3@npm:3.1.2" + checksum: 10/e2886001beb52cd2fe47d2470fd6266b7c70bd3ac356c0041a7e64336ed57bb1fc9b07bc9043d34b39913488a8d81bfcde62d3af597974980aa01b50844d869b + languageName: node + linkType: hard + "eventemitter3@npm:^4.0.0, eventemitter3@npm:^4.0.4": version: 4.0.7 resolution: "eventemitter3@npm:4.0.7" @@ -13453,6 +13831,30 @@ __metadata: languageName: node linkType: hard +"express-openapi-validator@npm:^5.5.8": + version: 5.6.2 + resolution: "express-openapi-validator@npm:5.6.2" + dependencies: + "@apidevtools/json-schema-ref-parser": "npm:^14.2.1" + "@types/multer": "npm:^2.0.0" + ajv: "npm:^8.17.1" + ajv-draft-04: "npm:^1.0.0" + ajv-formats: "npm:^3.0.1" + content-type: "npm:^1.0.5" + json-schema-traverse: "npm:^1.0.0" + lodash.clonedeep: "npm:^4.5.0" + lodash.get: "npm:^4.4.2" + media-typer: "npm:^1.1.0" + multer: "npm:^2.0.2" + ono: "npm:^7.1.3" + path-to-regexp: "npm:^8.3.0" + qs: "npm:^6.14.1" + peerDependencies: + express: "*" + checksum: 10/c0e08aab007a4a7b73aad87b3a52ac82e986af46cbe329ba1b9e2f9b896415441e73ed42d4297edc92e3f0267364d0677707613caff2c22b90e61744cfd96b37 + languageName: node + linkType: hard + "express-promise-router@npm:^4.1.0": version: 4.1.1 resolution: "express-promise-router@npm:4.1.1" @@ -13481,13 +13883,13 @@ __metadata: languageName: node linkType: hard -"express@npm:^4.17.1, express@npm:^4.21.2, express@npm:^4.22.0, express@npm:^4.22.1": - version: 4.22.1 - resolution: "express@npm:4.22.1" +"express@npm:^4.14.0, express@npm:^4.17.1, express@npm:^4.21.2, express@npm:^4.22.0, express@npm:^4.22.1": + version: 4.22.2 + resolution: "express@npm:4.22.2" dependencies: accepts: "npm:~1.3.8" array-flatten: "npm:1.1.1" - body-parser: "npm:~1.20.3" + body-parser: "npm:~1.20.5" content-disposition: "npm:~0.5.4" content-type: "npm:~1.0.4" cookie: "npm:~0.7.1" @@ -13506,7 +13908,7 @@ __metadata: parseurl: "npm:~1.3.3" path-to-regexp: "npm:~0.1.12" proxy-addr: "npm:~2.0.7" - qs: "npm:~6.14.0" + qs: "npm:~6.15.1" range-parser: "npm:~1.2.1" safe-buffer: "npm:5.2.1" send: "npm:~0.19.0" @@ -13516,7 +13918,7 @@ __metadata: type-is: "npm:~1.6.18" utils-merge: "npm:1.0.1" vary: "npm:~1.1.2" - checksum: 10/f33c1bd0c7d36e2a1f18de9cdc176469d32f68e20258d2941b8d296ab9a4fd9011872c246391bf87714f009fac5114c832ec5ac65cbee39421f1258801eb8470 + checksum: 10/defeef5f1cda5bf5ee4a6b35252563552d8d97fab1d29f502e45ef64316f5d02f49739d7c8a79e425613af3a542d0e3cd8cf7e85671ce2ddd592197abcf5acc3 languageName: node linkType: hard @@ -13572,7 +13974,7 @@ __metadata: languageName: node linkType: hard -"fast-json-patch@npm:^3.1.0": +"fast-json-patch@npm:^3.1.0, fast-json-patch@npm:^3.1.1": version: 3.1.1 resolution: "fast-json-patch@npm:3.1.1" checksum: 10/3e56304e1c95ad1862a50e5b3f557a74c65c0ff2ba5b15caab983b43e70e86ddbc5bc887e9f7064f0aacfd0f0435a29ab2f000fe463379e72b906486345e6671 @@ -13775,6 +14177,21 @@ __metadata: languageName: node linkType: hard +"finalhandler@npm:1.1.2": + version: 1.1.2 + resolution: "finalhandler@npm:1.1.2" + dependencies: + debug: "npm:2.6.9" + encodeurl: "npm:~1.0.2" + escape-html: "npm:~1.0.3" + on-finished: "npm:~2.3.0" + parseurl: "npm:~1.3.3" + statuses: "npm:~1.5.0" + unpipe: "npm:~1.0.0" + checksum: 10/351e99a889abf149eb3edb24568586469feeb3019f5eafb9b31e632a5ad886f12a5595a221508245e6a37da69ae866c9fb411eb541a844238e2c900f63ac1576 + languageName: node + linkType: hard + "finalhandler@npm:~1.3.1": version: 1.3.2 resolution: "finalhandler@npm:1.3.2" @@ -14310,6 +14727,13 @@ __metadata: languageName: node linkType: hard +"get-port@npm:^5.1.1": + version: 5.1.1 + resolution: "get-port@npm:5.1.1" + checksum: 10/0162663ffe5c09e748cd79d97b74cd70e5a5c84b760a475ce5767b357fb2a57cb821cee412d646aa8a156ed39b78aab88974eddaa9e5ee926173c036c0713787 + languageName: node + linkType: hard + "get-port@npm:^7.1.0": version: 7.1.0 resolution: "get-port@npm:7.1.0" @@ -14638,6 +15062,44 @@ __metadata: languageName: node linkType: hard +"graphql-http@npm:^1.22.0": + version: 1.23.0 + resolution: "graphql-http@npm:1.23.0" + peerDependencies: + graphql: ">=0.11 <=17" + checksum: 10/b3c80f865c50247c5976c1aede15f9e581bdac995454cf2f45a7d53d7d8d3d520b03ea6db4603eef9b18adba7dc89a5347f7b82d5e42442e4a7edb08d011c915 + languageName: node + linkType: hard + +"graphql-subscriptions@npm:^1.1.0": + version: 1.2.1 + resolution: "graphql-subscriptions@npm:1.2.1" + dependencies: + iterall: "npm:^1.3.0" + peerDependencies: + graphql: ^0.10.5 || ^0.11.3 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 + checksum: 10/6dfc0bf278b595c7d99b577e05902d18cd0e56c8c060892ccba7651ff1a49218c7cdd5a8e811fcb9071b98492d238609ba6f326129f5cb0f5433c993671e2d14 + languageName: node + linkType: hard + +"graphql-tag@npm:^2.12.6": + version: 2.12.7 + resolution: "graphql-tag@npm:2.12.7" + dependencies: + tslib: "npm:^2.1.0" + peerDependencies: + graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 10/ae2e3cb416ac519da361cf329adca32817ecf627c9b579dc4828d649b3fdb1a3f12a464130c65dd35e8435de12778f026b2c5f98d9bd173dea6a996f953fed28 + languageName: node + linkType: hard + +"graphql@npm:^14.0.2 || ^15.5": + version: 15.10.2 + resolution: "graphql@npm:15.10.2" + checksum: 10/41abccb2621a9dc7ca9cba26272734c298ced50c8a4ee1412dacfaa0e2e9ac927d2e498a66e443c1dab0ac28825cb6e528d5f47f4b9019623c1f8a2189bcbe37 + languageName: node + linkType: hard + "graphql@npm:^16.8.1": version: 16.10.0 resolution: "graphql@npm:16.10.0" @@ -15076,6 +15538,17 @@ __metadata: languageName: node linkType: hard +"http-encoding@npm:^2.0.1": + version: 2.2.0 + resolution: "http-encoding@npm:2.2.0" + dependencies: + brotli-wasm: "npm:^3.0.0" + pify: "npm:^5.0.0" + zstd-codec: "npm:^0.1.5" + checksum: 10/9f80f2fce9ff8f011232028374d2f3c0934476d527bf374fc93f4b137f986a8c74c313107388b9b13b5131c24afc40dc6fe28aff39d5b306a4a749ac4bdf8f4e + languageName: node + linkType: hard + "http-errors@npm:~1.6.2": version: 1.6.3 resolution: "http-errors@npm:1.6.3" @@ -15158,6 +15631,16 @@ __metadata: languageName: node linkType: hard +"http2-wrapper@npm:^2.2.1": + version: 2.2.1 + resolution: "http2-wrapper@npm:2.2.1" + dependencies: + quick-lru: "npm:^5.1.1" + resolve-alpn: "npm:^1.2.0" + checksum: 10/e7a5ac6548318e83fc0399cd832cdff6bbf902b165d211cad47a56ee732922e0aa1107246dd884b12532a1c4649d27c4d44f2480911c65202e93c90bde8fa29d + languageName: node + linkType: hard + "https-browserify@npm:^1.0.0": version: 1.0.0 resolution: "https-browserify@npm:1.0.0" @@ -16030,6 +16513,13 @@ __metadata: languageName: node linkType: hard +"isbinaryfile@npm:^5.0.0": + version: 5.0.7 + resolution: "isbinaryfile@npm:5.0.7" + checksum: 10/af240b2a80db5cffbb3ddcb4d89403802d6b67d21b63fbcc0be5cefcefc013f499477c5837a5b2f029ba3d163543eab36eaee7cd701f2c44ee5ac890f0fadac5 + languageName: node + linkType: hard + "isexe@npm:^2.0.0": version: 2.0.0 resolution: "isexe@npm:2.0.0" @@ -16044,6 +16534,16 @@ __metadata: languageName: node linkType: hard +"isolated-vm@npm:^6.0.1": + version: 6.2.0 + resolution: "isolated-vm@npm:6.2.0" + dependencies: + node-gyp: "npm:latest" + node-gyp-build: "npm:^4.8.4" + checksum: 10/7f57c20259e8065172daa97653e3b0a1fd9fb038bb0a3ca3dd3cca5b9219f67bad67137b6806dc7c940daf79852c8ca019908c08e540dff9c97ebbf9bb16e7bc + languageName: node + linkType: hard + "isomorphic-git@npm:^1.23.0": version: 1.29.0 resolution: "isomorphic-git@npm:1.29.0" @@ -16091,6 +16591,22 @@ __metadata: languageName: node linkType: hard +"isomorphic-ws@npm:^4.0.1": + version: 4.0.1 + resolution: "isomorphic-ws@npm:4.0.1" + peerDependencies: + ws: "*" + checksum: 10/d7190eadefdc28bdb93d67b5f0c603385aaf87724fa2974abb382ac1ec9756ed2cfb27065cbe76122879c2d452e2982bc4314317f3d6c737ddda6c047328771a + languageName: node + linkType: hard + +"iterall@npm:^1.2.1, iterall@npm:^1.3.0": + version: 1.3.0 + resolution: "iterall@npm:1.3.0" + checksum: 10/700c3e9ae194a00b66dc8dcb449195f84add4e64afaf7ed624177e19565393f9bddd34d621ea70c8eceab87a8536fc0e45bb1c9d1ea7c710d41ed0c3d937b19f + languageName: node + linkType: hard + "iterare@npm:1.2.1": version: 1.2.1 resolution: "iterare@npm:1.2.1" @@ -16360,6 +16876,16 @@ __metadata: languageName: node linkType: hard +"json-schema-to-ts@npm:^3.0.0": + version: 3.1.1 + resolution: "json-schema-to-ts@npm:3.1.1" + dependencies: + "@babel/runtime": "npm:^7.18.3" + ts-algebra: "npm:^2.0.0" + checksum: 10/9fd0490279d36ff8b4604cc10632df05e4e5f5ee1d0a77841c927623fc1e636c47eb4ace488018c4e9a2e7e5dde5520d0870e06dfc84b930d9c98c6eacd0f041 + languageName: node + linkType: hard + "json-schema-traverse@npm:^0.4.1": version: 0.4.1 resolution: "json-schema-traverse@npm:0.4.1" @@ -16989,6 +17515,13 @@ __metadata: languageName: node linkType: hard +"lodash.clonedeep@npm:^4.5.0": + version: 4.5.0 + resolution: "lodash.clonedeep@npm:4.5.0" + checksum: 10/957ed243f84ba6791d4992d5c222ffffca339a3b79dbe81d2eaf0c90504160b500641c5a0f56e27630030b18b8e971ea10b44f928a977d5ced3c8948841b555f + languageName: node + linkType: hard + "lodash.defaults@npm:^4.2.0": version: 4.2.0 resolution: "lodash.defaults@npm:4.2.0" @@ -17003,6 +17536,13 @@ __metadata: languageName: node linkType: hard +"lodash.get@npm:^4.4.2": + version: 4.4.2 + resolution: "lodash.get@npm:4.4.2" + checksum: 10/2a4925f6e89bc2c010a77a802d1ba357e17ed1ea03c2ddf6a146429f2856a216663e694a6aa3549a318cbbba3fd8b7decb392db457e6ac0b83dc745ed0a17380 + languageName: node + linkType: hard + "lodash.groupby@npm:^4.6.0": version: 4.6.0 resolution: "lodash.groupby@npm:4.6.0" @@ -17122,7 +17662,7 @@ __metadata: languageName: node linkType: hard -"lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.17.4, lodash@npm:^4.18.1": +"lodash@npm:^4.16.4, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.17.4, lodash@npm:^4.18.1": version: 4.18.1 resolution: "lodash@npm:4.18.1" checksum: 10/306fea53dfd39dad1f03d45ba654a2405aebd35797b673077f401edb7df2543623dc44b9effbb98f69b32152295fff725a4cec99c684098947430600c6af0c3f @@ -17247,7 +17787,7 @@ __metadata: languageName: node linkType: hard -"lru-cache@npm:^7.14.1, lru-cache@npm:^7.7.1": +"lru-cache@npm:^7.14.0, lru-cache@npm:^7.14.1, lru-cache@npm:^7.7.1": version: 7.18.3 resolution: "lru-cache@npm:7.18.3" checksum: 10/6029ca5aba3aacb554e919d7ef804fffd4adfc4c83db00fac8248c7c78811fb6d4b6f70f7fd9d55032b3823446546a007edaa66ad1f2377ae833bd983fac5d98 @@ -17663,6 +18203,13 @@ __metadata: languageName: node linkType: hard +"media-typer@npm:^1.1.0": + version: 1.1.1 + resolution: "media-typer@npm:1.1.1" + checksum: 10/ceef972e43912621b846f816e8937c200dcd83d0bdd4fdd19f28be62a9334f4e6605d0c952fe804bfab7f63a07d14c0d1bea1d9357c35ad6d3b04b184f09e397 + languageName: node + linkType: hard + "memfs@npm:^3.1.2, memfs@npm:^3.4.1": version: 3.5.3 resolution: "memfs@npm:3.5.3" @@ -18406,6 +18953,58 @@ __metadata: languageName: node linkType: hard +"mockttp@npm:^3.13.0": + version: 3.17.2 + resolution: "mockttp@npm:3.17.2" + dependencies: + "@graphql-tools/schema": "npm:^8.5.0" + "@graphql-tools/utils": "npm:^8.8.0" + "@httptoolkit/httpolyglot": "npm:^2.2.1" + "@httptoolkit/subscriptions-transport-ws": "npm:^0.11.2" + "@httptoolkit/websocket-stream": "npm:^6.0.1" + "@types/cors": "npm:^2.8.6" + "@types/node": "npm:*" + async-mutex: "npm:^0.5.0" + base64-arraybuffer: "npm:^0.1.5" + body-parser: "npm:^1.15.2" + cacheable-lookup: "npm:^6.0.0" + common-tags: "npm:^1.8.0" + connect: "npm:^3.7.0" + cors: "npm:^2.8.4" + cors-gate: "npm:^1.1.3" + cross-fetch: "npm:^3.1.5" + destroyable-server: "npm:^1.1.1" + express: "npm:^4.14.0" + fast-json-patch: "npm:^3.1.1" + graphql: "npm:^14.0.2 || ^15.5" + graphql-http: "npm:^1.22.0" + graphql-subscriptions: "npm:^1.1.0" + graphql-tag: "npm:^2.12.6" + http-encoding: "npm:^2.0.1" + http2-wrapper: "npm:^2.2.1" + https-proxy-agent: "npm:^5.0.1" + isomorphic-ws: "npm:^4.0.1" + lodash: "npm:^4.16.4" + lru-cache: "npm:^7.14.0" + native-duplexpair: "npm:^1.0.0" + node-forge: "npm:^1.2.1" + pac-proxy-agent: "npm:^7.0.0" + parse-multipart-data: "npm:^1.4.0" + performance-now: "npm:^2.1.0" + portfinder: "npm:^1.0.32" + read-tls-client-hello: "npm:^1.1.0" + semver: "npm:^7.5.3" + socks-proxy-agent: "npm:^7.0.0" + typed-error: "npm:^3.0.2" + urlpattern-polyfill: "npm:^8.0.0" + uuid: "npm:^8.3.2" + ws: "npm:^8.8.0" + bin: + mockttp: dist/admin/admin-bin.js + checksum: 10/a5456f127510b97de8a558398ef800757ef10aa3861ee61f8b708d2fee4d8a42d8fc67a2062fcc9a254e473975838201bd36a9877fe91ede66fe920bb43dd610 + languageName: node + linkType: hard + "motion-dom@npm:^12.40.0": version: 12.40.0 resolution: "motion-dom@npm:12.40.0" @@ -18505,6 +19104,18 @@ __metadata: languageName: node linkType: hard +"multer@npm:^2.0.2": + version: 2.2.0 + resolution: "multer@npm:2.2.0" + dependencies: + append-field: "npm:^1.0.0" + busboy: "npm:^1.6.0" + concat-stream: "npm:^2.0.0" + type-is: "npm:^1.6.18" + checksum: 10/24525113776291c1909e6ca6ee260c41a6dc4bc6dea944485f6cc0d1442a7690829a07f2dcdea5edd5886bb6ab87df795da6ffb6de7289e1c140ec98b8e9d253 + languageName: node + linkType: hard + "multicast-dns@npm:^7.2.5": version: 7.2.5 resolution: "multicast-dns@npm:7.2.5" @@ -18605,6 +19216,13 @@ __metadata: languageName: node linkType: hard +"native-duplexpair@npm:^1.0.0": + version: 1.0.0 + resolution: "native-duplexpair@npm:1.0.0" + checksum: 10/0b57ecee0c4260ea7a48de2691cd9c77df7bbfbdbcc4b1966d45fd00d52f46af129924f36e7366538311cf1ff41632459843a248115eefaaacab30590287faf0 + languageName: node + linkType: hard + "natural-compare@npm:^1.4.0": version: 1.4.0 resolution: "natural-compare@npm:1.4.0" @@ -18727,10 +19345,21 @@ __metadata: languageName: node linkType: hard -"node-forge@npm:^1, node-forge@npm:^1.3.2": - version: 1.3.3 - resolution: "node-forge@npm:1.3.3" - checksum: 10/f41c31b9296771a4b8c955d58417471712f54f324603a35f8e6cbac19d5e6eaaf5fd5fd14584dfedecbf46a05438ded6eee60a5f2f0822fc5061aaa073cfc75d +"node-forge@npm:^1, node-forge@npm:^1.2.1, node-forge@npm:^1.3.2": + version: 1.4.0 + resolution: "node-forge@npm:1.4.0" + checksum: 10/d70fd769768e646eda73343d4d4105ccb6869315d975905a22117431c04ae5b6df6c488e34ed275b1a66b50195a09b84b5c8aeca3b8605c20605fcb8e9f109d9 + languageName: node + linkType: hard + +"node-gyp-build@npm:^4.8.4": + version: 4.8.4 + resolution: "node-gyp-build@npm:4.8.4" + bin: + node-gyp-build: bin.js + node-gyp-build-optional: optional.js + node-gyp-build-test: build-test.js + checksum: 10/6a7d62289d1afc419fc8fc9bd00aa4e554369e50ca0acbc215cb91446148b75ff7e2a3b53c2c5b2c09a39d416d69f3d3237937860373104b5fe429bf30ad9ac5 languageName: node linkType: hard @@ -18948,6 +19577,24 @@ __metadata: languageName: node linkType: hard +"nunjucks@npm:^3.2.3": + version: 3.2.4 + resolution: "nunjucks@npm:3.2.4" + dependencies: + a-sync-waterfall: "npm:^1.0.0" + asap: "npm:^2.0.3" + commander: "npm:^5.1.0" + peerDependencies: + chokidar: ^3.3.0 + peerDependenciesMeta: + chokidar: + optional: true + bin: + nunjucks-precompile: bin/precompile + checksum: 10/8decb8bb762501aa1a44366acff50ab9d4ff9e57034455e62056b4ac117da40140e1f34f2270c38884f1a5b84b7d97c4afcb2e8c789ddd09f4dcfe71ce7b56bf + languageName: node + linkType: hard + "object-assign@npm:^4, object-assign@npm:^4.0.1, object-assign@npm:^4.1.1": version: 4.1.1 resolution: "object-assign@npm:4.1.1" @@ -19055,6 +19702,15 @@ __metadata: languageName: node linkType: hard +"on-finished@npm:~2.3.0": + version: 2.3.0 + resolution: "on-finished@npm:2.3.0" + dependencies: + ee-first: "npm:1.1.1" + checksum: 10/1db595bd963b0124d6fa261d18320422407b8f01dc65863840f3ddaaf7bcad5b28ff6847286703ca53f4ec19595bd67a2f1253db79fc4094911ec6aa8df1671b + languageName: node + linkType: hard + "on-headers@npm:~1.1.0": version: 1.1.0 resolution: "on-headers@npm:1.1.0" @@ -19089,6 +19745,15 @@ __metadata: languageName: node linkType: hard +"ono@npm:^7.1.3": + version: 7.1.3 + resolution: "ono@npm:7.1.3" + dependencies: + "@jsdevtools/ono": "npm:7.1.3" + checksum: 10/7c9246ce063b4f6d8af3be7affb1d905254f8481d4e874f91f299f33b959dbb3613f7216ff2bc8484852de7b51266173e25cadcb6cba741242b05e22ac51c99d + languageName: node + linkType: hard + "open@npm:^10.0.3": version: 10.1.0 resolution: "open@npm:10.1.0" @@ -19112,6 +19777,17 @@ __metadata: languageName: node linkType: hard +"openapi-merge@npm:^1.3.2": + version: 1.3.3 + resolution: "openapi-merge@npm:1.3.3" + dependencies: + atlassian-openapi: "npm:^1.0.8" + lodash: "npm:^4.17.15" + ts-is-present: "npm:^1.1.1" + checksum: 10/29af282bb9dfc577896f7e68105cb5d4d533ea92acaf3d46d599f2596b8d1b3ad38d5d10cfbb2cf1acec35d8da7b61d605c5bd8e3af94125c6052af3071437af + languageName: node + linkType: hard + "openapi-types@npm:^12.0.2": version: 12.1.3 resolution: "openapi-types@npm:12.1.3" @@ -19119,6 +19795,15 @@ __metadata: languageName: node linkType: hard +"openapi3-ts@npm:^3.1.2": + version: 3.2.0 + resolution: "openapi3-ts@npm:3.2.0" + dependencies: + yaml: "npm:^2.2.1" + checksum: 10/f3aee3ee2ce600bd945561cd8b69c5447f8c4b8f3e9c09bd1751ad8f20bbf601d5ccfca4cc0402693b74c5bd7b71a8e3890b32c37ab8cbafc98214265fcb362b + languageName: node + linkType: hard + "oppa@npm:^0.4.0": version: 0.4.0 resolution: "oppa@npm:0.4.0" @@ -19326,9 +20011,9 @@ __metadata: languageName: node linkType: hard -"pac-proxy-agent@npm:^7.1.0": - version: 7.1.0 - resolution: "pac-proxy-agent@npm:7.1.0" +"pac-proxy-agent@npm:^7.0.0, pac-proxy-agent@npm:^7.1.0": + version: 7.2.0 + resolution: "pac-proxy-agent@npm:7.2.0" dependencies: "@tootallnate/quickjs-emscripten": "npm:^0.23.0" agent-base: "npm:^7.1.2" @@ -19338,7 +20023,7 @@ __metadata: https-proxy-agent: "npm:^7.0.6" pac-resolver: "npm:^7.0.1" socks-proxy-agent: "npm:^8.0.5" - checksum: 10/4c437ba7f037e6c11f612d9333d5a6c8e1b5d63180619684126013d16fc4b19e649f8d3f3c1aaa0ce5b3ddb9b4d2719510fbf3fb613d41bd6967929eb5ee515f + checksum: 10/187656be62d5a6b983d90a86d64106a38b1a9ee78f591fabb27b3cf0d51e5d528456a9faaaf981c93dd54dc9c9ee8d33e35a51072b73a19ec1a8e0d0c36a2b99 languageName: node linkType: hard @@ -19439,6 +20124,13 @@ __metadata: languageName: node linkType: hard +"parse-multipart-data@npm:^1.4.0": + version: 1.5.0 + resolution: "parse-multipart-data@npm:1.5.0" + checksum: 10/fb029f1446f086f2989fb24eaf549d28cfde7df1d323d069f343d5b0a62d8ee756c6a5a347874e148c9cf8c3fe523e295e6f2be3dd05ce73cb19e5e3cd5081ea + languageName: node + linkType: hard + "parse-passwd@npm:^1.0.0": version: 1.0.0 resolution: "parse-passwd@npm:1.0.0" @@ -19612,10 +20304,10 @@ __metadata: languageName: node linkType: hard -"path-to-regexp@npm:^8.0.0": - version: 8.2.0 - resolution: "path-to-regexp@npm:8.2.0" - checksum: 10/23378276a172b8ba5f5fb824475d1818ca5ccee7bbdb4674701616470f23a14e536c1db11da9c9e6d82b82c556a817bbf4eee6e41b9ed20090ef9427cbb38e13 +"path-to-regexp@npm:^8.0.0, path-to-regexp@npm:^8.3.0": + version: 8.4.2 + resolution: "path-to-regexp@npm:8.4.2" + checksum: 10/70fd2cbce0b962cbcf4d312af07818bfce2bae11c09cf3bd86be99c0e30168238a1a7b02b18b452e73f075897df04597d30d63e56da7be41eecfc37998693389 languageName: node linkType: hard @@ -19683,6 +20375,13 @@ __metadata: languageName: node linkType: hard +"performance-now@npm:^2.1.0": + version: 2.1.0 + resolution: "performance-now@npm:2.1.0" + checksum: 10/534e641aa8f7cba160f0afec0599b6cecefbb516a2e837b512be0adbe6c1da5550e89c78059c7fabc5c9ffdf6627edabe23eb7c518c4500067a898fa65c2b550 + languageName: node + linkType: hard + "pg-cloudflare@npm:^1.1.1": version: 1.1.1 resolution: "pg-cloudflare@npm:1.1.1" @@ -20484,6 +21183,16 @@ __metadata: languageName: node linkType: hard +"prom-client@npm:^15.0.0": + version: 15.1.3 + resolution: "prom-client@npm:15.1.3" + dependencies: + "@opentelemetry/api": "npm:^1.4.0" + tdigest: "npm:^0.1.1" + checksum: 10/eba75e15ab896845d39359e3a4d6f7913ea05339b3122d8dde8c8c374669ad1a1d1ab2694ab2101c420bd98086a564e4f2a18aa29018fc14a4732e57c1c19aec + languageName: node + linkType: hard + "promise-inflight@npm:^1.0.1": version: 1.0.1 resolution: "promise-inflight@npm:1.0.1" @@ -20693,7 +21402,7 @@ __metadata: languageName: node linkType: hard -"qs@npm:^6.11.2, qs@npm:^6.12.3, qs@npm:^6.15.0, qs@npm:^6.15.2, qs@npm:^6.9.4": +"qs@npm:^6.11.2, qs@npm:^6.12.3, qs@npm:^6.14.1, qs@npm:^6.15.0, qs@npm:^6.15.2, qs@npm:^6.9.4, qs@npm:~6.15.1": version: 6.15.3 resolution: "qs@npm:6.15.3" dependencies: @@ -20703,15 +21412,6 @@ __metadata: languageName: node linkType: hard -"qs@npm:~6.14.0": - version: 6.14.1 - resolution: "qs@npm:6.14.1" - dependencies: - side-channel: "npm:^1.1.0" - checksum: 10/34b5ab00a910df432d55180ef39c1d1375e550f098b5ec153b41787f1a6a6d7e5f9495593c3b112b77dbc6709d0ae18e55b82847a4c2bbbb0de1e8ccbb1794c5 - languageName: node - linkType: hard - "querystring-es3@npm:^0.2.1": version: 0.2.1 resolution: "querystring-es3@npm:0.2.1" @@ -20726,6 +21426,13 @@ __metadata: languageName: node linkType: hard +"quick-lru@npm:^5.1.1": + version: 5.1.1 + resolution: "quick-lru@npm:5.1.1" + checksum: 10/a516faa25574be7947969883e6068dbe4aa19e8ef8e8e0fd96cddd6d36485e9106d85c0041a27153286b0770b381328f4072aa40d3b18a19f5f7d2b78b94b5ed + languageName: node + linkType: hard + "raf-schd@npm:^4.0.2": version: 4.0.3 resolution: "raf-schd@npm:4.0.3" @@ -21249,6 +21956,15 @@ __metadata: languageName: node linkType: hard +"read-tls-client-hello@npm:^1.1.0": + version: 1.1.0 + resolution: "read-tls-client-hello@npm:1.1.0" + dependencies: + "@types/node": "npm:*" + checksum: 10/c3a15164065e33509b3dee05e70865e68b7b061804e70f864d6afdc55b30663ce6fed2730d9508a44672757622a454c2a38b696c262bdd0ebcbb39f28acee621 + languageName: node + linkType: hard + "read-yaml-file@npm:^1.1.0": version: 1.1.0 resolution: "read-yaml-file@npm:1.1.0" @@ -21261,7 +21977,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^2.0.1, readable-stream@npm:^2.0.5, readable-stream@npm:^2.3.8": +"readable-stream@npm:^2.0.0, readable-stream@npm:^2.0.1, readable-stream@npm:^2.0.5, readable-stream@npm:^2.3.3, readable-stream@npm:^2.3.8": version: 2.3.8 resolution: "readable-stream@npm:2.3.8" dependencies: @@ -21574,6 +22290,13 @@ __metadata: languageName: node linkType: hard +"resolve-alpn@npm:^1.2.0": + version: 1.2.1 + resolution: "resolve-alpn@npm:1.2.1" + checksum: 10/744e87888f0b6fa0b256ab454ca0b9c0b80808715e2ef1f3672773665c92a941f6181194e30ccae4a8cd0adbe0d955d3f133102636d2ee0cca0119fec0bc9aec + languageName: node + linkType: hard + "resolve-dir@npm:^1.0.0, resolve-dir@npm:^1.0.1": version: 1.0.1 resolution: "resolve-dir@npm:1.0.1" @@ -22856,7 +23579,7 @@ __metadata: languageName: node linkType: hard -"statuses@npm:>= 1.4.0 < 2": +"statuses@npm:>= 1.4.0 < 2, statuses@npm:~1.5.0": version: 1.5.0 resolution: "statuses@npm:1.5.0" checksum: 10/c469b9519de16a4bb19600205cffb39ee471a5f17b82589757ca7bd40a8d92ebb6ed9f98b5a540c5d302ccbc78f15dc03cc0280dd6e00df1335568a5d5758a5c @@ -22908,7 +23631,7 @@ __metadata: languageName: node linkType: hard -"stream-shift@npm:^1.0.2": +"stream-shift@npm:^1.0.0, stream-shift@npm:^1.0.2": version: 1.0.3 resolution: "stream-shift@npm:1.0.3" checksum: 10/a24c0a3f66a8f9024bd1d579a533a53be283b4475d4e6b4b3211b964031447bdf6532dd1f3c2b0ad66752554391b7c62bd7ca4559193381f766534e723d50242 @@ -22926,6 +23649,13 @@ __metadata: languageName: node linkType: hard +"streamsearch@npm:^1.1.0": + version: 1.1.0 + resolution: "streamsearch@npm:1.1.0" + checksum: 10/612c2b2a7dbcc859f74597112f80a42cbe4d448d03da790d5b7b39673c1197dd3789e91cd67210353e58857395d32c1e955a9041c4e6d5bae723436b3ed9ed14 + languageName: node + linkType: hard + "streamx@npm:^2.15.0, streamx@npm:^2.21.0": version: 2.22.0 resolution: "streamx@npm:2.22.0" @@ -23370,6 +24100,13 @@ __metadata: languageName: node linkType: hard +"symbol-observable@npm:^1.0.4": + version: 1.2.0 + resolution: "symbol-observable@npm:1.2.0" + checksum: 10/4684327a2fef2453dcd4238b5bd8f69c460a4708fb8c024a824c6a707ca644b2b2a586e36e5197d0d1162ff48e288299a48844a8c46274ffcfd9260e03df7692 + languageName: node + linkType: hard + "tapable@npm:2.3.0": version: 2.3.0 resolution: "tapable@npm:2.3.0" @@ -23478,6 +24215,15 @@ __metadata: languageName: node linkType: hard +"tdigest@npm:^0.1.1": + version: 0.1.2 + resolution: "tdigest@npm:0.1.2" + dependencies: + bintrees: "npm:1.0.2" + checksum: 10/45be99fa52dab74b8edafe150e473cdc45aa1352c75ed516a39905f350a08c3175f6555598111042c3677ba042d7e3cae6b5ce4c663fe609bc634f326aabc9d6 + languageName: node + linkType: hard + "teeny-request@npm:^9.0.0": version: 9.0.0 resolution: "teeny-request@npm:9.0.0" @@ -23791,6 +24537,13 @@ __metadata: languageName: node linkType: hard +"ts-algebra@npm:^2.0.0": + version: 2.0.0 + resolution: "ts-algebra@npm:2.0.0" + checksum: 10/b970eef64ca9594a77337e03b9c1732c1b7a0d2c4d316638b654e921a47b40c4cc42f41821445e9e54408d5dfdf4ecca27ffa59554373033b9c92dee8b52066d + languageName: node + linkType: hard + "ts-api-utils@npm:^1.3.0": version: 1.4.3 resolution: "ts-api-utils@npm:1.4.3" @@ -23853,6 +24606,13 @@ __metadata: languageName: node linkType: hard +"ts-is-present@npm:^1.1.1": + version: 1.2.2 + resolution: "ts-is-present@npm:1.2.2" + checksum: 10/e21d1e9b1848ff9f6387cde0b725d7bd327fd2fa0bb20aff9a6d46d8d8715695819a74ae60a8b905fa409a37f941ae852898c228fe696b701ffbb25ee452c3f7 + languageName: node + linkType: hard + "ts-morph@npm:^24.0.0": version: 24.0.0 resolution: "ts-morph@npm:24.0.0" @@ -24010,7 +24770,7 @@ __metadata: languageName: node linkType: hard -"type-is@npm:~1.6.18": +"type-is@npm:^1.6.18, type-is@npm:~1.6.18": version: 1.6.18 resolution: "type-is@npm:1.6.18" dependencies: @@ -24073,6 +24833,13 @@ __metadata: languageName: node linkType: hard +"typed-error@npm:^3.0.2": + version: 3.2.3 + resolution: "typed-error@npm:3.2.3" + checksum: 10/8201fe2d55771e68cd2a337e4f068e60b905bfa9fc5cf6272276c93ecb7f39aaa495c1b9b7847870b1c44b3aecb5cfcdbbb47897eb5005466dcc8bb2b92f7d93 + languageName: node + linkType: hard + "typedarray@npm:^0.0.6": version: 0.0.6 resolution: "typedarray@npm:0.0.6" @@ -24431,7 +25198,7 @@ __metadata: languageName: node linkType: hard -"urijs@npm:^1.19.11": +"urijs@npm:^1.19.10, urijs@npm:^1.19.11": version: 1.19.11 resolution: "urijs@npm:1.19.11" checksum: 10/2aa5547b53c37ebee03a8ad70feae1638a37cc4c7e543abbffb14fc86b17f84f303d08e45c501441410c025bab22aa84673c97604b7b2619967f1dd49f69931f @@ -24470,6 +25237,13 @@ __metadata: languageName: node linkType: hard +"urlpattern-polyfill@npm:^8.0.0": + version: 8.0.2 + resolution: "urlpattern-polyfill@npm:8.0.2" + checksum: 10/fd86b5c55473f3abbf9ed317b953c9cbb4fa6b3f75f681a1d982fe9c17bbc8d9bcf988f4cf3bda35e2e5875984086c97e177f97f076bb80dfa2beb85d1dd7b23 + languageName: node + linkType: hard + "use-memo-one@npm:^1.1.1": version: 1.1.3 resolution: "use-memo-one@npm:1.1.3" @@ -24626,6 +25400,13 @@ __metadata: languageName: node linkType: hard +"value-or-promise@npm:1.0.11": + version: 1.0.11 + resolution: "value-or-promise@npm:1.0.11" + checksum: 10/9bd1cf82be5b59ec4a7ee9fa17ca7b3f16165c3ea33ebabe514f7a20e4f88dd11f912900f0279760618eb7fbd5e3bb2a4cf4b351b5fd8e8da69aa2719725e54a + languageName: node + linkType: hard + "vary@npm:^1, vary@npm:~1.1.2": version: 1.1.2 resolution: "vary@npm:1.1.2" @@ -25132,9 +25913,9 @@ __metadata: languageName: node linkType: hard -"ws@npm:8.18.0": - version: 8.18.0 - resolution: "ws@npm:8.18.0" +"ws@npm:*, ws@npm:^8.18.0, ws@npm:^8.8.0": + version: 8.21.3 + resolution: "ws@npm:8.21.3" peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ">=5.0.2" @@ -25143,13 +25924,13 @@ __metadata: optional: true utf-8-validate: optional: true - checksum: 10/70dfe53f23ff4368d46e4c0b1d4ca734db2c4149c6f68bc62cb16fc21f753c47b35fcc6e582f3bdfba0eaeb1c488cddab3c2255755a5c3eecb251431e42b3ff6 + checksum: 10/8856922c26fd2d106931c16310d9a0bc2d6d37ed8771352bfa0d2a36df0ab5cb1f6528c6db8213f3333cf4ce93925e56f13604df0454cb0d4289fef922bebcdd languageName: node linkType: hard -"ws@npm:^8.18.0": - version: 8.18.3 - resolution: "ws@npm:8.18.3" +"ws@npm:8.18.0": + version: 8.18.0 + resolution: "ws@npm:8.18.0" peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ">=5.0.2" @@ -25158,7 +25939,7 @@ __metadata: optional: true utf-8-validate: optional: true - checksum: 10/725964438d752f0ab0de582cd48d6eeada58d1511c3f613485b5598a83680bedac6187c765b0fe082e2d8cc4341fc57707c813ae780feee82d0c5efe6a4c61b6 + checksum: 10/70dfe53f23ff4368d46e4c0b1d4ca734db2c4149c6f68bc62cb16fc21f753c47b35fcc6e582f3bdfba0eaeb1c488cddab3c2255755a5c3eecb251431e42b3ff6 languageName: node linkType: hard @@ -25233,12 +26014,12 @@ __metadata: languageName: node linkType: hard -"yaml@npm:^2.0.0, yaml@npm:^2.0.0-10, yaml@npm:^2.2.2, yaml@npm:^2.6.0": - version: 2.8.3 - resolution: "yaml@npm:2.8.3" +"yaml@npm:^2.0.0, yaml@npm:^2.0.0-10, yaml@npm:^2.2.1, yaml@npm:^2.2.2, yaml@npm:^2.6.0": + version: 2.9.0 + resolution: "yaml@npm:2.9.0" bin: yaml: bin.mjs - checksum: 10/ecad41d39d34fae5cc17ea2d4b7f7f55faacd45cbce8983ba22d48d1ed1a92ed242ea49ea813a79ac39a69f75f9c5a03e7b5395fd954d55476f25e21a47c141d + checksum: 10/9a95e8e08651c3d292ab6a5befeb5f57b76801caa097c75bb45c9a70ce19c1b11f57e87a6ef84a579ea070ed2c2c8ac541c88c0ae684d544d5f42c7e77d11b7b languageName: node linkType: hard @@ -25379,6 +26160,15 @@ __metadata: languageName: node linkType: hard +"zod-validation-error@npm:^5.0.0": + version: 5.0.0 + resolution: "zod-validation-error@npm:5.0.0" + peerDependencies: + zod: ^3.25.0 || ^4.0.0 + checksum: 10/d5713f6608f9b8fcb0d74c591cb5c5839fcab679adde5c668f8f95539a1b54fb6910ba577ec66ccda77645e9d2c1ae3fafca771a291f4648aaae8bdfed9b27a7 + languageName: node + linkType: hard + "zod@npm:^3.22.4, zod@npm:^3.25.76": version: 3.25.76 resolution: "zod@npm:3.25.76" @@ -25393,6 +26183,13 @@ __metadata: languageName: node linkType: hard +"zstd-codec@npm:^0.1.5": + version: 0.1.5 + resolution: "zstd-codec@npm:0.1.5" + checksum: 10/deee384c29129e3ed86b4f2ac4dc415fd8dad8b62b12ad07cc092c89481bee362477478c6179f2beb252bec67b57120fad8fd84f0a7f7b5914a77e24b3608094 + languageName: node + linkType: hard + "zwitch@npm:^2.0.0": version: 2.0.4 resolution: "zwitch@npm:2.0.4"